Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixing Metadata and other properties setting in UploadStreamToBlockBlob #17209

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
19 changes: 17 additions & 2 deletions sdk/storage/azblob/highlevel.go
Expand Up @@ -587,11 +587,26 @@ func (u *UploadStreamToBlockBlobOptions) defaults() error {
return nil
}
func (u *UploadStreamToBlockBlobOptions) getStageBlockOptions() *StageBlockOptions {
return &StageBlockOptions{}
leaseAccessConditions, _ := u.BlobAccessConditions.pointers()
return &StageBlockOptions{
CpkInfo: u.CpkInfo,
CpkScopeInfo: u.CpkScopeInfo,
LeaseAccessConditions: leaseAccessConditions,
}
}

func (u *UploadStreamToBlockBlobOptions) getCommitBlockListOptions() *CommitBlockListOptions {
return &CommitBlockListOptions{}
options := &CommitBlockListOptions{
BlobTagsMap: u.BlobTagsMap,
Metadata: u.Metadata,
Tier: u.AccessTier,
BlobHTTPHeaders: u.HTTPHeaders,
CpkInfo: u.CpkInfo,
CpkScopeInfo: u.CpkScopeInfo,
BlobAccessConditions: u.BlobAccessConditions,
}

return options
}

// UploadStreamToBlockBlob copies the file held in io.Reader to the Blob at blockBlobClient.
Expand Down
118 changes: 118 additions & 0 deletions sdk/storage/azblob/zt_client_provided_key_test.go
Expand Up @@ -1415,3 +1415,121 @@ func TestBlobSnapshotWithCPKScope(t *testing.T) {
_, err = snapshotURL.Delete(ctx, nil)
require.NoError(t, err)
}

func TestUploadStreamToBlobBlobPropertiesWithCPKKey(t *testing.T) {
svcClient, err := createServiceClient(t, testAccountDefault)
require.NoError(t, err)

blobSize := 1024
bufferSize := 8 * 1024
maxBuffers := 3
testName := t.Name()

containerName := generateContainerName(testName)
containerClient := createNewContainer(t, containerName, svcClient)
defer deleteContainer(t, containerClient)

// Set up test blob
blobName := generateBlobName(testName)
blobClient := getBlockBlobClient(blobName, containerClient)

// Create some data to test the upload stream
blobContentReader, blobData := generateData(blobSize)

// Perform UploadStreamToBlockBlob
uploadResp, err := blobClient.UploadStreamToBlockBlob(ctx, blobContentReader,
UploadStreamToBlockBlobOptions{
BufferSize: bufferSize,
MaxBuffers: maxBuffers,
Metadata: basicMetadata,
BlobTagsMap: basicBlobTagsMap,
HTTPHeaders: &basicHeaders,
CpkInfo: &testCPKByValue,
})

// Assert that upload was successful
require.Equal(t, err, nil)
require.Equal(t, uploadResp.RawResponse.StatusCode, 201)

getPropertiesResp, err := blobClient.GetProperties(ctx, &GetBlobPropertiesOptions{CpkInfo: &testCPKByValue})
require.NoError(t, err)
require.EqualValues(t, getPropertiesResp.Metadata, basicMetadata)
require.Equal(t, *getPropertiesResp.TagCount, int64(len(basicBlobTagsMap)))
require.Equal(t, getPropertiesResp.GetHTTPHeaders(), basicHeaders)

getTagsResp, err := blobClient.GetTags(ctx, nil)
require.NoError(t, err)
require.Len(t, getTagsResp.BlobTagSet, 3)
for _, blobTag := range getTagsResp.BlobTagSet {
require.Equal(t, basicBlobTagsMap[*blobTag.Key], *blobTag.Value)
}

// Download the blob to verify
downloadResponse, err := blobClient.Download(ctx, &DownloadBlobOptions{CpkInfo: &testCPKByValue})
require.NoError(t, err)

// Assert that the content is correct
actualBlobData, err := ioutil.ReadAll(downloadResponse.RawResponse.Body)
require.NoError(t, err)
require.Equal(t, len(actualBlobData), blobSize)
require.EqualValues(t, actualBlobData, blobData)
}

func TestUploadStreamToBlobBlobPropertiesWithCPKScope(t *testing.T) {
svcClient, err := createServiceClient(t, testAccountDefault)
require.NoError(t, err)

blobSize := 1024
bufferSize := 8 * 1024
maxBuffers := 3
testName := t.Name()

containerName := generateContainerName(testName)
containerClient := createNewContainer(t, containerName, svcClient)
defer deleteContainer(t, containerClient)

// Set up test blob
blobName := generateBlobName(testName)
blobClient := getBlockBlobClient(blobName, containerClient)

// Create some data to test the upload stream
blobContentReader, blobData := generateData(blobSize)

// Perform UploadStreamToBlockBlob
uploadResp, err := blobClient.UploadStreamToBlockBlob(ctx, blobContentReader,
UploadStreamToBlockBlobOptions{
BufferSize: bufferSize,
MaxBuffers: maxBuffers,
Metadata: basicMetadata,
BlobTagsMap: basicBlobTagsMap,
HTTPHeaders: &basicHeaders,
CpkScopeInfo: &testCPKByScope,
})

// Assert that upload was successful
require.Equal(t, err, nil)
require.Equal(t, uploadResp.RawResponse.StatusCode, 201)

getPropertiesResp, err := blobClient.GetProperties(ctx, nil)
require.NoError(t, err)
require.EqualValues(t, getPropertiesResp.Metadata, basicMetadata)
require.Equal(t, *getPropertiesResp.TagCount, int64(len(basicBlobTagsMap)))
require.Equal(t, getPropertiesResp.GetHTTPHeaders(), basicHeaders)

getTagsResp, err := blobClient.GetTags(ctx, nil)
require.NoError(t, err)
require.Len(t, getTagsResp.BlobTagSet, 3)
for _, blobTag := range getTagsResp.BlobTagSet {
require.Equal(t, basicBlobTagsMap[*blobTag.Key], *blobTag.Value)
}

// Download the blob to verify
downloadResponse, err := blobClient.Download(ctx, &DownloadBlobOptions{CpkScopeInfo: &testCPKByScope})
require.NoError(t, err)

// Assert that the content is correct
actualBlobData, err := ioutil.ReadAll(downloadResponse.RawResponse.Body)
require.NoError(t, err)
require.Equal(t, len(actualBlobData), blobSize)
require.EqualValues(t, actualBlobData, blobData)
}
59 changes: 59 additions & 0 deletions sdk/storage/azblob/zt_highlevel_test.go
Expand Up @@ -111,6 +111,65 @@ func TestUploadStreamToBlockBlobEmpty(t *testing.T) {
performUploadStreamToBlockBlobTest(t, t.Name(), blobSize, bufferSize, maxBuffers)
}

func TestUploadStreamToBlobBlobProperties(t *testing.T) {
recording.LiveOnly(t)
svcClient, err := createServiceClient(t, testAccountDefault)
require.NoError(t, err)

blobSize := 1024
bufferSize := 8 * 1024
maxBuffers := 3
testName := t.Name()

containerName := generateContainerName(testName)
containerClient := createNewContainer(t, containerName, svcClient)
defer deleteContainer(t, containerClient)

// Set up test blob
blobName := generateBlobName(testName)
blobClient := getBlockBlobClient(blobName, containerClient)

// Create some data to test the upload stream
blobContentReader, blobData := generateData(blobSize)

// Perform UploadStreamToBlockBlob
uploadResp, err := blobClient.UploadStreamToBlockBlob(ctx, blobContentReader,
UploadStreamToBlockBlobOptions{
BufferSize: bufferSize,
MaxBuffers: maxBuffers,
Metadata: basicMetadata,
BlobTagsMap: basicBlobTagsMap,
HTTPHeaders: &basicHeaders,
})

// Assert that upload was successful
require.Equal(t, err, nil)
require.Equal(t, uploadResp.RawResponse.StatusCode, 201)

getPropertiesResp, err := blobClient.GetProperties(ctx, nil)
require.NoError(t, err)
require.EqualValues(t, getPropertiesResp.Metadata, basicMetadata)
require.Equal(t, *getPropertiesResp.TagCount, int64(len(basicBlobTagsMap)))
require.Equal(t, getPropertiesResp.GetHTTPHeaders(), basicHeaders)

getTagsResp, err := blobClient.GetTags(ctx, nil)
require.NoError(t, err)
require.Len(t, getTagsResp.BlobTagSet, 3)
for _, blobTag := range getTagsResp.BlobTagSet {
require.Equal(t, basicBlobTagsMap[*blobTag.Key], *blobTag.Value)
}

// Download the blob to verify
downloadResponse, err := blobClient.Download(ctx, nil)
require.NoError(t, err)

// Assert that the content is correct
actualBlobData, err := ioutil.ReadAll(downloadResponse.RawResponse.Body)
require.NoError(t, err)
require.Equal(t, len(actualBlobData), blobSize)
require.EqualValues(t, actualBlobData, blobData)
}

func performUploadAndDownloadFileTest(t *testing.T, testName string, fileSize, blockSize, parallelism, downloadOffset, downloadCount int) {
recording.LiveOnly(t)
// Set up file to upload
Expand Down