Skip to content

Commit 61282e6

Browse files
authored
Merge pull request #176 from aliyun/preview_v1.9.7
Preview v1.9.7
2 parents 08079eb + 1800cd0 commit 61282e6

File tree

15 files changed

+908
-55
lines changed

15 files changed

+908
-55
lines changed

.travis.yml

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,16 @@ install:
1010
- go get gopkg.in/check.v1
1111
- go get github.com/satori/go.uuid
1212
- go get github.com/baiyubin/aliyun-sts-go-sdk/sts
13-
14-
- if [[ $TRAVIS_GO_VERSION = '1.7' || $TRAVIS_GO_VERSION > '1.7' ]]; then go get golang.org/x/time/rate ; fi
15-
13+
- if [[ $TRAVIS_GO_VERSION = '1.7' || $TRAVIS_GO_VERSION > '1.7' ]]; then go get golang.org/x/time/rate
14+
; fi
1615
script:
16+
- if [[ ! -n "$OSS_TEST_ACCESS_KEY_ID" ]]; then exit 0
17+
; fi
18+
1719
- cd oss
1820
- travis_wait 30 go test -v -covermode=count -coverprofile=coverage.out -timeout=30m
1921
- "$HOME/gopath/bin/goveralls -coverprofile=coverage.out -service=travis-ci"
22+
2023
env:
2124
global:
2225
- secure: ZCL5egxJmZA+o1ujsaJe//AIh1ag/exSUJ2FzoKPF3O9c84hMc2k5EYO2rGzTNn1ML6M89Mo5hAvHQhyJEHjRuMtjc1QrfxAaA3mqm4scGXIXesPMqYGuvuPSh++6/fkAwaVBAhrk5GaDG1/FuxHE5zusGx3SvGegnCwO7n/2YCfXco6DWgVCdrz4p1EpPkAM3JIdHFUzsDWiimVuiNAvJmAT8+IeOPTT+WgusCJj4ORS3X3LddTjttBP+hRrp/pGSoNqPMzfysWybtaL2SJ8URtvsxW0Mo5BwocHAxAhPP+M2OscQbDzthSAezCLngYvrfBplfIyWlahlgzNz/FjXz5pQwWdYVNoibyxLLMOH685n75LNONN/xVO/GFmVPx7DMGapkN5NzIWS62D4v8QrRkwtms42OUkyEUHjDh8Evui3K2MNJVXA3TI9zOAR+C0krD7OEyS37qrppodhRxJSqFUlgXnk//wLldMC7vleDd7L2UQSWjqyBHqFOgsVaiLU2KRTY3zvv7ke+dqb5VF31mH6qAr8lJTR9un8M1att0VwCEKxoIRT4cKJCpEtZd8ovXOVt1uE695ThVXE9I5e00GXdTzqXOuv6zT4hv/dgmbz9JN9MYeCwmokEoIUmJKNYERa/bNVVefdnJt7h+dm+KpyPAS+XvPLzjbnWdYNA=
@@ -28,3 +31,12 @@ env:
2831
- secure: NMVS9EU+ahQXGiyTCHyZ44rf+8b3me3UXD1DozMm04lCvnWoBqJE4aXBGQsDAWuOL4NTTm0SaVu6sBY6ZTXOYYF59mwEbxt4qpmVjZ+vBrtMbMiqoxv145blquR9JKedkdP6IGSd7VSQwSba71f/RVv5VeGvxUSEhCwA04kKxToOPwmnORmT6qwb7PkPCMNHxz4VpsUIsKx8jRrY6Gmp6FvQJBHfKEHnDQohB1ReIYEYi39ijLvpbCZqrB5u1N9oF6WlpBiNIX3kQizn7ftUyewJgoZMnfpW/Lta6e91yzFInWg75bZdW3faa30Qy0yw0zlQIPLs89c8A/XH1fGVECH9At9VNmdYrb0fD9aWnH7zdX6Im+Bw7Ptph4x6tB7zPeFoZR5cVZT7L06/HbnW7NeQk4tg/N4I1tOaO7AQl+ofhCzesZ56bSxETiNFn9QiNwWFTzjlkG7jxN1iAAkdYsZEQHwtEK63R//NJtXpbbtNA831QqgDqBK+IxyKeLhmxmu17dWcUw9tm4jlZ7d6nPB9bzJcVM6K2uRJyW07SlBqd65WJTXPV1PFww8zh+chAC4ZkLDhupn+7ZSG2ylLYGgepmABoC/CXHkXEsNzdQ8wPX/pDIz2WNmwEXyC/Nv+WNpFS/tWIAryIPOLMuETIgbaOLbD5vZDSKxDZVGDvPE=
2932
- secure: cNr4PiK6ZZADoRMacL4lvdMYWgM9H4lKN3u+nfMA/MrVrnSjeRonkO7RjMJWs9HicPanEks10R1w/T/6nWyFQV2CPkEBSNSLf3DAD+dlRekKfWogGXzYnvqeiki1HzsIPYTImiD5BtPn6SbJmO/ErJt3zuogspyBws/X7XfZ+u8FIpPsYEmvHslT2jARuput0yNfldUgxxyI0IvgkuCEcCTFwePspjbn6zR6Df67e+r5ibFqkdPYdXkQVpvfA90RPpfBUuuaEO7kkFlKbPK+Nl/jbUnjcfbe8zJRpSb8j/S2USAiBUjFsqsdvFqZ9WumjXJLrrNFt/UgIXaMyG3Y8xJl9kzCcx36wcNoaP2mx2qucYTdC0ey49g0uywvOVDdykmctQRF7uYQS+UkMqs5jRLgAjQ1/wJISrvtcpaK/4DyhLBUFrOf9chep2hzWBFaWPto1IUpWu9Sjtz5rtjsAm5LR7zvIxcorvRall5kRokAspHb9+TaQKSDOpYNF+PB77cb9H0OLZBLVPGo0WJHq5dv0NVZSH9JVq4AiJDmvMWI6weBis+tLbECMwbeTezo6hDOuII7VZt/KcHgzlt3KCDwv8krQq71q7ySDt7SxrvLeDjeiEFkjwA0lN7Cin1yqjON83LsIsWkKxbf+xNJRngSE4bPn95j3pHELdo3uqY=
3033
- secure: iDkNjibPknbawHN+jobw1AEqhQDhqFvGPBUX7FkxlrIanNR71Tj8CPAFtDpJbYaBMdPt4IzOmD2JVo9w7E1TfNX4DsOpkb2MbOr55TxfXQ/+y7TBdJ9B/62BvhFWk8Hvq8TWVPTCgNIaVXNfqBAj6WQSX3AbUVHWSOM9Aey5joBZuhdWXSmKo46lLOradacDDPZYjrLEsMTS2CotzduKQ4C8dGCVcMEbBnS3O2WRj3oR0wiiP3X0jbnxJkOV2MCoadZxSu5B+gaaJ+Yv7EKT0vy6ASp6LYrWkjY0eKbTqy8NtCvCFlliND/iaq4LEv838hQfO/o0WeB2b7/2MH2EW1v8XLacV12ak5wJgb7b+L6fG+lMKMta5Re+vjdRYgoU5EVeWQNxrnX1chEdzFXb/q2+5DVp43qH5i1Tu4FR/kSBobQeSAbT7HTkWAVz3kg8HmubYZ3P0eXToZA/DlX0dphWxO9ShR3H+XTJhh3tSqzxMZxxhGqPcN4DPSfOTnJQ0v0NPz016lulCr9SuIOSM3f7HpeGXo5SeQbrY3yCnBG8Qxpx2kYaZZlT4J6fx3iFl77SY/lQu6H/Y8ZtufWEogPSkGEh+NLLWuwwBQFC3vH8l3J26vcqHZR3N9+GyqX13CSqWEUysMF4nBOi52ckhwJRF8hAeX+DIqxoLfjUkDc=
34+
- secure: iZmWFdPBt9JCDJqWGeX0gznM22ulUrz15Z7YnDfWNhniMs759YWgIdt3MGr2blMmo5MpDZiticaBcE9aX3p7aniPZkbXcebswz5DwCKVRUf1dhtrzwbnDebSwKrlYG8SuGgMkKH/7F+sEkHtTy+SFDkFwEAwcGjPdPntEX15U6KPrlpD5AOvq/d83xNV6QYleJmkRjsTiUjgGzbYfm6Lu/bzBsckYjwWjcz5rxkeSIQHV8/nnw7xs0figTVcb0K5p7Rpvhg3TCAlSJcljg9IDOEuvILQGNDpdgzXajTTNOHYm9nOBrNQhTn35c8DRDl0uQFe+c6PBvBNhSvSKZ2t9REjok70gR/IKJNTuecS/rppYG8wfjlGg1axoJMZJG1OwOJxWiMHwa9WM/diJ2e5D/WTbQ1T9DLRp8Aco3LnWSfZ+tZH+4tAS9FE4oXEPLlHtRyRIV+MzPK3HinIXYdwGH7pDaAQDnfH562br3tl3CovjAPSrIlDgJh92qatLk+1fBQT/7paMNdelAWLjcujRRI9MWsKzi/aEUVbTfUOSCJH/vWQRJR9or2saOobHE+G4f2+k77r21YRztrZaJF6aiob/qf3altKW5rQRdj/7PgNtG3N/bwFOgRjpOQ8dgNn0J+xK4PQTtSVH7kD4aIcJma23erS+K29dcY/wk6fuBM=
35+
- secure: IkTwVHWb8yGufpyBaQDL1WpTywnMb5FhhtXgP8ycxK9MIuKSfgxPlQm6Oel/8Xjy2HhfKTUX0TOwQ4yAuZtRuU/T5NdjGgBYdLjGWwd/Wgkxt7JkpkFd8lvMrh2moAgvf/Qfk0P73OdAyn2y2CZhm7F7GI3lD/K4NmbFnR5AkDGDBB7J81zc1eTGjMfYRELHMFLJTg8hKr64SljXuRBmyxAVImaBROXzml2pP3UywWKNsw0eEOaeJaVJFkStBh89IOYaznckdstdbTuMw9+hZywBTcQHqxaaI5stdtyKgJcyEcjdJOqNGwCf1Hqd18SH7aCfXsUUrwx62ZSheiQRapOz+XNMiKC+1nimNvaYIFEuPZUGjYfi2/c27Z6paBI9ylGpoUXSvCH2rmaCYUIJBRXVmqzvhi0am5FKBh9NovkKUE24B8rMhm1xV82HQLTCho6MnemXFfji2AXaJzYAa6lU31b8BAzQfy+Nn9lh8I/MMjd15Y+8nHFjKqeKZIBi5qO4B8AGNYwCBFhrIOF6uHGubOuvyKv8DSBxcaDhCoyOLa5QLT4vQzQCX17xUAFomXkX9mHbJA8kTxMaFOQPeVCHkfjZxuui57vbPt4CafGzbymi/SE03oNUheQbuHdqy+jkjj7XU6d4FdNYHxp4rvhtvjYrPJQ5gr6A3sdurd4=
36+
- secure: WNjlMEt8xGRc6blhZF9HkyWEQukDzEwbk/hIljEz+K00W+ltDxPqFZ4fsgnjCPLS0fTL1zgtg3Rji6Mi8hSQd9Z5Yh98fCHN/gBfGxziKB0BOlVQDAl8yaUchiHZ6biM+HC2AocbZXlaNcSOHJy7vQk981y48PNPFadZgJZWWF4eFMkAn+74sPMW53V9J4J2ot3AZ7+ABg2vHTbqdA1s09/6fjlTcKVSxm7eDkkoOYycxrD5k2lm3N0I3YvkWum3ZMcCi1bWk4WXQSgy8q0dy7QBya7+BnRWh/EO2HNFAO4l/tqdev7GC3/tSgTbepNV5GUHazvsrANzZGnWP5kpjjis+Z4GiB3TMNLN1c+KeH2kbBkxi0vyDP5rzzI/rORRp5a3SBDAPkz0u/CHB9sltriErp86v9w6YxDRx0QcFheEXbcsk+3Vajy3+v1ly2PgMfLXcfojCfc27ymUCCymXMHrTG8DeUMnfIyUoP2xDx59tZH8rRlbUQmtlLhBYxPojsw5I2YhnMv4ThHZ5RhGSbNQuZ2yHsdQeGcTqSZ+bVT6xHbQbP4nk6ZtLHC6eq/pAQjFFUkZhfQLH8fes/2fVbdiRjYeX4P8tGnc2NB/fw3C77klizMYIGNHDAK8pKbfov5Q1zeg5/QB7weOvv9xpizUAjQsW5+jwQ1tkdxC0iU=
37+
- secure: kllkCVsDmsu5Z4ZBMFN98VS5LNoyy0z8mpkreV1sAfPH8mmy/q1ZJAGkXLoXL5vFGOTBumMsDs6a7S74d1dXyBkQGYiegs2G5wqIvWb/hsq4dTudEMPqwWnVPCFs/YmtxtzjX788sS7ivkZsHA2pXh1w6glEZykXHJZgWWGSL6XFofR5Gmvpwc8SfQBP/iBi1xb0EA9YWUqjfW43FAuRMp3QDKQU2gcRoAr1EuSIvmMmarnK9CEMJunK/RY94OW1AwtUcJbUVLnK/PvHBIazY18BTez/o45gATH37eMk0G3JKxMP8yfk+wipAAVyZbloWeTdBW8ik1r/B9NWSI4ZXi/PysXMZzSkrede3Y0TE0TqW3mVkdtdcq4yFXD/B21dMmeNoBLxQGi290p/KNfnJLIcYB04CU+Ll9RoXWnVJH6RhxCK6JGEuiYqJKm/UZkCW5dXMhtFmjK3XH3iBRC9kw0jYI7fcTgstLzYzKzgAXBP7LSiiwxDUFsvq480US+lECGdDIJYL646H1kHogi2Cr3BBgXHvMoBbUFyLVXTHidzi4Vk6PFaT8fMXcJIO/j46WUcP5nyEh+7qiJmgqtZx6AbVIuank5vnDSKg9X5fsiww4cT6Xcf+E9rxcpiLhcfBjsbkUvKiVVcCNQHOIZxYLwEwelghz+VlWrJCFVPwT0=
38+
- secure: g0Gm0G5oj892VmJeX8s2MMNttIR1GW9DX8+DYR2qXs5C8pjT8A30dYxCFiv4a1QHIrPEAhIGIosgtWpHXt8JwCDNLbPaHs6Jp9EkCB6doqLqQ9eOrvdxM67fyp8fJVcd4IH5JenG6FoaE7ofnu4QKoLo5w96Cd2UthwxrSCSQXWniutX8/N7XUt2cE74ISqQbJyslPWJ2UvKYL16HHtB8EzRmxD+EZgSYU/vtlds39Knrk85ogK5h6PKDmne8qoIH1nTPs8vzAu5uzeG6zai5m1qYETYbkiyJPTDs6sdy+DkYLLDaE5nLkNyfC/sHQvbPQ/H/CAW1OTZvSPsjxDN4hksovLaVuiH1DTHTM2+4fZsEab6fhx1itPOVijskoBqMzmksvah0nogIaw/qKmCtXGNBk7I30xeSju0W6c55miYUEEczF3eUn9oxHUSUDhQNs8UuosW/MJph7WTS2ESvmIjU7R6QuQjKmxTK7kZTaLAPpSwj/f77F7RgLUu3v6tO3Db1+i1OxdHvbaIVDiCNPB2J1LNmN4LFQstzJepYRadEUxYiExQzNulmC/FpkyPGwajec06z1r5NvTcWSOgxcTU/5OY6ggRCAsFoZTH4VzAst5nOBLRRGT+WAXpewGLhRlGLhev45eGgL2ctNVZY/6MA0ZBwnRPreczO7f3Nno=
39+
- secure: iJ9fPWg8j+q19cUNqvwAbULZTnmK25wFuF5uBCxaSDuM1qMtbiq3M2l1Gvl0xZWdnq12PLMsUZtfLYNO1r4SRaarMPtnq4pK68DnuH49vkjpwGSy5bLIrcPQBZvzWKqzyG1R8+eOpg43BmXdau8Wo7pOSDw/8Bra7rtvA8Kjua/7MXaiZP08L71DtHaHFOoYlvgGHmuscdvtV3v4rNPntGR54ClzyNgnrRz6DP/NwEUF2a6EF2uhhbbe5XQvCNDTW0sqgxirZ4pDFPgywuWQaPcqqSXcwF78wrA0nLSzmQ1PsW9g/rUkDPbXE3uZuwje8QntNsSa8doTLw6Fizj7ZD8DuyvD8z3ljrLvhym+I00r8k6BpD5vlVhasUEEix/3+7lW4cpbE+ofwVz0Ge96y3Ei/uXkSI4kEhwPVfsU9sCRX/Kupdx9fLCQzm7F/BhkfHUCd403MjpbAtoHN3ACZfzC2QQ5fm14mxtLyMSawsClqwO7vVmc7+5p4f13TTkiUtWllKghMw8zTqxAZLwTiPFRKG6Y7MkX9tQUDBb9auQm/+7+pBFEUHibwoPvsSRwYGqdlZV7OXIFYPgt+WgUt9ZYblzSfZ8YLcGPfVTlGbLHkvW2SgIGL1gvHyXC2xd7kd7yec3M7AutDCiYg2kSzANVuJqGQCZSNr/6/S3QQrY=
40+
- secure: IM9VEzf9MrtQnzK3VSD+YxmZWycxTgB5YbINDwE0LsAwWUWucDq95+2ZZRjKLrip5uYvoMohC5X2lxKuLhW8uDN3M6MxondHcCjgBCh8hWP7JociXWMxSIWA5ctU0oCgobm6rKvbarDuO8Bx+NE4QDDAWgjy9oOywE7mVi1G2//LY+2zC+iwXlkLs7VRdo9wtKgIG+FvswiJHhvFbU6GYxOeh1xclLnjwoWf66zzzbIW9Z4bFY0Zun/3u1ySQJWfF03/6ZzlCi3JPvfXDQ35T6PbD/5BvMDPmiXyWGqKUpZfRNus8VkG1G8TWwvHsVct9M47sZqLDuyzWVcwx613i8uxDsEIp9pVy4IxVl2UxvDJH1CPnNdvEhS3NeD9XfkMKMJtShHu1iVzB+j668W5SXsiv/N+psa2SIs+wuDY7FSirRg2Uwk9mlsXS+lSgV9B8BEcEIPEngA40MZCrEzNUdI0iYxaaqB6GNWeHiszOWz94rMkXk+FF3Ic75O4RyCmfXJmR8wYQs+rH4j7JJGzwTHXpYpV7H5V0OtMVIh6EUEvu3Veu/lkT4rsop55OHmcBmpKv8gGllX1P+g7H0+g35wn6Hz+FaSlkPvAuuSudgHFznOtfCowYhDUVp0TxTkcraLhkiROD4Qidw8r/HWh5CzrkfM9LWEBvziWFM77X/M=
41+
- secure: SfJARcGrIyoemZ1jUENyX272acqmDTqQjk0LBjuzWxR5gqWp0Bn5TJS6x7niD8qzVC/n2FwR7F9FG3ll0cmToBgb8vh9763aL+ciA8cfk8iIUdjjQHNkywdhiLLw1EiR4TuUGOB3pV03WxMXl5JJTopJHScHgvTHfyhHS4vnQdrU3j6PwFDvVLsECyFiTCflDUgZ6zHocbIT4fqVjoBxy+5R0t9vyb4eE3IE3Lqjnac5oYVXm4KCpGUYDdCL0W2OlwPYgaBtWGetoWj/v6Kg4cjUVbKJHGK1q2nKyrCGPRvoKTqw83Pkfw1zkSdC0kCozMKr/gYsYBpt5IFXHaON/OkjvgdLbVKrpAHoauQ5KkWcTg9ntuUNndtg5pMaitBmd/J2AaMIxEde8ZvgfDR3sZdv0umFzLXJeAu/tbLR6ozP/BwOFpj89Lw0jNyNxJjdkLHP/4M2W5Ka0W1s+F6xNTahTuXdV32laPGN8SSmBrjzXwFOLOQTCgwlbD+YbTqAXUs+DLq/zIT6ZTaEfOdas+HTsu6H+cQfsmv9JlMP7PoT/CbL2tYe8kA2tjmxsQwUlVTcE1nP5ni5kHX+yXuClTzLimY+BOqU9SLJBKv6umygFqt/9nXk0YU6+UqfeDFCVzrMN0vnzWkmB0SQ3ElDC6pbb6NE/2RgmIy1pAUMDzY=
42+
- secure: NPgEmEHVxJrLtaQ35IJnmQSbEHMqzSJt1l0OHX+a6VzfBiAP9Z4Qv1Ita/SQZpA4roLK2YkGr6TALndXgiY1EXU3e7ebcPnCgaQ6mCSJpAKtXhSGmArvysEmmxKSJjMxc8aBlJAeeEQlngXb0/pqA//kMw5KC+pPo+8O3UUbBs0qY9Q4FX3/cU+chv04tk5cSVR2P9nhOqY7LYm+FXjwF4vfjGKF7mWEcQUzTS8E2dRsertl/4law5O9/0gEW/9MaqyylPxq+0pS38sXP25zYotgEL3L8t0fupi58loPioDndardxVl35SXaatPuOxEdHr3Q0Q3dKVjbrTEx8bP7NgLY4nh7r5hqcEtvlM0xCAsfiOmGe0Dd0BFqo7kxzK/Fl6oI4MoEfvAYR+1QyBy9zOAJmjoj1hu/NEDAtT9NPxXJKl4A/iJPIYIt3lrMw34ewTSLl16ERojx6CZfSqg58eyUndmmOPBB8b4rIX0fQj5/ShsoLbM/rmOmDpPXN0QGu2EHhtR2eCbpdan84VfPifi5LjPH42PjdUxpJ+rOHZJHLesJ5JwQLFLrnDf7Bg96iucyz1QMpNFoqN+q4YDARot2zdw+1ISjgPx3bhHu8ly8oT1UYNl5mMjv7zfNDvsmBycpQEBQWGvIioRfx6dM/EtZy2E/og5Ci0j9v19YI2E=

oss/bucket.go

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -927,6 +927,81 @@ func (bucket Bucket) ProcessObject(objectKey string, process string) (ProcessObj
927927
return out, err
928928
}
929929

930+
//
931+
// PutObjectTagging add tagging to object
932+
//
933+
// objectKey object key to add tagging
934+
// tagging tagging to be added
935+
//
936+
// error nil if success, otherwise error
937+
//
938+
func (bucket Bucket) PutObjectTagging(objectKey string, tagging Tagging) error {
939+
bs, err := xml.Marshal(tagging)
940+
if err != nil {
941+
return err
942+
}
943+
944+
buffer := new(bytes.Buffer)
945+
buffer.Write(bs)
946+
947+
params := map[string]interface{}{}
948+
params["tagging"] = nil
949+
resp, err := bucket.do("PUT", objectKey, params, nil, buffer, nil)
950+
if err != nil {
951+
return err
952+
}
953+
defer resp.Body.Close()
954+
955+
return nil
956+
}
957+
958+
//
959+
// GetObjectTagging get tagging of the object
960+
//
961+
// objectKey object key to get tagging
962+
//
963+
// Tagging
964+
// error nil if success, otherwise error
965+
//
966+
func (bucket Bucket) GetObjectTagging(objectKey string) (GetObjectTaggingResult, error) {
967+
var out GetObjectTaggingResult
968+
params := map[string]interface{}{}
969+
params["tagging"] = nil
970+
971+
resp, err := bucket.do("GET", objectKey, params, nil, nil, nil)
972+
if err != nil {
973+
return out, err
974+
}
975+
defer resp.Body.Close()
976+
977+
err = xmlUnmarshal(resp.Body, &out)
978+
return out, err
979+
}
980+
981+
//
982+
// DeleteObjectTagging delete object taggging
983+
//
984+
// objectKey object key to delete tagging
985+
//
986+
// error nil if success, otherwise error
987+
//
988+
func (bucket Bucket) DeleteObjectTagging(objectKey string) error {
989+
params := map[string]interface{}{}
990+
params["tagging"] = nil
991+
992+
if objectKey == "" {
993+
return fmt.Errorf("invalid argument: object name is empty")
994+
}
995+
996+
resp, err := bucket.do("DELETE", objectKey, params, nil, nil, nil)
997+
if err != nil {
998+
return err
999+
}
1000+
defer resp.Body.Close()
1001+
1002+
return checkRespCode(resp.StatusCode, []int{http.StatusNoContent})
1003+
}
1004+
9301005
// Private
9311006
func (bucket Bucket) do(method, objectName string, params map[string]interface{}, options []Option,
9321007
data io.Reader, listener ProgressListener) (*Response, error) {

oss/bucket_test.go

Lines changed: 226 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2778,3 +2778,229 @@ func (s *OssBucketSuite) TestUploadObjectWithWebpFormat(c *C) {
27782778
bucket.DeleteObject(objectName)
27792779
client.DeleteBucket(bucketName)
27802780
}
2781+
2782+
func (s *OssBucketSuite) TestPutObjectTagging(c *C) {
2783+
// put object with tagging
2784+
objectName := objectNamePrefix + randStr(8)
2785+
tag1 := Tag{
2786+
Key: randStr(8),
2787+
Value: randStr(16),
2788+
}
2789+
tag2 := Tag{
2790+
Key: randStr(8),
2791+
Value: randStr(16),
2792+
}
2793+
tagging := Tagging{
2794+
Tags: []Tag{tag1, tag2},
2795+
}
2796+
err := s.bucket.PutObject(objectName, strings.NewReader(randStr(1024)), SetTagging(tagging))
2797+
c.Assert(err, IsNil)
2798+
2799+
headers, err := s.bucket.GetObjectDetailedMeta(objectName)
2800+
taggingCount, err := strconv.Atoi(headers["X-Oss-Tagging-Count"][0])
2801+
c.Assert(err, IsNil)
2802+
c.Assert(taggingCount, Equals, 2)
2803+
2804+
// copy object with default option
2805+
destObjectName := objectNamePrefix + randStr(8)
2806+
_, err = s.bucket.CopyObject(objectName, destObjectName)
2807+
c.Assert(err, IsNil)
2808+
headers, err = s.bucket.GetObjectDetailedMeta(destObjectName)
2809+
taggingCount, err = strconv.Atoi(headers["X-Oss-Tagging-Count"][0])
2810+
c.Assert(err, IsNil)
2811+
c.Assert(taggingCount, Equals, 2)
2812+
2813+
// delete object tagging
2814+
err = s.bucket.DeleteObjectTagging(objectName)
2815+
c.Assert(err, IsNil)
2816+
2817+
// get object tagging again
2818+
taggingResult, err := s.bucket.GetObjectTagging(objectName)
2819+
c.Assert(err, IsNil)
2820+
c.Assert(len(taggingResult.Tags), Equals, 0)
2821+
2822+
// put tagging
2823+
tag := Tag{
2824+
Key: randStr(8),
2825+
Value: randStr(16),
2826+
}
2827+
tagging.Tags = []Tag{tag}
2828+
err = s.bucket.PutObjectTagging(objectName, tagging)
2829+
c.Assert(err, IsNil)
2830+
2831+
taggingResult, err = s.bucket.GetObjectTagging(objectName)
2832+
c.Assert(len(taggingResult.Tags), Equals, 1)
2833+
c.Assert(taggingResult.Tags[0].Key, Equals, tag.Key)
2834+
c.Assert(taggingResult.Tags[0].Value, Equals, tag.Value)
2835+
2836+
//put tagging, the length of the key exceeds 128
2837+
tag = Tag{
2838+
Key: randStr(129),
2839+
Value: randStr(16),
2840+
}
2841+
tagging.Tags = []Tag{tag}
2842+
err = s.bucket.PutObjectTagging(objectName, tagging)
2843+
c.Assert(err, NotNil)
2844+
2845+
//put tagging, the length of the value exceeds 256
2846+
tag = Tag{
2847+
Key: randStr(8),
2848+
Value: randStr(257),
2849+
}
2850+
tagging.Tags = []Tag{tag}
2851+
err = s.bucket.PutObjectTagging(objectName, tagging)
2852+
c.Assert(err, NotNil)
2853+
2854+
//put tagging, the lens of tags exceed 10
2855+
tagging.Tags = []Tag{}
2856+
for i := 0; i < 11; i++ {
2857+
tag = Tag{
2858+
Key: randStr(8),
2859+
Value: randStr(16),
2860+
}
2861+
tagging.Tags = append(tagging.Tags, tag)
2862+
}
2863+
err = s.bucket.PutObjectTagging(objectName, tagging)
2864+
c.Assert(err, NotNil)
2865+
2866+
//put tagging, invalid value of tag key
2867+
tag = Tag{
2868+
Key: randStr(8) + "&",
2869+
Value: randStr(16),
2870+
}
2871+
tagging.Tags = []Tag{tag}
2872+
err = s.bucket.PutObjectTagging(objectName, tagging)
2873+
c.Assert(err, NotNil)
2874+
2875+
//put tagging, invalid value of tag value
2876+
tag = Tag{
2877+
Key: randStr(8),
2878+
Value: randStr(16) + "&",
2879+
}
2880+
tagging.Tags = []Tag{tag}
2881+
err = s.bucket.PutObjectTagging(objectName, tagging)
2882+
c.Assert(err, NotNil)
2883+
2884+
//put tagging, repeated tag keys
2885+
tag1 = Tag{
2886+
Key: randStr(8),
2887+
Value: randStr(16),
2888+
}
2889+
tag2 = Tag{
2890+
Key: tag1.Key,
2891+
Value: randStr(16),
2892+
}
2893+
tagging.Tags = []Tag{tag1, tag2}
2894+
err = s.bucket.PutObjectTagging(objectName, tagging)
2895+
c.Assert(err, NotNil)
2896+
2897+
s.bucket.DeleteObject(destObjectName)
2898+
s.bucket.DeleteObject(objectName)
2899+
}
2900+
2901+
func (s *OssBucketSuite) TestGetObjectTagging(c *C) {
2902+
// get object which has 2 tags
2903+
objectName := objectNamePrefix + randStr(8)
2904+
tag1 := Tag{
2905+
Key: randStr(8),
2906+
Value: randStr(16),
2907+
}
2908+
tag2 := Tag{
2909+
Key: randStr(8),
2910+
Value: randStr(16),
2911+
}
2912+
2913+
taggingInfo := Tagging{
2914+
Tags: []Tag{tag1, tag2},
2915+
}
2916+
2917+
err := s.bucket.PutObject(objectName, strings.NewReader(randStr(1024)), SetTagging(taggingInfo))
2918+
c.Assert(err, IsNil)
2919+
2920+
tagging, err := s.bucket.GetObjectTagging(objectName)
2921+
c.Assert(len(tagging.Tags), Equals, 2)
2922+
if tagging.Tags[0].Key == tag1.Key {
2923+
c.Assert(tagging.Tags[0].Value, Equals, tag1.Value)
2924+
c.Assert(tagging.Tags[1].Key, Equals, tag2.Key)
2925+
c.Assert(tagging.Tags[1].Value, Equals, tag2.Value)
2926+
} else {
2927+
c.Assert(tagging.Tags[0].Key, Equals, tag2.Key)
2928+
c.Assert(tagging.Tags[0].Value, Equals, tag2.Value)
2929+
c.Assert(tagging.Tags[1].Key, Equals, tag1.Key)
2930+
c.Assert(tagging.Tags[1].Value, Equals, tag1.Value)
2931+
}
2932+
2933+
// get tagging of an object that is not exist
2934+
err = s.bucket.DeleteObject(objectName)
2935+
c.Assert(err, IsNil)
2936+
tagging, err = s.bucket.GetObjectTagging(objectName)
2937+
c.Assert(err, NotNil)
2938+
c.Assert(len(tagging.Tags), Equals, 0)
2939+
2940+
// get object which has no tag
2941+
objectName = objectNamePrefix + randStr(8)
2942+
err = s.bucket.PutObject(objectName, strings.NewReader(randStr(1024)))
2943+
c.Assert(err, IsNil)
2944+
tagging, err = s.bucket.GetObjectTagging(objectName)
2945+
c.Assert(err, IsNil)
2946+
c.Assert(len(tagging.Tags), Equals, 0)
2947+
2948+
// copy object, with tagging option
2949+
destObjectName := objectName + "-dest"
2950+
tagging.Tags = []Tag{tag1, tag2}
2951+
_, err = s.bucket.CopyObject(objectName, destObjectName, SetTagging(taggingInfo))
2952+
c.Assert(err, IsNil)
2953+
tagging, err = s.bucket.GetObjectTagging(objectName)
2954+
c.Assert(err, IsNil)
2955+
c.Assert(len(tagging.Tags), Equals, 0)
2956+
2957+
// copy object, with tagging option, the value of tagging directive is "REPLACE"
2958+
tagging.Tags = []Tag{tag1, tag2}
2959+
_, err = s.bucket.CopyObject(objectName, destObjectName, SetTagging(taggingInfo), TaggingDirective(TaggingReplace))
2960+
c.Assert(err, IsNil)
2961+
tagging, err = s.bucket.GetObjectTagging(destObjectName)
2962+
c.Assert(err, IsNil)
2963+
c.Assert(len(tagging.Tags), Equals, 2)
2964+
if tagging.Tags[0].Key == tag1.Key {
2965+
c.Assert(tagging.Tags[0].Value, Equals, tag1.Value)
2966+
c.Assert(tagging.Tags[1].Key, Equals, tag2.Key)
2967+
c.Assert(tagging.Tags[1].Value, Equals, tag2.Value)
2968+
} else {
2969+
c.Assert(tagging.Tags[0].Key, Equals, tag2.Key)
2970+
c.Assert(tagging.Tags[0].Value, Equals, tag2.Value)
2971+
c.Assert(tagging.Tags[1].Key, Equals, tag1.Key)
2972+
c.Assert(tagging.Tags[1].Value, Equals, tag1.Value)
2973+
}
2974+
2975+
s.bucket.DeleteObject(objectName)
2976+
s.bucket.DeleteObject(destObjectName)
2977+
}
2978+
2979+
func (s *OssBucketSuite) TestDeleteObjectTagging(c *C) {
2980+
// delete object tagging, the object is not exist
2981+
objectName := objectNamePrefix + randStr(8)
2982+
err := s.bucket.DeleteObjectTagging(objectName)
2983+
c.Assert(err, NotNil)
2984+
2985+
// delete object tagging
2986+
tag := Tag{
2987+
Key: randStr(8),
2988+
Value: randStr(16),
2989+
}
2990+
tagging := Tagging{
2991+
Tags: []Tag{tag},
2992+
}
2993+
err = s.bucket.PutObject(objectName, strings.NewReader(randStr(1024)), SetTagging(tagging))
2994+
c.Assert(err, IsNil)
2995+
err = s.bucket.DeleteObjectTagging(objectName)
2996+
c.Assert(err, IsNil)
2997+
taggingResult, err := s.bucket.GetObjectTagging(objectName)
2998+
c.Assert(err, IsNil)
2999+
c.Assert(len(taggingResult.Tags), Equals, 0)
3000+
3001+
//delete object tagging again
3002+
err = s.bucket.DeleteObjectTagging(objectName)
3003+
c.Assert(err, IsNil)
3004+
3005+
s.bucket.DeleteObject(objectName)
3006+
}

0 commit comments

Comments
 (0)