Skip to content

Commit dd653d1

Browse files
Add crc header in put blob response (Azure#23383)
* add crc header in put blob response * refactor crc header * changelog updates * added test and changelog changes
1 parent 8390907 commit dd653d1

File tree

5 files changed

+59
-0
lines changed

5 files changed

+59
-0
lines changed

sdk/storage/azblob/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
## 1.4.1-beta.2 (Unreleased)
44

55
### Features Added
6+
* Added crc64 response header to Put Blob.
67

78
### Breaking Changes
89

sdk/storage/azblob/blockblob/client_test.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,40 @@ func (s *BlockBlobUnrecordedTestsSuite) TestBlockBlobClientConnectionString() {
357357
// _require.EqualValues(destData, content)
358358
// }
359359

360+
func (s *BlockBlobRecordedTestsSuite) TestPutBlobCrcResponseHeader() {
361+
_require := require.New(s.T())
362+
testName := s.T().Name()
363+
svcClient, err := testcommon.GetServiceClient(s.T(), testcommon.TestAccountDefault, nil)
364+
_require.NoError(err)
365+
366+
containerName := testcommon.GenerateContainerName(testName)
367+
containerClient := testcommon.CreateNewContainer(context.Background(), _require, containerName, svcClient)
368+
defer testcommon.DeleteContainer(context.Background(), _require, containerClient)
369+
370+
accountName, accountKey := testcommon.GetGenericAccountInfo(testcommon.TestAccountDefault)
371+
blobName := testName
372+
blobURL := fmt.Sprintf("https://%s.blob.core.windows.net/%s/%s", accountName, containerName, blobName)
373+
374+
cred, err := blob.NewSharedKeyCredential(accountName, accountKey)
375+
_require.NoError(err)
376+
377+
bbClient, err := blockblob.NewClientWithSharedKeyCredential(blobURL, cred, nil)
378+
_require.NoError(err)
379+
380+
contentSize := 4 * 1024 // 4 KB
381+
r, sourceData := testcommon.GetDataAndReader(testName, contentSize)
382+
rsc := streaming.NopCloser(r)
383+
crc64Value := crc64.Checksum(sourceData, shared.CRC64Table)
384+
crc := make([]byte, 8)
385+
binary.LittleEndian.PutUint64(crc, crc64Value)
386+
387+
resp, err := bbClient.Upload(context.Background(), rsc, nil)
388+
_require.NoError(err)
389+
_require.NotNil(resp)
390+
_require.NotNil(resp.ContentCRC64)
391+
_require.Equal(resp.ContentCRC64, crc)
392+
}
393+
360394
func (s *BlockBlobUnrecordedTestsSuite) TestStageBlockFromURLWithMD5() {
361395
_require := require.New(s.T())
362396
testName := s.T().Name()

sdk/storage/azblob/internal/generated/autorest.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,20 @@ directive:
3838
replaceAll(`[]string{"2021-12-02"}`, `[]string{ServiceVersion}`);
3939
```
4040
41+
### Fix CRC Response Header in PutBlob response
42+
``` yaml
43+
directive:
44+
- from: swagger-document
45+
where: $["x-ms-paths"]["/{containerName}/{blob}?BlockBlob"].put.responses["201"].headers
46+
transform: >
47+
$["x-ms-content-crc64"] = {
48+
"x-ms-client-name": "ContentCRC64",
49+
"type": "string",
50+
"format": "byte",
51+
"description": "Returned for a block blob so that the client can check the integrity of message content."
52+
};
53+
```
54+
4155
### Undo breaking change with BlobName
4256
``` yaml
4357
directive:

sdk/storage/azblob/internal/generated/zz_blockblob_client.go

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

sdk/storage/azblob/internal/generated/zz_responses.go

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)