client_test.go 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644
  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. "strings"
  13. "testing"
  14. "time"
  15. . "gopkg.in/check.v1"
  16. )
  17. // Test hooks up gocheck into the "go test" runner.
  18. func Test(t *testing.T) {
  19. TestingT(t)
  20. }
  21. type OssClientSuite struct{}
  22. var _ = Suite(&OssClientSuite{})
  23. var (
  24. // Endpoint/ID/Key
  25. endpoint = os.Getenv("OSS_TEST_ENDPOINT")
  26. accessID = os.Getenv("OSS_TEST_ACCESS_KEY_ID")
  27. accessKey = os.Getenv("OSS_TEST_ACCESS_KEY_SECRET")
  28. // Proxy
  29. proxyHost = os.Getenv("OSS_TEST_PROXY_HOST")
  30. proxyUser = os.Getenv("OSS_TEST_PROXY_USER")
  31. proxyPasswd = os.Getenv("OSS_TEST_PROXY_PASSWORD")
  32. // STS
  33. stsaccessID = os.Getenv("OSS_TEST_STS_ID")
  34. stsaccessKey = os.Getenv("OSS_TEST_STS_KEY")
  35. stsARN = os.Getenv("OSS_TEST_STS_ARN")
  36. )
  37. var (
  38. // prefix of bucket name for bucket ops test
  39. bucketNamePrefix = "go-sdk-test-bucket-"
  40. // bucket name for object ops test
  41. bucketName = bucketNamePrefix + randLowStr(6)
  42. archiveBucketName = bucketNamePrefix + "arch-" + randLowStr(6)
  43. // object name for object ops test
  44. objectNamePrefix = "go-sdk-test-object-"
  45. // sts region is one and only hangzhou
  46. stsRegion = "cn-hangzhou"
  47. )
  48. var (
  49. logPath = "go_sdk_test_" + time.Now().Format("20060102_150405") + ".log"
  50. testLogFile, _ = os.OpenFile(logPath, os.O_RDWR|os.O_CREATE, 0664)
  51. testLogger = log.New(testLogFile, "", log.Ldate|log.Ltime|log.Lshortfile)
  52. letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
  53. timeoutInOperation = 3 * time.Second
  54. )
  55. //var randMarker = rand.New(rand.NewSource(time.Now().UnixNano()))
  56. func randStr(n int) string {
  57. b := make([]rune, n)
  58. randMarker := rand.New(rand.NewSource(time.Now().UnixNano()))
  59. for i := range b {
  60. b[i] = letters[randMarker.Intn(len(letters))]
  61. }
  62. return string(b)
  63. }
  64. func createFile(fileName, content string, c *C) {
  65. fout, err := os.Create(fileName)
  66. defer fout.Close()
  67. c.Assert(err, IsNil)
  68. _, err = fout.WriteString(content)
  69. c.Assert(err, IsNil)
  70. }
  71. func randLowStr(n int) string {
  72. return strings.ToLower(randStr(n))
  73. }
  74. // SetUpSuite runs once when the suite starts running
  75. func (s *OssClientSuite) SetUpSuite(c *C) {
  76. client, err := New(endpoint, accessID, accessKey)
  77. c.Assert(err, IsNil)
  78. lbr, err := client.ListBuckets(Prefix(bucketNamePrefix), MaxKeys(1000))
  79. c.Assert(err, IsNil)
  80. for _, bucket := range lbr.Buckets {
  81. s.deleteBucket(client, bucket.Name, c)
  82. }
  83. testLogger.Println("test client started")
  84. }
  85. // TearDownSuite runs before each test or benchmark starts running
  86. func (s *OssClientSuite) TearDownSuite(c *C) {
  87. client, err := New(endpoint, accessID, accessKey)
  88. c.Assert(err, IsNil)
  89. lbr, err := client.ListBuckets(Prefix(bucketNamePrefix), MaxKeys(1000))
  90. c.Assert(err, IsNil)
  91. for _, bucket := range lbr.Buckets {
  92. s.deleteBucket(client, bucket.Name, c)
  93. }
  94. testLogger.Println("test client completed")
  95. }
  96. func (s *OssClientSuite) deleteBucket(client *Client, bucketName string, c *C) {
  97. bucket, err := client.Bucket(bucketName)
  98. c.Assert(err, IsNil)
  99. // Delete Object
  100. marker := Marker("")
  101. for {
  102. lor, err := bucket.ListObjects(marker)
  103. c.Assert(err, IsNil)
  104. for _, object := range lor.Objects {
  105. err = bucket.DeleteObject(object.Key)
  106. c.Assert(err, IsNil)
  107. }
  108. marker = Marker(lor.NextMarker)
  109. if !lor.IsTruncated {
  110. break
  111. }
  112. }
  113. // Delete Part
  114. keyMarker := KeyMarker("")
  115. uploadIDMarker := UploadIDMarker("")
  116. for {
  117. lmur, err := bucket.ListMultipartUploads(keyMarker, uploadIDMarker)
  118. c.Assert(err, IsNil)
  119. for _, upload := range lmur.Uploads {
  120. var imur = InitiateMultipartUploadResult{Bucket: bucketName,
  121. Key: upload.Key, UploadID: upload.UploadID}
  122. err = bucket.AbortMultipartUpload(imur)
  123. c.Assert(err, IsNil)
  124. }
  125. keyMarker = KeyMarker(lmur.NextKeyMarker)
  126. uploadIDMarker = UploadIDMarker(lmur.NextUploadIDMarker)
  127. if !lmur.IsTruncated {
  128. break
  129. }
  130. }
  131. // Delete Bucket
  132. err = client.DeleteBucket(bucketName)
  133. c.Assert(err, IsNil)
  134. }
  135. // SetUpTest runs after each test or benchmark runs
  136. func (s *OssClientSuite) SetUpTest(c *C) {
  137. }
  138. // TearDownTest runs once after all tests or benchmarks have finished running
  139. func (s *OssClientSuite) TearDownTest(c *C) {
  140. }
  141. // TestCreateBucket
  142. func (s *OssClientSuite) TestCreateBucket(c *C) {
  143. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  144. client, err := New(endpoint, accessID, accessKey)
  145. c.Assert(err, IsNil)
  146. // Create
  147. client.DeleteBucket(bucketNameTest)
  148. err = client.CreateBucket(bucketNameTest)
  149. c.Assert(err, IsNil)
  150. //sleep 5 seconds after create bucket
  151. time.Sleep(timeoutInOperation)
  152. // verify bucket is exist
  153. found, err := client.IsBucketExist(bucketNameTest)
  154. c.Assert(err, IsNil)
  155. c.Assert(found, Equals, true)
  156. res, err := client.GetBucketACL(bucketNameTest)
  157. c.Assert(err, IsNil)
  158. c.Assert(res.ACL, Equals, string(ACLPrivate))
  159. err = client.DeleteBucket(bucketNameTest)
  160. c.Assert(err, IsNil)
  161. time.Sleep(timeoutInOperation)
  162. // CreateBucket creates with ACLPublicRead
  163. err = client.CreateBucket(bucketNameTest, ACL(ACLPublicRead))
  164. c.Assert(err, IsNil)
  165. time.Sleep(timeoutInOperation)
  166. res, err = client.GetBucketACL(bucketNameTest)
  167. c.Assert(err, IsNil)
  168. c.Assert(res.ACL, Equals, string(ACLPublicRead))
  169. err = client.DeleteBucket(bucketNameTest)
  170. c.Assert(err, IsNil)
  171. time.Sleep(timeoutInOperation)
  172. // ACLPublicReadWrite
  173. err = client.CreateBucket(bucketNameTest, ACL(ACLPublicReadWrite))
  174. c.Assert(err, IsNil)
  175. time.Sleep(timeoutInOperation)
  176. res, err = client.GetBucketACL(bucketNameTest)
  177. c.Assert(err, IsNil)
  178. c.Assert(res.ACL, Equals, string(ACLPublicReadWrite))
  179. err = client.DeleteBucket(bucketNameTest)
  180. c.Assert(err, IsNil)
  181. time.Sleep(timeoutInOperation)
  182. // ACLPrivate
  183. err = client.CreateBucket(bucketNameTest, ACL(ACLPrivate))
  184. c.Assert(err, IsNil)
  185. time.Sleep(timeoutInOperation)
  186. res, err = client.GetBucketACL(bucketNameTest)
  187. c.Assert(err, IsNil)
  188. c.Assert(res.ACL, Equals, string(ACLPrivate))
  189. // Delete
  190. err = client.DeleteBucket(bucketNameTest)
  191. c.Assert(err, IsNil)
  192. // Create bucket with configuration and test GetBucketInfo
  193. for _, storage := range []StorageClassType{StorageStandard, StorageIA, StorageArchive} {
  194. bucketNameTest := bucketNamePrefix + randLowStr(6)
  195. err = client.CreateBucket(bucketNameTest, StorageClass(storage), ACL(ACLPublicRead))
  196. c.Assert(err, IsNil)
  197. time.Sleep(timeoutInOperation)
  198. res, err := client.GetBucketInfo(bucketNameTest)
  199. c.Assert(err, IsNil)
  200. c.Assert(res.BucketInfo.Name, Equals, bucketNameTest)
  201. c.Assert(res.BucketInfo.StorageClass, Equals, string(storage))
  202. c.Assert(res.BucketInfo.ACL, Equals, string(ACLPublicRead))
  203. // Delete
  204. err = client.DeleteBucket(bucketNameTest)
  205. c.Assert(err, IsNil)
  206. }
  207. // Error put bucket with configuration
  208. err = client.CreateBucket("ERRORBUCKETNAME", StorageClass(StorageArchive))
  209. c.Assert(err, NotNil)
  210. // Create bucket with configuration and test ListBuckets
  211. for _, storage := range []StorageClassType{StorageStandard, StorageIA, StorageArchive} {
  212. bucketNameTest := bucketNamePrefix + randLowStr(6)
  213. err = client.CreateBucket(bucketNameTest, StorageClass(storage))
  214. c.Assert(err, IsNil)
  215. time.Sleep(timeoutInOperation)
  216. res, err := client.GetBucketInfo(bucketNameTest)
  217. c.Assert(err, IsNil)
  218. c.Assert(res.BucketInfo.Name, Equals, bucketNameTest)
  219. c.Assert(res.BucketInfo.StorageClass, Equals, string(storage))
  220. // Delete
  221. err = client.DeleteBucket(bucketNameTest)
  222. c.Assert(err, IsNil)
  223. }
  224. }
  225. // TestCreateBucketNegative
  226. func (s *OssClientSuite) TestCreateBucketNegative(c *C) {
  227. client, err := New(endpoint, accessID, accessKey)
  228. c.Assert(err, IsNil)
  229. // Bucket name invalid
  230. err = client.CreateBucket("xx")
  231. c.Assert(err, NotNil)
  232. err = client.CreateBucket("XXXX")
  233. c.Assert(err, NotNil)
  234. testLogger.Println(err)
  235. err = client.CreateBucket("_bucket")
  236. c.Assert(err, NotNil)
  237. testLogger.Println(err)
  238. // ACL invalid
  239. err = client.CreateBucket(bucketNamePrefix+randLowStr(6), ACL("InvaldAcl"))
  240. c.Assert(err, NotNil)
  241. testLogger.Println(err)
  242. }
  243. // TestDeleteBucket
  244. func (s *OssClientSuite) TestDeleteBucket(c *C) {
  245. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  246. client, err := New(endpoint, accessID, accessKey)
  247. c.Assert(err, IsNil)
  248. // Create
  249. err = client.CreateBucket(bucketNameTest)
  250. c.Assert(err, IsNil)
  251. time.Sleep(timeoutInOperation)
  252. // Check
  253. found, err := client.IsBucketExist(bucketNameTest)
  254. c.Assert(err, IsNil)
  255. c.Assert(found, Equals, true)
  256. // Delete
  257. err = client.DeleteBucket(bucketNameTest)
  258. c.Assert(err, IsNil)
  259. time.Sleep(timeoutInOperation)
  260. // Check
  261. found, err = client.IsBucketExist(bucketNameTest)
  262. c.Assert(err, IsNil)
  263. c.Assert(found, Equals, false)
  264. err = client.DeleteBucket(bucketNameTest)
  265. c.Assert(err, NotNil)
  266. }
  267. // TestDeleteBucketNegative
  268. func (s *OssClientSuite) TestDeleteBucketNegative(c *C) {
  269. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  270. client, err := New(endpoint, accessID, accessKey)
  271. c.Assert(err, IsNil)
  272. // Bucket name invalid
  273. err = client.DeleteBucket("xx")
  274. c.Assert(err, NotNil)
  275. err = client.DeleteBucket("XXXX")
  276. c.Assert(err, NotNil)
  277. err = client.DeleteBucket("_bucket")
  278. c.Assert(err, NotNil)
  279. // Delete no exist bucket
  280. err = client.DeleteBucket("notexist")
  281. c.Assert(err, NotNil)
  282. // No permission to delete, this ak/sk for js sdk
  283. err = client.CreateBucket(bucketNameTest)
  284. c.Assert(err, IsNil)
  285. accessID := "<accessKeyId>"
  286. accessKey := "<accessKeySecret>"
  287. clientOtherUser, err := New(endpoint, accessID, accessKey)
  288. c.Assert(err, IsNil)
  289. err = clientOtherUser.DeleteBucket(bucketNameTest)
  290. c.Assert(err, NotNil)
  291. err = client.DeleteBucket(bucketNameTest)
  292. c.Assert(err, IsNil)
  293. }
  294. // TestListBucket
  295. func (s *OssClientSuite) TestListBucket(c *C) {
  296. var prefix = bucketNamePrefix + randLowStr(6)
  297. var bucketNameLbOne = prefix + "tlb1"
  298. var bucketNameLbTwo = prefix + "tlb2"
  299. var bucketNameLbThree = prefix + "tlb3"
  300. client, err := New(endpoint, accessID, accessKey)
  301. c.Assert(err, IsNil)
  302. // CreateBucket
  303. err = client.CreateBucket(bucketNameLbOne)
  304. c.Assert(err, IsNil)
  305. err = client.CreateBucket(bucketNameLbTwo)
  306. c.Assert(err, IsNil)
  307. err = client.CreateBucket(bucketNameLbThree)
  308. c.Assert(err, IsNil)
  309. // ListBuckets, specified prefix
  310. lbr, err := client.ListBuckets(Prefix(prefix), MaxKeys(2))
  311. c.Assert(err, IsNil)
  312. c.Assert(len(lbr.Buckets), Equals, 2)
  313. // ListBuckets, specified max keys
  314. lbr, err = client.ListBuckets(MaxKeys(2))
  315. c.Assert(err, IsNil)
  316. c.Assert(len(lbr.Buckets), Equals, 2)
  317. // ListBuckets, specified max keys
  318. lbr, err = client.ListBuckets(Marker(bucketNameLbOne), MaxKeys(1))
  319. c.Assert(err, IsNil)
  320. c.Assert(len(lbr.Buckets), Equals, 1)
  321. // ListBuckets, specified max keys
  322. lbr, err = client.ListBuckets(Marker(bucketNameLbOne))
  323. c.Assert(err, IsNil)
  324. c.Assert(len(lbr.Buckets) >= 2, Equals, true)
  325. // DeleteBucket
  326. err = client.DeleteBucket(bucketNameLbOne)
  327. c.Assert(err, IsNil)
  328. err = client.DeleteBucket(bucketNameLbTwo)
  329. c.Assert(err, IsNil)
  330. err = client.DeleteBucket(bucketNameLbThree)
  331. c.Assert(err, IsNil)
  332. }
  333. // TestListBucket
  334. func (s *OssClientSuite) TestIsBucketExist(c *C) {
  335. var prefix = bucketNamePrefix + randLowStr(6)
  336. var bucketNameLbOne = prefix + "tibe1"
  337. var bucketNameLbTwo = prefix + "tibe11"
  338. var bucketNameLbThree = prefix + "tibe111"
  339. client, err := New(endpoint, accessID, accessKey)
  340. c.Assert(err, IsNil)
  341. // CreateBucket
  342. err = client.CreateBucket(bucketNameLbOne)
  343. c.Assert(err, IsNil)
  344. err = client.CreateBucket(bucketNameLbTwo)
  345. c.Assert(err, IsNil)
  346. err = client.CreateBucket(bucketNameLbThree)
  347. c.Assert(err, IsNil)
  348. // Exist
  349. exist, err := client.IsBucketExist(bucketNameLbTwo)
  350. c.Assert(err, IsNil)
  351. c.Assert(exist, Equals, true)
  352. exist, err = client.IsBucketExist(bucketNameLbThree)
  353. c.Assert(err, IsNil)
  354. c.Assert(exist, Equals, true)
  355. exist, err = client.IsBucketExist(bucketNameLbOne)
  356. c.Assert(err, IsNil)
  357. c.Assert(exist, Equals, true)
  358. // Not exist
  359. exist, err = client.IsBucketExist(prefix + "tibe")
  360. c.Assert(err, IsNil)
  361. c.Assert(exist, Equals, false)
  362. exist, err = client.IsBucketExist(prefix + "tibe1111")
  363. c.Assert(err, IsNil)
  364. c.Assert(exist, Equals, false)
  365. // Negative
  366. exist, err = client.IsBucketExist("BucketNameInvalid")
  367. c.Assert(err, NotNil)
  368. // DeleteBucket
  369. err = client.DeleteBucket(bucketNameLbOne)
  370. c.Assert(err, IsNil)
  371. err = client.DeleteBucket(bucketNameLbTwo)
  372. c.Assert(err, IsNil)
  373. err = client.DeleteBucket(bucketNameLbThree)
  374. c.Assert(err, IsNil)
  375. }
  376. // TestSetBucketAcl
  377. func (s *OssClientSuite) TestSetBucketAcl(c *C) {
  378. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  379. client, err := New(endpoint, accessID, accessKey)
  380. c.Assert(err, IsNil)
  381. // Private
  382. err = client.CreateBucket(bucketNameTest)
  383. c.Assert(err, IsNil)
  384. res, err := client.GetBucketACL(bucketNameTest)
  385. c.Assert(err, IsNil)
  386. c.Assert(res.ACL, Equals, string(ACLPrivate))
  387. // Set ACL_PUBLIC_R
  388. err = client.SetBucketACL(bucketNameTest, ACLPublicRead)
  389. c.Assert(err, IsNil)
  390. time.Sleep(timeoutInOperation)
  391. res, err = client.GetBucketACL(bucketNameTest)
  392. c.Assert(err, IsNil)
  393. c.Assert(res.ACL, Equals, string(ACLPublicRead))
  394. // Set ACL_PUBLIC_RW
  395. err = client.SetBucketACL(bucketNameTest, ACLPublicReadWrite)
  396. c.Assert(err, IsNil)
  397. time.Sleep(timeoutInOperation)
  398. res, err = client.GetBucketACL(bucketNameTest)
  399. c.Assert(err, IsNil)
  400. c.Assert(res.ACL, Equals, string(ACLPublicReadWrite))
  401. // Set ACL_PUBLIC_RW
  402. err = client.SetBucketACL(bucketNameTest, ACLPrivate)
  403. c.Assert(err, IsNil)
  404. err = client.SetBucketACL(bucketNameTest, ACLPrivate)
  405. c.Assert(err, IsNil)
  406. time.Sleep(timeoutInOperation)
  407. res, err = client.GetBucketACL(bucketNameTest)
  408. c.Assert(err, IsNil)
  409. c.Assert(res.ACL, Equals, string(ACLPrivate))
  410. err = client.DeleteBucket(bucketNameTest)
  411. c.Assert(err, IsNil)
  412. }
  413. // TestSetBucketAclNegative
  414. func (s *OssClientSuite) TestBucketAclNegative(c *C) {
  415. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  416. client, err := New(endpoint, accessID, accessKey)
  417. c.Assert(err, IsNil)
  418. err = client.CreateBucket(bucketNameTest)
  419. c.Assert(err, IsNil)
  420. err = client.SetBucketACL(bucketNameTest, "InvalidACL")
  421. c.Assert(err, NotNil)
  422. testLogger.Println(err)
  423. err = client.DeleteBucket(bucketNameTest)
  424. c.Assert(err, IsNil)
  425. }
  426. // TestGetBucketAcl
  427. func (s *OssClientSuite) TestGetBucketAcl(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. time.Sleep(timeoutInOperation)
  435. res, err := client.GetBucketACL(bucketNameTest)
  436. c.Assert(err, IsNil)
  437. c.Assert(res.ACL, Equals, string(ACLPrivate))
  438. err = client.DeleteBucket(bucketNameTest)
  439. c.Assert(err, IsNil)
  440. time.Sleep(timeoutInOperation)
  441. // PublicRead
  442. err = client.CreateBucket(bucketNameTest, ACL(ACLPublicRead))
  443. c.Assert(err, IsNil)
  444. time.Sleep(timeoutInOperation)
  445. res, err = client.GetBucketACL(bucketNameTest)
  446. c.Assert(err, IsNil)
  447. c.Assert(res.ACL, Equals, string(ACLPublicRead))
  448. err = client.DeleteBucket(bucketNameTest)
  449. c.Assert(err, IsNil)
  450. time.Sleep(timeoutInOperation)
  451. // PublicReadWrite
  452. err = client.CreateBucket(bucketNameTest, ACL(ACLPublicReadWrite))
  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(ACLPublicReadWrite))
  458. err = client.DeleteBucket(bucketNameTest)
  459. c.Assert(err, IsNil)
  460. }
  461. // TestGetBucketAcl
  462. func (s *OssClientSuite) TestGetBucketLocation(c *C) {
  463. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  464. client, err := New(endpoint, accessID, accessKey)
  465. c.Assert(err, IsNil)
  466. // Private
  467. err = client.CreateBucket(bucketNameTest)
  468. c.Assert(err, IsNil)
  469. loc, err := client.GetBucketLocation(bucketNameTest)
  470. c.Assert(strings.HasPrefix(loc, "oss-"), Equals, true)
  471. err = client.DeleteBucket(bucketNameTest)
  472. c.Assert(err, IsNil)
  473. }
  474. // TestGetBucketLocationNegative
  475. func (s *OssClientSuite) TestGetBucketLocationNegative(c *C) {
  476. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  477. client, err := New(endpoint, accessID, accessKey)
  478. c.Assert(err, IsNil)
  479. // Not exist
  480. _, err = client.GetBucketLocation(bucketNameTest)
  481. c.Assert(err, NotNil)
  482. // Not exist
  483. _, err = client.GetBucketLocation("InvalidBucketName_")
  484. c.Assert(err, NotNil)
  485. }
  486. // TestSetBucketLifecycle
  487. func (s *OssClientSuite) TestSetBucketLifecycle(c *C) {
  488. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  489. var rule1 = BuildLifecycleRuleByDate("idone", "one", true, 2015, 11, 11)
  490. var rule2 = BuildLifecycleRuleByDays("idtwo", "two", true, 3)
  491. client, err := New(endpoint, accessID, accessKey)
  492. c.Assert(err, IsNil)
  493. err = client.CreateBucket(bucketNameTest)
  494. c.Assert(err, IsNil)
  495. time.Sleep(timeoutInOperation)
  496. // Set single rule
  497. var rules = []LifecycleRule{rule1}
  498. err = client.SetBucketLifecycle(bucketNameTest, rules)
  499. c.Assert(err, IsNil)
  500. // Double set rule
  501. err = client.SetBucketLifecycle(bucketNameTest, rules)
  502. c.Assert(err, IsNil)
  503. res, err := client.GetBucketLifecycle(bucketNameTest)
  504. c.Assert(err, IsNil)
  505. c.Assert(len(res.Rules), Equals, 1)
  506. c.Assert(res.Rules[0].ID, Equals, "idone")
  507. err = client.DeleteBucketLifecycle(bucketNameTest)
  508. c.Assert(err, IsNil)
  509. // Set two rules
  510. rules = []LifecycleRule{rule1, rule2}
  511. err = client.SetBucketLifecycle(bucketNameTest, rules)
  512. c.Assert(err, IsNil)
  513. // Eliminate effect of cache
  514. time.Sleep(timeoutInOperation)
  515. res, err = client.GetBucketLifecycle(bucketNameTest)
  516. c.Assert(err, IsNil)
  517. c.Assert(len(res.Rules), Equals, 2)
  518. c.Assert(res.Rules[0].ID, Equals, "idone")
  519. c.Assert(res.Rules[1].ID, Equals, "idtwo")
  520. err = client.DeleteBucket(bucketNameTest)
  521. c.Assert(err, IsNil)
  522. }
  523. // TestDeleteBucketLifecycle
  524. func (s *OssClientSuite) TestDeleteBucketLifecycle(c *C) {
  525. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  526. var rule1 = BuildLifecycleRuleByDate("idone", "one", true, 2015, 11, 11)
  527. var rule2 = BuildLifecycleRuleByDays("idtwo", "two", true, 3)
  528. var rules = []LifecycleRule{rule1, rule2}
  529. client, err := New(endpoint, accessID, accessKey)
  530. c.Assert(err, IsNil)
  531. err = client.CreateBucket(bucketNameTest)
  532. c.Assert(err, IsNil)
  533. time.Sleep(timeoutInOperation)
  534. err = client.DeleteBucketLifecycle(bucketNameTest)
  535. c.Assert(err, IsNil)
  536. err = client.SetBucketLifecycle(bucketNameTest, rules)
  537. c.Assert(err, IsNil)
  538. time.Sleep(timeoutInOperation)
  539. res, err := client.GetBucketLifecycle(bucketNameTest)
  540. c.Assert(err, IsNil)
  541. c.Assert(len(res.Rules), Equals, 2)
  542. // Delete
  543. err = client.DeleteBucketLifecycle(bucketNameTest)
  544. c.Assert(err, IsNil)
  545. time.Sleep(timeoutInOperation)
  546. res, err = client.GetBucketLifecycle(bucketNameTest)
  547. c.Assert(err, NotNil)
  548. // Eliminate effect of cache
  549. time.Sleep(timeoutInOperation)
  550. // Delete when not set
  551. err = client.DeleteBucketLifecycle(bucketNameTest)
  552. c.Assert(err, IsNil)
  553. err = client.DeleteBucket(bucketNameTest)
  554. c.Assert(err, IsNil)
  555. }
  556. // TestSetBucketLifecycleNegative
  557. func (s *OssClientSuite) TestBucketLifecycleNegative(c *C) {
  558. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  559. var rules = []LifecycleRule{}
  560. client, err := New(endpoint, accessID, accessKey)
  561. c.Assert(err, IsNil)
  562. err = client.CreateBucket(bucketNameTest)
  563. c.Assert(err, IsNil)
  564. // Set with no rule
  565. err = client.SetBucketLifecycle(bucketNameTest, rules)
  566. c.Assert(err, NotNil)
  567. err = client.DeleteBucket(bucketNameTest)
  568. c.Assert(err, IsNil)
  569. // Not exist
  570. err = client.SetBucketLifecycle(bucketNameTest, rules)
  571. c.Assert(err, NotNil)
  572. // Not exist
  573. _, err = client.GetBucketLifecycle(bucketNameTest)
  574. c.Assert(err, NotNil)
  575. // Not exist
  576. err = client.DeleteBucketLifecycle(bucketNameTest)
  577. c.Assert(err, NotNil)
  578. }
  579. // TestSetBucketReferer
  580. func (s *OssClientSuite) TestSetBucketReferer(c *C) {
  581. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  582. var referers = []string{"http://www.aliyun.com", "https://www.aliyun.com"}
  583. client, err := New(endpoint, accessID, accessKey)
  584. c.Assert(err, IsNil)
  585. err = client.CreateBucket(bucketNameTest)
  586. c.Assert(err, IsNil)
  587. time.Sleep(timeoutInOperation)
  588. res, err := client.GetBucketReferer(bucketNameTest)
  589. c.Assert(res.AllowEmptyReferer, Equals, true)
  590. c.Assert(len(res.RefererList), Equals, 0)
  591. // Set referers
  592. err = client.SetBucketReferer(bucketNameTest, referers, false)
  593. c.Assert(err, IsNil)
  594. time.Sleep(timeoutInOperation)
  595. res, err = client.GetBucketReferer(bucketNameTest)
  596. c.Assert(res.AllowEmptyReferer, Equals, false)
  597. c.Assert(len(res.RefererList), Equals, 2)
  598. c.Assert(res.RefererList[0], Equals, "http://www.aliyun.com")
  599. c.Assert(res.RefererList[1], Equals, "https://www.aliyun.com")
  600. // Reset referer, referers empty
  601. referers = []string{""}
  602. err = client.SetBucketReferer(bucketNameTest, referers, true)
  603. c.Assert(err, IsNil)
  604. referers = []string{}
  605. err = client.SetBucketReferer(bucketNameTest, referers, true)
  606. c.Assert(err, IsNil)
  607. res, err = client.GetBucketReferer(bucketNameTest)
  608. c.Assert(res.AllowEmptyReferer, Equals, true)
  609. c.Assert(len(res.RefererList), Equals, 0)
  610. err = client.DeleteBucket(bucketNameTest)
  611. c.Assert(err, IsNil)
  612. }
  613. // TestSetBucketRefererNegative
  614. func (s *OssClientSuite) TestBucketRefererNegative(c *C) {
  615. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  616. var referers = []string{""}
  617. client, err := New(endpoint, accessID, accessKey)
  618. c.Assert(err, IsNil)
  619. // Not exist
  620. _, err = client.GetBucketReferer(bucketNameTest)
  621. c.Assert(err, NotNil)
  622. testLogger.Println(err)
  623. // Not exist
  624. err = client.SetBucketReferer(bucketNameTest, referers, true)
  625. c.Assert(err, NotNil)
  626. testLogger.Println(err)
  627. }
  628. // TestSetBucketLogging
  629. func (s *OssClientSuite) TestSetBucketLogging(c *C) {
  630. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  631. var bucketNameTarget = bucketNamePrefix + randLowStr(6)
  632. client, err := New(endpoint, accessID, accessKey)
  633. c.Assert(err, IsNil)
  634. err = client.CreateBucket(bucketNameTest)
  635. c.Assert(err, IsNil)
  636. err = client.CreateBucket(bucketNameTarget)
  637. c.Assert(err, IsNil)
  638. time.Sleep(timeoutInOperation)
  639. // Set logging
  640. err = client.SetBucketLogging(bucketNameTest, bucketNameTarget, "prefix", true)
  641. c.Assert(err, IsNil)
  642. // Reset
  643. err = client.SetBucketLogging(bucketNameTest, bucketNameTarget, "prefix", false)
  644. c.Assert(err, IsNil)
  645. time.Sleep(timeoutInOperation)
  646. res, err := client.GetBucketLogging(bucketNameTest)
  647. c.Assert(err, IsNil)
  648. c.Assert(res.LoggingEnabled.TargetBucket, Equals, "")
  649. c.Assert(res.LoggingEnabled.TargetPrefix, Equals, "")
  650. err = client.DeleteBucketLogging(bucketNameTest)
  651. c.Assert(err, IsNil)
  652. // Set to self
  653. err = client.SetBucketLogging(bucketNameTest, bucketNameTest, "prefix", true)
  654. c.Assert(err, IsNil)
  655. err = client.DeleteBucket(bucketNameTest)
  656. c.Assert(err, IsNil)
  657. err = client.DeleteBucket(bucketNameTarget)
  658. c.Assert(err, IsNil)
  659. }
  660. // TestDeleteBucketLogging
  661. func (s *OssClientSuite) TestDeleteBucketLogging(c *C) {
  662. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  663. var bucketNameTarget = bucketNamePrefix + randLowStr(6)
  664. client, err := New(endpoint, accessID, accessKey)
  665. c.Assert(err, IsNil)
  666. err = client.CreateBucket(bucketNameTest)
  667. c.Assert(err, IsNil)
  668. err = client.CreateBucket(bucketNameTarget)
  669. c.Assert(err, IsNil)
  670. time.Sleep(timeoutInOperation)
  671. // Get when not set
  672. res, err := client.GetBucketLogging(bucketNameTest)
  673. c.Assert(err, IsNil)
  674. c.Assert(res.LoggingEnabled.TargetBucket, Equals, "")
  675. c.Assert(res.LoggingEnabled.TargetPrefix, Equals, "")
  676. // Set
  677. err = client.SetBucketLogging(bucketNameTest, bucketNameTarget, "prefix", true)
  678. c.Assert(err, IsNil)
  679. // Get
  680. time.Sleep(timeoutInOperation)
  681. res, err = client.GetBucketLogging(bucketNameTest)
  682. c.Assert(err, IsNil)
  683. c.Assert(res.LoggingEnabled.TargetBucket, Equals, bucketNameTarget)
  684. c.Assert(res.LoggingEnabled.TargetPrefix, Equals, "prefix")
  685. // Set
  686. err = client.SetBucketLogging(bucketNameTest, bucketNameTarget, "prefix", false)
  687. c.Assert(err, IsNil)
  688. // Get
  689. time.Sleep(timeoutInOperation)
  690. res, err = client.GetBucketLogging(bucketNameTest)
  691. c.Assert(err, IsNil)
  692. c.Assert(res.LoggingEnabled.TargetBucket, Equals, "")
  693. c.Assert(res.LoggingEnabled.TargetPrefix, Equals, "")
  694. // Delete
  695. err = client.DeleteBucketLogging(bucketNameTest)
  696. c.Assert(err, IsNil)
  697. // Get after delete
  698. time.Sleep(timeoutInOperation)
  699. res, err = client.GetBucketLogging(bucketNameTest)
  700. c.Assert(err, IsNil)
  701. c.Assert(res.LoggingEnabled.TargetBucket, Equals, "")
  702. c.Assert(res.LoggingEnabled.TargetPrefix, Equals, "")
  703. err = client.DeleteBucket(bucketNameTest)
  704. c.Assert(err, IsNil)
  705. err = client.DeleteBucket(bucketNameTarget)
  706. c.Assert(err, IsNil)
  707. }
  708. // TestSetBucketLoggingNegative
  709. func (s *OssClientSuite) TestSetBucketLoggingNegative(c *C) {
  710. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  711. var bucketNameTarget = bucketNamePrefix + randLowStr(6)
  712. client, err := New(endpoint, accessID, accessKey)
  713. c.Assert(err, IsNil)
  714. // Not exist
  715. _, err = client.GetBucketLogging(bucketNameTest)
  716. c.Assert(err, NotNil)
  717. // Not exist
  718. err = client.SetBucketLogging(bucketNameTest, "targetbucket", "prefix", true)
  719. c.Assert(err, NotNil)
  720. // Not exist
  721. err = client.DeleteBucketLogging(bucketNameTest)
  722. c.Assert(err, NotNil)
  723. err = client.CreateBucket(bucketNameTest)
  724. c.Assert(err, IsNil)
  725. time.Sleep(timeoutInOperation)
  726. // Target bucket not exist
  727. err = client.SetBucketLogging(bucketNameTest, bucketNameTarget, "prefix", true)
  728. c.Assert(err, NotNil)
  729. // Parameter invalid
  730. err = client.SetBucketLogging(bucketNameTest, "XXXX", "prefix", true)
  731. c.Assert(err, NotNil)
  732. err = client.SetBucketLogging(bucketNameTest, "xx", "prefix", true)
  733. c.Assert(err, NotNil)
  734. err = client.DeleteBucket(bucketNameTest)
  735. c.Assert(err, IsNil)
  736. }
  737. // TestSetBucketWebsite
  738. func (s *OssClientSuite) TestSetBucketWebsite(c *C) {
  739. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  740. var indexWebsite = "myindex.html"
  741. var errorWebsite = "myerror.html"
  742. client, err := New(endpoint, accessID, accessKey)
  743. c.Assert(err, IsNil)
  744. time.Sleep(timeoutInOperation)
  745. err = client.CreateBucket(bucketNameTest)
  746. c.Assert(err, IsNil)
  747. // Set
  748. err = client.SetBucketWebsite(bucketNameTest, indexWebsite, errorWebsite)
  749. c.Assert(err, IsNil)
  750. // Double set
  751. err = client.SetBucketWebsite(bucketNameTest, indexWebsite, errorWebsite)
  752. c.Assert(err, IsNil)
  753. res, err := client.GetBucketWebsite(bucketNameTest)
  754. c.Assert(err, IsNil)
  755. c.Assert(res.IndexDocument.Suffix, Equals, indexWebsite)
  756. c.Assert(res.ErrorDocument.Key, Equals, errorWebsite)
  757. // Reset
  758. err = client.SetBucketWebsite(bucketNameTest, "your"+indexWebsite, "your"+errorWebsite)
  759. c.Assert(err, IsNil)
  760. time.Sleep(timeoutInOperation)
  761. res, err = client.GetBucketWebsite(bucketNameTest)
  762. c.Assert(err, IsNil)
  763. c.Assert(res.IndexDocument.Suffix, Equals, "your"+indexWebsite)
  764. c.Assert(res.ErrorDocument.Key, Equals, "your"+errorWebsite)
  765. err = client.DeleteBucketWebsite(bucketNameTest)
  766. c.Assert(err, IsNil)
  767. // Set after delete
  768. err = client.SetBucketWebsite(bucketNameTest, indexWebsite, errorWebsite)
  769. c.Assert(err, IsNil)
  770. // Eliminate effect of cache
  771. time.Sleep(timeoutInOperation)
  772. res, err = client.GetBucketWebsite(bucketNameTest)
  773. c.Assert(err, IsNil)
  774. c.Assert(res.IndexDocument.Suffix, Equals, indexWebsite)
  775. c.Assert(res.ErrorDocument.Key, Equals, errorWebsite)
  776. err = client.DeleteBucket(bucketNameTest)
  777. c.Assert(err, IsNil)
  778. }
  779. // TestDeleteBucketWebsite
  780. func (s *OssClientSuite) TestDeleteBucketWebsite(c *C) {
  781. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  782. var indexWebsite = "myindex.html"
  783. var errorWebsite = "myerror.html"
  784. client, err := New(endpoint, accessID, accessKey)
  785. c.Assert(err, IsNil)
  786. err = client.CreateBucket(bucketNameTest)
  787. c.Assert(err, IsNil)
  788. time.Sleep(timeoutInOperation)
  789. // Get
  790. res, err := client.GetBucketWebsite(bucketNameTest)
  791. c.Assert(err, NotNil)
  792. // Detele without set
  793. err = client.DeleteBucketWebsite(bucketNameTest)
  794. c.Assert(err, IsNil)
  795. // Set
  796. err = client.SetBucketWebsite(bucketNameTest, indexWebsite, errorWebsite)
  797. c.Assert(err, IsNil)
  798. time.Sleep(timeoutInOperation)
  799. res, err = client.GetBucketWebsite(bucketNameTest)
  800. c.Assert(err, IsNil)
  801. c.Assert(res.IndexDocument.Suffix, Equals, indexWebsite)
  802. c.Assert(res.ErrorDocument.Key, Equals, errorWebsite)
  803. // Detele
  804. time.Sleep(timeoutInOperation)
  805. err = client.DeleteBucketWebsite(bucketNameTest)
  806. c.Assert(err, IsNil)
  807. time.Sleep(timeoutInOperation)
  808. res, err = client.GetBucketWebsite(bucketNameTest)
  809. c.Assert(err, NotNil)
  810. // Detele after delete
  811. err = client.DeleteBucketWebsite(bucketNameTest)
  812. c.Assert(err, IsNil)
  813. err = client.DeleteBucket(bucketNameTest)
  814. c.Assert(err, IsNil)
  815. }
  816. // TestSetBucketWebsiteNegative
  817. func (s *OssClientSuite) TestSetBucketWebsiteNegative(c *C) {
  818. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  819. var indexWebsite = "myindex.html"
  820. var errorWebsite = "myerror.html"
  821. client, err := New(endpoint, accessID, accessKey)
  822. c.Assert(err, IsNil)
  823. err = client.DeleteBucket(bucketNameTest)
  824. // Not exist
  825. _, err = client.GetBucketWebsite(bucketNameTest)
  826. c.Assert(err, NotNil)
  827. err = client.DeleteBucketWebsite(bucketNameTest)
  828. c.Assert(err, NotNil)
  829. err = client.SetBucketWebsite(bucketNameTest, indexWebsite, errorWebsite)
  830. c.Assert(err, NotNil)
  831. err = client.CreateBucket(bucketNameTest)
  832. c.Assert(err, IsNil)
  833. // Set
  834. time.Sleep(timeoutInOperation)
  835. err = client.SetBucketWebsite(bucketNameTest, "myindex", "myerror")
  836. c.Assert(err, IsNil)
  837. res, err := client.GetBucketWebsite(bucketNameTest)
  838. c.Assert(err, IsNil)
  839. c.Assert(res.IndexDocument.Suffix, Equals, "myindex")
  840. c.Assert(res.ErrorDocument.Key, Equals, "myerror")
  841. // Detele
  842. err = client.DeleteBucketWebsite(bucketNameTest)
  843. c.Assert(err, IsNil)
  844. time.Sleep(timeoutInOperation)
  845. _, err = client.GetBucketWebsite(bucketNameTest)
  846. c.Assert(err, NotNil)
  847. // Detele after delete
  848. err = client.DeleteBucketWebsite(bucketNameTest)
  849. c.Assert(err, IsNil)
  850. err = client.DeleteBucket(bucketNameTest)
  851. c.Assert(err, IsNil)
  852. }
  853. // TestSetBucketWebsite
  854. func (s *OssClientSuite) TestSetBucketCORS(c *C) {
  855. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  856. var rule1 = CORSRule{
  857. AllowedOrigin: []string{"*"},
  858. AllowedMethod: []string{"PUT", "GET", "POST"},
  859. AllowedHeader: []string{},
  860. ExposeHeader: []string{},
  861. MaxAgeSeconds: 100,
  862. }
  863. var rule2 = CORSRule{
  864. AllowedOrigin: []string{"http://www.a.com", "http://www.b.com"},
  865. AllowedMethod: []string{"GET"},
  866. AllowedHeader: []string{"Authorization"},
  867. ExposeHeader: []string{"x-oss-test", "x-oss-test1"},
  868. MaxAgeSeconds: 200,
  869. }
  870. client, err := New(endpoint, accessID, accessKey)
  871. c.Assert(err, IsNil)
  872. err = client.CreateBucket(bucketNameTest)
  873. c.Assert(err, IsNil)
  874. time.Sleep(timeoutInOperation)
  875. // Set
  876. err = client.SetBucketCORS(bucketNameTest, []CORSRule{rule1})
  877. c.Assert(err, IsNil)
  878. gbcr, err := client.GetBucketCORS(bucketNameTest)
  879. c.Assert(err, IsNil)
  880. c.Assert(len(gbcr.CORSRules), Equals, 1)
  881. c.Assert(len(gbcr.CORSRules[0].AllowedOrigin), Equals, 1)
  882. c.Assert(len(gbcr.CORSRules[0].AllowedMethod), Equals, 3)
  883. c.Assert(len(gbcr.CORSRules[0].AllowedHeader), Equals, 0)
  884. c.Assert(len(gbcr.CORSRules[0].ExposeHeader), Equals, 0)
  885. c.Assert(gbcr.CORSRules[0].MaxAgeSeconds, Equals, 100)
  886. // Double set
  887. err = client.SetBucketCORS(bucketNameTest, []CORSRule{rule1})
  888. c.Assert(err, IsNil)
  889. gbcr, err = client.GetBucketCORS(bucketNameTest)
  890. c.Assert(err, IsNil)
  891. c.Assert(len(gbcr.CORSRules), Equals, 1)
  892. c.Assert(len(gbcr.CORSRules[0].AllowedOrigin), Equals, 1)
  893. c.Assert(len(gbcr.CORSRules[0].AllowedMethod), Equals, 3)
  894. c.Assert(len(gbcr.CORSRules[0].AllowedHeader), Equals, 0)
  895. c.Assert(len(gbcr.CORSRules[0].ExposeHeader), Equals, 0)
  896. c.Assert(gbcr.CORSRules[0].MaxAgeSeconds, Equals, 100)
  897. // Set rule2
  898. err = client.SetBucketCORS(bucketNameTest, []CORSRule{rule2})
  899. c.Assert(err, IsNil)
  900. time.Sleep(timeoutInOperation)
  901. gbcr, err = client.GetBucketCORS(bucketNameTest)
  902. c.Assert(err, IsNil)
  903. c.Assert(len(gbcr.CORSRules), Equals, 1)
  904. c.Assert(len(gbcr.CORSRules[0].AllowedOrigin), Equals, 2)
  905. c.Assert(len(gbcr.CORSRules[0].AllowedMethod), Equals, 1)
  906. c.Assert(len(gbcr.CORSRules[0].AllowedHeader), Equals, 1)
  907. c.Assert(len(gbcr.CORSRules[0].ExposeHeader), Equals, 2)
  908. c.Assert(gbcr.CORSRules[0].MaxAgeSeconds, Equals, 200)
  909. // Reset
  910. err = client.SetBucketCORS(bucketNameTest, []CORSRule{rule1, rule2})
  911. c.Assert(err, IsNil)
  912. time.Sleep(timeoutInOperation)
  913. gbcr, err = client.GetBucketCORS(bucketNameTest)
  914. c.Assert(err, IsNil)
  915. c.Assert(len(gbcr.CORSRules), Equals, 2)
  916. // Set after delete
  917. err = client.DeleteBucketCORS(bucketNameTest)
  918. c.Assert(err, IsNil)
  919. err = client.SetBucketCORS(bucketNameTest, []CORSRule{rule1, rule2})
  920. c.Assert(err, IsNil)
  921. time.Sleep(timeoutInOperation)
  922. gbcr, err = client.GetBucketCORS(bucketNameTest)
  923. c.Assert(err, IsNil)
  924. c.Assert(len(gbcr.CORSRules), Equals, 2)
  925. err = client.DeleteBucketCORS(bucketNameTest)
  926. c.Assert(err, IsNil)
  927. err = client.DeleteBucket(bucketNameTest)
  928. c.Assert(err, IsNil)
  929. }
  930. // TestDeleteBucketCORS
  931. func (s *OssClientSuite) TestDeleteBucketCORS(c *C) {
  932. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  933. var rule = CORSRule{
  934. AllowedOrigin: []string{"*"},
  935. AllowedMethod: []string{"PUT", "GET", "POST"},
  936. AllowedHeader: []string{},
  937. ExposeHeader: []string{},
  938. MaxAgeSeconds: 100,
  939. }
  940. client, err := New(endpoint, accessID, accessKey)
  941. c.Assert(err, IsNil)
  942. err = client.CreateBucket(bucketNameTest)
  943. c.Assert(err, IsNil)
  944. time.Sleep(timeoutInOperation)
  945. // Delete not set
  946. err = client.DeleteBucketCORS(bucketNameTest)
  947. c.Assert(err, IsNil)
  948. // Set
  949. err = client.SetBucketCORS(bucketNameTest, []CORSRule{rule})
  950. c.Assert(err, IsNil)
  951. time.Sleep(timeoutInOperation)
  952. _, err = client.GetBucketCORS(bucketNameTest)
  953. c.Assert(err, IsNil)
  954. // Detele
  955. err = client.DeleteBucketCORS(bucketNameTest)
  956. c.Assert(err, IsNil)
  957. time.Sleep(timeoutInOperation)
  958. _, err = client.GetBucketCORS(bucketNameTest)
  959. c.Assert(err, NotNil)
  960. // Detele after deleting
  961. err = client.DeleteBucketCORS(bucketNameTest)
  962. c.Assert(err, IsNil)
  963. err = client.DeleteBucket(bucketNameTest)
  964. c.Assert(err, IsNil)
  965. }
  966. // TestSetBucketCORSNegative
  967. func (s *OssClientSuite) TestSetBucketCORSNegative(c *C) {
  968. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  969. var rule = CORSRule{
  970. AllowedOrigin: []string{"*"},
  971. AllowedMethod: []string{"PUT", "GET", "POST"},
  972. AllowedHeader: []string{},
  973. ExposeHeader: []string{},
  974. MaxAgeSeconds: 100,
  975. }
  976. client, err := New(endpoint, accessID, accessKey)
  977. c.Assert(err, IsNil)
  978. err = client.DeleteBucket(bucketNameTest)
  979. // Not exist
  980. _, err = client.GetBucketCORS(bucketNameTest)
  981. c.Assert(err, NotNil)
  982. err = client.DeleteBucketCORS(bucketNameTest)
  983. c.Assert(err, NotNil)
  984. err = client.SetBucketCORS(bucketNameTest, []CORSRule{rule})
  985. c.Assert(err, NotNil)
  986. err = client.CreateBucket(bucketNameTest)
  987. c.Assert(err, IsNil)
  988. time.Sleep(timeoutInOperation)
  989. _, err = client.GetBucketCORS(bucketNameTest)
  990. c.Assert(err, NotNil)
  991. // Set
  992. err = client.SetBucketCORS(bucketNameTest, []CORSRule{rule})
  993. c.Assert(err, IsNil)
  994. time.Sleep(timeoutInOperation)
  995. _, err = client.GetBucketCORS(bucketNameTest)
  996. c.Assert(err, IsNil)
  997. // Delete
  998. err = client.DeleteBucketCORS(bucketNameTest)
  999. c.Assert(err, IsNil)
  1000. time.Sleep(timeoutInOperation)
  1001. _, err = client.GetBucketCORS(bucketNameTest)
  1002. c.Assert(err, NotNil)
  1003. // Delete after deleting
  1004. err = client.DeleteBucketCORS(bucketNameTest)
  1005. c.Assert(err, IsNil)
  1006. err = client.DeleteBucket(bucketNameTest)
  1007. c.Assert(err, IsNil)
  1008. }
  1009. // TestGetBucketInfo
  1010. func (s *OssClientSuite) TestGetBucketInfo(c *C) {
  1011. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  1012. client, err := New(endpoint, accessID, accessKey)
  1013. c.Assert(err, IsNil)
  1014. err = client.CreateBucket(bucketNameTest)
  1015. c.Assert(err, IsNil)
  1016. res, err := client.GetBucketInfo(bucketNameTest)
  1017. c.Assert(err, IsNil)
  1018. c.Assert(res.BucketInfo.Name, Equals, bucketNameTest)
  1019. c.Assert(strings.HasPrefix(res.BucketInfo.Location, "oss-"), Equals, true)
  1020. c.Assert(res.BucketInfo.ACL, Equals, "private")
  1021. c.Assert(strings.HasSuffix(res.BucketInfo.ExtranetEndpoint, ".com"), Equals, true)
  1022. c.Assert(strings.HasSuffix(res.BucketInfo.IntranetEndpoint, ".com"), Equals, true)
  1023. c.Assert(res.BucketInfo.CreationDate, NotNil)
  1024. err = client.DeleteBucket(bucketNameTest)
  1025. c.Assert(err, IsNil)
  1026. }
  1027. // TestGetBucketInfoNegative
  1028. func (s *OssClientSuite) TestGetBucketInfoNegative(c *C) {
  1029. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  1030. client, err := New(endpoint, accessID, accessKey)
  1031. c.Assert(err, IsNil)
  1032. // Not exist
  1033. _, err = client.GetBucketInfo(bucketNameTest)
  1034. c.Assert(err, NotNil)
  1035. // Bucket name invalid
  1036. _, err = client.GetBucketInfo("InvalidBucketName_")
  1037. c.Assert(err, NotNil)
  1038. }
  1039. // TestEndpointFormat
  1040. func (s *OssClientSuite) TestEndpointFormat(c *C) {
  1041. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  1042. // http://host
  1043. client, err := New(endpoint, accessID, accessKey)
  1044. c.Assert(err, IsNil)
  1045. err = client.CreateBucket(bucketNameTest)
  1046. c.Assert(err, IsNil)
  1047. time.Sleep(timeoutInOperation)
  1048. res, err := client.GetBucketACL(bucketNameTest)
  1049. c.Assert(err, IsNil)
  1050. c.Assert(res.ACL, Equals, string(ACLPrivate))
  1051. err = client.DeleteBucket(bucketNameTest)
  1052. c.Assert(err, IsNil)
  1053. time.Sleep(timeoutInOperation)
  1054. // http://host:port
  1055. client, err = New(endpoint+":80", accessID, accessKey)
  1056. c.Assert(err, IsNil)
  1057. err = client.CreateBucket(bucketNameTest)
  1058. c.Assert(err, IsNil)
  1059. time.Sleep(timeoutInOperation)
  1060. res, err = client.GetBucketACL(bucketNameTest)
  1061. c.Assert(err, IsNil)
  1062. c.Assert(res.ACL, Equals, string(ACLPrivate))
  1063. err = client.DeleteBucket(bucketNameTest)
  1064. c.Assert(err, IsNil)
  1065. }
  1066. // TestCname
  1067. func (s *OssClientSuite) _TestCname(c *C) {
  1068. var bucketNameTest = "<my-bucket-cname>"
  1069. client, err := New("<endpoint>", "<accessKeyId>", "<accessKeySecret>", UseCname(true))
  1070. c.Assert(err, IsNil)
  1071. err = client.CreateBucket(bucketNameTest)
  1072. c.Assert(err, IsNil)
  1073. _, err = client.ListBuckets()
  1074. c.Assert(err, NotNil)
  1075. res, err := client.GetBucketACL(bucketNameTest)
  1076. c.Assert(err, IsNil)
  1077. c.Assert(res.ACL, Equals, string(ACLPrivate))
  1078. }
  1079. // TestCnameNegative
  1080. func (s *OssClientSuite) _TestCnameNegative(c *C) {
  1081. var bucketNameTest = "<my-bucket-cname>"
  1082. client, err := New("<endpoint>", "<accessKeyId>", "<accessKeySecret>", UseCname(true))
  1083. c.Assert(err, IsNil)
  1084. err = client.CreateBucket(bucketNameTest)
  1085. c.Assert(err, NotNil)
  1086. _, err = client.ListBuckets()
  1087. c.Assert(err, NotNil)
  1088. _, err = client.GetBucketACL(bucketNameTest)
  1089. c.Assert(err, NotNil)
  1090. }
  1091. // _TestHTTPS
  1092. func (s *OssClientSuite) _TestHTTPS(c *C) {
  1093. var bucketNameTest = "<my-bucket-https>"
  1094. client, err := New("<endpoint>", "<accessKeyId>", "<accessKeySecret>")
  1095. c.Assert(err, IsNil)
  1096. err = client.CreateBucket(bucketNameTest)
  1097. c.Assert(err, IsNil)
  1098. res, err := client.GetBucketACL(bucketNameTest)
  1099. c.Assert(err, IsNil)
  1100. c.Assert(res.ACL, Equals, string(ACLPrivate))
  1101. err = client.DeleteBucket(bucketNameTest)
  1102. c.Assert(err, IsNil)
  1103. }
  1104. // TestClientOption
  1105. func (s *OssClientSuite) TestClientOption(c *C) {
  1106. var bucketNameTest = bucketNamePrefix + randLowStr(6)
  1107. client, err := New(endpoint, accessID, accessKey, UseCname(true),
  1108. Timeout(11, 12), SecurityToken("token"), Proxy(proxyHost))
  1109. c.Assert(err, IsNil)
  1110. // CreateBucket timeout
  1111. err = client.CreateBucket(bucketNameTest)
  1112. c.Assert(err, NotNil)
  1113. c.Assert(client.Conn.config.HTTPTimeout.ConnectTimeout, Equals, time.Second*11)
  1114. c.Assert(client.Conn.config.HTTPTimeout.ReadWriteTimeout, Equals, time.Second*12)
  1115. c.Assert(client.Conn.config.HTTPTimeout.HeaderTimeout, Equals, time.Second*12)
  1116. c.Assert(client.Conn.config.HTTPTimeout.IdleConnTimeout, Equals, time.Second*12)
  1117. c.Assert(client.Conn.config.HTTPTimeout.LongTimeout, Equals, time.Second*12*10)
  1118. c.Assert(client.Conn.config.SecurityToken, Equals, "token")
  1119. c.Assert(client.Conn.config.IsCname, Equals, true)
  1120. c.Assert(client.Conn.config.IsUseProxy, Equals, true)
  1121. c.Assert(client.Config.ProxyHost, Equals, proxyHost)
  1122. client, err = New(endpoint, accessID, accessKey, AuthProxy(proxyHost, proxyUser, proxyPasswd))
  1123. c.Assert(client.Conn.config.IsUseProxy, Equals, true)
  1124. c.Assert(client.Config.ProxyHost, Equals, proxyHost)
  1125. c.Assert(client.Conn.config.IsAuthProxy, Equals, true)
  1126. c.Assert(client.Conn.config.ProxyUser, Equals, proxyUser)
  1127. c.Assert(client.Conn.config.ProxyPassword, Equals, proxyPasswd)
  1128. client, err = New(endpoint, accessID, accessKey, UserAgent("go sdk user agent"))
  1129. c.Assert(client.Conn.config.UserAgent, Equals, "go sdk user agent")
  1130. // Check we can overide the http.Client
  1131. httpClient := new(http.Client)
  1132. client, err = New(endpoint, accessID, accessKey, HTTPClient(httpClient))
  1133. c.Assert(client.HTTPClient, Equals, httpClient)
  1134. c.Assert(client.Conn.client, Equals, httpClient)
  1135. client, err = New(endpoint, accessID, accessKey)
  1136. c.Assert(client.HTTPClient, IsNil)
  1137. }
  1138. // TestProxy
  1139. func (s *OssClientSuite) TestProxy(c *C) {
  1140. bucketNameTest := bucketNamePrefix + randLowStr(6)
  1141. objectName := "体育/奥运/首金"
  1142. objectValue := "大江东去,浪淘尽,千古风流人物。 故垒西边,人道是、三国周郎赤壁。"
  1143. client, err := New(endpoint, accessID, accessKey, AuthProxy(proxyHost, proxyUser, proxyPasswd))
  1144. // Create bucket
  1145. err = client.CreateBucket(bucketNameTest)
  1146. c.Assert(err, IsNil)
  1147. // Get bucket info
  1148. _, err = client.GetBucketInfo(bucketNameTest)
  1149. c.Assert(err, IsNil)
  1150. bucket, err := client.Bucket(bucketNameTest)
  1151. // Sign URL
  1152. str, err := bucket.SignURL(objectName, HTTPPut, 60)
  1153. c.Assert(err, IsNil)
  1154. c.Assert(strings.Contains(str, HTTPParamExpires+"="), Equals, true)
  1155. c.Assert(strings.Contains(str, HTTPParamAccessKeyID+"="), Equals, true)
  1156. c.Assert(strings.Contains(str, HTTPParamSignature+"="), Equals, true)
  1157. // Put object with URL
  1158. err = bucket.PutObjectWithURL(str, strings.NewReader(objectValue))
  1159. c.Assert(err, IsNil)
  1160. // Sign URL for get object
  1161. str, err = bucket.SignURL(objectName, HTTPGet, 60)
  1162. c.Assert(err, IsNil)
  1163. c.Assert(strings.Contains(str, HTTPParamExpires+"="), Equals, true)
  1164. c.Assert(strings.Contains(str, HTTPParamAccessKeyID+"="), Equals, true)
  1165. c.Assert(strings.Contains(str, HTTPParamSignature+"="), Equals, true)
  1166. // Get object with URL
  1167. body, err := bucket.GetObjectWithURL(str)
  1168. c.Assert(err, IsNil)
  1169. str, err = readBody(body)
  1170. c.Assert(err, IsNil)
  1171. c.Assert(str, Equals, objectValue)
  1172. // Put object
  1173. err = bucket.PutObject(objectName, strings.NewReader(objectValue))
  1174. c.Assert(err, IsNil)
  1175. // Get object
  1176. _, err = bucket.GetObject(objectName)
  1177. c.Assert(err, IsNil)
  1178. // List objects
  1179. _, err = bucket.ListObjects()
  1180. c.Assert(err, IsNil)
  1181. // Delete object
  1182. err = bucket.DeleteObject(objectName)
  1183. c.Assert(err, IsNil)
  1184. // Delete bucket
  1185. err = client.DeleteBucket(bucketNameTest)
  1186. c.Assert(err, IsNil)
  1187. }
  1188. // Private
  1189. func (s *OssClientSuite) checkBucket(buckets []BucketProperties, bucket string) bool {
  1190. for _, v := range buckets {
  1191. if v.Name == bucket {
  1192. return true
  1193. }
  1194. }
  1195. return false
  1196. }
  1197. func (s *OssClientSuite) getBucket(buckets []BucketProperties, bucket string) (bool, BucketProperties) {
  1198. for _, v := range buckets {
  1199. if v.Name == bucket {
  1200. return true, v
  1201. }
  1202. }
  1203. return false, BucketProperties{}
  1204. }
  1205. func (s *OssClientSuite) TestHttpLogNotSignUrl(c *C) {
  1206. logName := "." + string(os.PathSeparator) + "test-go-sdk-httpdebug.log" + randStr(5)
  1207. f, err := os.OpenFile(logName, os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0660)
  1208. c.Assert(err, IsNil)
  1209. client, err := New(endpoint, accessID, accessKey)
  1210. client.Config.LogLevel = Debug
  1211. client.Config.Logger = log.New(f, "", log.LstdFlags)
  1212. var testBucketName = bucketNamePrefix + randLowStr(6)
  1213. // CreateBucket
  1214. err = client.CreateBucket(testBucketName)
  1215. f.Close()
  1216. // read log file,get http info
  1217. contents, err := ioutil.ReadFile(logName)
  1218. c.Assert(err, IsNil)
  1219. httpContent := string(contents)
  1220. //fmt.Println(httpContent)
  1221. c.Assert(strings.Contains(httpContent, "signStr"), Equals, true)
  1222. c.Assert(strings.Contains(httpContent, "Method:"), Equals, true)
  1223. // delete test bucket and log
  1224. os.Remove(logName)
  1225. client.DeleteBucket(testBucketName)
  1226. }
  1227. func (s *OssClientSuite) TestHttpLogSignUrl(c *C) {
  1228. logName := "." + string(os.PathSeparator) + "test-go-sdk-httpdebug-signurl.log" + randStr(5)
  1229. f, err := os.OpenFile(logName, os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0660)
  1230. c.Assert(err, IsNil)
  1231. client, err := New(endpoint, accessID, accessKey)
  1232. client.Config.LogLevel = Debug
  1233. client.Config.Logger = log.New(f, "", log.LstdFlags)
  1234. var testBucketName = bucketNamePrefix + randLowStr(6)
  1235. // CreateBucket
  1236. err = client.CreateBucket(testBucketName)
  1237. f.Close()
  1238. // clear log
  1239. f, err = os.OpenFile(logName, os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0660)
  1240. client.Config.Logger = log.New(f, "", log.LstdFlags)
  1241. bucket, _ := client.Bucket(testBucketName)
  1242. objectName := objectNamePrefix + randStr(5)
  1243. objectValue := randStr(20)
  1244. // Sign URL for put
  1245. str, err := bucket.SignURL(objectName, HTTPPut, 60)
  1246. c.Assert(err, IsNil)
  1247. c.Assert(strings.Contains(str, HTTPParamExpires+"="), Equals, true)
  1248. c.Assert(strings.Contains(str, HTTPParamAccessKeyID+"="), Equals, true)
  1249. c.Assert(strings.Contains(str, HTTPParamSignature+"="), Equals, true)
  1250. // Error put object with URL
  1251. err = bucket.PutObjectWithURL(str, strings.NewReader(objectValue), ContentType("image/tiff"))
  1252. f.Close()
  1253. // read log file,get http info
  1254. contents, err := ioutil.ReadFile(logName)
  1255. c.Assert(err, IsNil)
  1256. httpContent := string(contents)
  1257. //fmt.Println(httpContent)
  1258. c.Assert(strings.Contains(httpContent, "signStr"), Equals, true)
  1259. c.Assert(strings.Contains(httpContent, "Method:"), Equals, true)
  1260. // delete test bucket and log
  1261. os.Remove(logName)
  1262. client.DeleteBucket(testBucketName)
  1263. }
  1264. func (s *OssClientSuite) TestSetLimitUploadSpeed(c *C) {
  1265. client, err := New(endpoint, accessID, accessKey)
  1266. c.Assert(err, IsNil)
  1267. err = client.LimitUploadSpeed(100)
  1268. goVersion := runtime.Version()
  1269. pSlice := strings.Split(strings.ToLower(goVersion), ".")
  1270. // compare with go1.7
  1271. if len(pSlice) >= 2 {
  1272. if pSlice[0] > "go1" {
  1273. c.Assert(err, IsNil)
  1274. } else if pSlice[0] == "go1" && pSlice[1] >= "7" {
  1275. c.Assert(err, IsNil)
  1276. } else {
  1277. c.Assert(err, NotNil)
  1278. }
  1279. } else {
  1280. c.Assert(err, NotNil)
  1281. }
  1282. }