@@ -2,6 +2,8 @@ package azblob_test
22
33import (
44 "context"
5+ "io/ioutil"
6+ "time"
57
68 "crypto/md5"
79
@@ -74,155 +76,153 @@ func (b *aztestsSuite) TestAppendBlockWithMD5(c *chk.C) {
7476 validateStorageError (c , err , azblob .ServiceCodeMd5Mismatch )
7577}
7678
77- // func (b *aztestsSuite) TestAppendBlockFromURL(c *chk.C) {
78- // bsu := getBSU()
79- // credential, err := getGenericCredential("")
80- // if err != nil {
81- // c.Fatal("Invalid credential")
82- // }
83- // container, _ := createNewContainer(c, bsu)
84- // defer delContainer(c, container)
85-
86- // testSize := 4 * 1024 * 1024 // 4MB
87- // r, sourceData := getRandomDataAndReader(testSize)
88- // ctx := context.Background() // Use default Background context
89- // srcBlob := container.NewAppendBlobURL(generateName("appendsrc"))
90- // destBlob := container.NewAppendBlobURL(generateName("appenddest"))
91-
92- // // Prepare source blob for copy.
93- // cResp1, err := srcBlob.Create(context.Background(), azblob.BlobHTTPHeaders{}, nil, azblob.BlobAccessConditions{})
94- // c.Assert(err, chk.IsNil)
95- // c.Assert(cResp1.StatusCode(), chk.Equals, 201)
96- // appendResp, err := srcBlob.AppendBlock(context.Background(), r, azblob.AppendBlobAccessConditions{}, nil)
97- // c.Assert(err, chk.IsNil)
98- // c.Assert(appendResp.Response().StatusCode, chk.Equals, 201)
99- // c.Assert(appendResp.BlobAppendOffset(), chk.Equals, "0")
100- // c.Assert(appendResp.BlobCommittedBlockCount(), chk.Equals, int32(1))
101- // c.Assert(appendResp.ETag(), chk.Not(chk.Equals), azblob.ETagNone)
102- // c.Assert(appendResp.LastModified().IsZero(), chk.Equals, false)
103- // c.Assert(appendResp.ContentMD5(), chk.Not(chk.Equals), "")
104- // c.Assert(appendResp.RequestID(), chk.Not(chk.Equals), "")
105- // c.Assert(appendResp.Version(), chk.Not(chk.Equals), "")
106- // c.Assert(appendResp.Date().IsZero(), chk.Equals, false)
107-
108- // // Get source blob URL with SAS for AppendBlockFromURL.
109- // srcBlobParts := azblob.NewBlobURLParts(srcBlob.URL())
110-
111- // srcBlobParts.SAS, err = azblob.BlobSASSignatureValues{
112- // Protocol: azblob.SASProtocolHTTPS, // Users MUST use HTTPS (not HTTP)
113- // ExpiryTime: time.Now().UTC().Add(48 * time.Hour), // 48-hours before expiration
114- // ContainerName: srcBlobParts.ContainerName,
115- // BlobName: srcBlobParts.BlobName,
116- // Permissions: azblob.BlobSASPermissions{Read: true}.String(),
117- // Version: "2018-03-28",
118- // }.NewSASQueryParameters(credential)
119- // if err != nil {
120- // c.Fatal(err)
121- // }
122-
123- // srcBlobURLWithSAS := srcBlobParts.URL()
124-
125- // // Append block from URL.
126- // cResp2, err := destBlob.Create(context.Background(), azblob.BlobHTTPHeaders{}, nil, azblob.BlobAccessConditions{})
127- // c.Assert(err, chk.IsNil)
128- // c.Assert(cResp2.StatusCode(), chk.Equals, 201)
129- // appendFromURLResp, err := destBlob.AppendBlockFromURL(ctx, srcBlobURLWithSAS, 0, int64(testSize), azblob.AppendBlobAccessConditions{}, nil)
130- // c.Assert(err, chk.IsNil)
131- // c.Assert(appendFromURLResp.Response().StatusCode, chk.Equals, 201)
132- // c.Assert(appendFromURLResp.BlobAppendOffset(), chk.Equals, "0")
133- // c.Assert(appendFromURLResp.BlobCommittedBlockCount(), chk.Equals, int32(1))
134- // c.Assert(appendFromURLResp.ETag(), chk.Not(chk.Equals), azblob.ETagNone)
135- // c.Assert(appendFromURLResp.LastModified().IsZero(), chk.Equals, false)
136- // c.Assert(appendFromURLResp.ContentMD5(), chk.Not(chk.Equals), "")
137- // c.Assert(appendFromURLResp.RequestID(), chk.Not(chk.Equals), "")
138- // c.Assert(appendFromURLResp.Version(), chk.Not(chk.Equals), "")
139- // c.Assert(appendFromURLResp.Date().IsZero(), chk.Equals, false)
140-
141- // // Check data integrity through downloading.
142- // downloadResp, err := destBlob.BlobURL.Download(ctx, 0, azblob.CountToEnd, azblob.BlobAccessConditions{}, false)
143- // c.Assert(err, chk.IsNil)
144- // destData, err := ioutil.ReadAll(downloadResp.Body(azblob.RetryReaderOptions{}))
145- // c.Assert(err, chk.IsNil)
146- // c.Assert(destData, chk.DeepEquals, sourceData)
147- // }
148-
149- // func (b *aztestsSuite) TestAppendBlockFromURLWithMD5(c *chk.C) {
150- // bsu := getBSU()
151- // credential, err := getGenericCredential("")
152- // if err != nil {
153- // c.Fatal("Invalid credential")
154- // }
155- // container, _ := createNewContainer(c, bsu)
156- // defer delContainer(c, container)
157-
158- // testSize := 4 * 1024 * 1024 // 4MB
159- // r, sourceData := getRandomDataAndReader(testSize)
160- // md5Value := md5.Sum(sourceData)
161- // ctx := context.Background() // Use default Background context
162- // srcBlob := container.NewAppendBlobURL(generateName("appendsrc"))
163- // destBlob := container.NewAppendBlobURL(generateName("appenddest"))
164-
165- // // Prepare source blob for copy.
166- // cResp1, err := srcBlob.Create(context.Background(), azblob.BlobHTTPHeaders{}, nil, azblob.BlobAccessConditions{})
167- // c.Assert(err, chk.IsNil)
168- // c.Assert(cResp1.StatusCode(), chk.Equals, 201)
169- // appendResp, err := srcBlob.AppendBlock(context.Background(), r, azblob.AppendBlobAccessConditions{}, nil)
170- // c.Assert(err, chk.IsNil)
171- // c.Assert(appendResp.Response().StatusCode, chk.Equals, 201)
172- // c.Assert(appendResp.BlobAppendOffset(), chk.Equals, "0")
173- // c.Assert(appendResp.BlobCommittedBlockCount(), chk.Equals, int32(1))
174- // c.Assert(appendResp.ETag(), chk.Not(chk.Equals), azblob.ETagNone)
175- // c.Assert(appendResp.LastModified().IsZero(), chk.Equals, false)
176- // c.Assert(appendResp.ContentMD5(), chk.Not(chk.Equals), "")
177- // c.Assert(appendResp.RequestID(), chk.Not(chk.Equals), "")
178- // c.Assert(appendResp.Version(), chk.Not(chk.Equals), "")
179- // c.Assert(appendResp.Date().IsZero(), chk.Equals, false)
180-
181- // // Get source blob URL with SAS for AppendBlockFromURL.
182- // srcBlobParts := azblob.NewBlobURLParts(srcBlob.URL())
183-
184- // srcBlobParts.SAS, err = azblob.BlobSASSignatureValues{
185- // Protocol: azblob.SASProtocolHTTPS, // Users MUST use HTTPS (not HTTP)
186- // ExpiryTime: time.Now().UTC().Add(48 * time.Hour), // 48-hours before expiration
187- // ContainerName: srcBlobParts.ContainerName,
188- // BlobName: srcBlobParts.BlobName,
189- // Permissions: azblob.BlobSASPermissions{Read: true}.String(),
190- // Version: "2018-03-28",
191- // }.NewSASQueryParameters(credential)
192- // if err != nil {
193- // c.Fatal(err)
194- // }
195-
196- // srcBlobURLWithSAS := srcBlobParts.URL()
197-
198- // // Append block from URL.
199- // cResp2, err := destBlob.Create(context.Background(), azblob.BlobHTTPHeaders{}, nil, azblob.BlobAccessConditions{})
200- // c.Assert(err, chk.IsNil)
201- // c.Assert(cResp2.StatusCode(), chk.Equals, 201)
202- // appendFromURLResp, err := destBlob.AppendBlockFromURL(ctx, srcBlobURLWithSAS, 0, int64(testSize), azblob.AppendBlobAccessConditions{}, md5Value[:])
203- // c.Assert(err, chk.IsNil)
204- // c.Assert(appendFromURLResp.Response().StatusCode, chk.Equals, 201)
205- // c.Assert(appendFromURLResp.BlobAppendOffset(), chk.Equals, "0")
206- // c.Assert(appendFromURLResp.BlobCommittedBlockCount(), chk.Equals, int32(1))
207- // c.Assert(appendFromURLResp.ETag(), chk.Not(chk.Equals), azblob.ETagNone)
208- // c.Assert(appendFromURLResp.LastModified().IsZero(), chk.Equals, false)
209- // c.Assert(appendFromURLResp.ContentMD5(), chk.DeepEquals, md5Value[:])
210- // c.Assert(appendFromURLResp.RequestID(), chk.Not(chk.Equals), "")
211- // c.Assert(appendFromURLResp.Version(), chk.Not(chk.Equals), "")
212- // c.Assert(appendFromURLResp.Date().IsZero(), chk.Equals, false)
213-
214- // // Check data integrity through downloading.
215- // downloadResp, err := destBlob.BlobURL.Download(ctx, 0, azblob.CountToEnd, azblob.BlobAccessConditions{}, false)
216- // c.Assert(err, chk.IsNil)
217- // destData, err := ioutil.ReadAll(downloadResp.Body(azblob.RetryReaderOptions{}))
218- // c.Assert(err, chk.IsNil)
219- // c.Assert(destData, chk.DeepEquals, sourceData)
220-
221- // // Test append block from URL with bad MD5 value
222- // _, badMD5 := getRandomDataAndReader(16)
223- // _, err = destBlob.AppendBlockFromURL(ctx, srcBlobURLWithSAS, 0, int64(testSize), azblob.AppendBlobAccessConditions{}, badMD5[:])
224- // validateStorageError(c, err, azblob.ServiceCodeMd5Mismatch)
225- // }
79+ func (b * aztestsSuite ) TestAppendBlockFromURL (c * chk.C ) {
80+ bsu := getBSU ()
81+ credential , err := getGenericCredential ("" )
82+ if err != nil {
83+ c .Fatal ("Invalid credential" )
84+ }
85+ container , _ := createNewContainer (c , bsu )
86+ defer delContainer (c , container )
87+
88+ testSize := 4 * 1024 * 1024 // 4MB
89+ r , sourceData := getRandomDataAndReader (testSize )
90+ ctx := context .Background () // Use default Background context
91+ srcBlob := container .NewAppendBlobURL (generateName ("appendsrc" ))
92+ destBlob := container .NewAppendBlobURL (generateName ("appenddest" ))
93+
94+ // Prepare source blob for copy.
95+ cResp1 , err := srcBlob .Create (context .Background (), azblob.BlobHTTPHeaders {}, nil , azblob.BlobAccessConditions {})
96+ c .Assert (err , chk .IsNil )
97+ c .Assert (cResp1 .StatusCode (), chk .Equals , 201 )
98+ appendResp , err := srcBlob .AppendBlock (context .Background (), r , azblob.AppendBlobAccessConditions {}, nil )
99+ c .Assert (err , chk .IsNil )
100+ c .Assert (appendResp .Response ().StatusCode , chk .Equals , 201 )
101+ c .Assert (appendResp .BlobAppendOffset (), chk .Equals , "0" )
102+ c .Assert (appendResp .BlobCommittedBlockCount (), chk .Equals , int32 (1 ))
103+ c .Assert (appendResp .ETag (), chk .Not (chk .Equals ), azblob .ETagNone )
104+ c .Assert (appendResp .LastModified ().IsZero (), chk .Equals , false )
105+ c .Assert (appendResp .ContentMD5 (), chk .Not (chk .Equals ), "" )
106+ c .Assert (appendResp .RequestID (), chk .Not (chk .Equals ), "" )
107+ c .Assert (appendResp .Version (), chk .Not (chk .Equals ), "" )
108+ c .Assert (appendResp .Date ().IsZero (), chk .Equals , false )
109+
110+ // Get source blob URL with SAS for AppendBlockFromURL.
111+ srcBlobParts := azblob .NewBlobURLParts (srcBlob .URL ())
112+
113+ srcBlobParts .SAS , err = azblob.BlobSASSignatureValues {
114+ Protocol : azblob .SASProtocolHTTPS , // Users MUST use HTTPS (not HTTP)
115+ ExpiryTime : time .Now ().UTC ().Add (48 * time .Hour ), // 48-hours before expiration
116+ ContainerName : srcBlobParts .ContainerName ,
117+ BlobName : srcBlobParts .BlobName ,
118+ Permissions : azblob.BlobSASPermissions {Read : true }.String (),
119+ }.NewSASQueryParameters (credential )
120+ if err != nil {
121+ c .Fatal (err )
122+ }
123+
124+ srcBlobURLWithSAS := srcBlobParts .URL ()
125+
126+ // Append block from URL.
127+ cResp2 , err := destBlob .Create (context .Background (), azblob.BlobHTTPHeaders {}, nil , azblob.BlobAccessConditions {})
128+ c .Assert (err , chk .IsNil )
129+ c .Assert (cResp2 .StatusCode (), chk .Equals , 201 )
130+ appendFromURLResp , err := destBlob .AppendBlockFromURL (ctx , srcBlobURLWithSAS , 0 , int64 (testSize ), azblob.AppendBlobAccessConditions {}, nil )
131+ c .Assert (err , chk .IsNil )
132+ c .Assert (appendFromURLResp .Response ().StatusCode , chk .Equals , 201 )
133+ c .Assert (appendFromURLResp .BlobAppendOffset (), chk .Equals , "0" )
134+ c .Assert (appendFromURLResp .BlobCommittedBlockCount (), chk .Equals , int32 (1 ))
135+ c .Assert (appendFromURLResp .ETag (), chk .Not (chk .Equals ), azblob .ETagNone )
136+ c .Assert (appendFromURLResp .LastModified ().IsZero (), chk .Equals , false )
137+ c .Assert (appendFromURLResp .ContentMD5 (), chk .Not (chk .Equals ), "" )
138+ c .Assert (appendFromURLResp .RequestID (), chk .Not (chk .Equals ), "" )
139+ c .Assert (appendFromURLResp .Version (), chk .Not (chk .Equals ), "" )
140+ c .Assert (appendFromURLResp .Date ().IsZero (), chk .Equals , false )
141+
142+ // Check data integrity through downloading.
143+ downloadResp , err := destBlob .BlobURL .Download (ctx , 0 , azblob .CountToEnd , azblob.BlobAccessConditions {}, false )
144+ c .Assert (err , chk .IsNil )
145+ destData , err := ioutil .ReadAll (downloadResp .Body (azblob.RetryReaderOptions {}))
146+ c .Assert (err , chk .IsNil )
147+ c .Assert (destData , chk .DeepEquals , sourceData )
148+ }
149+
150+ func (b * aztestsSuite ) TestAppendBlockFromURLWithMD5 (c * chk.C ) {
151+ bsu := getBSU ()
152+ credential , err := getGenericCredential ("" )
153+ if err != nil {
154+ c .Fatal ("Invalid credential" )
155+ }
156+ container , _ := createNewContainer (c , bsu )
157+ defer delContainer (c , container )
158+
159+ testSize := 4 * 1024 * 1024 // 4MB
160+ r , sourceData := getRandomDataAndReader (testSize )
161+ md5Value := md5 .Sum (sourceData )
162+ ctx := context .Background () // Use default Background context
163+ srcBlob := container .NewAppendBlobURL (generateName ("appendsrc" ))
164+ destBlob := container .NewAppendBlobURL (generateName ("appenddest" ))
165+
166+ // Prepare source blob for copy.
167+ cResp1 , err := srcBlob .Create (context .Background (), azblob.BlobHTTPHeaders {}, nil , azblob.BlobAccessConditions {})
168+ c .Assert (err , chk .IsNil )
169+ c .Assert (cResp1 .StatusCode (), chk .Equals , 201 )
170+ appendResp , err := srcBlob .AppendBlock (context .Background (), r , azblob.AppendBlobAccessConditions {}, nil )
171+ c .Assert (err , chk .IsNil )
172+ c .Assert (appendResp .Response ().StatusCode , chk .Equals , 201 )
173+ c .Assert (appendResp .BlobAppendOffset (), chk .Equals , "0" )
174+ c .Assert (appendResp .BlobCommittedBlockCount (), chk .Equals , int32 (1 ))
175+ c .Assert (appendResp .ETag (), chk .Not (chk .Equals ), azblob .ETagNone )
176+ c .Assert (appendResp .LastModified ().IsZero (), chk .Equals , false )
177+ c .Assert (appendResp .ContentMD5 (), chk .Not (chk .Equals ), "" )
178+ c .Assert (appendResp .RequestID (), chk .Not (chk .Equals ), "" )
179+ c .Assert (appendResp .Version (), chk .Not (chk .Equals ), "" )
180+ c .Assert (appendResp .Date ().IsZero (), chk .Equals , false )
181+
182+ // Get source blob URL with SAS for AppendBlockFromURL.
183+ srcBlobParts := azblob .NewBlobURLParts (srcBlob .URL ())
184+
185+ srcBlobParts .SAS , err = azblob.BlobSASSignatureValues {
186+ Protocol : azblob .SASProtocolHTTPS , // Users MUST use HTTPS (not HTTP)
187+ ExpiryTime : time .Now ().UTC ().Add (48 * time .Hour ), // 48-hours before expiration
188+ ContainerName : srcBlobParts .ContainerName ,
189+ BlobName : srcBlobParts .BlobName ,
190+ Permissions : azblob.BlobSASPermissions {Read : true }.String (),
191+ }.NewSASQueryParameters (credential )
192+ if err != nil {
193+ c .Fatal (err )
194+ }
195+
196+ srcBlobURLWithSAS := srcBlobParts .URL ()
197+
198+ // Append block from URL.
199+ cResp2 , err := destBlob .Create (context .Background (), azblob.BlobHTTPHeaders {}, nil , azblob.BlobAccessConditions {})
200+ c .Assert (err , chk .IsNil )
201+ c .Assert (cResp2 .StatusCode (), chk .Equals , 201 )
202+ appendFromURLResp , err := destBlob .AppendBlockFromURL (ctx , srcBlobURLWithSAS , 0 , int64 (testSize ), azblob.AppendBlobAccessConditions {}, md5Value [:])
203+ c .Assert (err , chk .IsNil )
204+ c .Assert (appendFromURLResp .Response ().StatusCode , chk .Equals , 201 )
205+ c .Assert (appendFromURLResp .BlobAppendOffset (), chk .Equals , "0" )
206+ c .Assert (appendFromURLResp .BlobCommittedBlockCount (), chk .Equals , int32 (1 ))
207+ c .Assert (appendFromURLResp .ETag (), chk .Not (chk .Equals ), azblob .ETagNone )
208+ c .Assert (appendFromURLResp .LastModified ().IsZero (), chk .Equals , false )
209+ c .Assert (appendFromURLResp .ContentMD5 (), chk .DeepEquals , md5Value [:])
210+ c .Assert (appendFromURLResp .RequestID (), chk .Not (chk .Equals ), "" )
211+ c .Assert (appendFromURLResp .Version (), chk .Not (chk .Equals ), "" )
212+ c .Assert (appendFromURLResp .Date ().IsZero (), chk .Equals , false )
213+
214+ // Check data integrity through downloading.
215+ downloadResp , err := destBlob .BlobURL .Download (ctx , 0 , azblob .CountToEnd , azblob.BlobAccessConditions {}, false )
216+ c .Assert (err , chk .IsNil )
217+ destData , err := ioutil .ReadAll (downloadResp .Body (azblob.RetryReaderOptions {}))
218+ c .Assert (err , chk .IsNil )
219+ c .Assert (destData , chk .DeepEquals , sourceData )
220+
221+ // Test append block from URL with bad MD5 value
222+ _ , badMD5 := getRandomDataAndReader (16 )
223+ _ , err = destBlob .AppendBlockFromURL (ctx , srcBlobURLWithSAS , 0 , int64 (testSize ), azblob.AppendBlobAccessConditions {}, badMD5 [:])
224+ validateStorageError (c , err , azblob .ServiceCodeMd5Mismatch )
225+ }
226226
227227func (s * aztestsSuite ) TestBlobCreateAppendMetadataNonEmpty (c * chk.C ) {
228228 bsu := getBSU ()
0 commit comments