client_test.go 74 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592
  1. // client test
  2. // use gocheck, install gocheck to execute "go get gopkg.in/check.v1",
  3. // see https://labix.org/gocheck
  4. package oss
  5. import (
  6. "io/ioutil"
  7. "log"
  8. "math/rand"
  9. "net/http"
  10. "os"
  11. "runtime"
  12. "strconv"
  13. "strings"
  14. "testing"
  15. "time"
  16. . "gopkg.in/check.v1"
  17. )
  18. // Test hooks up gocheck into the "go test" runner.
  19. func Test(t *testing.T) {
  20. TestingT(t)
  21. }
  22. type OssClientSuite struct{}
  23. var _ = Suite(&OssClientSuite{})
  24. var (
  25. // Endpoint/ID/Key
  26. endpoint = os.Getenv("OSS_TEST_ENDPOINT")
  27. accessID = os.Getenv("OSS_TEST_ACCESS_KEY_ID")
  28. accessKey = os.Getenv("OSS_TEST_ACCESS_KEY_SECRET")
  29. // Proxy
  30. proxyHost = os.Getenv("OSS_TEST_PROXY_HOST")
  31. proxyUser = os.Getenv("OSS_TEST_PROXY_USER")
  32. proxyPasswd = os.Getenv("OSS_TEST_PROXY_PASSWORD")
  33. // STS
  34. stsaccessID = os.Getenv("OSS_TEST_STS_ID")
  35. stsaccessKey = os.Getenv("OSS_TEST_STS_KEY")
  36. stsARN = os.Getenv("OSS_TEST_STS_ARN")
  37. // Credential
  38. credentialAccessID = os.Getenv("OSS_CREDENTIAL_KEY_ID")
  39. credentialAccessKey = os.Getenv("OSS_CREDENTIAL_KEY_SECRET")
  40. credentialUID = os.Getenv("OSS_CREDENTIAL_UID")
  41. )
  42. var (
  43. // prefix of bucket name for bucket ops test
  44. bucketNamePrefix = "go-sdk-test-bucket-"
  45. // bucket name for object ops test
  46. bucketName = bucketNamePrefix + randLowStr(6)
  47. archiveBucketName = bucketNamePrefix + "arch-" + randLowStr(6)
  48. // object name for object ops test
  49. objectNamePrefix = "go-sdk-test-object-"
  50. // sts region is one and only hangzhou
  51. stsRegion = "cn-hangzhou"
  52. // Credentials
  53. credentialBucketName = bucketNamePrefix + randLowStr(6)
  54. )
  55. var (
  56. logPath = "go_sdk_test_" + time.Now().Format("20060102_150405") + ".log"
  57. testLogFile, _ = os.OpenFile(logPath, os.O_RDWR|os.O_CREATE, 0664)
  58. testLogger = log.New(testLogFile, "", log.Ldate|log.Ltime|log.Lshortfile)
  59. letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
  60. timeoutInOperation = 3 * time.Second
  61. )
  62. func randStr(n int) string {
  63. b := make([]rune, n)
  64. randMarker := rand.New(rand.NewSource(time.Now().UnixNano()))
  65. for i := range b {
  66. b[i] = letters[randMarker.Intn(len(letters))]
  67. }
  68. return string(b)
  69. }
  70. func createFile(fileName, content string, c *C) {
  71. fout, err := os.Create(fileName)
  72. defer fout.Close()
  73. c.Assert(err, IsNil)
  74. _, err = fout.WriteString(content)
  75. c.Assert(err, IsNil)
  76. }
  77. func randLowStr(n int) string {
  78. return strings.ToLower(randStr(n))
  79. }
  80. func forceDeleteBucket(client *Client, bucketName string, c *C) {
  81. bucket, err := client.Bucket(bucketName)
  82. c.Assert(err, IsNil)
  83. // Delete Object
  84. marker := Marker("")
  85. for {
  86. lor, err := bucket.ListObjects(marker)
  87. c.Assert(err, IsNil)
  88. for _, object := range lor.Objects {
  89. err = bucket.DeleteObject(object.Key)
  90. c.Assert(err, IsNil)
  91. }
  92. marker = Marker(lor.NextMarker)
  93. if !lor.IsTruncated {
  94. break
  95. }
  96. }
  97. // Delete Object Versions and DeleteMarks
  98. keyMarker := KeyMarker("")
  99. versionIdMarker := VersionIdMarker("")
  100. options := []Option{keyMarker, versionIdMarker}
  101. for {
  102. lor, err := bucket.ListObjectVersions(options...)
  103. if err != nil {
  104. break
  105. }
  106. for _, object := range lor.ObjectDeleteMarkers {
  107. err = bucket.DeleteObject(object.Key, VersionId(object.VersionId))
  108. c.Assert(err, IsNil)
  109. }
  110. for _, object := range lor.ObjectVersions {
  111. err = bucket.DeleteObject(object.Key, VersionId(object.VersionId))
  112. c.Assert(err, IsNil)
  113. }
  114. keyMarker = KeyMarker(lor.NextKeyMarker)
  115. versionIdMarker := VersionIdMarker(lor.NextVersionIdMarker)
  116. options = []Option{keyMarker, versionIdMarker}
  117. if !lor.IsTruncated {
  118. break
  119. }
  120. }
  121. // Delete Part
  122. keyMarker = KeyMarker("")
  123. uploadIDMarker := UploadIDMarker("")
  124. for {
  125. lmur, err := bucket.ListMultipartUploads(keyMarker, uploadIDMarker)
  126. c.Assert(err, IsNil)
  127. for _, upload := range lmur.Uploads {
  128. var imur = InitiateMultipartUploadResult{Bucket: bucketName,
  129. Key: upload.Key, UploadID: upload.UploadID}
  130. err = bucket.AbortMultipartUpload(imur)
  131. c.Assert(err, IsNil)
  132. }
  133. keyMarker = KeyMarker(lmur.NextKeyMarker)
  134. uploadIDMarker = UploadIDMarker(lmur.NextUploadIDMarker)
  135. if !lmur.IsTruncated {
  136. break
  137. }
  138. }
  139. // delete live channel
  140. strMarker := ""
  141. for {
  142. result, err := bucket.ListLiveChannel(Marker(strMarker))
  143. c.Assert(err, IsNil)
  144. for _, channel := range result.LiveChannel {
  145. err := bucket.DeleteLiveChannel(channel.Name)
  146. c.Assert(err, IsNil)
  147. }
  148. if result.IsTruncated {
  149. strMarker = result.NextMarker
  150. } else {
  151. break
  152. }
  153. }
  154. // Delete Bucket
  155. err = client.DeleteBucket(bucketName)
  156. c.Assert(err, IsNil)
  157. }
  158. // SetUpSuite runs once when the suite starts running
  159. func (s *OssClientSuite) SetUpSuite(c *C) {
  160. client, err := New(endpoint, accessID, accessKey)
  161. c.Assert(err, IsNil)
  162. lbr, err := client.ListBuckets(Prefix(bucketNamePrefix), MaxKeys(1000))
  163. c.Assert(err, IsNil)
  164. for _, bucket := range lbr.Buckets {
  165. forceDeleteBucket(client, bucket.Name, c)
  166. }
  167. testLogger.Println("test client started")
  168. }
  169. // TearDownSuite runs before each test or benchmark starts running
  170. func (s *OssClientSuite) TearDownSuite(c *C) {
  171. client, err := New(endpoint, accessID, accessKey)
  172. c.Assert(err, IsNil)
  173. lbr, err := client.ListBuckets(Prefix(bucketNamePrefix), MaxKeys(1000))
  174. c.Assert(err, IsNil)
  175. for _, bucket := range lbr.Buckets {
  176. s.deleteBucket(client, bucket.Name, c)
  177. }
  178. testLogger.Println("test client completed")
  179. }
  180. func (s *OssClientSuite) deleteBucket(client *Client, bucketName string, c *C) {
  181. forceDeleteBucket(client, bucketName, c)
  182. }
  183. // SetUpTest runs after each test or benchmark runs
  184. func (s *OssClientSuite) SetUpTest(c *C) {
  185. }
  186. // TearDownTest runs once after all tests or benchmarks have finished running
  187. func (s *OssClientSuite) TearDownTest(c *C) {
  188. }
  189. // TestCreateBucket
  190. func (s *OssClientSuite) TestCreateBucket(c *C) {
  191. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  192. client, err := New(endpoint, accessID, accessKey)
  193. c.Assert(err, IsNil)
  194. // Create
  195. client.DeleteBucket(bucketNameTest)
  196. err = client.CreateBucket(bucketNameTest)
  197. c.Assert(err, IsNil)
  198. //sleep 3 seconds after create bucket
  199. time.Sleep(timeoutInOperation)
  200. // verify bucket is exist
  201. found, err := client.IsBucketExist(bucketNameTest)
  202. c.Assert(err, IsNil)
  203. c.Assert(found, Equals, true)
  204. res, err := client.GetBucketACL(bucketNameTest)
  205. c.Assert(err, IsNil)
  206. c.Assert(res.ACL, Equals, string(ACLPrivate))
  207. err = client.DeleteBucket(bucketNameTest)
  208. c.Assert(err, IsNil)
  209. time.Sleep(timeoutInOperation)
  210. // CreateBucket creates with ACLPublicRead
  211. err = client.CreateBucket(bucketNameTest, ACL(ACLPublicRead))
  212. c.Assert(err, IsNil)
  213. time.Sleep(timeoutInOperation)
  214. res, err = client.GetBucketACL(bucketNameTest)
  215. c.Assert(err, IsNil)
  216. c.Assert(res.ACL, Equals, string(ACLPublicRead))
  217. err = client.DeleteBucket(bucketNameTest)
  218. c.Assert(err, IsNil)
  219. time.Sleep(timeoutInOperation)
  220. // ACLPublicReadWrite
  221. err = client.CreateBucket(bucketNameTest, ACL(ACLPublicReadWrite))
  222. c.Assert(err, IsNil)
  223. time.Sleep(timeoutInOperation)
  224. res, err = client.GetBucketACL(bucketNameTest)
  225. c.Assert(err, IsNil)
  226. c.Assert(res.ACL, Equals, string(ACLPublicReadWrite))
  227. err = client.DeleteBucket(bucketNameTest)
  228. c.Assert(err, IsNil)
  229. time.Sleep(timeoutInOperation)
  230. // ACLPrivate
  231. err = client.CreateBucket(bucketNameTest, ACL(ACLPrivate))
  232. c.Assert(err, IsNil)
  233. time.Sleep(timeoutInOperation)
  234. res, err = client.GetBucketACL(bucketNameTest)
  235. c.Assert(err, IsNil)
  236. c.Assert(res.ACL, Equals, string(ACLPrivate))
  237. // Delete
  238. err = client.DeleteBucket(bucketNameTest)
  239. c.Assert(err, IsNil)
  240. // Create bucket with configuration and test GetBucketInfo
  241. for _, storage := range []StorageClassType{StorageStandard, StorageIA, StorageArchive} {
  242. bucketNameTest := bucketNamePrefix + randLowStr(6)
  243. err = client.CreateBucket(bucketNameTest, StorageClass(storage), ACL(ACLPublicRead))
  244. c.Assert(err, IsNil)
  245. time.Sleep(timeoutInOperation)
  246. res, err := client.GetBucketInfo(bucketNameTest)
  247. c.Assert(err, IsNil)
  248. c.Assert(res.BucketInfo.Name, Equals, bucketNameTest)
  249. c.Assert(res.BucketInfo.StorageClass, Equals, string(storage))
  250. c.Assert(res.BucketInfo.ACL, Equals, string(ACLPublicRead))
  251. // Delete
  252. err = client.DeleteBucket(bucketNameTest)
  253. c.Assert(err, IsNil)
  254. }
  255. // Error put bucket with configuration
  256. err = client.CreateBucket("ERRORBUCKETNAME", StorageClass(StorageArchive))
  257. c.Assert(err, NotNil)
  258. // Create bucket with configuration and test ListBuckets
  259. for _, storage := range []StorageClassType{StorageStandard, StorageIA, StorageArchive} {
  260. bucketNameTest := bucketNamePrefix + randLowStr(6)
  261. err = client.CreateBucket(bucketNameTest, StorageClass(storage))
  262. c.Assert(err, IsNil)
  263. time.Sleep(timeoutInOperation)
  264. res, err := client.GetBucketInfo(bucketNameTest)
  265. c.Assert(err, IsNil)
  266. c.Assert(res.BucketInfo.Name, Equals, bucketNameTest)
  267. c.Assert(res.BucketInfo.StorageClass, Equals, string(storage))
  268. // Delete
  269. err = client.DeleteBucket(bucketNameTest)
  270. c.Assert(err, IsNil)
  271. }
  272. }
  273. // TestCreateBucketNegative
  274. func (s *OssClientSuite) TestCreateBucketNegative(c *C) {
  275. client, err := New(endpoint, accessID, accessKey)
  276. c.Assert(err, IsNil)
  277. // Bucket name invalid
  278. err = client.CreateBucket("xx")
  279. c.Assert(err, NotNil)
  280. err = client.CreateBucket("XXXX")
  281. c.Assert(err, NotNil)
  282. testLogger.Println(err)
  283. err = client.CreateBucket("_bucket")
  284. c.Assert(err, NotNil)
  285. testLogger.Println(err)
  286. // ACL invalid
  287. err = client.CreateBucket(bucketNamePrefix+randLowStr(6), ACL("InvaldAcl"))
  288. c.Assert(err, NotNil)
  289. testLogger.Println(err)
  290. }
  291. // TestDeleteBucket
  292. func (s *OssClientSuite) TestDeleteBucket(c *C) {
  293. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  294. client, err := New(endpoint, accessID, accessKey)
  295. c.Assert(err, IsNil)
  296. // Create
  297. err = client.CreateBucket(bucketNameTest)
  298. c.Assert(err, IsNil)
  299. time.Sleep(timeoutInOperation)
  300. // Check
  301. found, err := client.IsBucketExist(bucketNameTest)
  302. c.Assert(err, IsNil)
  303. c.Assert(found, Equals, true)
  304. // Delete
  305. err = client.DeleteBucket(bucketNameTest)
  306. c.Assert(err, IsNil)
  307. time.Sleep(timeoutInOperation)
  308. // Check
  309. found, err = client.IsBucketExist(bucketNameTest)
  310. c.Assert(err, IsNil)
  311. c.Assert(found, Equals, false)
  312. err = client.DeleteBucket(bucketNameTest)
  313. c.Assert(err, NotNil)
  314. }
  315. // TestDeleteBucketNegative
  316. func (s *OssClientSuite) TestDeleteBucketNegative(c *C) {
  317. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  318. client, err := New(endpoint, accessID, accessKey)
  319. c.Assert(err, IsNil)
  320. // Bucket name invalid
  321. err = client.DeleteBucket("xx")
  322. c.Assert(err, NotNil)
  323. err = client.DeleteBucket("XXXX")
  324. c.Assert(err, NotNil)
  325. err = client.DeleteBucket("_bucket")
  326. c.Assert(err, NotNil)
  327. // Delete no exist bucket
  328. err = client.DeleteBucket("notexist")
  329. c.Assert(err, NotNil)
  330. // No permission to delete, this ak/sk for js sdk
  331. err = client.CreateBucket(bucketNameTest)
  332. c.Assert(err, IsNil)
  333. accessID := "<accessKeyId>"
  334. accessKey := "<accessKeySecret>"
  335. clientOtherUser, err := New(endpoint, accessID, accessKey)
  336. c.Assert(err, IsNil)
  337. err = clientOtherUser.DeleteBucket(bucketNameTest)
  338. c.Assert(err, NotNil)
  339. err = client.DeleteBucket(bucketNameTest)
  340. c.Assert(err, IsNil)
  341. }
  342. // TestListBucket
  343. func (s *OssClientSuite) TestListBucket(c *C) {
  344. var prefix = bucketNamePrefix + randLowStr(6)
  345. var bucketNameLbOne = prefix + "tlb1"
  346. var bucketNameLbTwo = prefix + "tlb2"
  347. var bucketNameLbThree = prefix + "tlb3"
  348. client, err := New(endpoint, accessID, accessKey)
  349. c.Assert(err, IsNil)
  350. // CreateBucket
  351. err = client.CreateBucket(bucketNameLbOne)
  352. c.Assert(err, IsNil)
  353. err = client.CreateBucket(bucketNameLbTwo)
  354. c.Assert(err, IsNil)
  355. err = client.CreateBucket(bucketNameLbThree)
  356. c.Assert(err, IsNil)
  357. // ListBuckets, specified prefix
  358. var respHeader http.Header
  359. lbr, err := client.ListBuckets(Prefix(prefix), MaxKeys(2), GetResponseHeader(&respHeader))
  360. c.Assert(GetRequestId(respHeader) != "", Equals, true)
  361. c.Assert(err, IsNil)
  362. c.Assert(len(lbr.Buckets), Equals, 2)
  363. // ListBuckets, specified max keys
  364. lbr, err = client.ListBuckets(MaxKeys(2))
  365. c.Assert(err, IsNil)
  366. c.Assert(len(lbr.Buckets), Equals, 2)
  367. // ListBuckets, specified max keys
  368. lbr, err = client.ListBuckets(Marker(bucketNameLbOne), MaxKeys(1))
  369. c.Assert(err, IsNil)
  370. c.Assert(len(lbr.Buckets), Equals, 1)
  371. // ListBuckets, specified max keys
  372. lbr, err = client.ListBuckets(Marker(bucketNameLbOne))
  373. c.Assert(err, IsNil)
  374. c.Assert(len(lbr.Buckets) >= 2, Equals, true)
  375. // DeleteBucket
  376. err = client.DeleteBucket(bucketNameLbOne)
  377. c.Assert(err, IsNil)
  378. err = client.DeleteBucket(bucketNameLbTwo)
  379. c.Assert(err, IsNil)
  380. err = client.DeleteBucket(bucketNameLbThree)
  381. c.Assert(err, IsNil)
  382. }
  383. // TestListBucket
  384. func (s *OssClientSuite) TestIsBucketExist(c *C) {
  385. var prefix = bucketNamePrefix + randLowStr(6)
  386. var bucketNameLbOne = prefix + "tibe1"
  387. var bucketNameLbTwo = prefix + "tibe11"
  388. var bucketNameLbThree = prefix + "tibe111"
  389. client, err := New(endpoint, accessID, accessKey)
  390. c.Assert(err, IsNil)
  391. // CreateBucket
  392. err = client.CreateBucket(bucketNameLbOne)
  393. c.Assert(err, IsNil)
  394. err = client.CreateBucket(bucketNameLbTwo)
  395. c.Assert(err, IsNil)
  396. err = client.CreateBucket(bucketNameLbThree)
  397. c.Assert(err, IsNil)
  398. // Exist
  399. exist, err := client.IsBucketExist(bucketNameLbTwo)
  400. c.Assert(err, IsNil)
  401. c.Assert(exist, Equals, true)
  402. exist, err = client.IsBucketExist(bucketNameLbThree)
  403. c.Assert(err, IsNil)
  404. c.Assert(exist, Equals, true)
  405. exist, err = client.IsBucketExist(bucketNameLbOne)
  406. c.Assert(err, IsNil)
  407. c.Assert(exist, Equals, true)
  408. // Not exist
  409. exist, err = client.IsBucketExist(prefix + "tibe")
  410. c.Assert(err, IsNil)
  411. c.Assert(exist, Equals, false)
  412. exist, err = client.IsBucketExist(prefix + "tibe1111")
  413. c.Assert(err, IsNil)
  414. c.Assert(exist, Equals, false)
  415. // Negative
  416. exist, err = client.IsBucketExist("BucketNameInvalid")
  417. c.Assert(err, NotNil)
  418. // DeleteBucket
  419. err = client.DeleteBucket(bucketNameLbOne)
  420. c.Assert(err, IsNil)
  421. err = client.DeleteBucket(bucketNameLbTwo)
  422. c.Assert(err, IsNil)
  423. err = client.DeleteBucket(bucketNameLbThree)
  424. c.Assert(err, IsNil)
  425. }
  426. // TestSetBucketAcl
  427. func (s *OssClientSuite) TestSetBucketAcl(c *C) {
  428. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  429. client, err := New(endpoint, accessID, accessKey)
  430. c.Assert(err, IsNil)
  431. // Private
  432. err = client.CreateBucket(bucketNameTest)
  433. c.Assert(err, IsNil)
  434. res, err := client.GetBucketACL(bucketNameTest)
  435. c.Assert(err, IsNil)
  436. c.Assert(res.ACL, Equals, string(ACLPrivate))
  437. // Set ACL_PUBLIC_R
  438. err = client.SetBucketACL(bucketNameTest, ACLPublicRead)
  439. c.Assert(err, IsNil)
  440. time.Sleep(timeoutInOperation)
  441. res, err = client.GetBucketACL(bucketNameTest)
  442. c.Assert(err, IsNil)
  443. c.Assert(res.ACL, Equals, string(ACLPublicRead))
  444. // Set ACL_PUBLIC_RW
  445. err = client.SetBucketACL(bucketNameTest, ACLPublicReadWrite)
  446. c.Assert(err, IsNil)
  447. time.Sleep(timeoutInOperation)
  448. res, err = client.GetBucketACL(bucketNameTest)
  449. c.Assert(err, IsNil)
  450. c.Assert(res.ACL, Equals, string(ACLPublicReadWrite))
  451. // Set ACL_PUBLIC_RW
  452. err = client.SetBucketACL(bucketNameTest, ACLPrivate)
  453. c.Assert(err, IsNil)
  454. time.Sleep(timeoutInOperation)
  455. res, err = client.GetBucketACL(bucketNameTest)
  456. c.Assert(err, IsNil)
  457. c.Assert(res.ACL, Equals, string(ACLPrivate))
  458. err = client.DeleteBucket(bucketNameTest)
  459. c.Assert(err, IsNil)
  460. }
  461. // TestSetBucketAclNegative
  462. func (s *OssClientSuite) TestBucketAclNegative(c *C) {
  463. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  464. client, err := New(endpoint, accessID, accessKey)
  465. c.Assert(err, IsNil)
  466. err = client.CreateBucket(bucketNameTest)
  467. c.Assert(err, IsNil)
  468. err = client.SetBucketACL(bucketNameTest, "InvalidACL")
  469. c.Assert(err, NotNil)
  470. testLogger.Println(err)
  471. err = client.DeleteBucket(bucketNameTest)
  472. c.Assert(err, IsNil)
  473. }
  474. // TestGetBucketAcl
  475. func (s *OssClientSuite) TestGetBucketAcl(c *C) {
  476. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  477. client, err := New(endpoint, accessID, accessKey)
  478. c.Assert(err, IsNil)
  479. // Private
  480. err = client.CreateBucket(bucketNameTest)
  481. c.Assert(err, IsNil)
  482. time.Sleep(timeoutInOperation)
  483. res, err := client.GetBucketACL(bucketNameTest)
  484. c.Assert(err, IsNil)
  485. c.Assert(res.ACL, Equals, string(ACLPrivate))
  486. err = client.DeleteBucket(bucketNameTest)
  487. c.Assert(err, IsNil)
  488. time.Sleep(timeoutInOperation)
  489. // PublicRead
  490. err = client.CreateBucket(bucketNameTest, ACL(ACLPublicRead))
  491. c.Assert(err, IsNil)
  492. time.Sleep(timeoutInOperation)
  493. res, err = client.GetBucketACL(bucketNameTest)
  494. c.Assert(err, IsNil)
  495. c.Assert(res.ACL, Equals, string(ACLPublicRead))
  496. err = client.DeleteBucket(bucketNameTest)
  497. c.Assert(err, IsNil)
  498. time.Sleep(timeoutInOperation)
  499. // PublicReadWrite
  500. err = client.CreateBucket(bucketNameTest, ACL(ACLPublicReadWrite))
  501. c.Assert(err, IsNil)
  502. time.Sleep(timeoutInOperation)
  503. res, err = client.GetBucketACL(bucketNameTest)
  504. c.Assert(err, IsNil)
  505. c.Assert(res.ACL, Equals, string(ACLPublicReadWrite))
  506. err = client.DeleteBucket(bucketNameTest)
  507. c.Assert(err, IsNil)
  508. }
  509. // TestGetBucketAcl
  510. func (s *OssClientSuite) TestGetBucketLocation(c *C) {
  511. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  512. client, err := New(endpoint, accessID, accessKey)
  513. c.Assert(err, IsNil)
  514. // Private
  515. err = client.CreateBucket(bucketNameTest)
  516. c.Assert(err, IsNil)
  517. loc, err := client.GetBucketLocation(bucketNameTest)
  518. c.Assert(strings.HasPrefix(loc, "oss-"), Equals, true)
  519. err = client.DeleteBucket(bucketNameTest)
  520. c.Assert(err, IsNil)
  521. }
  522. // TestGetBucketLocationNegative
  523. func (s *OssClientSuite) TestGetBucketLocationNegative(c *C) {
  524. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  525. client, err := New(endpoint, accessID, accessKey)
  526. c.Assert(err, IsNil)
  527. // Not exist
  528. _, err = client.GetBucketLocation(bucketNameTest)
  529. c.Assert(err, NotNil)
  530. // Not exist
  531. _, err = client.GetBucketLocation("InvalidBucketName_")
  532. c.Assert(err, NotNil)
  533. }
  534. // TestSetBucketLifecycle
  535. func (s *OssClientSuite) TestSetBucketLifecycle(c *C) {
  536. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  537. var rule1 = BuildLifecycleRuleByDate("rule1", "one", true, 2015, 11, 11)
  538. var rule2 = BuildLifecycleRuleByDays("rule2", "two", true, 3)
  539. client, err := New(endpoint, accessID, accessKey)
  540. c.Assert(err, IsNil)
  541. err = client.CreateBucket(bucketNameTest)
  542. c.Assert(err, IsNil)
  543. // Set single rule
  544. var rules = []LifecycleRule{rule1}
  545. err = client.SetBucketLifecycle(bucketNameTest, rules)
  546. c.Assert(err, IsNil)
  547. // Double set rule
  548. err = client.SetBucketLifecycle(bucketNameTest, rules)
  549. c.Assert(err, IsNil)
  550. res, err := client.GetBucketLifecycle(bucketNameTest)
  551. c.Assert(err, IsNil)
  552. c.Assert(len(res.Rules), Equals, 1)
  553. c.Assert(res.Rules[0].ID, Equals, "rule1")
  554. err = client.DeleteBucketLifecycle(bucketNameTest)
  555. c.Assert(err, IsNil)
  556. // Set two rules
  557. rules = []LifecycleRule{rule1, rule2}
  558. err = client.SetBucketLifecycle(bucketNameTest, rules)
  559. c.Assert(err, IsNil)
  560. // Eliminate effect of cache
  561. time.Sleep(timeoutInOperation)
  562. res, err = client.GetBucketLifecycle(bucketNameTest)
  563. c.Assert(err, IsNil)
  564. c.Assert(len(res.Rules), Equals, 2)
  565. c.Assert(res.Rules[0].ID, Equals, "rule1")
  566. c.Assert(res.Rules[1].ID, Equals, "rule2")
  567. err = client.DeleteBucket(bucketNameTest)
  568. c.Assert(err, IsNil)
  569. }
  570. // TestSetBucketLifecycleNew
  571. func (s *OssClientSuite) TestSetBucketLifecycleNew(c *C) {
  572. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  573. client, err := New(endpoint, accessID, accessKey)
  574. c.Assert(err, IsNil)
  575. err = client.CreateBucket(bucketNameTest)
  576. c.Assert(err, IsNil)
  577. //invalid status of lifecyclerule
  578. expiration := LifecycleExpiration{
  579. Days: 30,
  580. }
  581. rule := LifecycleRule{
  582. ID: "rule1",
  583. Prefix: "one",
  584. Status: "Invalid",
  585. Expiration: &expiration,
  586. }
  587. rules := []LifecycleRule{rule}
  588. err = client.SetBucketLifecycle(bucketNameTest, rules)
  589. c.Assert(err, NotNil)
  590. //invalid value of CreatedBeforeDate
  591. expiration = LifecycleExpiration{
  592. CreatedBeforeDate: randStr(10),
  593. }
  594. rule = LifecycleRule{
  595. ID: "rule1",
  596. Prefix: "one",
  597. Status: "Enabled",
  598. Expiration: &expiration,
  599. }
  600. rules = []LifecycleRule{rule}
  601. err = client.SetBucketLifecycle(bucketNameTest, rules)
  602. c.Assert(err, NotNil)
  603. //invalid value of Days
  604. abortMPU := LifecycleAbortMultipartUpload{
  605. Days: -30,
  606. }
  607. rule = LifecycleRule{
  608. ID: "rule1",
  609. Prefix: "one",
  610. Status: "Enabled",
  611. AbortMultipartUpload: &abortMPU,
  612. }
  613. rules = []LifecycleRule{rule}
  614. err = client.SetBucketLifecycle(bucketNameTest, rules)
  615. c.Assert(err, NotNil)
  616. expiration = LifecycleExpiration{
  617. CreatedBeforeDate: "2015-11-11T00:00:00.000Z",
  618. }
  619. rule1 := LifecycleRule{
  620. ID: "rule1",
  621. Prefix: "one",
  622. Status: "Enabled",
  623. Expiration: &expiration,
  624. }
  625. abortMPU = LifecycleAbortMultipartUpload{
  626. Days: 30,
  627. }
  628. rule2 := LifecycleRule{
  629. ID: "rule2",
  630. Prefix: "two",
  631. Status: "Enabled",
  632. Expiration: &expiration,
  633. AbortMultipartUpload: &abortMPU,
  634. }
  635. transition1 := LifecycleTransition{
  636. Days: 3,
  637. StorageClass: StorageIA,
  638. }
  639. transition2 := LifecycleTransition{
  640. Days: 30,
  641. StorageClass: StorageArchive,
  642. }
  643. transitions := []LifecycleTransition{transition1, transition2}
  644. rule3 := LifecycleRule{
  645. ID: "rule3",
  646. Prefix: "three",
  647. Status: "Enabled",
  648. AbortMultipartUpload: &abortMPU,
  649. Transitions: transitions,
  650. }
  651. // Set single rule
  652. rules = []LifecycleRule{rule1}
  653. err = client.SetBucketLifecycle(bucketNameTest, rules)
  654. c.Assert(err, IsNil)
  655. res, err := client.GetBucketLifecycle(bucketNameTest)
  656. c.Assert(err, IsNil)
  657. c.Assert(len(res.Rules), Equals, 1)
  658. c.Assert(res.Rules[0].ID, Equals, "rule1")
  659. c.Assert(res.Rules[0].Expiration, NotNil)
  660. c.Assert(res.Rules[0].Expiration.CreatedBeforeDate, Equals, "2015-11-11T00:00:00.000Z")
  661. err = client.DeleteBucketLifecycle(bucketNameTest)
  662. c.Assert(err, IsNil)
  663. // Set two rule: rule1 and rule2
  664. rules = []LifecycleRule{rule1, rule2}
  665. err = client.SetBucketLifecycle(bucketNameTest, rules)
  666. c.Assert(err, IsNil)
  667. res, err = client.GetBucketLifecycle(bucketNameTest)
  668. c.Assert(err, IsNil)
  669. c.Assert(len(res.Rules), Equals, 2)
  670. c.Assert(res.Rules[0].ID, Equals, "rule1")
  671. c.Assert(res.Rules[0].Expiration, NotNil)
  672. c.Assert(res.Rules[0].Expiration.CreatedBeforeDate, Equals, "2015-11-11T00:00:00.000Z")
  673. c.Assert(res.Rules[1].ID, Equals, "rule2")
  674. c.Assert(res.Rules[1].Expiration, NotNil)
  675. c.Assert(res.Rules[1].Expiration.CreatedBeforeDate, Equals, "2015-11-11T00:00:00.000Z")
  676. c.Assert(res.Rules[1].AbortMultipartUpload, NotNil)
  677. c.Assert(res.Rules[1].AbortMultipartUpload.Days, Equals, 30)
  678. err = client.DeleteBucketLifecycle(bucketNameTest)
  679. c.Assert(err, IsNil)
  680. // Set two rule: rule2 and rule3
  681. rules = []LifecycleRule{rule2, rule3}
  682. err = client.SetBucketLifecycle(bucketNameTest, rules)
  683. c.Assert(err, IsNil)
  684. res, err = client.GetBucketLifecycle(bucketNameTest)
  685. c.Assert(err, IsNil)
  686. c.Assert(len(res.Rules), Equals, 2)
  687. c.Assert(res.Rules[0].ID, Equals, "rule2")
  688. c.Assert(res.Rules[0].Expiration, NotNil)
  689. c.Assert(res.Rules[0].Expiration.CreatedBeforeDate, Equals, "2015-11-11T00:00:00.000Z")
  690. c.Assert(res.Rules[0].AbortMultipartUpload, NotNil)
  691. c.Assert(res.Rules[0].AbortMultipartUpload.Days, Equals, 30)
  692. c.Assert(res.Rules[1].ID, Equals, "rule3")
  693. c.Assert(res.Rules[1].AbortMultipartUpload, NotNil)
  694. c.Assert(res.Rules[1].AbortMultipartUpload.Days, Equals, 30)
  695. c.Assert(len(res.Rules[1].Transitions), Equals, 2)
  696. c.Assert(res.Rules[1].Transitions[0].StorageClass, Equals, StorageIA)
  697. c.Assert(res.Rules[1].Transitions[0].Days, Equals, 3)
  698. c.Assert(res.Rules[1].Transitions[1].StorageClass, Equals, StorageArchive)
  699. c.Assert(res.Rules[1].Transitions[1].Days, Equals, 30)
  700. err = client.DeleteBucketLifecycle(bucketNameTest)
  701. c.Assert(err, IsNil)
  702. // Set two rule: rule1 and rule3
  703. rules = []LifecycleRule{rule1, rule3}
  704. err = client.SetBucketLifecycle(bucketNameTest, rules)
  705. c.Assert(err, IsNil)
  706. res, err = client.GetBucketLifecycle(bucketNameTest)
  707. c.Assert(err, IsNil)
  708. c.Assert(len(res.Rules), Equals, 2)
  709. c.Assert(res.Rules[0].ID, Equals, "rule1")
  710. c.Assert(res.Rules[0].Expiration, NotNil)
  711. c.Assert(res.Rules[0].Expiration.CreatedBeforeDate, Equals, "2015-11-11T00:00:00.000Z")
  712. c.Assert(res.Rules[1].ID, Equals, "rule3")
  713. c.Assert(res.Rules[1].AbortMultipartUpload, NotNil)
  714. c.Assert(res.Rules[1].AbortMultipartUpload.Days, Equals, 30)
  715. c.Assert(len(res.Rules[1].Transitions), Equals, 2)
  716. c.Assert(res.Rules[1].Transitions[0].StorageClass, Equals, StorageIA)
  717. c.Assert(res.Rules[1].Transitions[0].Days, Equals, 3)
  718. c.Assert(res.Rules[1].Transitions[1].StorageClass, Equals, StorageArchive)
  719. c.Assert(res.Rules[1].Transitions[1].Days, Equals, 30)
  720. err = client.DeleteBucketLifecycle(bucketNameTest)
  721. c.Assert(err, IsNil)
  722. // Set three rules
  723. rules = []LifecycleRule{rule1, rule2, rule3}
  724. err = client.SetBucketLifecycle(bucketNameTest, rules)
  725. c.Assert(err, IsNil)
  726. res, err = client.GetBucketLifecycle(bucketNameTest)
  727. c.Assert(err, IsNil)
  728. c.Assert(len(res.Rules), Equals, 3)
  729. c.Assert(res.Rules[0].ID, Equals, "rule1")
  730. c.Assert(res.Rules[0].Expiration, NotNil)
  731. c.Assert(res.Rules[0].Expiration.CreatedBeforeDate, Equals, "2015-11-11T00:00:00.000Z")
  732. c.Assert(res.Rules[1].ID, Equals, "rule2")
  733. c.Assert(res.Rules[1].Expiration, NotNil)
  734. c.Assert(res.Rules[1].Expiration.CreatedBeforeDate, Equals, "2015-11-11T00:00:00.000Z")
  735. c.Assert(res.Rules[1].AbortMultipartUpload, NotNil)
  736. c.Assert(res.Rules[1].AbortMultipartUpload.Days, Equals, 30)
  737. c.Assert(res.Rules[2].ID, Equals, "rule3")
  738. c.Assert(res.Rules[2].AbortMultipartUpload, NotNil)
  739. c.Assert(res.Rules[2].AbortMultipartUpload.Days, Equals, 30)
  740. c.Assert(len(res.Rules[2].Transitions), Equals, 2)
  741. c.Assert(res.Rules[2].Transitions[0].StorageClass, Equals, StorageIA)
  742. c.Assert(res.Rules[2].Transitions[0].Days, Equals, 3)
  743. c.Assert(res.Rules[2].Transitions[1].StorageClass, Equals, StorageArchive)
  744. c.Assert(res.Rules[2].Transitions[1].Days, Equals, 30)
  745. err = client.DeleteBucket(bucketNameTest)
  746. c.Assert(err, IsNil)
  747. }
  748. // TestDeleteBucketLifecycle
  749. func (s *OssClientSuite) TestDeleteBucketLifecycle(c *C) {
  750. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  751. var rule1 = BuildLifecycleRuleByDate("rule1", "one", true, 2015, 11, 11)
  752. var rule2 = BuildLifecycleRuleByDays("rule2", "two", true, 3)
  753. var rules = []LifecycleRule{rule1, rule2}
  754. client, err := New(endpoint, accessID, accessKey)
  755. c.Assert(err, IsNil)
  756. err = client.CreateBucket(bucketNameTest)
  757. c.Assert(err, IsNil)
  758. //time.Sleep(timeoutInOperation)
  759. err = client.DeleteBucketLifecycle(bucketNameTest)
  760. c.Assert(err, IsNil)
  761. err = client.SetBucketLifecycle(bucketNameTest, rules)
  762. c.Assert(err, IsNil)
  763. //time.Sleep(timeoutInOperation)
  764. res, err := client.GetBucketLifecycle(bucketNameTest)
  765. c.Assert(err, IsNil)
  766. c.Assert(len(res.Rules), Equals, 2)
  767. // Delete
  768. err = client.DeleteBucketLifecycle(bucketNameTest)
  769. c.Assert(err, IsNil)
  770. //time.Sleep(timeoutInOperation)
  771. res, err = client.GetBucketLifecycle(bucketNameTest)
  772. c.Assert(err, NotNil)
  773. // Eliminate effect of cache
  774. //time.Sleep(timeoutInOperation)
  775. // Delete when not set
  776. err = client.DeleteBucketLifecycle(bucketNameTest)
  777. c.Assert(err, IsNil)
  778. err = client.DeleteBucket(bucketNameTest)
  779. c.Assert(err, IsNil)
  780. }
  781. // TestSetBucketLifecycleNegative
  782. func (s *OssClientSuite) TestBucketLifecycleNegative(c *C) {
  783. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  784. var rules = []LifecycleRule{}
  785. client, err := New(endpoint, accessID, accessKey)
  786. c.Assert(err, IsNil)
  787. err = client.CreateBucket(bucketNameTest)
  788. c.Assert(err, IsNil)
  789. // Set with no rule
  790. err = client.SetBucketLifecycle(bucketNameTest, rules)
  791. c.Assert(err, NotNil)
  792. err = client.DeleteBucket(bucketNameTest)
  793. c.Assert(err, IsNil)
  794. // Not exist
  795. err = client.SetBucketLifecycle(bucketNameTest, rules)
  796. c.Assert(err, NotNil)
  797. // Not exist
  798. _, err = client.GetBucketLifecycle(bucketNameTest)
  799. c.Assert(err, NotNil)
  800. // Not exist
  801. err = client.DeleteBucketLifecycle(bucketNameTest)
  802. c.Assert(err, NotNil)
  803. }
  804. // TestSetBucketReferer
  805. func (s *OssClientSuite) TestSetBucketReferer(c *C) {
  806. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  807. var referers = []string{"http://www.aliyun.com", "https://www.aliyun.com"}
  808. client, err := New(endpoint, accessID, accessKey)
  809. c.Assert(err, IsNil)
  810. err = client.CreateBucket(bucketNameTest)
  811. c.Assert(err, IsNil)
  812. time.Sleep(timeoutInOperation)
  813. res, err := client.GetBucketReferer(bucketNameTest)
  814. c.Assert(res.AllowEmptyReferer, Equals, true)
  815. c.Assert(len(res.RefererList), Equals, 0)
  816. // Set referers
  817. err = client.SetBucketReferer(bucketNameTest, referers, false)
  818. c.Assert(err, IsNil)
  819. time.Sleep(timeoutInOperation)
  820. res, err = client.GetBucketReferer(bucketNameTest)
  821. c.Assert(res.AllowEmptyReferer, Equals, false)
  822. c.Assert(len(res.RefererList), Equals, 2)
  823. c.Assert(res.RefererList[0], Equals, "http://www.aliyun.com")
  824. c.Assert(res.RefererList[1], Equals, "https://www.aliyun.com")
  825. // Reset referer, referers empty
  826. referers = []string{""}
  827. err = client.SetBucketReferer(bucketNameTest, referers, true)
  828. c.Assert(err, IsNil)
  829. referers = []string{}
  830. err = client.SetBucketReferer(bucketNameTest, referers, true)
  831. c.Assert(err, IsNil)
  832. res, err = client.GetBucketReferer(bucketNameTest)
  833. c.Assert(res.AllowEmptyReferer, Equals, true)
  834. c.Assert(len(res.RefererList), Equals, 0)
  835. err = client.DeleteBucket(bucketNameTest)
  836. c.Assert(err, IsNil)
  837. }
  838. // TestSetBucketRefererNegative
  839. func (s *OssClientSuite) TestBucketRefererNegative(c *C) {
  840. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  841. var referers = []string{""}
  842. client, err := New(endpoint, accessID, accessKey)
  843. c.Assert(err, IsNil)
  844. // Not exist
  845. _, err = client.GetBucketReferer(bucketNameTest)
  846. c.Assert(err, NotNil)
  847. testLogger.Println(err)
  848. // Not exist
  849. err = client.SetBucketReferer(bucketNameTest, referers, true)
  850. c.Assert(err, NotNil)
  851. testLogger.Println(err)
  852. }
  853. // TestSetBucketLogging
  854. func (s *OssClientSuite) TestSetBucketLogging(c *C) {
  855. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  856. var bucketNameTarget = bucketNameTest + "-target"
  857. client, err := New(endpoint, accessID, accessKey)
  858. c.Assert(err, IsNil)
  859. err = client.CreateBucket(bucketNameTest)
  860. c.Assert(err, IsNil)
  861. err = client.CreateBucket(bucketNameTarget)
  862. c.Assert(err, IsNil)
  863. time.Sleep(timeoutInOperation)
  864. // Set logging
  865. err = client.SetBucketLogging(bucketNameTest, bucketNameTarget, "prefix", true)
  866. c.Assert(err, IsNil)
  867. // Reset
  868. err = client.SetBucketLogging(bucketNameTest, bucketNameTarget, "prefix", false)
  869. c.Assert(err, IsNil)
  870. time.Sleep(timeoutInOperation)
  871. res, err := client.GetBucketLogging(bucketNameTest)
  872. c.Assert(err, IsNil)
  873. c.Assert(res.LoggingEnabled.TargetBucket, Equals, "")
  874. c.Assert(res.LoggingEnabled.TargetPrefix, Equals, "")
  875. err = client.DeleteBucketLogging(bucketNameTest)
  876. c.Assert(err, IsNil)
  877. // Set to self
  878. err = client.SetBucketLogging(bucketNameTest, bucketNameTest, "prefix", true)
  879. c.Assert(err, IsNil)
  880. err = client.DeleteBucket(bucketNameTest)
  881. c.Assert(err, IsNil)
  882. err = client.DeleteBucket(bucketNameTarget)
  883. c.Assert(err, IsNil)
  884. }
  885. // TestDeleteBucketLogging
  886. func (s *OssClientSuite) TestDeleteBucketLogging(c *C) {
  887. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  888. var bucketNameTarget = bucketNameTest + "-target"
  889. client, err := New(endpoint, accessID, accessKey)
  890. c.Assert(err, IsNil)
  891. err = client.CreateBucket(bucketNameTest)
  892. c.Assert(err, IsNil)
  893. err = client.CreateBucket(bucketNameTarget)
  894. c.Assert(err, IsNil)
  895. time.Sleep(timeoutInOperation)
  896. // Get when not set
  897. res, err := client.GetBucketLogging(bucketNameTest)
  898. c.Assert(err, IsNil)
  899. c.Assert(res.LoggingEnabled.TargetBucket, Equals, "")
  900. c.Assert(res.LoggingEnabled.TargetPrefix, Equals, "")
  901. // Set
  902. err = client.SetBucketLogging(bucketNameTest, bucketNameTarget, "prefix", true)
  903. c.Assert(err, IsNil)
  904. // Get
  905. time.Sleep(timeoutInOperation)
  906. res, err = client.GetBucketLogging(bucketNameTest)
  907. c.Assert(err, IsNil)
  908. c.Assert(res.LoggingEnabled.TargetBucket, Equals, bucketNameTarget)
  909. c.Assert(res.LoggingEnabled.TargetPrefix, Equals, "prefix")
  910. // Set
  911. err = client.SetBucketLogging(bucketNameTest, bucketNameTarget, "prefix", false)
  912. c.Assert(err, IsNil)
  913. // Get
  914. time.Sleep(timeoutInOperation)
  915. res, err = client.GetBucketLogging(bucketNameTest)
  916. c.Assert(err, IsNil)
  917. c.Assert(res.LoggingEnabled.TargetBucket, Equals, "")
  918. c.Assert(res.LoggingEnabled.TargetPrefix, Equals, "")
  919. // Delete
  920. err = client.DeleteBucketLogging(bucketNameTest)
  921. c.Assert(err, IsNil)
  922. // Get after delete
  923. time.Sleep(timeoutInOperation)
  924. res, err = client.GetBucketLogging(bucketNameTest)
  925. c.Assert(err, IsNil)
  926. c.Assert(res.LoggingEnabled.TargetBucket, Equals, "")
  927. c.Assert(res.LoggingEnabled.TargetPrefix, Equals, "")
  928. err = client.DeleteBucket(bucketNameTest)
  929. c.Assert(err, IsNil)
  930. err = client.DeleteBucket(bucketNameTarget)
  931. c.Assert(err, IsNil)
  932. }
  933. // TestSetBucketLoggingNegative
  934. func (s *OssClientSuite) TestSetBucketLoggingNegative(c *C) {
  935. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  936. var bucketNameTarget = bucketNameTest + "-target"
  937. client, err := New(endpoint, accessID, accessKey)
  938. c.Assert(err, IsNil)
  939. // Not exist
  940. _, err = client.GetBucketLogging(bucketNameTest)
  941. c.Assert(err, NotNil)
  942. // Not exist
  943. err = client.SetBucketLogging(bucketNameTest, "targetbucket", "prefix", true)
  944. c.Assert(err, NotNil)
  945. // Not exist
  946. err = client.DeleteBucketLogging(bucketNameTest)
  947. c.Assert(err, NotNil)
  948. err = client.CreateBucket(bucketNameTest)
  949. c.Assert(err, IsNil)
  950. time.Sleep(timeoutInOperation)
  951. // Target bucket not exist
  952. err = client.SetBucketLogging(bucketNameTest, bucketNameTarget, "prefix", true)
  953. c.Assert(err, NotNil)
  954. // Parameter invalid
  955. err = client.SetBucketLogging(bucketNameTest, "XXXX", "prefix", true)
  956. c.Assert(err, NotNil)
  957. err = client.SetBucketLogging(bucketNameTest, "xx", "prefix", true)
  958. c.Assert(err, NotNil)
  959. err = client.DeleteBucket(bucketNameTest)
  960. c.Assert(err, IsNil)
  961. }
  962. // TestSetBucketWebsite
  963. func (s *OssClientSuite) TestSetBucketWebsite(c *C) {
  964. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  965. var indexWebsite = "myindex.html"
  966. var errorWebsite = "myerror.html"
  967. client, err := New(endpoint, accessID, accessKey)
  968. c.Assert(err, IsNil)
  969. time.Sleep(timeoutInOperation)
  970. err = client.CreateBucket(bucketNameTest)
  971. c.Assert(err, IsNil)
  972. // Set
  973. err = client.SetBucketWebsite(bucketNameTest, indexWebsite, errorWebsite)
  974. c.Assert(err, IsNil)
  975. // Double set
  976. err = client.SetBucketWebsite(bucketNameTest, indexWebsite, errorWebsite)
  977. c.Assert(err, IsNil)
  978. res, err := client.GetBucketWebsite(bucketNameTest)
  979. c.Assert(err, IsNil)
  980. c.Assert(res.IndexDocument.Suffix, Equals, indexWebsite)
  981. c.Assert(res.ErrorDocument.Key, Equals, errorWebsite)
  982. // Reset
  983. err = client.SetBucketWebsite(bucketNameTest, "your"+indexWebsite, "your"+errorWebsite)
  984. c.Assert(err, IsNil)
  985. time.Sleep(timeoutInOperation)
  986. res, err = client.GetBucketWebsite(bucketNameTest)
  987. c.Assert(err, IsNil)
  988. c.Assert(res.IndexDocument.Suffix, Equals, "your"+indexWebsite)
  989. c.Assert(res.ErrorDocument.Key, Equals, "your"+errorWebsite)
  990. err = client.DeleteBucketWebsite(bucketNameTest)
  991. c.Assert(err, IsNil)
  992. // Set after delete
  993. err = client.SetBucketWebsite(bucketNameTest, indexWebsite, errorWebsite)
  994. c.Assert(err, IsNil)
  995. // Eliminate effect of cache
  996. time.Sleep(timeoutInOperation)
  997. res, err = client.GetBucketWebsite(bucketNameTest)
  998. c.Assert(err, IsNil)
  999. c.Assert(res.IndexDocument.Suffix, Equals, indexWebsite)
  1000. c.Assert(res.ErrorDocument.Key, Equals, errorWebsite)
  1001. err = client.DeleteBucket(bucketNameTest)
  1002. c.Assert(err, IsNil)
  1003. }
  1004. // TestDeleteBucketWebsite
  1005. func (s *OssClientSuite) TestDeleteBucketWebsite(c *C) {
  1006. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  1007. var indexWebsite = "myindex.html"
  1008. var errorWebsite = "myerror.html"
  1009. client, err := New(endpoint, accessID, accessKey)
  1010. c.Assert(err, IsNil)
  1011. err = client.CreateBucket(bucketNameTest)
  1012. c.Assert(err, IsNil)
  1013. time.Sleep(timeoutInOperation)
  1014. // Get
  1015. res, err := client.GetBucketWebsite(bucketNameTest)
  1016. c.Assert(err, NotNil)
  1017. // Detele without set
  1018. err = client.DeleteBucketWebsite(bucketNameTest)
  1019. c.Assert(err, IsNil)
  1020. // Set
  1021. err = client.SetBucketWebsite(bucketNameTest, indexWebsite, errorWebsite)
  1022. c.Assert(err, IsNil)
  1023. time.Sleep(timeoutInOperation)
  1024. res, err = client.GetBucketWebsite(bucketNameTest)
  1025. c.Assert(err, IsNil)
  1026. c.Assert(res.IndexDocument.Suffix, Equals, indexWebsite)
  1027. c.Assert(res.ErrorDocument.Key, Equals, errorWebsite)
  1028. // Detele
  1029. time.Sleep(timeoutInOperation)
  1030. err = client.DeleteBucketWebsite(bucketNameTest)
  1031. c.Assert(err, IsNil)
  1032. time.Sleep(timeoutInOperation)
  1033. res, err = client.GetBucketWebsite(bucketNameTest)
  1034. c.Assert(err, NotNil)
  1035. // Detele after delete
  1036. err = client.DeleteBucketWebsite(bucketNameTest)
  1037. c.Assert(err, IsNil)
  1038. err = client.DeleteBucket(bucketNameTest)
  1039. c.Assert(err, IsNil)
  1040. }
  1041. // TestSetBucketWebsiteNegative
  1042. func (s *OssClientSuite) TestSetBucketWebsiteNegative(c *C) {
  1043. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  1044. var indexWebsite = "myindex.html"
  1045. var errorWebsite = "myerror.html"
  1046. client, err := New(endpoint, accessID, accessKey)
  1047. c.Assert(err, IsNil)
  1048. err = client.DeleteBucket(bucketNameTest)
  1049. // Not exist
  1050. _, err = client.GetBucketWebsite(bucketNameTest)
  1051. c.Assert(err, NotNil)
  1052. err = client.DeleteBucketWebsite(bucketNameTest)
  1053. c.Assert(err, NotNil)
  1054. err = client.SetBucketWebsite(bucketNameTest, indexWebsite, errorWebsite)
  1055. c.Assert(err, NotNil)
  1056. err = client.CreateBucket(bucketNameTest)
  1057. c.Assert(err, IsNil)
  1058. // Set
  1059. time.Sleep(timeoutInOperation)
  1060. err = client.SetBucketWebsite(bucketNameTest, "myindex", "myerror")
  1061. c.Assert(err, IsNil)
  1062. res, err := client.GetBucketWebsite(bucketNameTest)
  1063. c.Assert(err, IsNil)
  1064. c.Assert(res.IndexDocument.Suffix, Equals, "myindex")
  1065. c.Assert(res.ErrorDocument.Key, Equals, "myerror")
  1066. // Detele
  1067. err = client.DeleteBucketWebsite(bucketNameTest)
  1068. c.Assert(err, IsNil)
  1069. time.Sleep(timeoutInOperation)
  1070. _, err = client.GetBucketWebsite(bucketNameTest)
  1071. c.Assert(err, NotNil)
  1072. // Detele after delete
  1073. err = client.DeleteBucketWebsite(bucketNameTest)
  1074. c.Assert(err, IsNil)
  1075. err = client.DeleteBucket(bucketNameTest)
  1076. c.Assert(err, IsNil)
  1077. }
  1078. // TestSetBucketWebsiteDetail
  1079. func (s *OssClientSuite) TestSetBucketWebsiteDetail(c *C) {
  1080. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  1081. var indexWebsite = "myindex.html"
  1082. var errorWebsite = "myerror.html"
  1083. client, err := New(endpoint, accessID, accessKey)
  1084. c.Assert(err, IsNil)
  1085. err = client.CreateBucket(bucketNameTest)
  1086. c.Assert(err, IsNil)
  1087. time.Sleep(timeoutInOperation)
  1088. btrue := true
  1089. bfalse := false
  1090. // Define one routing rule
  1091. ruleOk := RoutingRule{
  1092. RuleNumber: 1,
  1093. Condition: Condition{
  1094. KeyPrefixEquals: "",
  1095. HTTPErrorCodeReturnedEquals: 404,
  1096. },
  1097. Redirect: Redirect{
  1098. RedirectType: "Mirror",
  1099. // PassQueryString: &btrue, // set default value
  1100. MirrorURL: "http://www.test.com/",
  1101. // MirrorPassQueryString:&btrue, // set default value
  1102. // MirrorFollowRedirect:&bfalse, // set default value
  1103. // MirrorCheckMd5:&bfalse, // set default value
  1104. MirrorHeaders: MirrorHeaders{
  1105. // PassAll:&bfalse, // set default value
  1106. Pass: []string{"myheader-key1", "myheader-key2"},
  1107. Remove: []string{"myheader-key3", "myheader-key4"},
  1108. Set: []MirrorHeaderSet{
  1109. MirrorHeaderSet{
  1110. Key: "myheader-key5",
  1111. Value: "myheader-value5",
  1112. },
  1113. },
  1114. },
  1115. },
  1116. }
  1117. // Define array routing rule
  1118. ruleArrOk := []RoutingRule{
  1119. RoutingRule{
  1120. RuleNumber: 2,
  1121. Condition: Condition{
  1122. KeyPrefixEquals: "abc/",
  1123. HTTPErrorCodeReturnedEquals: 404,
  1124. IncludeHeader: []IncludeHeader{
  1125. IncludeHeader{
  1126. Key: "host",
  1127. Equals: "test.oss-cn-beijing-internal.aliyuncs.com",
  1128. },
  1129. },
  1130. },
  1131. Redirect: Redirect{
  1132. RedirectType: "AliCDN",
  1133. Protocol: "http",
  1134. HostName: "www.test.com",
  1135. PassQueryString: &bfalse,
  1136. ReplaceKeyWith: "prefix/${key}.suffix",
  1137. HttpRedirectCode: 301,
  1138. },
  1139. },
  1140. RoutingRule{
  1141. RuleNumber: 3,
  1142. Condition: Condition{
  1143. KeyPrefixEquals: "",
  1144. HTTPErrorCodeReturnedEquals: 404,
  1145. },
  1146. Redirect: Redirect{
  1147. RedirectType: "Mirror",
  1148. PassQueryString: &btrue,
  1149. MirrorURL: "http://www.test.com/",
  1150. MirrorPassQueryString: &btrue,
  1151. MirrorFollowRedirect: &bfalse,
  1152. MirrorCheckMd5: &bfalse,
  1153. MirrorHeaders: MirrorHeaders{
  1154. PassAll: &btrue,
  1155. Pass: []string{"myheader-key1", "myheader-key2"},
  1156. Remove: []string{"myheader-key3", "myheader-key4"},
  1157. Set: []MirrorHeaderSet{
  1158. MirrorHeaderSet{
  1159. Key: "myheader-key5",
  1160. Value: "myheader-value5",
  1161. },
  1162. },
  1163. },
  1164. },
  1165. },
  1166. }
  1167. // Set one routing rule
  1168. wxmlOne := WebsiteXML{}
  1169. wxmlOne.RoutingRules = append(wxmlOne.RoutingRules, ruleOk)
  1170. var responseHeader http.Header
  1171. err = client.SetBucketWebsiteDetail(bucketNameTest, wxmlOne, GetResponseHeader(&responseHeader))
  1172. c.Assert(err, IsNil)
  1173. requestId := GetRequestId(responseHeader)
  1174. c.Assert(len(requestId) > 0, Equals, true)
  1175. res, err := client.GetBucketWebsite(bucketNameTest)
  1176. c.Assert(err, IsNil)
  1177. c.Assert(res.RoutingRules[0].Redirect.RedirectType, Equals, "Mirror")
  1178. c.Assert(*res.RoutingRules[0].Redirect.PassQueryString, Equals, false)
  1179. c.Assert(*res.RoutingRules[0].Redirect.MirrorPassQueryString, Equals, false)
  1180. c.Assert(*res.RoutingRules[0].Redirect.MirrorFollowRedirect, Equals, true)
  1181. c.Assert(*res.RoutingRules[0].Redirect.MirrorCheckMd5, Equals, false)
  1182. c.Assert(*res.RoutingRules[0].Redirect.MirrorHeaders.PassAll, Equals, false)
  1183. // Set one routing rule and IndexDocument, IndexDocument
  1184. wxml := WebsiteXML{
  1185. IndexDocument: IndexDocument{Suffix: indexWebsite},
  1186. ErrorDocument: ErrorDocument{Key: errorWebsite},
  1187. }
  1188. wxml.RoutingRules = append(wxml.RoutingRules, ruleOk)
  1189. err = client.SetBucketWebsiteDetail(bucketNameTest, wxml, GetResponseHeader(&responseHeader))
  1190. c.Assert(err, IsNil)
  1191. requestId = GetRequestId(responseHeader)
  1192. c.Assert(len(requestId) > 0, Equals, true)
  1193. res, err = client.GetBucketWebsite(bucketNameTest)
  1194. c.Assert(err, IsNil)
  1195. c.Assert(res.IndexDocument.Suffix, Equals, indexWebsite)
  1196. c.Assert(res.ErrorDocument.Key, Equals, errorWebsite)
  1197. c.Assert(res.RoutingRules[0].Redirect.RedirectType, Equals, "Mirror")
  1198. // Set array routing rule
  1199. wxml.RoutingRules = append(wxml.RoutingRules, ruleArrOk...)
  1200. err = client.SetBucketWebsiteDetail(bucketNameTest, wxml, GetResponseHeader(&responseHeader))
  1201. c.Assert(err, IsNil)
  1202. requestId = GetRequestId(responseHeader)
  1203. c.Assert(len(requestId) > 0, Equals, true)
  1204. res, err = client.GetBucketWebsite(bucketNameTest)
  1205. c.Assert(err, IsNil)
  1206. c.Assert(res.IndexDocument.Suffix, Equals, indexWebsite)
  1207. c.Assert(res.ErrorDocument.Key, Equals, errorWebsite)
  1208. c.Assert(len(res.RoutingRules), Equals, 3)
  1209. c.Assert(res.RoutingRules[1].Redirect.RedirectType, Equals, "AliCDN")
  1210. c.Assert(*res.RoutingRules[2].Redirect.MirrorPassQueryString, Equals, true)
  1211. c.Assert(*res.RoutingRules[2].Redirect.MirrorFollowRedirect, Equals, false)
  1212. // Define one error routing rule
  1213. ruleErr := RoutingRule{
  1214. RuleNumber: 1,
  1215. Redirect: Redirect{
  1216. RedirectType: "Mirror",
  1217. PassQueryString: &btrue,
  1218. },
  1219. }
  1220. // Define array error routing rule
  1221. rulesErrArr := []RoutingRule{
  1222. RoutingRule{
  1223. RuleNumber: 1,
  1224. Redirect: Redirect{
  1225. RedirectType: "Mirror",
  1226. PassQueryString: &btrue,
  1227. },
  1228. },
  1229. RoutingRule{
  1230. RuleNumber: 2,
  1231. Redirect: Redirect{
  1232. RedirectType: "Mirror",
  1233. PassQueryString: &btrue,
  1234. },
  1235. },
  1236. }
  1237. ruleIntErr := RoutingRule{
  1238. // RuleNumber:0, // set NULL value
  1239. Condition: Condition{
  1240. KeyPrefixEquals: "",
  1241. HTTPErrorCodeReturnedEquals: 404,
  1242. },
  1243. Redirect: Redirect{
  1244. RedirectType: "Mirror",
  1245. // PassQueryString: &btrue, // set default value
  1246. MirrorURL: "http://www.test.com/",
  1247. // MirrorPassQueryString:&btrue, // set default value
  1248. // MirrorFollowRedirect:&bfalse, // set default value
  1249. // MirrorCheckMd5:&bfalse, // set default value
  1250. MirrorHeaders: MirrorHeaders{
  1251. // PassAll:&bfalse, // set default value
  1252. Pass: []string{"myheader-key1", "myheader-key2"},
  1253. Remove: []string{"myheader-key3", "myheader-key4"},
  1254. Set: []MirrorHeaderSet{
  1255. MirrorHeaderSet{
  1256. Key: "myheader-key5",
  1257. Value: "myheader-value5",
  1258. },
  1259. },
  1260. },
  1261. },
  1262. }
  1263. // Set one int type error rule
  1264. wxmlIntErr := WebsiteXML{}
  1265. wxmlIntErr.RoutingRules = append(wxmlIntErr.RoutingRules, ruleIntErr)
  1266. err = client.SetBucketWebsiteDetail(bucketNameTest, wxmlIntErr)
  1267. c.Assert(err, NotNil)
  1268. // Set one error rule
  1269. wxmlErr := WebsiteXML{}
  1270. wxmlErr.RoutingRules = append(wxmlErr.RoutingRules, ruleErr)
  1271. err = client.SetBucketWebsiteDetail(bucketNameTest, wxmlErr)
  1272. c.Assert(err, NotNil)
  1273. // Set one error rule and one correct rule
  1274. wxmlErr.RoutingRules = append(wxmlErr.RoutingRules, ruleOk)
  1275. err = client.SetBucketWebsiteDetail(bucketNameTest, wxmlErr)
  1276. c.Assert(err, NotNil)
  1277. wxmlErrRuleArr := WebsiteXML{}
  1278. wxmlErrRuleArr.RoutingRules = append(wxmlErrRuleArr.RoutingRules, rulesErrArr...)
  1279. // Set array error routing rule
  1280. err = client.SetBucketWebsiteDetail(bucketNameTest, wxmlErrRuleArr)
  1281. c.Assert(err, NotNil)
  1282. err = client.DeleteBucketWebsite(bucketNameTest)
  1283. c.Assert(err, IsNil)
  1284. err = client.DeleteBucket(bucketNameTest)
  1285. c.Assert(err, IsNil)
  1286. }
  1287. // TestSetBucketCORS
  1288. func (s *OssClientSuite) TestSetBucketCORS(c *C) {
  1289. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  1290. var rule1 = CORSRule{
  1291. AllowedOrigin: []string{"*"},
  1292. AllowedMethod: []string{"PUT", "GET", "POST"},
  1293. AllowedHeader: []string{},
  1294. ExposeHeader: []string{},
  1295. MaxAgeSeconds: 100,
  1296. }
  1297. var rule2 = CORSRule{
  1298. AllowedOrigin: []string{"http://www.a.com", "http://www.b.com"},
  1299. AllowedMethod: []string{"GET"},
  1300. AllowedHeader: []string{"Authorization"},
  1301. ExposeHeader: []string{"x-oss-test", "x-oss-test1"},
  1302. MaxAgeSeconds: 200,
  1303. }
  1304. client, err := New(endpoint, accessID, accessKey)
  1305. c.Assert(err, IsNil)
  1306. err = client.CreateBucket(bucketNameTest)
  1307. c.Assert(err, IsNil)
  1308. time.Sleep(timeoutInOperation)
  1309. // Set
  1310. err = client.SetBucketCORS(bucketNameTest, []CORSRule{rule1})
  1311. c.Assert(err, IsNil)
  1312. gbcr, err := client.GetBucketCORS(bucketNameTest)
  1313. c.Assert(err, IsNil)
  1314. c.Assert(len(gbcr.CORSRules), Equals, 1)
  1315. c.Assert(len(gbcr.CORSRules[0].AllowedOrigin), Equals, 1)
  1316. c.Assert(len(gbcr.CORSRules[0].AllowedMethod), Equals, 3)
  1317. c.Assert(len(gbcr.CORSRules[0].AllowedHeader), Equals, 0)
  1318. c.Assert(len(gbcr.CORSRules[0].ExposeHeader), Equals, 0)
  1319. c.Assert(gbcr.CORSRules[0].MaxAgeSeconds, Equals, 100)
  1320. // Double set
  1321. err = client.SetBucketCORS(bucketNameTest, []CORSRule{rule1})
  1322. c.Assert(err, IsNil)
  1323. gbcr, err = client.GetBucketCORS(bucketNameTest)
  1324. c.Assert(err, IsNil)
  1325. c.Assert(len(gbcr.CORSRules), Equals, 1)
  1326. c.Assert(len(gbcr.CORSRules[0].AllowedOrigin), Equals, 1)
  1327. c.Assert(len(gbcr.CORSRules[0].AllowedMethod), Equals, 3)
  1328. c.Assert(len(gbcr.CORSRules[0].AllowedHeader), Equals, 0)
  1329. c.Assert(len(gbcr.CORSRules[0].ExposeHeader), Equals, 0)
  1330. c.Assert(gbcr.CORSRules[0].MaxAgeSeconds, Equals, 100)
  1331. // Set rule2
  1332. err = client.SetBucketCORS(bucketNameTest, []CORSRule{rule2})
  1333. c.Assert(err, IsNil)
  1334. time.Sleep(timeoutInOperation)
  1335. gbcr, err = client.GetBucketCORS(bucketNameTest)
  1336. c.Assert(err, IsNil)
  1337. c.Assert(len(gbcr.CORSRules), Equals, 1)
  1338. c.Assert(len(gbcr.CORSRules[0].AllowedOrigin), Equals, 2)
  1339. c.Assert(len(gbcr.CORSRules[0].AllowedMethod), Equals, 1)
  1340. c.Assert(len(gbcr.CORSRules[0].AllowedHeader), Equals, 1)
  1341. c.Assert(len(gbcr.CORSRules[0].ExposeHeader), Equals, 2)
  1342. c.Assert(gbcr.CORSRules[0].MaxAgeSeconds, Equals, 200)
  1343. // Reset
  1344. err = client.SetBucketCORS(bucketNameTest, []CORSRule{rule1, rule2})
  1345. c.Assert(err, IsNil)
  1346. time.Sleep(timeoutInOperation)
  1347. gbcr, err = client.GetBucketCORS(bucketNameTest)
  1348. c.Assert(err, IsNil)
  1349. c.Assert(len(gbcr.CORSRules), Equals, 2)
  1350. // Set after delete
  1351. err = client.DeleteBucketCORS(bucketNameTest)
  1352. c.Assert(err, IsNil)
  1353. err = client.SetBucketCORS(bucketNameTest, []CORSRule{rule1, rule2})
  1354. c.Assert(err, IsNil)
  1355. time.Sleep(timeoutInOperation)
  1356. gbcr, err = client.GetBucketCORS(bucketNameTest)
  1357. c.Assert(err, IsNil)
  1358. c.Assert(len(gbcr.CORSRules), Equals, 2)
  1359. err = client.DeleteBucketCORS(bucketNameTest)
  1360. c.Assert(err, IsNil)
  1361. err = client.DeleteBucket(bucketNameTest)
  1362. c.Assert(err, IsNil)
  1363. }
  1364. // TestDeleteBucketCORS
  1365. func (s *OssClientSuite) TestDeleteBucketCORS(c *C) {
  1366. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  1367. var rule = CORSRule{
  1368. AllowedOrigin: []string{"*"},
  1369. AllowedMethod: []string{"PUT", "GET", "POST"},
  1370. AllowedHeader: []string{},
  1371. ExposeHeader: []string{},
  1372. MaxAgeSeconds: 100,
  1373. }
  1374. client, err := New(endpoint, accessID, accessKey)
  1375. c.Assert(err, IsNil)
  1376. err = client.CreateBucket(bucketNameTest)
  1377. c.Assert(err, IsNil)
  1378. time.Sleep(timeoutInOperation)
  1379. // Delete not set
  1380. err = client.DeleteBucketCORS(bucketNameTest)
  1381. c.Assert(err, IsNil)
  1382. // Set
  1383. err = client.SetBucketCORS(bucketNameTest, []CORSRule{rule})
  1384. c.Assert(err, IsNil)
  1385. time.Sleep(timeoutInOperation)
  1386. _, err = client.GetBucketCORS(bucketNameTest)
  1387. c.Assert(err, IsNil)
  1388. // Detele
  1389. err = client.DeleteBucketCORS(bucketNameTest)
  1390. c.Assert(err, IsNil)
  1391. time.Sleep(timeoutInOperation)
  1392. _, err = client.GetBucketCORS(bucketNameTest)
  1393. c.Assert(err, NotNil)
  1394. // Detele after deleting
  1395. err = client.DeleteBucketCORS(bucketNameTest)
  1396. c.Assert(err, IsNil)
  1397. err = client.DeleteBucket(bucketNameTest)
  1398. c.Assert(err, IsNil)
  1399. }
  1400. // TestSetBucketCORSNegative
  1401. func (s *OssClientSuite) TestSetBucketCORSNegative(c *C) {
  1402. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  1403. var rule = CORSRule{
  1404. AllowedOrigin: []string{"*"},
  1405. AllowedMethod: []string{"PUT", "GET", "POST"},
  1406. AllowedHeader: []string{},
  1407. ExposeHeader: []string{},
  1408. MaxAgeSeconds: 100,
  1409. }
  1410. client, err := New(endpoint, accessID, accessKey)
  1411. c.Assert(err, IsNil)
  1412. err = client.DeleteBucket(bucketNameTest)
  1413. // Not exist
  1414. _, err = client.GetBucketCORS(bucketNameTest)
  1415. c.Assert(err, NotNil)
  1416. err = client.DeleteBucketCORS(bucketNameTest)
  1417. c.Assert(err, NotNil)
  1418. err = client.SetBucketCORS(bucketNameTest, []CORSRule{rule})
  1419. c.Assert(err, NotNil)
  1420. err = client.CreateBucket(bucketNameTest)
  1421. c.Assert(err, IsNil)
  1422. time.Sleep(timeoutInOperation)
  1423. _, err = client.GetBucketCORS(bucketNameTest)
  1424. c.Assert(err, NotNil)
  1425. // Set
  1426. err = client.SetBucketCORS(bucketNameTest, []CORSRule{rule})
  1427. c.Assert(err, IsNil)
  1428. time.Sleep(timeoutInOperation)
  1429. _, err = client.GetBucketCORS(bucketNameTest)
  1430. c.Assert(err, IsNil)
  1431. // Delete
  1432. err = client.DeleteBucketCORS(bucketNameTest)
  1433. c.Assert(err, IsNil)
  1434. time.Sleep(timeoutInOperation)
  1435. _, err = client.GetBucketCORS(bucketNameTest)
  1436. c.Assert(err, NotNil)
  1437. // Delete after deleting
  1438. err = client.DeleteBucketCORS(bucketNameTest)
  1439. c.Assert(err, IsNil)
  1440. err = client.DeleteBucket(bucketNameTest)
  1441. c.Assert(err, IsNil)
  1442. }
  1443. // TestGetBucketInfo
  1444. func (s *OssClientSuite) TestGetBucketInfo(c *C) {
  1445. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  1446. client, err := New(endpoint, accessID, accessKey)
  1447. c.Assert(err, IsNil)
  1448. err = client.CreateBucket(bucketNameTest)
  1449. c.Assert(err, IsNil)
  1450. res, err := client.GetBucketInfo(bucketNameTest)
  1451. c.Assert(err, IsNil)
  1452. c.Assert(res.BucketInfo.Name, Equals, bucketNameTest)
  1453. c.Assert(strings.HasPrefix(res.BucketInfo.Location, "oss-"), Equals, true)
  1454. c.Assert(res.BucketInfo.ACL, Equals, "private")
  1455. c.Assert(strings.HasSuffix(res.BucketInfo.ExtranetEndpoint, ".com"), Equals, true)
  1456. c.Assert(strings.HasSuffix(res.BucketInfo.IntranetEndpoint, ".com"), Equals, true)
  1457. c.Assert(res.BucketInfo.CreationDate, NotNil)
  1458. err = client.DeleteBucket(bucketNameTest)
  1459. c.Assert(err, IsNil)
  1460. }
  1461. // TestGetBucketInfoNegative
  1462. func (s *OssClientSuite) TestGetBucketInfoNegative(c *C) {
  1463. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  1464. client, err := New(endpoint, accessID, accessKey)
  1465. c.Assert(err, IsNil)
  1466. // Not exist
  1467. _, err = client.GetBucketInfo(bucketNameTest)
  1468. c.Assert(err, NotNil)
  1469. // Bucket name invalid
  1470. _, err = client.GetBucketInfo("InvalidBucketName_")
  1471. c.Assert(err, NotNil)
  1472. }
  1473. // TestEndpointFormat
  1474. func (s *OssClientSuite) TestEndpointFormat(c *C) {
  1475. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  1476. // http://host
  1477. client, err := New(endpoint, accessID, accessKey)
  1478. c.Assert(err, IsNil)
  1479. err = client.CreateBucket(bucketNameTest)
  1480. c.Assert(err, IsNil)
  1481. time.Sleep(timeoutInOperation)
  1482. res, err := client.GetBucketACL(bucketNameTest)
  1483. c.Assert(err, IsNil)
  1484. c.Assert(res.ACL, Equals, string(ACLPrivate))
  1485. err = client.DeleteBucket(bucketNameTest)
  1486. c.Assert(err, IsNil)
  1487. time.Sleep(timeoutInOperation)
  1488. // http://host:port
  1489. client, err = New(endpoint+":80", accessID, accessKey)
  1490. c.Assert(err, IsNil)
  1491. err = client.CreateBucket(bucketNameTest)
  1492. c.Assert(err, IsNil)
  1493. time.Sleep(timeoutInOperation)
  1494. res, err = client.GetBucketACL(bucketNameTest)
  1495. c.Assert(err, IsNil)
  1496. c.Assert(res.ACL, Equals, string(ACLPrivate))
  1497. err = client.DeleteBucket(bucketNameTest)
  1498. c.Assert(err, IsNil)
  1499. }
  1500. // TestCname
  1501. func (s *OssClientSuite) _TestCname(c *C) {
  1502. var bucketNameTest = "<my-bucket-cname>"
  1503. client, err := New("<endpoint>", "<accessKeyId>", "<accessKeySecret>", UseCname(true))
  1504. c.Assert(err, IsNil)
  1505. err = client.CreateBucket(bucketNameTest)
  1506. c.Assert(err, IsNil)
  1507. _, err = client.ListBuckets()
  1508. c.Assert(err, NotNil)
  1509. res, err := client.GetBucketACL(bucketNameTest)
  1510. c.Assert(err, IsNil)
  1511. c.Assert(res.ACL, Equals, string(ACLPrivate))
  1512. }
  1513. // TestCnameNegative
  1514. func (s *OssClientSuite) _TestCnameNegative(c *C) {
  1515. var bucketNameTest = "<my-bucket-cname>"
  1516. client, err := New("<endpoint>", "<accessKeyId>", "<accessKeySecret>", UseCname(true))
  1517. c.Assert(err, IsNil)
  1518. err = client.CreateBucket(bucketNameTest)
  1519. c.Assert(err, NotNil)
  1520. _, err = client.ListBuckets()
  1521. c.Assert(err, NotNil)
  1522. _, err = client.GetBucketACL(bucketNameTest)
  1523. c.Assert(err, NotNil)
  1524. }
  1525. // _TestHTTPS
  1526. func (s *OssClientSuite) _TestHTTPS(c *C) {
  1527. var bucketNameTest = "<my-bucket-https>"
  1528. client, err := New("<endpoint>", "<accessKeyId>", "<accessKeySecret>")
  1529. c.Assert(err, IsNil)
  1530. err = client.CreateBucket(bucketNameTest)
  1531. c.Assert(err, IsNil)
  1532. res, err := client.GetBucketACL(bucketNameTest)
  1533. c.Assert(err, IsNil)
  1534. c.Assert(res.ACL, Equals, string(ACLPrivate))
  1535. err = client.DeleteBucket(bucketNameTest)
  1536. c.Assert(err, IsNil)
  1537. }
  1538. // TestClientOption
  1539. func (s *OssClientSuite) TestClientOption(c *C) {
  1540. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  1541. client, err := New(endpoint, accessID, accessKey, UseCname(true),
  1542. Timeout(11, 12), SecurityToken("token"), Proxy(proxyHost))
  1543. c.Assert(err, IsNil)
  1544. // CreateBucket timeout
  1545. err = client.CreateBucket(bucketNameTest)
  1546. c.Assert(err, NotNil)
  1547. c.Assert(client.Conn.config.HTTPTimeout.ConnectTimeout, Equals, time.Second*11)
  1548. c.Assert(client.Conn.config.HTTPTimeout.ReadWriteTimeout, Equals, time.Second*12)
  1549. c.Assert(client.Conn.config.HTTPTimeout.HeaderTimeout, Equals, time.Second*12)
  1550. c.Assert(client.Conn.config.HTTPTimeout.IdleConnTimeout, Equals, time.Second*12)
  1551. c.Assert(client.Conn.config.HTTPTimeout.LongTimeout, Equals, time.Second*12*10)
  1552. c.Assert(client.Conn.config.SecurityToken, Equals, "token")
  1553. c.Assert(client.Conn.config.IsCname, Equals, true)
  1554. c.Assert(client.Conn.config.IsUseProxy, Equals, true)
  1555. c.Assert(client.Config.ProxyHost, Equals, proxyHost)
  1556. client, err = New(endpoint, accessID, accessKey, AuthProxy(proxyHost, proxyUser, proxyPasswd))
  1557. c.Assert(client.Conn.config.IsUseProxy, Equals, true)
  1558. c.Assert(client.Config.ProxyHost, Equals, proxyHost)
  1559. c.Assert(client.Conn.config.IsAuthProxy, Equals, true)
  1560. c.Assert(client.Conn.config.ProxyUser, Equals, proxyUser)
  1561. c.Assert(client.Conn.config.ProxyPassword, Equals, proxyPasswd)
  1562. client, err = New(endpoint, accessID, accessKey, UserAgent("go sdk user agent"))
  1563. c.Assert(client.Conn.config.UserAgent, Equals, "go sdk user agent")
  1564. // Check we can overide the http.Client
  1565. httpClient := new(http.Client)
  1566. client, err = New(endpoint, accessID, accessKey, HTTPClient(httpClient))
  1567. c.Assert(client.HTTPClient, Equals, httpClient)
  1568. c.Assert(client.Conn.client, Equals, httpClient)
  1569. client, err = New(endpoint, accessID, accessKey)
  1570. c.Assert(client.HTTPClient, IsNil)
  1571. }
  1572. // TestProxy
  1573. func (s *OssClientSuite) TestProxy(c *C) {
  1574. bucketNameTest := bucketNamePrefix + randLowStr(6)
  1575. objectName := "体育/奥运/首金"
  1576. objectValue := "大江东去,浪淘尽,千古风流人物。 故垒西边,人道是、三国周郎赤壁。"
  1577. client, err := New(endpoint, accessID, accessKey, AuthProxy(proxyHost, proxyUser, proxyPasswd))
  1578. // Create bucket
  1579. err = client.CreateBucket(bucketNameTest)
  1580. c.Assert(err, IsNil)
  1581. // Get bucket info
  1582. _, err = client.GetBucketInfo(bucketNameTest)
  1583. c.Assert(err, IsNil)
  1584. bucket, err := client.Bucket(bucketNameTest)
  1585. // Sign URL
  1586. str, err := bucket.SignURL(objectName, HTTPPut, 60)
  1587. c.Assert(err, IsNil)
  1588. c.Assert(strings.Contains(str, HTTPParamExpires+"="), Equals, true)
  1589. c.Assert(strings.Contains(str, HTTPParamAccessKeyID+"="), Equals, true)
  1590. c.Assert(strings.Contains(str, HTTPParamSignature+"="), Equals, true)
  1591. // Put object with URL
  1592. err = bucket.PutObjectWithURL(str, strings.NewReader(objectValue))
  1593. c.Assert(err, IsNil)
  1594. // Sign URL for get object
  1595. str, err = bucket.SignURL(objectName, HTTPGet, 60)
  1596. c.Assert(err, IsNil)
  1597. c.Assert(strings.Contains(str, HTTPParamExpires+"="), Equals, true)
  1598. c.Assert(strings.Contains(str, HTTPParamAccessKeyID+"="), Equals, true)
  1599. c.Assert(strings.Contains(str, HTTPParamSignature+"="), Equals, true)
  1600. // Get object with URL
  1601. body, err := bucket.GetObjectWithURL(str)
  1602. c.Assert(err, IsNil)
  1603. str, err = readBody(body)
  1604. c.Assert(err, IsNil)
  1605. c.Assert(str, Equals, objectValue)
  1606. // Put object
  1607. err = bucket.PutObject(objectName, strings.NewReader(objectValue))
  1608. c.Assert(err, IsNil)
  1609. // Get object
  1610. _, err = bucket.GetObject(objectName)
  1611. c.Assert(err, IsNil)
  1612. // List objects
  1613. _, err = bucket.ListObjects()
  1614. c.Assert(err, IsNil)
  1615. // Delete object
  1616. err = bucket.DeleteObject(objectName)
  1617. c.Assert(err, IsNil)
  1618. // Delete bucket
  1619. err = client.DeleteBucket(bucketNameTest)
  1620. c.Assert(err, IsNil)
  1621. }
  1622. // Private
  1623. func (s *OssClientSuite) checkBucket(buckets []BucketProperties, bucket string) bool {
  1624. for _, v := range buckets {
  1625. if v.Name == bucket {
  1626. return true
  1627. }
  1628. }
  1629. return false
  1630. }
  1631. func (s *OssClientSuite) getBucket(buckets []BucketProperties, bucket string) (bool, BucketProperties) {
  1632. for _, v := range buckets {
  1633. if v.Name == bucket {
  1634. return true, v
  1635. }
  1636. }
  1637. return false, BucketProperties{}
  1638. }
  1639. func (s *OssClientSuite) TestHttpLogNotSignUrl(c *C) {
  1640. logName := "." + string(os.PathSeparator) + "test-go-sdk-httpdebug.log" + randStr(5)
  1641. f, err := os.OpenFile(logName, os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0660)
  1642. c.Assert(err, IsNil)
  1643. client, err := New(endpoint, accessID, accessKey)
  1644. client.Config.LogLevel = Debug
  1645. client.Config.Logger = log.New(f, "", log.LstdFlags)
  1646. var testBucketName = bucketNamePrefix + randLowStr(6)
  1647. // CreateBucket
  1648. err = client.CreateBucket(testBucketName)
  1649. f.Close()
  1650. // read log file,get http info
  1651. contents, err := ioutil.ReadFile(logName)
  1652. c.Assert(err, IsNil)
  1653. httpContent := string(contents)
  1654. //fmt.Println(httpContent)
  1655. c.Assert(strings.Contains(httpContent, "signStr"), Equals, true)
  1656. c.Assert(strings.Contains(httpContent, "Method:"), Equals, true)
  1657. // delete test bucket and log
  1658. os.Remove(logName)
  1659. client.DeleteBucket(testBucketName)
  1660. }
  1661. func (s *OssClientSuite) TestHttpLogSignUrl(c *C) {
  1662. logName := "." + string(os.PathSeparator) + "test-go-sdk-httpdebug-signurl.log" + randStr(5)
  1663. f, err := os.OpenFile(logName, os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0660)
  1664. c.Assert(err, IsNil)
  1665. client, err := New(endpoint, accessID, accessKey)
  1666. client.Config.LogLevel = Debug
  1667. client.Config.Logger = log.New(f, "", log.LstdFlags)
  1668. var testBucketName = bucketNamePrefix + randLowStr(6)
  1669. // CreateBucket
  1670. err = client.CreateBucket(testBucketName)
  1671. f.Close()
  1672. // clear log
  1673. f, err = os.OpenFile(logName, os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0660)
  1674. client.Config.Logger = log.New(f, "", log.LstdFlags)
  1675. bucket, _ := client.Bucket(testBucketName)
  1676. objectName := objectNamePrefix + randStr(8)
  1677. objectValue := randStr(20)
  1678. // Sign URL for put
  1679. str, err := bucket.SignURL(objectName, HTTPPut, 60)
  1680. c.Assert(err, IsNil)
  1681. c.Assert(strings.Contains(str, HTTPParamExpires+"="), Equals, true)
  1682. c.Assert(strings.Contains(str, HTTPParamAccessKeyID+"="), Equals, true)
  1683. c.Assert(strings.Contains(str, HTTPParamSignature+"="), Equals, true)
  1684. // Error put object with URL
  1685. err = bucket.PutObjectWithURL(str, strings.NewReader(objectValue), ContentType("image/tiff"))
  1686. f.Close()
  1687. // read log file,get http info
  1688. contents, err := ioutil.ReadFile(logName)
  1689. c.Assert(err, IsNil)
  1690. httpContent := string(contents)
  1691. //fmt.Println(httpContent)
  1692. c.Assert(strings.Contains(httpContent, "signStr"), Equals, true)
  1693. c.Assert(strings.Contains(httpContent, "Method:"), Equals, true)
  1694. // delete test bucket and log
  1695. os.Remove(logName)
  1696. client.DeleteBucket(testBucketName)
  1697. }
  1698. func (s *OssClientSuite) TestSetLimitUploadSpeed(c *C) {
  1699. client, err := New(endpoint, accessID, accessKey)
  1700. c.Assert(err, IsNil)
  1701. err = client.LimitUploadSpeed(100)
  1702. goVersion := runtime.Version()
  1703. pSlice := strings.Split(strings.ToLower(goVersion), ".")
  1704. // compare with go1.7
  1705. if len(pSlice) >= 2 {
  1706. if pSlice[0] > "go1" {
  1707. c.Assert(err, IsNil)
  1708. } else if pSlice[0] == "go1" {
  1709. subVersion, _ := strconv.Atoi(pSlice[1])
  1710. if subVersion >= 7 {
  1711. c.Assert(err, IsNil)
  1712. } else {
  1713. c.Assert(err, NotNil)
  1714. }
  1715. } else {
  1716. c.Assert(err, NotNil)
  1717. }
  1718. }
  1719. }
  1720. func (s *OssClientSuite) TestBucketEncyptionError(c *C) {
  1721. client, err := New(endpoint, accessID, accessKey)
  1722. c.Assert(err, IsNil)
  1723. bucketName := bucketNamePrefix + randLowStr(5)
  1724. err = client.CreateBucket(bucketName)
  1725. c.Assert(err, IsNil)
  1726. // SetBucketEncryption:AES256 ,"123"
  1727. encryptionRule := ServerEncryptionRule{}
  1728. encryptionRule.SSEDefault.SSEAlgorithm = string(AESAlgorithm)
  1729. encryptionRule.SSEDefault.KMSMasterKeyID = "123"
  1730. var responseHeader http.Header
  1731. err = client.SetBucketEncryption(bucketName, encryptionRule, GetResponseHeader(&responseHeader))
  1732. c.Assert(err, NotNil)
  1733. requestId := GetRequestId(responseHeader)
  1734. c.Assert(len(requestId) > 0, Equals, true)
  1735. // GetBucketEncryption
  1736. _, err = client.GetBucketEncryption(bucketName, GetResponseHeader(&responseHeader))
  1737. c.Assert(err, NotNil)
  1738. requestId = GetRequestId(responseHeader)
  1739. c.Assert(len(requestId) > 0, Equals, true)
  1740. // Get default bucket info
  1741. bucketResult, err := client.GetBucketInfo(bucketName)
  1742. c.Assert(err, IsNil)
  1743. c.Assert(bucketResult.BucketInfo.SseRule.SSEAlgorithm, Equals, "")
  1744. c.Assert(bucketResult.BucketInfo.SseRule.KMSMasterKeyID, Equals, "")
  1745. c.Assert(bucketResult.BucketInfo.Versioning, Equals, "")
  1746. err = client.DeleteBucket(bucketName)
  1747. c.Assert(err, IsNil)
  1748. }
  1749. func (s *OssClientSuite) TestBucketEncyptionPutAndGetAndDelete(c *C) {
  1750. client, err := New(endpoint, accessID, accessKey)
  1751. c.Assert(err, IsNil)
  1752. bucketName := bucketNamePrefix + randLowStr(5)
  1753. err = client.CreateBucket(bucketName)
  1754. c.Assert(err, IsNil)
  1755. // SetBucketEncryption:KMS ,""
  1756. encryptionRule := ServerEncryptionRule{}
  1757. encryptionRule.SSEDefault.SSEAlgorithm = string(KMSAlgorithm)
  1758. var responseHeader http.Header
  1759. err = client.SetBucketEncryption(bucketName, encryptionRule, GetResponseHeader(&responseHeader))
  1760. c.Assert(err, IsNil)
  1761. requestId := GetRequestId(responseHeader)
  1762. c.Assert(len(requestId) > 0, Equals, true)
  1763. // GetBucketEncryption
  1764. getResult, err := client.GetBucketEncryption(bucketName, GetResponseHeader(&responseHeader))
  1765. c.Assert(err, IsNil)
  1766. requestId = GetRequestId(responseHeader)
  1767. c.Assert(len(requestId) > 0, Equals, true)
  1768. // check encryption value
  1769. c.Assert(encryptionRule.SSEDefault.SSEAlgorithm, Equals, getResult.SSEDefault.SSEAlgorithm)
  1770. c.Assert(encryptionRule.SSEDefault.KMSMasterKeyID, Equals, getResult.SSEDefault.KMSMasterKeyID)
  1771. // delete bucket encyption
  1772. err = client.DeleteBucketEncryption(bucketName, GetResponseHeader(&responseHeader))
  1773. c.Assert(err, IsNil)
  1774. requestId = GetRequestId(responseHeader)
  1775. c.Assert(len(requestId) > 0, Equals, true)
  1776. // GetBucketEncryption failure
  1777. _, err = client.GetBucketEncryption(bucketName, GetResponseHeader(&responseHeader))
  1778. c.Assert(err, NotNil)
  1779. requestId = GetRequestId(responseHeader)
  1780. c.Assert(len(requestId) > 0, Equals, true)
  1781. // Get default bucket info
  1782. bucketResult, err := client.GetBucketInfo(bucketName)
  1783. c.Assert(err, IsNil)
  1784. c.Assert(bucketResult.BucketInfo.SseRule.SSEAlgorithm, Equals, "")
  1785. c.Assert(bucketResult.BucketInfo.SseRule.KMSMasterKeyID, Equals, "")
  1786. c.Assert(bucketResult.BucketInfo.Versioning, Equals, "")
  1787. err = client.DeleteBucket(bucketName)
  1788. c.Assert(err, IsNil)
  1789. }
  1790. func (s *OssClientSuite) TestBucketEncyptionPutObjectSuccess(c *C) {
  1791. client, err := New(endpoint, accessID, accessKey)
  1792. c.Assert(err, IsNil)
  1793. bucketName := bucketNamePrefix + randLowStr(5)
  1794. err = client.CreateBucket(bucketName)
  1795. c.Assert(err, IsNil)
  1796. // SetBucketEncryption:KMS ,""
  1797. encryptionRule := ServerEncryptionRule{}
  1798. encryptionRule.SSEDefault.SSEAlgorithm = string(KMSAlgorithm)
  1799. var responseHeader http.Header
  1800. err = client.SetBucketEncryption(bucketName, encryptionRule, GetResponseHeader(&responseHeader))
  1801. c.Assert(err, IsNil)
  1802. requestId := GetRequestId(responseHeader)
  1803. c.Assert(len(requestId) > 0, Equals, true)
  1804. // GetBucketEncryption
  1805. getResult, err := client.GetBucketEncryption(bucketName, GetResponseHeader(&responseHeader))
  1806. c.Assert(err, IsNil)
  1807. requestId = GetRequestId(responseHeader)
  1808. c.Assert(len(requestId) > 0, Equals, true)
  1809. // check encryption value
  1810. c.Assert(encryptionRule.SSEDefault.SSEAlgorithm, Equals, getResult.SSEDefault.SSEAlgorithm)
  1811. c.Assert(encryptionRule.SSEDefault.KMSMasterKeyID, Equals, getResult.SSEDefault.KMSMasterKeyID)
  1812. // Get default bucket info
  1813. bucketResult, err := client.GetBucketInfo(bucketName)
  1814. c.Assert(err, IsNil)
  1815. c.Assert(bucketResult.BucketInfo.SseRule.SSEAlgorithm, Equals, "KMS")
  1816. c.Assert(bucketResult.BucketInfo.SseRule.KMSMasterKeyID, Equals, "")
  1817. c.Assert(bucketResult.BucketInfo.Versioning, Equals, "")
  1818. // put and get object success
  1819. //bucket, err := client.Bucket(bucketName)
  1820. //c.Assert(err, IsNil)
  1821. // put object success
  1822. //objectName := objectNamePrefix + randStr(8)
  1823. //context := randStr(100)
  1824. //err = bucket.PutObject(objectName, strings.NewReader(context))
  1825. //c.Assert(err, IsNil)
  1826. // get object success
  1827. //body, err := bucket.GetObject(objectName)
  1828. //c.Assert(err, IsNil)
  1829. //str, err := readBody(body)
  1830. //c.Assert(err, IsNil)
  1831. //body.Close()
  1832. //c.Assert(str, Equals, context)
  1833. //bucket.DeleteObject(objectName)
  1834. err = client.DeleteBucket(bucketName)
  1835. c.Assert(err, IsNil)
  1836. }
  1837. func (s *OssClientSuite) TestBucketEncyptionPutObjectError(c *C) {
  1838. client, err := New(endpoint, accessID, accessKey)
  1839. c.Assert(err, IsNil)
  1840. bucketName := bucketNamePrefix + randLowStr(5)
  1841. err = client.CreateBucket(bucketName)
  1842. c.Assert(err, IsNil)
  1843. // SetBucketEncryption:KMS ,""
  1844. encryptionRule := ServerEncryptionRule{}
  1845. encryptionRule.SSEDefault.SSEAlgorithm = string(KMSAlgorithm)
  1846. encryptionRule.SSEDefault.KMSMasterKeyID = "123"
  1847. var responseHeader http.Header
  1848. err = client.SetBucketEncryption(bucketName, encryptionRule, GetResponseHeader(&responseHeader))
  1849. c.Assert(err, IsNil)
  1850. requestId := GetRequestId(responseHeader)
  1851. c.Assert(len(requestId) > 0, Equals, true)
  1852. // GetBucketEncryption
  1853. getResult, err := client.GetBucketEncryption(bucketName, GetResponseHeader(&responseHeader))
  1854. c.Assert(err, IsNil)
  1855. requestId = GetRequestId(responseHeader)
  1856. c.Assert(len(requestId) > 0, Equals, true)
  1857. // check encryption value
  1858. c.Assert(encryptionRule.SSEDefault.SSEAlgorithm, Equals, getResult.SSEDefault.SSEAlgorithm)
  1859. c.Assert(encryptionRule.SSEDefault.KMSMasterKeyID, Equals, getResult.SSEDefault.KMSMasterKeyID)
  1860. // Get default bucket info
  1861. bucketResult, err := client.GetBucketInfo(bucketName)
  1862. c.Assert(err, IsNil)
  1863. c.Assert(bucketResult.BucketInfo.SseRule.SSEAlgorithm, Equals, "KMS")
  1864. c.Assert(bucketResult.BucketInfo.SseRule.KMSMasterKeyID, Equals, "123")
  1865. c.Assert(bucketResult.BucketInfo.Versioning, Equals, "")
  1866. // put and get object failure
  1867. bucket, err := client.Bucket(bucketName)
  1868. c.Assert(err, IsNil)
  1869. // put object failure
  1870. objectName := objectNamePrefix + randStr(8)
  1871. context := randStr(100)
  1872. err = bucket.PutObject(objectName, strings.NewReader(context))
  1873. c.Assert(err, NotNil)
  1874. err = client.DeleteBucket(bucketName)
  1875. c.Assert(err, IsNil)
  1876. }
  1877. func (s *OssClientSuite) TestBucketTaggingOperation(c *C) {
  1878. client, err := New(endpoint, accessID, accessKey)
  1879. c.Assert(err, IsNil)
  1880. bucketName := bucketNamePrefix + randLowStr(5)
  1881. err = client.CreateBucket(bucketName)
  1882. c.Assert(err, IsNil)
  1883. var respHeader http.Header
  1884. // Bucket Tagging
  1885. var tagging Tagging
  1886. tagging.Tags = []Tag{Tag{Key: "testkey2", Value: "testvalue2"}}
  1887. err = client.SetBucketTagging(bucketName, tagging, GetResponseHeader(&respHeader))
  1888. c.Assert(err, IsNil)
  1889. c.Assert(GetRequestId(respHeader) != "", Equals, true)
  1890. getResult, err := client.GetBucketTagging(bucketName)
  1891. c.Assert(err, IsNil)
  1892. c.Assert(getResult.Tags[0].Key, Equals, tagging.Tags[0].Key)
  1893. c.Assert(getResult.Tags[0].Value, Equals, tagging.Tags[0].Value)
  1894. // delete BucketTagging
  1895. err = client.DeleteBucketTagging(bucketName, GetResponseHeader(&respHeader))
  1896. c.Assert(err, IsNil)
  1897. c.Assert(GetRequestId(respHeader) != "", Equals, true)
  1898. getResult, err = client.GetBucketTagging(bucketName, GetResponseHeader(&respHeader))
  1899. c.Assert(err, IsNil)
  1900. c.Assert(GetRequestId(respHeader) != "", Equals, true)
  1901. c.Assert(len(getResult.Tags), Equals, 0)
  1902. err = client.DeleteBucket(bucketName)
  1903. c.Assert(err, IsNil)
  1904. }
  1905. func (s *OssClientSuite) TestListBucketsTagging(c *C) {
  1906. client, err := New(endpoint, accessID, accessKey)
  1907. c.Assert(err, IsNil)
  1908. bucketName1 := bucketNamePrefix + randLowStr(5)
  1909. err = client.CreateBucket(bucketName1)
  1910. c.Assert(err, IsNil)
  1911. bucketName2 := bucketNamePrefix + randLowStr(5)
  1912. err = client.CreateBucket(bucketName2)
  1913. c.Assert(err, IsNil)
  1914. // Bucket Tagging
  1915. var tagging Tagging
  1916. tagging.Tags = []Tag{Tag{Key: "testkey", Value: "testvalue"}}
  1917. err = client.SetBucketTagging(bucketName1, tagging)
  1918. c.Assert(err, IsNil)
  1919. // list bucket
  1920. listResult, err := client.ListBuckets(TagKey("testkey"))
  1921. c.Assert(err, IsNil)
  1922. c.Assert(len(listResult.Buckets), Equals, 1)
  1923. c.Assert(listResult.Buckets[0].Name, Equals, bucketName1)
  1924. client.DeleteBucket(bucketName1)
  1925. client.DeleteBucket(bucketName2)
  1926. }
  1927. func (s *OssClientSuite) TestGetBucketStat(c *C) {
  1928. client, err := New(endpoint, accessID, accessKey)
  1929. c.Assert(err, IsNil)
  1930. bucketName := bucketNamePrefix + randLowStr(5)
  1931. err = client.CreateBucket(bucketName)
  1932. c.Assert(err, IsNil)
  1933. bucket, err := client.Bucket(bucketName)
  1934. c.Assert(err, IsNil)
  1935. // put object
  1936. objectName := objectNamePrefix + randLowStr(5)
  1937. err = bucket.PutObject(objectName, strings.NewReader(randStr(10)))
  1938. c.Assert(err, IsNil)
  1939. bucket.DeleteObject(objectName)
  1940. err = bucket.PutObject(objectName, strings.NewReader(randStr(10)))
  1941. c.Assert(err, IsNil)
  1942. bucket.DeleteObject(objectName)
  1943. _, err = client.GetBucketStat(bucketName)
  1944. c.Assert(err, IsNil)
  1945. client.DeleteBucket(bucketName)
  1946. }
  1947. func (s *OssBucketSuite) TestGetBucketVersioning(c *C) {
  1948. // create a bucket with default proprety
  1949. client, err := New(endpoint, accessID, accessKey)
  1950. c.Assert(err, IsNil)
  1951. bucketName := bucketNamePrefix + randLowStr(6)
  1952. var respHeader http.Header
  1953. err = client.CreateBucket(bucketName, GetResponseHeader(&respHeader))
  1954. c.Assert(err, IsNil)
  1955. c.Assert(GetRequestId(respHeader) != "", Equals, true)
  1956. // put bucket version:enabled
  1957. var versioningConfig VersioningConfig
  1958. versioningConfig.Status = string(VersionEnabled)
  1959. err = client.SetBucketVersioning(bucketName, versioningConfig)
  1960. c.Assert(err, IsNil)
  1961. // get bucket version success
  1962. versioningResult, err := client.GetBucketVersioning(bucketName, GetResponseHeader(&respHeader))
  1963. c.Assert(versioningResult.Status, Equals, "Enabled")
  1964. c.Assert(GetRequestId(respHeader) != "", Equals, true)
  1965. forceDeleteBucket(client, bucketName, c)
  1966. }
  1967. func (s *OssClientSuite) TestBucketPolicy(c *C){
  1968. client, err := New(endpoint, accessID, accessKey)
  1969. c.Assert(err, IsNil)
  1970. bucketName := bucketNamePrefix + randLowStr(5)
  1971. err = client.CreateBucket(bucketName)
  1972. c.Assert(err, IsNil)
  1973. var responseHeader http.Header
  1974. ret, err := client.GetBucketPolicy(bucketName, GetResponseHeader(&responseHeader))
  1975. c.Assert(err, NotNil)
  1976. requestId := GetRequestId(responseHeader)
  1977. c.Assert(len(requestId) > 0, Equals, true)
  1978. policyInfo := `
  1979. {
  1980. "Version":"1",
  1981. "Statement":[
  1982. {
  1983. "Action":[
  1984. "oss:GetObject",
  1985. "oss:PutObject"
  1986. ],
  1987. "Effect":"Deny",
  1988. "Principal":"[123456790]",
  1989. "Resource":["acs:oss:*:1234567890:*/*"]
  1990. }
  1991. ]
  1992. }`
  1993. err = client.SetBucketPolicy(bucketName, policyInfo, GetResponseHeader(&responseHeader))
  1994. c.Assert(err, IsNil)
  1995. requestId = GetRequestId(responseHeader)
  1996. c.Assert(len(requestId) > 0, Equals, true)
  1997. ret, err = client.GetBucketPolicy(bucketName, GetResponseHeader(&responseHeader))
  1998. c.Assert(err, IsNil)
  1999. testLogger.Println("policy:", ret)
  2000. c.Assert(ret, Equals, policyInfo)
  2001. requestId = GetRequestId(responseHeader)
  2002. c.Assert(len(requestId) > 0, Equals, true)
  2003. err = client.DeleteBucketPolicy(bucketName, GetResponseHeader(&responseHeader))
  2004. c.Assert(err, IsNil)
  2005. requestId = GetRequestId(responseHeader)
  2006. c.Assert(len(requestId) > 0, Equals, true)
  2007. client.DeleteBucket(bucketName)
  2008. }
  2009. func (s *OssClientSuite) TestBucketPolicyNegative(c *C) {
  2010. client, err := New(endpoint, accessID, accessKey)
  2011. c.Assert(err, IsNil)
  2012. bucketName := bucketNamePrefix + randLowStr(5)
  2013. err = client.CreateBucket(bucketName)
  2014. c.Assert(err, IsNil)
  2015. var responseHeader http.Header
  2016. _, err = client.GetBucketPolicy(bucketName, GetResponseHeader(&responseHeader))
  2017. c.Assert(err, NotNil)
  2018. requestId := GetRequestId(responseHeader)
  2019. c.Assert(len(requestId) > 0, Equals, true)
  2020. // Setting the Version is 2, this is error policy
  2021. errPolicy := `
  2022. {
  2023. "Version":"2",
  2024. "Statement":[
  2025. {
  2026. "Action":[
  2027. "oss:GetObject",
  2028. "oss:PutObject"
  2029. ],
  2030. "Effect":"Deny",
  2031. "Principal":"[123456790]",
  2032. "Resource":["acs:oss:*:1234567890:*/*"]
  2033. }
  2034. ]
  2035. }`
  2036. err = client.SetBucketPolicy(bucketName, errPolicy, GetResponseHeader(&responseHeader))
  2037. c.Assert(err, NotNil)
  2038. testLogger.Println("err:",err)
  2039. requestId = GetRequestId(responseHeader)
  2040. c.Assert(len(requestId) > 0, Equals, true)
  2041. err = client.DeleteBucketPolicy(bucketName, GetResponseHeader(&responseHeader))
  2042. c.Assert(err, IsNil)
  2043. bucketNameEmpty := bucketNamePrefix + randLowStr(5)
  2044. client.DeleteBucket(bucketNameEmpty)
  2045. err = client.DeleteBucketPolicy(bucketNameEmpty, GetResponseHeader(&responseHeader))
  2046. c.Assert(err, NotNil)
  2047. requestId = GetRequestId(responseHeader)
  2048. c.Assert(len(requestId) > 0, Equals, true)
  2049. client.DeleteBucket(bucketName)
  2050. }
  2051. func (s *OssClientSuite) TestSetBucketRequestPayment(c *C) {
  2052. client, err := New(endpoint, accessID, accessKey)
  2053. c.Assert(err, IsNil)
  2054. bucketName := bucketNamePrefix + randLowStr(5)
  2055. err = client.CreateBucket(bucketName)
  2056. c.Assert(err, IsNil)
  2057. reqPayConf := RequestPaymentConfiguration{
  2058. Payer:"Requester",
  2059. }
  2060. err = client.SetBucketRequestPayment(bucketName, reqPayConf)
  2061. c.Assert(err, IsNil)
  2062. ret, err := client.GetBucketRequestPayment(bucketName)
  2063. c.Assert(err, IsNil)
  2064. c.Assert(ret.Payer, Equals, "Requester")
  2065. client.DeleteBucket(bucketName)
  2066. c.Assert(err, IsNil)
  2067. }
  2068. func (s *OssClientSuite) TestSetBucketRequestPaymentNegative(c *C) {
  2069. client, err := New(endpoint, accessID, accessKey)
  2070. c.Assert(err, IsNil)
  2071. bucketName := bucketNamePrefix + randLowStr(5)
  2072. err = client.CreateBucket(bucketName)
  2073. c.Assert(err, IsNil)
  2074. reqPayConf := RequestPaymentConfiguration{
  2075. Payer:"Requesterttttt", // this is a error configuration
  2076. }
  2077. err = client.SetBucketRequestPayment(bucketName, reqPayConf)
  2078. c.Assert(err, NotNil)
  2079. ret, err := client.GetBucketRequestPayment(bucketName)
  2080. c.Assert(err, IsNil)
  2081. c.Assert(ret.Payer, Equals, "BucketOwner")
  2082. client.DeleteBucket(bucketName)
  2083. c.Assert(err, IsNil)
  2084. }