1 package storage
2
3
4
5
6 import (
7 "net/url"
8 "sort"
9 "strconv"
10 "time"
11
12 "github.com/Azure/go-autorest/autorest/azure"
13 chk "gopkg.in/check.v1"
14 )
15
16 type ContainerSuite struct{}
17
18 var _ = chk.Suite(&ContainerSuite{})
19
20 func (s *ContainerSuite) Test_containerBuildPath(c *chk.C) {
21 cli := getBlobClient(c)
22 cnt := cli.GetContainerReference("lol")
23 c.Assert(cnt.buildPath(), chk.Equals, "/lol")
24 }
25
26 func (s *ContainerSuite) TestListContainersPagination(c *chk.C) {
27 cli := getBlobClient(c)
28 rec := cli.client.appendRecorder(c)
29 defer rec.Stop()
30 cli.deleteTestContainers(c)
31
32 const n = 5
33 const pageSize = 2
34
35 cntNames := []string{}
36 for i := 0; i < n; i++ {
37 cntNames = append(cntNames, containerName(c, strconv.Itoa(i)))
38 }
39 sort.Strings(cntNames)
40
41
42 created := []*Container{}
43 for i := 0; i < n; i++ {
44 cnt := cli.GetContainerReference(cntNames[i])
45 c.Assert(cnt.Create(nil), chk.IsNil)
46 created = append(created, cnt)
47 cnt.Metadata = map[string]string{
48 "hello": "world",
49 "name": cnt.Name,
50 }
51 c.Assert(cnt.SetMetadata(nil), chk.IsNil)
52 defer cnt.Delete(nil)
53 }
54
55
56 seen := []Container{}
57 marker := ""
58 for {
59 resp, err := cli.ListContainers(ListContainersParameters{
60 MaxResults: pageSize,
61 Marker: marker,
62 Include: "metadata",
63 })
64
65 c.Assert(err, chk.IsNil)
66
67 if len(resp.Containers) > pageSize {
68 c.Fatalf("Got a bigger page. Expected: %d, got: %d", pageSize, len(resp.Containers))
69 }
70
71 for _, c := range resp.Containers {
72 seen = append(seen, c)
73 }
74
75 marker = resp.NextMarker
76 if marker == "" || len(resp.Containers) == 0 {
77 break
78 }
79 }
80
81 for i := range created {
82 c.Assert(seen[i].Name, chk.DeepEquals, created[i].Name)
83 c.Assert(seen[i].Metadata, chk.DeepEquals, created[i].Metadata)
84 }
85 }
86
87 func (s *ContainerSuite) TestContainerExists(c *chk.C) {
88 cli := getBlobClient(c)
89 rec := cli.client.appendRecorder(c)
90 defer rec.Stop()
91
92
93 cnt1 := cli.GetContainerReference(containerName(c, "1"))
94 ok, err := cnt1.Exists()
95 c.Assert(err, chk.IsNil)
96 c.Assert(ok, chk.Equals, false)
97
98
99 cnt2 := cli.GetContainerReference(containerName(c, "2"))
100 err = cnt2.Create(nil)
101 defer cnt2.Delete(nil)
102 c.Assert(err, chk.IsNil)
103 ok, err = cnt2.Exists()
104 c.Assert(err, chk.IsNil)
105 c.Assert(ok, chk.Equals, true)
106
107
108 sasuriOptions := ContainerSASOptions{}
109 sasuriOptions.Expiry = fixedTime
110 sasuriOptions.Read = true
111 sasuriOptions.Add = true
112 sasuriOptions.Create = true
113 sasuriOptions.Write = true
114 sasuriOptions.Delete = true
115 sasuriOptions.List = true
116
117 sasuriString1, err := cnt1.GetSASURI(sasuriOptions)
118 c.Assert(err, chk.IsNil)
119 sasuri1, err := url.Parse(sasuriString1)
120 c.Assert(err, chk.IsNil)
121 cntServiceSAS1, err := GetContainerReferenceFromSASURI(*sasuri1)
122 c.Assert(err, chk.IsNil)
123 cntServiceSAS1.Client().HTTPClient = cli.client.HTTPClient
124
125 ok, err = cntServiceSAS1.Exists()
126 c.Assert(err, chk.NotNil)
127 c.Assert(ok, chk.Equals, false)
128
129 sasuriString2, err := cnt2.GetSASURI(sasuriOptions)
130 c.Assert(err, chk.IsNil)
131 sasuri2, err := url.Parse(sasuriString2)
132 c.Assert(err, chk.IsNil)
133 cntServiceSAS2, err := GetContainerReferenceFromSASURI(*sasuri2)
134 c.Assert(err, chk.IsNil)
135 cntServiceSAS2.Client().HTTPClient = cli.client.HTTPClient
136
137 ok, err = cntServiceSAS2.Exists()
138 c.Assert(err, chk.NotNil)
139 c.Assert(ok, chk.Equals, false)
140
141
142 token, err := cli.client.GetAccountSASToken(accountSASOptions)
143 c.Assert(err, chk.IsNil)
144 SAScli := NewAccountSASClient(cli.client.accountName, token, azure.PublicCloud).GetBlobService()
145
146 cntAccountSAS1 := SAScli.GetContainerReference(cnt1.Name)
147 cntAccountSAS1.Client().HTTPClient = cli.client.HTTPClient
148 ok, err = cntAccountSAS1.Exists()
149 c.Assert(err, chk.IsNil)
150 c.Assert(ok, chk.Equals, false)
151
152 cntAccountSAS2 := SAScli.GetContainerReference(cnt2.Name)
153 cntAccountSAS2.Client().HTTPClient = cli.client.HTTPClient
154 ok, err = cntAccountSAS2.Exists()
155 c.Assert(err, chk.IsNil)
156 c.Assert(ok, chk.Equals, true)
157 }
158
159 func (s *ContainerSuite) TestCreateContainerDeleteContainer(c *chk.C) {
160 cli := getBlobClient(c)
161 rec := cli.client.appendRecorder(c)
162 defer rec.Stop()
163 cnt := cli.GetContainerReference(containerName(c))
164 c.Assert(cnt.Create(nil), chk.IsNil)
165 c.Assert(cnt.Delete(nil), chk.IsNil)
166 }
167
168 func (s *ContainerSuite) TestCreateContainerIfNotExists(c *chk.C) {
169 cli := getBlobClient(c)
170 rec := cli.client.appendRecorder(c)
171 defer rec.Stop()
172
173
174 cnt := cli.GetContainerReference(containerName(c))
175 ok, err := cnt.CreateIfNotExists(nil)
176 defer cnt.Delete(nil)
177 c.Assert(err, chk.IsNil)
178 c.Assert(ok, chk.Equals, true)
179
180 }
181
182 func (s *ContainerSuite) TestCreateContainerIfExists(c *chk.C) {
183 cli := getBlobClient(c)
184 rec := cli.client.appendRecorder(c)
185 defer rec.Stop()
186
187 cnt := cli.GetContainerReference(containerName(c))
188 cnt.Create(nil)
189 defer cnt.Delete(nil)
190
191
192 ok, err := cnt.CreateIfNotExists(nil)
193 c.Assert(err, chk.IsNil)
194 c.Assert(ok, chk.Equals, false)
195 }
196
197 func (s *ContainerSuite) TestDeleteContainerIfExists(c *chk.C) {
198 cli := getBlobClient(c)
199 rec := cli.client.appendRecorder(c)
200 defer rec.Stop()
201
202
203 cnt1 := cli.GetContainerReference(containerName(c, "1"))
204 ok, err := cnt1.Exists()
205 c.Assert(err, chk.IsNil)
206 c.Assert(ok, chk.Equals, false)
207 ok, err = cnt1.DeleteIfExists(nil)
208 c.Assert(err, chk.IsNil)
209 c.Assert(ok, chk.Equals, false)
210
211
212 cnt2 := cli.GetContainerReference(containerName(c, "2"))
213 c.Assert(cnt2.Create(nil), chk.IsNil)
214 ok, err = cnt2.DeleteIfExists(nil)
215 c.Assert(err, chk.IsNil)
216 c.Assert(ok, chk.Equals, true)
217 }
218
219 func (s *ContainerSuite) TestListBlobsPagination(c *chk.C) {
220 cli := getBlobClient(c)
221 rec := cli.client.appendRecorder(c)
222 defer rec.Stop()
223 cnt := cli.GetContainerReference(containerName(c))
224
225 err := cnt.Create(nil)
226 defer cnt.Delete(nil)
227 c.Assert(err, chk.IsNil)
228
229 blobs := []string{}
230 types := []BlobType{}
231 const n = 5
232 const pageSize = 2
233 for i := 0; i < n; i++ {
234 name := blobName(c, strconv.Itoa(i))
235 b := cnt.GetBlobReference(name)
236 c.Assert(b.putSingleBlockBlob([]byte("Hello, world!")), chk.IsNil)
237 blobs = append(blobs, name)
238 types = append(types, b.Properties.BlobType)
239 }
240 sort.Strings(blobs)
241
242 listBlobsPagination(c, cnt, pageSize, blobs, types)
243
244
245 sasuriOptions := ContainerSASOptions{}
246 sasuriOptions.Expiry = fixedTime
247 sasuriOptions.Read = true
248 sasuriOptions.Add = true
249 sasuriOptions.Create = true
250 sasuriOptions.Write = true
251 sasuriOptions.Delete = true
252 sasuriOptions.List = true
253
254 sasuriString, err := cnt.GetSASURI(sasuriOptions)
255 c.Assert(err, chk.IsNil)
256 sasuri, err := url.Parse(sasuriString)
257 c.Assert(err, chk.IsNil)
258 cntServiceSAS, err := GetContainerReferenceFromSASURI(*sasuri)
259 c.Assert(err, chk.IsNil)
260 cntServiceSAS.Client().HTTPClient = cli.client.HTTPClient
261
262 listBlobsPagination(c, cntServiceSAS, pageSize, blobs, types)
263
264
265 token, err := cli.client.GetAccountSASToken(accountSASOptions)
266 c.Assert(err, chk.IsNil)
267 SAScli := NewAccountSASClient(cli.client.accountName, token, azure.PublicCloud).GetBlobService()
268
269 cntAccountSAS := SAScli.GetContainerReference(cnt.Name)
270 cntAccountSAS.Client().HTTPClient = cli.client.HTTPClient
271
272 listBlobsPagination(c, cntAccountSAS, pageSize, blobs, types)
273 }
274
275 func listBlobsPagination(c *chk.C, cnt *Container, pageSize uint, blobs []string, types []BlobType) {
276
277 seen := []string{}
278 seenTypes := []BlobType{}
279 marker := ""
280 for {
281 resp, err := cnt.ListBlobs(ListBlobsParameters{
282 MaxResults: pageSize,
283 Marker: marker})
284 c.Assert(err, chk.IsNil)
285
286 for _, b := range resp.Blobs {
287 seen = append(seen, b.Name)
288 seenTypes = append(seenTypes, b.Properties.BlobType)
289 c.Assert(b.Container, chk.Equals, cnt)
290 }
291
292 marker = resp.NextMarker
293 if marker == "" || len(resp.Blobs) == 0 {
294 break
295 }
296 }
297
298
299 c.Assert(seen, chk.DeepEquals, blobs)
300 c.Assert(seenTypes, chk.DeepEquals, types)
301 }
302
303
304 func listBlobsAsFiles(cli BlobStorageClient, cnt *Container, parentDir string) (folders []string, files []string, err error) {
305 var blobParams ListBlobsParameters
306 var blobListResponse BlobListResponse
307
308
309 blobParams = ListBlobsParameters{
310 Delimiter: "/",
311 Prefix: parentDir,
312 }
313
314 blobListResponse, err = cnt.ListBlobs(blobParams)
315 if err != nil {
316 return nil, nil, err
317 }
318
319
320 folders = blobListResponse.BlobPrefixes
321
322
323 files = make([]string, len(blobListResponse.Blobs))
324 for i := range blobListResponse.Blobs {
325 files[i] = blobListResponse.Blobs[i].Name
326 }
327
328 return folders, files, nil
329 }
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375 func (s *ContainerSuite) TestListBlobsTraversal(c *chk.C) {
376 cli := getBlobClient(c)
377 rec := cli.client.appendRecorder(c)
378 defer rec.Stop()
379
380 cnt := cli.GetContainerReference(containerName(c))
381 c.Assert(cnt.Create(nil), chk.IsNil)
382 defer cnt.Delete(nil)
383
384
385 blobsToCreate := []string{
386 "/usr/bin/ls",
387 "/usr/bin/cat",
388 "/usr/lib64/libc.so",
389 "/etc/hosts",
390 "/etc/init.d/iptables",
391 }
392
393
394 for _, blobName := range blobsToCreate {
395 b := cnt.GetBlobReference(blobName)
396 err := b.CreateBlockBlob(nil)
397 c.Assert(err, chk.IsNil)
398 }
399
400 var folders []string
401 var files []string
402 var err error
403
404
405 folders, files, err = listBlobsAsFiles(cli, cnt, "/")
406 c.Assert(err, chk.IsNil)
407 c.Assert(folders, chk.DeepEquals, []string{"/etc/", "/usr/"})
408 c.Assert(files, chk.DeepEquals, []string{})
409
410
411 folders, files, err = listBlobsAsFiles(cli, cnt, "/etc/")
412 c.Assert(err, chk.IsNil)
413 c.Assert(folders, chk.DeepEquals, []string{"/etc/init.d/"})
414 c.Assert(files, chk.DeepEquals, []string{"/etc/hosts"})
415
416
417 folders, files, err = listBlobsAsFiles(cli, cnt, "/etc/init.d/")
418 c.Assert(err, chk.IsNil)
419 c.Assert(folders, chk.DeepEquals, []string(nil))
420 c.Assert(files, chk.DeepEquals, []string{"/etc/init.d/iptables"})
421
422
423 folders, files, err = listBlobsAsFiles(cli, cnt, "/usr/")
424 c.Assert(err, chk.IsNil)
425 c.Assert(folders, chk.DeepEquals, []string{"/usr/bin/", "/usr/lib64/"})
426 c.Assert(files, chk.DeepEquals, []string{})
427
428
429 folders, files, err = listBlobsAsFiles(cli, cnt, "/usr/bin/")
430 c.Assert(err, chk.IsNil)
431 c.Assert(folders, chk.DeepEquals, []string(nil))
432 c.Assert(files, chk.DeepEquals, []string{"/usr/bin/cat", "/usr/bin/ls"})
433 }
434
435 func (s *ContainerSuite) TestListBlobsWithMetadata(c *chk.C) {
436 cli := getBlobClient(c)
437 rec := cli.client.appendRecorder(c)
438 defer rec.Stop()
439
440 cnt := cli.GetContainerReference(containerName(c))
441 c.Assert(cnt.Create(nil), chk.IsNil)
442 defer cnt.Delete(nil)
443
444 expectMeta := make(map[string]BlobMetadata)
445
446
447 for i := 0; i < 4; i++ {
448 name := blobName(c, strconv.Itoa(i))
449 b := cnt.GetBlobReference(name)
450 c.Assert(b.putSingleBlockBlob([]byte("Hello, world!")), chk.IsNil)
451 b.Metadata = BlobMetadata{
452 "Lol": name,
453 "Rofl_BAZ": "Waz Qux",
454 }
455 c.Assert(b.SetMetadata(nil), chk.IsNil)
456 expectMeta[name] = BlobMetadata{
457 "lol": name,
458 "rofl_baz": "Waz Qux",
459 }
460 _, err := b.CreateSnapshot(nil)
461 c.Assert(err, chk.IsNil)
462 }
463
464
465 b := cnt.GetBlobReference(blobName(c, "nometa"))
466 c.Assert(b.putSingleBlockBlob([]byte("Hello, world!")), chk.IsNil)
467 expectMeta[b.Name] = nil
468
469
470 resp, err := cnt.ListBlobs(ListBlobsParameters{
471 Include: &IncludeBlobDataset{
472 Metadata: true,
473 Snapshots: true,
474 },
475 })
476 c.Assert(err, chk.IsNil)
477
478 originalBlobs := make(map[string]Blob)
479 snapshotBlobs := make(map[string]Blob)
480 for _, v := range resp.Blobs {
481 if v.Snapshot == (time.Time{}) {
482 originalBlobs[v.Name] = v
483 } else {
484 snapshotBlobs[v.Name] = v
485
486 }
487 }
488 c.Assert(originalBlobs, chk.HasLen, 5)
489 c.Assert(snapshotBlobs, chk.HasLen, 4)
490
491
492 for name := range expectMeta {
493 c.Check(originalBlobs[name].Metadata, chk.DeepEquals, expectMeta[name])
494 c.Check(snapshotBlobs[name].Metadata, chk.DeepEquals, expectMeta[name])
495 }
496 }
497
498 func appendContainerPermission(perms ContainerPermissions, accessType ContainerAccessType,
499 ID string, start time.Time, expiry time.Time,
500 canRead bool, canWrite bool, canDelete bool) ContainerPermissions {
501
502 perms.AccessType = accessType
503
504 if ID != "" {
505 capd := ContainerAccessPolicy{
506 ID: ID,
507 StartTime: start,
508 ExpiryTime: expiry,
509 CanRead: canRead,
510 CanWrite: canWrite,
511 CanDelete: canDelete,
512 }
513 perms.AccessPolicies = append(perms.AccessPolicies, capd)
514 }
515 return perms
516 }
517
518 func (s *ContainerSuite) TestSetContainerPermissionsWithTimeoutSuccessfully(c *chk.C) {
519 cli := getBlobClient(c)
520 rec := cli.client.appendRecorder(c)
521 defer rec.Stop()
522
523 cnt := cli.GetContainerReference(containerName(c))
524 c.Assert(cnt.Create(nil), chk.IsNil)
525 defer cnt.Delete(nil)
526
527 perms := ContainerPermissions{}
528 perms = appendContainerPermission(perms, ContainerAccessTypeBlob, "GolangRocksOnAzure", fixedTime, fixedTime.Add(10*time.Hour), true, true, true)
529
530 options := SetContainerPermissionOptions{
531 Timeout: 30,
532 }
533 err := cnt.SetPermissions(perms, &options)
534 c.Assert(err, chk.IsNil)
535 }
536
537 func (s *ContainerSuite) TestSetContainerPermissionsSuccessfully(c *chk.C) {
538 cli := getBlobClient(c)
539 rec := cli.client.appendRecorder(c)
540 defer rec.Stop()
541
542 cnt := cli.GetContainerReference(containerName(c))
543 c.Assert(cnt.Create(nil), chk.IsNil)
544 defer cnt.Delete(nil)
545
546 perms := ContainerPermissions{}
547 perms = appendContainerPermission(perms, ContainerAccessTypeBlob, "GolangRocksOnAzure", fixedTime, fixedTime.Add(10*time.Hour), true, true, true)
548
549 err := cnt.SetPermissions(perms, nil)
550 c.Assert(err, chk.IsNil)
551 }
552
553 func (s *ContainerSuite) TestSetThenGetContainerPermissionsSuccessfully(c *chk.C) {
554 cli := getBlobClient(c)
555 rec := cli.client.appendRecorder(c)
556 defer rec.Stop()
557
558 cnt := cli.GetContainerReference(containerName(c))
559 c.Assert(cnt.Create(nil), chk.IsNil)
560 defer cnt.delete(nil)
561
562 perms := ContainerPermissions{}
563 perms = appendContainerPermission(perms, ContainerAccessTypeBlob, "AutoRestIsSuperCool", fixedTime, fixedTime.Add(10*time.Hour), true, true, true)
564 perms = appendContainerPermission(perms, ContainerAccessTypeBlob, "GolangRocksOnAzure", fixedTime.Add(20*time.Hour), fixedTime.Add(30*time.Hour), true, false, false)
565 c.Assert(perms.AccessPolicies, chk.HasLen, 2)
566
567 err := cnt.SetPermissions(perms, nil)
568 c.Assert(err, chk.IsNil)
569
570 newPerms, err := cnt.GetPermissions(nil)
571 c.Assert(err, chk.IsNil)
572
573
574 c.Assert(newPerms.AccessType, chk.Equals, perms.AccessType)
575
576
577 c.Assert(newPerms.AccessPolicies, chk.HasLen, 2)
578
579 for i := range perms.AccessPolicies {
580 c.Assert(newPerms.AccessPolicies[i].ID, chk.Equals, perms.AccessPolicies[i].ID)
581
582
583
584
585 c.Assert(newPerms.AccessPolicies[i].StartTime.UTC().Round(time.Second).Format(time.RFC1123),
586 chk.Equals, perms.AccessPolicies[i].StartTime.UTC().Round(time.Second).Format(time.RFC1123))
587
588 c.Assert(newPerms.AccessPolicies[i].ExpiryTime.UTC().Round(time.Second).Format(time.RFC1123),
589 chk.Equals, perms.AccessPolicies[i].ExpiryTime.UTC().Round(time.Second).Format(time.RFC1123))
590
591 c.Assert(newPerms.AccessPolicies[i].CanRead, chk.Equals, perms.AccessPolicies[i].CanRead)
592 c.Assert(newPerms.AccessPolicies[i].CanWrite, chk.Equals, perms.AccessPolicies[i].CanWrite)
593 c.Assert(newPerms.AccessPolicies[i].CanDelete, chk.Equals, perms.AccessPolicies[i].CanDelete)
594 }
595 }
596
597 func (s *ContainerSuite) TestSetContainerPermissionsOnlySuccessfully(c *chk.C) {
598 cli := getBlobClient(c)
599 rec := cli.client.appendRecorder(c)
600 defer rec.Stop()
601
602 cnt := cli.GetContainerReference(containerName(c))
603 c.Assert(cnt.Create(nil), chk.IsNil)
604 defer cnt.Delete(nil)
605
606 perms := ContainerPermissions{}
607 perms = appendContainerPermission(perms, ContainerAccessTypeBlob, "GolangRocksOnAzure", fixedTime, fixedTime.Add(10*time.Hour), true, true, true)
608
609 err := cnt.SetPermissions(perms, nil)
610 c.Assert(err, chk.IsNil)
611 }
612
613 func (s *ContainerSuite) TestSetThenGetContainerPermissionsOnlySuccessfully(c *chk.C) {
614 cli := getBlobClient(c)
615 rec := cli.client.appendRecorder(c)
616 defer rec.Stop()
617
618 cnt := cli.GetContainerReference(containerName(c))
619 c.Assert(cnt.Create(nil), chk.IsNil)
620 defer cnt.Delete(nil)
621
622 perms := ContainerPermissions{}
623 perms = appendContainerPermission(perms, ContainerAccessTypeBlob, "", fixedTime, fixedTime.Add(10*time.Hour), true, true, true)
624
625 err := cnt.SetPermissions(perms, nil)
626 c.Assert(err, chk.IsNil)
627
628 newPerms, err := cnt.GetPermissions(nil)
629 c.Assert(err, chk.IsNil)
630
631
632 c.Assert(newPerms.AccessType, chk.Equals, perms.AccessType)
633
634
635 c.Assert(newPerms.AccessPolicies, chk.HasLen, 0)
636 }
637
638 func (s *ContainerSuite) TestGetAndSetContainerMetadata(c *chk.C) {
639 cli := getBlobClient(c)
640 rec := cli.client.appendRecorder(c)
641 defer rec.Stop()
642
643
644 cnt1 := cli.GetContainerReference(containerName(c, "1"))
645 c.Assert(cnt1.Create(nil), chk.IsNil)
646 defer cnt1.Delete(nil)
647
648 err := cnt1.GetMetadata(nil)
649 c.Assert(err, chk.IsNil)
650 c.Assert(cnt1.Metadata, chk.HasLen, 0)
651
652
653 cnt2 := cli.GetContainerReference(containerName(c, "2"))
654 c.Assert(cnt2.Create(nil), chk.IsNil)
655 defer cnt2.Delete(nil)
656
657 metaPut := map[string]string{
658 "lol": "rofl",
659 "rofl_baz": "waz qux",
660 }
661 cnt2.Metadata = metaPut
662
663 err = cnt2.SetMetadata(nil)
664 c.Assert(err, chk.IsNil)
665
666 err = cnt2.GetMetadata(nil)
667 c.Assert(err, chk.IsNil)
668 c.Check(cnt2.Metadata, chk.DeepEquals, metaPut)
669 }
670
671 func (s *ContainerSuite) TestGetContainerProperties(c *chk.C) {
672 cli := getBlobClient(c)
673 rec := cli.client.appendRecorder(c)
674 defer rec.Stop()
675
676
677 cnt1 := cli.GetContainerReference(containerName(c, "1"))
678 c.Assert(cnt1.Create(nil), chk.IsNil)
679 defer cnt1.Delete(nil)
680
681
682 c.Assert(cnt1.Properties.Etag, chk.HasLen, 0)
683
684 err := cnt1.GetProperties()
685 c.Assert(err, chk.IsNil)
686 c.Assert(cnt1.Properties.Etag, chk.Equals, `"0x8D9001BBA6C4080"`)
687 c.Assert(cnt1.Properties.PublicAccess, chk.Equals, ContainerAccessType(""))
688 }
689
690 func (cli *BlobStorageClient) deleteTestContainers(c *chk.C) error {
691 for {
692 resp, err := cli.ListContainers(ListContainersParameters{})
693 if err != nil {
694 return err
695 }
696 if len(resp.Containers) == 0 {
697 break
698 }
699 for _, c := range resp.Containers {
700 err = c.Delete(nil)
701 if err != nil {
702 return err
703 }
704 }
705 }
706 return nil
707 }
708
709 func containerName(c *chk.C, extras ...string) string {
710 return nameGenerator(32, "", alphanum, c, extras)
711 }
712
View as plain text