Skip to content

Commit 00595ab

Browse files
Fix Filter Blob API encoding issue (#23800)
* Prep for stg 95 GA release * Update CHANGELOG.md format for changelog * Fix FilterBlob API * Fix FilterBlob API * Add url encoding to azdatalake * change regex globally - azblob * add blob tag back * Add url encoding to azdatalake * add new test for blob * remove all changes other than storage * remove other than storage changes * global regex to azdatalake generated blob * remove container client from transform
1 parent 5e623a4 commit 00595ab

File tree

12 files changed

+123
-68
lines changed

12 files changed

+123
-68
lines changed

sdk/storage/azblob/CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
### Breaking Changes
88

99
### Bugs Fixed
10+
* Fix FilterBlob API if Query contains a space character. Fixes [#23546](https://github.com/Azure/azure-sdk-for-go/issues/23546)
1011

1112
### Other Changes
1213

sdk/storage/azblob/container/client_test.go

+51-2
Original file line numberDiff line numberDiff line change
@@ -2439,7 +2439,7 @@ func (s *ContainerUnrecordedTestsSuite) TestSASContainerClient() {
24392439
_require.NoError(err)
24402440
}
24412441

2442-
func (s *ContainerUnrecordedTestsSuite) TestFilterBlobsByTags() {
2442+
func (s *ContainerUnrecordedTestsSuite) TestFilterBlobsByBasicTags() {
24432443
_require := require.New(s.T())
24442444
testName := s.T().Name()
24452445
svcClient, err := testcommon.GetServiceClient(s.T(), testcommon.TestAccountDefault, nil)
@@ -2483,11 +2483,60 @@ func (s *ContainerUnrecordedTestsSuite) TestFilterBlobsByTags() {
24832483
opts := container.FilterBlobsOptions{MaxResults: to.Ptr(int32(10)), Marker: to.Ptr("")}
24842484
lResp, err := containerSasClient.FilterBlobs(context.Background(), where, &opts)
24852485
_require.NoError(err)
2486-
_require.Len(lResp.FilterBlobSegment.Blobs[0].Tags.BlobTagSet, 1)
24872486
_require.Equal(*lResp.FilterBlobSegment.Blobs[0].Tags.BlobTagSet[0].Key, "azure")
24882487
_require.Equal(*lResp.FilterBlobSegment.Blobs[0].Tags.BlobTagSet[0].Value, "blob")
24892488
}
24902489

2490+
func (s *ContainerUnrecordedTestsSuite) TestFilterBlobsBySpecialCharTags() {
2491+
_require := require.New(s.T())
2492+
testName := s.T().Name()
2493+
svcClient, err := testcommon.GetServiceClient(s.T(), testcommon.TestAccountDefault, nil)
2494+
_require.NoError(err)
2495+
2496+
containerClient := testcommon.CreateNewContainer(context.Background(), _require, testcommon.GenerateContainerName(testName), svcClient)
2497+
defer testcommon.DeleteContainer(context.Background(), _require, containerClient)
2498+
2499+
// Adding SAS and options
2500+
permissions := sas.ContainerPermissions{
2501+
Read: true,
2502+
Add: true,
2503+
Write: true,
2504+
Create: true,
2505+
Delete: true,
2506+
Tag: true,
2507+
FilterByTags: true,
2508+
}
2509+
expiry := time.Now().Add(time.Hour)
2510+
2511+
// ContainerSASURL is created with GetSASURL
2512+
sasUrl, err := containerClient.GetSASURL(permissions, expiry, nil)
2513+
_require.NoError(err)
2514+
2515+
// Create container client with sasUrl
2516+
containerSasClient, err := container.NewClientWithNoCredential(sasUrl, nil)
2517+
_require.NoError(err)
2518+
2519+
abClient := containerSasClient.NewAppendBlobClient(testcommon.GenerateBlobName(testName))
2520+
2521+
createAppendBlobOptions := appendblob.CreateOptions{
2522+
Tags: testcommon.SpecialCharBlobTagsMap,
2523+
}
2524+
createResp, err := abClient.Create(context.Background(), &createAppendBlobOptions)
2525+
_require.NoError(err)
2526+
_require.NotNil(createResp.VersionID)
2527+
time.Sleep(10 * time.Second)
2528+
2529+
// Use container client to filter blobs by tag
2530+
2531+
where := "\"go\"='written in golang'"
2532+
opts := container.FilterBlobsOptions{MaxResults: to.Ptr(int32(10))}
2533+
lResp, err := containerSasClient.FilterBlobs(context.Background(), where, &opts)
2534+
_require.NoError(err)
2535+
_require.Len(lResp.FilterBlobSegment.Blobs[0].Tags.BlobTagSet, 1)
2536+
_require.Equal(*lResp.FilterBlobSegment.Blobs[0].Tags.BlobTagSet[0].Key, "go")
2537+
_require.Equal(*lResp.FilterBlobSegment.Blobs[0].Tags.BlobTagSet[0].Value, "written in golang")
2538+
}
2539+
24912540
func (s *ContainerUnrecordedTestsSuite) TestFilterBlobsByTagsNegative() {
24922541
_require := require.New(s.T())
24932542
testName := s.T().Name()

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

+7-5
Original file line numberDiff line numberDiff line change
@@ -410,11 +410,13 @@ directive:
410410
411411
``` yaml
412412
directive:
413-
- from: zz_service_client.go
414-
where: $
415-
transform: >-
416-
return $.
417-
replace(/req.Raw\(\).URL.RawQuery \= reqQP.Encode\(\)/, `req.Raw().URL.RawQuery = strings.Replace(reqQP.Encode(), "+", "%20", -1)`)
413+
- from:
414+
- zz_service_client.go
415+
- zz_container_client.go
416+
where: $
417+
transform: >-
418+
return $.
419+
replace(/req.Raw\(\).URL.RawQuery \= reqQP.Encode\(\)/g, `req.Raw().URL.RawQuery = strings.Replace(reqQP.Encode(), "+", "%20", -1)`);
418420
```
419421
420422
### Change `where` parameter in blob filtering to be required

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

+18-18
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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

+7-7
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

sdk/storage/azblob/internal/testcommon/clients_auth.go

+1
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ var SpecialCharBlobTagsMap = map[string]string{
9191
"Microsoft Azure": "Azure Storage",
9292
"Storage+SDK": "SDK/GO",
9393
"GO ": ".Net",
94+
"go": "written in golang",
9495
}
9596

9697
func SetClientOptions(t *testing.T, opts *azcore.ClientOptions) {

sdk/storage/azblob/pageblob/client_test.go

-1
Original file line numberDiff line numberDiff line change
@@ -4225,7 +4225,6 @@ func (s *PageBlobUnrecordedTestsSuite) TestPageBlobSetBlobTagForSnapshot() {
42254225

42264226
blobGetTagsResponse, err := pbClient.GetTags(context.Background(), nil)
42274227
_require.NoError(err)
4228-
// _require.Equal(blobGetTagsResponse.RawResponse.StatusCode, 200)
42294228
blobTagsSet := blobGetTagsResponse.BlobTagSet
42304229
_require.NotNil(blobTagsSet)
42314230
_require.Len(blobTagsSet, len(testcommon.SpecialCharBlobTagsMap))

sdk/storage/azdatalake/CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
### Breaking Changes
88

99
### Bugs Fixed
10+
* Fix FilterBlob API if Query contains a space character. Fixes [#23546](https://github.com/Azure/azure-sdk-for-go/issues/23546)
1011

1112
### Other Changes
1213

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

+5-5
Original file line numberDiff line numberDiff line change
@@ -208,11 +208,11 @@ directive:
208208
209209
``` yaml
210210
directive:
211-
- from: zz_service_client.go
212-
where: $
213-
transform: >-
214-
return $.
215-
replace(/req.Raw\(\).URL.RawQuery \= reqQP.Encode\(\)/, `req.Raw().URL.RawQuery = strings.Replace(reqQP.Encode(), "+", "%20", -1)`)
211+
- from: zz_service_client.go
212+
where: $
213+
transform: >-
214+
return $.
215+
replace(/req.Raw\(\).URL.RawQuery \= reqQP.Encode\(\)/, `req.Raw().URL.RawQuery = strings.Replace(reqQP.Encode(), "+", "%20", -1)`);
216216
```
217217
218218
### Change `Duration` parameter in leases to be required

sdk/storage/azdatalake/internal/generated_blob/autorest.md

+7-5
Original file line numberDiff line numberDiff line change
@@ -347,11 +347,13 @@ directive:
347347
348348
``` yaml
349349
directive:
350-
- from: zz_service_client.go
351-
where: $
352-
transform: >-
353-
return $.
354-
replace(/req.Raw\(\).URL.RawQuery \= reqQP.Encode\(\)/, `req.Raw().URL.RawQuery = strings.Replace(reqQP.Encode(), "+", "%20", -1)`)
350+
- from:
351+
- zz_service_client.go
352+
- zz_container_client.go
353+
where: $
354+
transform: >-
355+
return $.
356+
replace(/req.Raw\(\).URL.RawQuery \= reqQP.Encode\(\)/g, `req.Raw().URL.RawQuery = strings.Replace(reqQP.Encode(), "+", "%20", -1)`);
355357
```
356358
357359
### Change `where` parameter in blob filtering to be required

0 commit comments

Comments
 (0)