1 package storage
2
3
4
5
6 import (
7 "io/ioutil"
8
9 chk "gopkg.in/check.v1"
10 )
11
12 type AppendBlobSuite struct{}
13
14 var _ = chk.Suite(&AppendBlobSuite{})
15
16 func (s *AppendBlobSuite) TestPutAppendBlob(c *chk.C) {
17 cli := getBlobClient(c)
18 rec := cli.client.appendRecorder(c)
19 defer rec.Stop()
20
21 cnt := cli.GetContainerReference(containerName(c))
22 b := cnt.GetBlobReference(blobName(c))
23 c.Assert(cnt.Create(nil), chk.IsNil)
24 defer cnt.Delete(nil)
25
26 c.Assert(b.PutAppendBlob(nil), chk.IsNil)
27
28
29 err := b.GetProperties(nil)
30 c.Assert(err, chk.IsNil)
31 c.Assert(b.Properties.ContentLength, chk.Equals, int64(0))
32 c.Assert(b.Properties.BlobType, chk.Equals, BlobTypeAppend)
33 }
34
35 func (s *AppendBlobSuite) TestPutAppendBlobAppendBlocks(c *chk.C) {
36 cli := getBlobClient(c)
37 rec := cli.client.appendRecorder(c)
38 defer rec.Stop()
39
40 cnt := cli.GetContainerReference(containerName(c))
41 b := cnt.GetBlobReference(blobName(c))
42 c.Assert(cnt.Create(nil), chk.IsNil)
43 defer cnt.Delete(nil)
44
45 c.Assert(b.PutAppendBlob(nil), chk.IsNil)
46
47 chunk1 := content(1024)
48 chunk2 := content(512)
49
50
51 c.Assert(b.AppendBlock(chunk1, nil), chk.IsNil)
52
53
54 options := GetBlobRangeOptions{
55 Range: &BlobRange{
56 Start: 0,
57 End: uint64(len(chunk1) - 1),
58 },
59 }
60 out, err := b.GetRange(&options)
61 c.Assert(err, chk.IsNil)
62 defer out.Close()
63 blobContents, err := ioutil.ReadAll(out)
64 c.Assert(err, chk.IsNil)
65 c.Assert(blobContents, chk.DeepEquals, chunk1)
66
67
68 op := AppendBlockOptions{
69 ContentMD5: true,
70 }
71 c.Assert(b.AppendBlock(chunk2, &op), chk.IsNil)
72
73
74 options.Range.End = uint64(len(chunk1) + len(chunk2) - 1)
75 out, err = b.GetRange(&options)
76 c.Assert(err, chk.IsNil)
77 defer out.Close()
78 blobContents, err = ioutil.ReadAll(out)
79 c.Assert(err, chk.IsNil)
80 c.Assert(blobContents, chk.DeepEquals, append(chunk1, chunk2...))
81 }
82
83 func (s *StorageBlobSuite) TestPutAppendBlobSpecialChars(c *chk.C) {
84 cli := getBlobClient(c)
85 rec := cli.client.appendRecorder(c)
86 defer rec.Stop()
87
88 cnt := cli.GetContainerReference(containerName(c))
89 b := cnt.GetBlobReference(blobName(c))
90 c.Assert(cnt.Create(nil), chk.IsNil)
91 defer cnt.Delete(nil)
92
93 c.Assert(b.PutAppendBlob(nil), chk.IsNil)
94
95
96 err := b.GetProperties(nil)
97 c.Assert(err, chk.IsNil)
98 c.Assert(b.Properties.ContentLength, chk.Equals, int64(0))
99 c.Assert(b.Properties.BlobType, chk.Equals, BlobTypeAppend)
100
101 chunk1 := content(1024)
102 chunk2 := content(512)
103
104
105 c.Assert(b.AppendBlock(chunk1, nil), chk.IsNil)
106
107
108 options := GetBlobRangeOptions{
109 Range: &BlobRange{
110 Start: 0,
111 End: uint64(len(chunk1) - 1),
112 },
113 }
114 out, err := b.GetRange(&options)
115 c.Assert(err, chk.IsNil)
116 defer out.Close()
117 blobContents, err := ioutil.ReadAll(out)
118 c.Assert(err, chk.IsNil)
119 c.Assert(blobContents, chk.DeepEquals, chunk1)
120
121
122 c.Assert(b.AppendBlock(chunk2, nil), chk.IsNil)
123
124
125 options.Range.End = uint64(len(chunk1) + len(chunk2) - 1)
126 out, err = b.GetRange(&options)
127 c.Assert(err, chk.IsNil)
128 defer out.Close()
129 blobContents, err = ioutil.ReadAll(out)
130 c.Assert(err, chk.IsNil)
131 c.Assert(blobContents, chk.DeepEquals, append(chunk1, chunk2...))
132 }
133
View as plain text