Skip to content

Commit dd74ea3

Browse files
Transaction Validation - Blob Client (Azure#20550)
* Test for CopyFromURL in blob client * Update sdk/storage/azblob/blob/client_test.go Co-authored-by: Sean McCullough <44180881+seanmcc-msft@users.noreply.github.com> --------- Co-authored-by: Sean McCullough <44180881+seanmcc-msft@users.noreply.github.com>
1 parent 6d09fb8 commit dd74ea3

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed

sdk/storage/azblob/blob/client_test.go

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,67 @@ func waitForCopy(_require *require.Assertions, copyBlobClient *blockblob.Client,
191191
}
192192
}
193193

194+
func (s *BlobUnrecordedTestsSuite) TestCopyBlockBlobFromUrlSourceContentMD5() {
195+
_require := require.New(s.T())
196+
testName := s.T().Name()
197+
svcClient, err := testcommon.GetServiceClient(s.T(), testcommon.TestAccountDefault, nil)
198+
if err != nil {
199+
s.Fail("Unable to fetch service client because " + err.Error())
200+
}
201+
202+
containerName := testcommon.GenerateContainerName(testName)
203+
containerClient := testcommon.CreateNewContainer(context.Background(), _require, containerName, svcClient)
204+
defer testcommon.DeleteContainer(context.Background(), _require, containerClient)
205+
206+
const contentSize = 8 * 1024 // 8 KB
207+
content := make([]byte, contentSize)
208+
contentMD5 := md5.Sum(content)
209+
body := bytes.NewReader(content)
210+
211+
srcBlob := containerClient.NewBlockBlobClient("srcblob")
212+
destBlob := containerClient.NewBlockBlobClient("destblob")
213+
214+
// Prepare source bbClient for copy.
215+
_, err = srcBlob.Upload(context.Background(), streaming.NopCloser(body), nil)
216+
_require.Nil(err)
217+
218+
expiryTime, err := time.Parse(time.UnixDate, "Fri Jun 11 20:00:00 UTC 2049")
219+
_require.Nil(err)
220+
221+
credential, err := testcommon.GetGenericSharedKeyCredential(testcommon.TestAccountDefault)
222+
if err != nil {
223+
s.T().Fatal("Couldn't fetch credential because " + err.Error())
224+
}
225+
226+
// Get source blob url with SAS for StageFromURL.
227+
sasQueryParams, err := sas.AccountSignatureValues{
228+
Protocol: sas.ProtocolHTTPS,
229+
ExpiryTime: expiryTime,
230+
Permissions: to.Ptr(sas.AccountPermissions{Read: true, List: true}).String(),
231+
ResourceTypes: to.Ptr(sas.AccountResourceTypes{Container: true, Object: true}).String(),
232+
}.SignWithSharedKey(credential)
233+
_require.Nil(err)
234+
235+
srcBlobParts, _ := blob.ParseURL(srcBlob.URL())
236+
srcBlobParts.SAS = sasQueryParams
237+
srcBlobURLWithSAS := srcBlobParts.String()
238+
239+
// Invoke CopyFromURL.
240+
sourceContentMD5 := contentMD5[:]
241+
resp, err := destBlob.CopyFromURL(context.Background(), srcBlobURLWithSAS, &blob.CopyFromURLOptions{
242+
SourceContentMD5: sourceContentMD5,
243+
})
244+
_require.Nil(err)
245+
_require.EqualValues(resp.ContentMD5, sourceContentMD5)
246+
247+
// Provide bad MD5 and make sure the copy fails
248+
_, badMD5 := testcommon.GetRandomDataAndReader(16)
249+
resp, err = destBlob.CopyFromURL(context.Background(), srcBlobURLWithSAS, &blob.CopyFromURLOptions{
250+
SourceContentMD5: badMD5,
251+
})
252+
_require.NotNil(err)
253+
}
254+
194255
func (s *BlobRecordedTestsSuite) TestBlobStartCopyDestEmpty() {
195256
_require := require.New(s.T())
196257
testName := s.T().Name()

0 commit comments

Comments
 (0)