Skip to content

Commit c7fe647

Browse files
Datalake CPK (#22159)
* corrected release date in changelog * datalake cpk * Update CHANGELOG.md add newline changelog * download file & stream tests * recordings * recordings * change to unrecorded test * add negative tests for CPK
1 parent 3781b06 commit c7fe647

8 files changed

Lines changed: 579 additions & 12 deletions

File tree

sdk/storage/azdatalake/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
## 1.0.1 (Unreleased)
44

55
### Features Added
6+
* Encryption Scope For SAS
7+
* CPK for Datalake
68

79
### Breaking Changes
810

sdk/storage/azdatalake/assets.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
"AssetsRepo": "Azure/azure-sdk-assets",
33
"AssetsRepoPrefixPath": "go",
44
"TagPrefix": "go/storage/azdatalake",
5-
"Tag": "go/storage/azdatalake_1ee92f87a9"
5+
"Tag": "go/storage/azdatalake_36b1978c0d"
66
}

sdk/storage/azdatalake/directory/client.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ func (d *Client) Rename(ctx context.Context, destinationPath string, options *Re
295295
newPathURL = strings.Split(newPathURL, "?")[0] + "?" + newDestQuery
296296
}
297297
newBlobURL, _ := shared.GetURLs(newPathURL)
298-
lac, mac, smac, createOpts := path.FormatRenameOptions(options, newSrcPath)
298+
lac, mac, smac, createOpts, cpkOpts := path.FormatRenameOptions(options, newSrcPath)
299299

300300
if d.identityCredential() != nil {
301301
newBlobClient, err = blockblob.NewClient(newBlobURL, *d.identityCredential(), nil)
@@ -310,7 +310,7 @@ func (d *Client) Rename(ctx context.Context, destinationPath string, options *Re
310310
return RenameResponse{}, exported.ConvertToDFSError(err)
311311
}
312312
newDirClient := (*Client)(base.NewPathClient(newPathURL, newBlobURL, newBlobClient, d.generatedDirClientWithDFS().InternalClient().WithClientName(shared.DirectoryClient), d.sharedKey(), d.identityCredential(), d.getClientOptions()))
313-
resp, err := newDirClient.generatedDirClientWithDFS().Create(ctx, createOpts, nil, lac, mac, smac, nil)
313+
resp, err := newDirClient.generatedDirClientWithDFS().Create(ctx, createOpts, nil, lac, mac, smac, cpkOpts)
314314
//return RenameResponse{
315315
// Response: resp,
316316
// NewDirectoryClient: newDirClient,

sdk/storage/azdatalake/directory/client_test.go

Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,31 @@ func (s *RecordedTestSuite) TestCreateDirAndDelete() {
147147
_require.NotNil(resp)
148148
}
149149

150+
func (s *RecordedTestSuite) TestCreateDirUsingCPK() {
151+
_require := require.New(s.T())
152+
testName := s.T().Name()
153+
154+
filesystemName := testcommon.GenerateFileSystemName(testName)
155+
fsClient, err := testcommon.GetFileSystemClient(filesystemName, s.T(), testcommon.TestAccountDatalake, nil)
156+
_require.NoError(err)
157+
defer testcommon.DeleteFileSystem(context.Background(), _require, fsClient)
158+
159+
_, err = fsClient.Create(context.Background(), nil)
160+
_require.NoError(err)
161+
162+
dirName := testcommon.GenerateDirName(testName)
163+
dirClient, err := testcommon.GetDirClient(filesystemName, dirName, s.T(), testcommon.TestAccountDatalake, nil)
164+
_require.NoError(err)
165+
166+
dirOpts := &directory.CreateOptions{CPKInfo: &testcommon.TestCPKByValue}
167+
resp, err := dirClient.Create(context.Background(), dirOpts)
168+
_require.NoError(err)
169+
_require.NotNil(resp)
170+
171+
_require.Equal(true, *(resp.IsServerEncrypted))
172+
_require.Equal(testcommon.TestCPKByValue.EncryptionKeySHA256, resp.EncryptionKeySHA256)
173+
}
174+
150175
func (s *RecordedTestSuite) TestGetAndCreateFileClient() {
151176
_require := require.New(s.T())
152177
testName := s.T().Name()
@@ -1912,6 +1937,65 @@ func (s *RecordedTestSuite) TestDirSetMetadataWithAccessConditions() {
19121937
_require.NoError(err)
19131938
}
19141939

1940+
func (s *RecordedTestSuite) TestDirSetMetadataWithCPK() {
1941+
_require := require.New(s.T())
1942+
testName := s.T().Name()
1943+
1944+
filesystemName := testcommon.GenerateFileSystemName(testName)
1945+
fsClient, err := testcommon.GetFileSystemClient(filesystemName, s.T(), testcommon.TestAccountDatalake, nil)
1946+
_require.NoError(err)
1947+
defer testcommon.DeleteFileSystem(context.Background(), _require, fsClient)
1948+
1949+
_, err = fsClient.Create(context.Background(), nil)
1950+
_require.NoError(err)
1951+
1952+
dirName := testcommon.GenerateDirName(testName)
1953+
dirClient, err := testcommon.GetDirClient(filesystemName, dirName, s.T(), testcommon.TestAccountDatalake, nil)
1954+
_require.NoError(err)
1955+
1956+
defer testcommon.DeleteDir(context.Background(), _require, dirClient)
1957+
1958+
resp, err := dirClient.Create(context.Background(), &directory.CreateOptions{CPKInfo: &testcommon.TestCPKByValue})
1959+
_require.NoError(err)
1960+
_require.NotNil(resp)
1961+
1962+
opts := &directory.SetMetadataOptions{
1963+
CPKInfo: &testcommon.TestCPKByValue,
1964+
}
1965+
_, err = dirClient.SetMetadata(context.Background(), testcommon.BasicMetadata, opts)
1966+
_require.NoError(err)
1967+
}
1968+
1969+
func (s *RecordedTestSuite) TestDirSetMetadataWithCPKNegative() {
1970+
_require := require.New(s.T())
1971+
testName := s.T().Name()
1972+
1973+
filesystemName := testcommon.GenerateFileSystemName(testName)
1974+
fsClient, err := testcommon.GetFileSystemClient(filesystemName, s.T(), testcommon.TestAccountDatalake, nil)
1975+
_require.NoError(err)
1976+
defer testcommon.DeleteFileSystem(context.Background(), _require, fsClient)
1977+
1978+
_, err = fsClient.Create(context.Background(), nil)
1979+
_require.NoError(err)
1980+
1981+
dirName := testcommon.GenerateDirName(testName)
1982+
dirClient, err := testcommon.GetDirClient(filesystemName, dirName, s.T(), testcommon.TestAccountDatalake, nil)
1983+
_require.NoError(err)
1984+
1985+
defer testcommon.DeleteDir(context.Background(), _require, dirClient)
1986+
1987+
resp, err := dirClient.Create(context.Background(), nil)
1988+
_require.NoError(err)
1989+
_require.NotNil(resp)
1990+
1991+
opts := &directory.SetMetadataOptions{
1992+
CPKInfo: &testcommon.TestCPKByValue,
1993+
}
1994+
_, err = dirClient.SetMetadata(context.Background(), testcommon.BasicMetadata, opts)
1995+
_require.Error(err)
1996+
_require.ErrorContains(err, "PathDoesNotUseCustomerSpecifiedEncryption")
1997+
}
1998+
19151999
func validatePropertiesSet(_require *require.Assertions, dirClient *directory.Client, disposition string) {
19162000
resp, err := dirClient.GetProperties(context.Background(), nil)
19172001
_require.NoError(err)
@@ -2243,6 +2327,38 @@ func (s *RecordedTestSuite) TestDirRenameNoOptions() {
22432327
//_require.Contains(resp1.NewDirectoryClient.DFSURL(), "newName")
22442328
}
22452329

2330+
func (s *RecordedTestSuite) TestDirRenameRequestWithCPK() {
2331+
_require := require.New(s.T())
2332+
testName := s.T().Name()
2333+
2334+
filesystemName := testcommon.GenerateFileSystemName(testName)
2335+
fsClient, err := testcommon.GetFileSystemClient(filesystemName, s.T(), testcommon.TestAccountDatalake, nil)
2336+
_require.NoError(err)
2337+
defer testcommon.DeleteFileSystem(context.Background(), _require, fsClient)
2338+
2339+
_, err = fsClient.Create(context.Background(), nil)
2340+
_require.NoError(err)
2341+
2342+
dirName := testcommon.GenerateDirName(testName)
2343+
dirClient, err := testcommon.GetDirClient(filesystemName, dirName, s.T(), testcommon.TestAccountDatalake, nil)
2344+
_require.NoError(err)
2345+
2346+
createOpts := &directory.CreateOptions{
2347+
CPKInfo: &testcommon.TestCPKByValue,
2348+
}
2349+
2350+
resp, err := dirClient.Create(context.Background(), createOpts)
2351+
_require.NoError(err)
2352+
_require.NotNil(resp)
2353+
2354+
renameFileOpts := &directory.RenameOptions{
2355+
CPKInfo: &testcommon.TestCPKByValue,
2356+
}
2357+
2358+
_, err = dirClient.Rename(context.Background(), "newName", renameFileOpts)
2359+
_require.NoError(err)
2360+
}
2361+
22462362
func (s *RecordedTestSuite) TestRenameDirWithNilAccessConditions() {
22472363
_require := require.New(s.T())
22482364
testName := s.T().Name()
@@ -2548,6 +2664,35 @@ func (s *RecordedTestSuite) TestDirGetPropertiesResponseCapture() {
25482664
_require.Equal("directory", respFromCtxService.Header.Get("x-ms-resource-type"))
25492665
}
25502666

2667+
func (s *RecordedTestSuite) TestDirGetPropertiesWithCPK() {
2668+
_require := require.New(s.T())
2669+
testName := s.T().Name()
2670+
2671+
filesystemName := testcommon.GenerateFileSystemName(testName)
2672+
fsClient, err := testcommon.GetFileSystemClient(filesystemName, s.T(), testcommon.TestAccountDatalake, nil)
2673+
_require.NoError(err)
2674+
defer testcommon.DeleteFileSystem(context.Background(), _require, fsClient)
2675+
2676+
_, err = fsClient.Create(context.Background(), nil)
2677+
_require.NoError(err)
2678+
2679+
dirName := testcommon.GenerateDirName(testName)
2680+
dirClient, err := testcommon.GetDirClient(filesystemName, dirName, s.T(), testcommon.TestAccountDatalake, nil)
2681+
_require.NoError(err)
2682+
2683+
dirOpts := &directory.CreateOptions{CPKInfo: &testcommon.TestCPKByValue}
2684+
resp, err := dirClient.Create(context.Background(), dirOpts)
2685+
_require.NoError(err)
2686+
_require.NotNil(resp)
2687+
2688+
getPropertiesOpts := &directory.GetPropertiesOptions{CPKInfo: &testcommon.TestCPKByValue}
2689+
response, err := dirClient.GetProperties(context.Background(), getPropertiesOpts)
2690+
_require.NoError(err)
2691+
_require.NotNil(response)
2692+
_require.Equal(*(resp.IsServerEncrypted), true)
2693+
_require.Equal(resp.EncryptionKeySHA256, testcommon.TestCPKByValue.EncryptionKeySHA256)
2694+
}
2695+
25512696
func (s *UnrecordedTestSuite) TestDirCreateDeleteUsingOAuth() {
25522697
_require := require.New(s.T())
25532698
testName := s.T().Name()

sdk/storage/azdatalake/file/client.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ func (f *Client) Rename(ctx context.Context, destinationPath string, options *Re
278278
newPathURL = strings.Split(newPathURL, "?")[0] + "?" + newDestQuery
279279
}
280280
newBlobURL, _ := shared.GetURLs(newPathURL)
281-
lac, mac, smac, createOpts := path.FormatRenameOptions(options, newSrcPath)
281+
lac, mac, smac, createOpts, cpkOpts := path.FormatRenameOptions(options, newSrcPath)
282282

283283
if f.identityCredential() != nil {
284284
newBlobClient, err = blockblob.NewClient(newBlobURL, *f.identityCredential(), nil)
@@ -293,7 +293,7 @@ func (f *Client) Rename(ctx context.Context, destinationPath string, options *Re
293293
return RenameResponse{}, exported.ConvertToDFSError(err)
294294
}
295295
newFileClient := (*Client)(base.NewPathClient(newPathURL, newBlobURL, newBlobClient, f.generatedFileClientWithDFS().InternalClient().WithClientName(shared.FileClient), f.sharedKey(), f.identityCredential(), f.getClientOptions()))
296-
resp, err := newFileClient.generatedFileClientWithDFS().Create(ctx, createOpts, nil, lac, mac, smac, nil)
296+
resp, err := newFileClient.generatedFileClientWithDFS().Create(ctx, createOpts, nil, lac, mac, smac, cpkOpts)
297297

298298
//return RenameResponse{
299299
// Response: resp,

0 commit comments

Comments
 (0)