Skip to content

Commit

Permalink
azfile: File Client (#20511)
Browse files Browse the repository at this point in the history
* Adding file and lease client
  • Loading branch information
souravgupta-msft authored Apr 11, 2023
1 parent 1b6d18c commit d3a3ff3
Show file tree
Hide file tree
Showing 19 changed files with 2,545 additions and 212 deletions.
2 changes: 1 addition & 1 deletion sdk/storage/azfile/assets.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
"AssetsRepo": "Azure/azure-sdk-assets",
"AssetsRepoPrefixPath": "go",
"TagPrefix": "go/storage/azfile",
"Tag": "go/storage/azfile_33b8efd383"
"Tag": "go/storage/azfile_5b5e44362e"
}
103 changes: 64 additions & 39 deletions sdk/storage/azfile/directory/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,12 +60,12 @@ type DirectoryUnrecordedTestsSuite struct {
suite.Suite
}

func (d *DirectoryUnrecordedTestsSuite) TestDirNewDirectoryClient() {
func (d *DirectoryRecordedTestsSuite) TestDirNewDirectoryClient() {
_require := require.New(d.T())
testName := d.T().Name()

accountName, err := testcommon.GetRequiredEnv(testcommon.AccountNameEnvVar)
_require.NoError(err)
accountName, _ := testcommon.GetGenericAccountInfo(testcommon.TestAccountDefault)
_require.Greater(len(accountName), 0)

svcClient, err := testcommon.GetServiceClient(d.T(), testcommon.TestAccountDefault, nil)
_require.NoError(err)
Expand All @@ -83,12 +83,12 @@ func (d *DirectoryUnrecordedTestsSuite) TestDirNewDirectoryClient() {
_require.Equal(subDirClient.URL(), correctURL)
}

func (d *DirectoryUnrecordedTestsSuite) TestDirCreateFileURL() {
func (d *DirectoryRecordedTestsSuite) TestDirCreateFileURL() {
_require := require.New(d.T())
testName := d.T().Name()

accountName, err := testcommon.GetRequiredEnv(testcommon.AccountNameEnvVar)
_require.NoError(err)
accountName, _ := testcommon.GetGenericAccountInfo(testcommon.TestAccountDefault)
_require.Greater(len(accountName), 0)

svcClient, err := testcommon.GetServiceClient(d.T(), testcommon.TestAccountDefault, nil)
_require.NoError(err)
Expand All @@ -106,7 +106,7 @@ func (d *DirectoryUnrecordedTestsSuite) TestDirCreateFileURL() {
_require.Equal(fileClient.URL(), correctURL)
}

func (d *DirectoryUnrecordedTestsSuite) TestDirectoryCreateUsingSharedKey() {
func (d *DirectoryRecordedTestsSuite) TestDirectoryCreateUsingSharedKey() {
_require := require.New(d.T())
testName := d.T().Name()

Expand All @@ -122,7 +122,10 @@ func (d *DirectoryUnrecordedTestsSuite) TestDirectoryCreateUsingSharedKey() {

dirName := testcommon.GenerateDirectoryName(testName)
dirURL := "https://" + cred.AccountName() + ".file.core.windows.net/" + shareName + "/" + dirName
dirClient, err := directory.NewClientWithSharedKeyCredential(dirURL, cred, nil)

options := &directory.ClientOptions{}
testcommon.SetClientOptions(d.T(), &options.ClientOptions)
dirClient, err := directory.NewClientWithSharedKeyCredential(dirURL, cred, options)
_require.NoError(err)

resp, err := dirClient.Create(context.Background(), nil)
Expand All @@ -135,7 +138,7 @@ func (d *DirectoryUnrecordedTestsSuite) TestDirectoryCreateUsingSharedKey() {
_require.Equal(resp.FileChangeTime.IsZero(), false)
}

func (d *DirectoryUnrecordedTestsSuite) TestDirectoryCreateUsingConnectionString() {
func (d *DirectoryRecordedTestsSuite) TestDirectoryCreateUsingConnectionString() {
_require := require.New(d.T())
testName := d.T().Name()

Expand All @@ -150,7 +153,9 @@ func (d *DirectoryUnrecordedTestsSuite) TestDirectoryCreateUsingConnectionString
defer testcommon.DeleteShare(context.Background(), _require, shareClient)

dirName := testcommon.GenerateDirectoryName(testName)
dirClient, err := directory.NewClientFromConnectionString(*connString, shareName, dirName, nil)
options := &directory.ClientOptions{}
testcommon.SetClientOptions(d.T(), &options.ClientOptions)
dirClient, err := directory.NewClientFromConnectionString(*connString, shareName, dirName, options)
_require.NoError(err)

resp, err := dirClient.Create(context.Background(), nil)
Expand All @@ -164,7 +169,7 @@ func (d *DirectoryUnrecordedTestsSuite) TestDirectoryCreateUsingConnectionString

innerDirName1 := "innerdir1"
dirPath := dirName + "/" + innerDirName1
dirClient1, err := directory.NewClientFromConnectionString(*connString, shareName, dirPath, nil)
dirClient1, err := directory.NewClientFromConnectionString(*connString, shareName, dirPath, options)
_require.NoError(err)

resp, err = dirClient1.Create(context.Background(), nil)
Expand All @@ -176,7 +181,7 @@ func (d *DirectoryUnrecordedTestsSuite) TestDirectoryCreateUsingConnectionString
innerDirName2 := "innerdir2"
// using '\' as path separator between directories
dirPath = dirName + "\\" + innerDirName1 + "\\" + innerDirName2
dirClient2, err := directory.NewClientFromConnectionString(*connString, shareName, dirPath, nil)
dirClient2, err := directory.NewClientFromConnectionString(*connString, shareName, dirPath, options)
_require.NoError(err)

resp, err = dirClient2.Create(context.Background(), nil)
Expand All @@ -186,7 +191,7 @@ func (d *DirectoryUnrecordedTestsSuite) TestDirectoryCreateUsingConnectionString
_require.Equal(resp.FileCreationTime.IsZero(), false)
}

func (d *DirectoryUnrecordedTestsSuite) TestDirectoryCreateNegativeMultiLevel() {
func (d *DirectoryRecordedTestsSuite) TestDirectoryCreateNegativeMultiLevel() {
_require := require.New(d.T())
testName := d.T().Name()

Expand All @@ -203,7 +208,9 @@ func (d *DirectoryUnrecordedTestsSuite) TestDirectoryCreateNegativeMultiLevel()
dirName := testcommon.GenerateDirectoryName(testName)
// dirPath where parent dir does not exist
dirPath := "a/b/c/d/" + dirName
dirClient, err := directory.NewClientFromConnectionString(*connString, shareName, dirPath, nil)
options := &directory.ClientOptions{}
testcommon.SetClientOptions(d.T(), &options.ClientOptions)
dirClient, err := directory.NewClientFromConnectionString(*connString, shareName, dirPath, options)
_require.NoError(err)

resp, err := dirClient.Create(context.Background(), nil)
Expand All @@ -223,11 +230,7 @@ func (d *DirectoryUnrecordedTestsSuite) TestDirectoryClientUsingSAS() {
shareClient := testcommon.CreateNewShare(context.Background(), _require, shareName, svcClient)
defer testcommon.DeleteShare(context.Background(), _require, shareClient)

dirName := testcommon.GenerateDirectoryName(testName)
dirClient := shareClient.NewDirectoryClient(dirName)

_, err = dirClient.Create(context.Background(), nil)
_require.NoError(err)
dirClient := testcommon.CreateNewDirectory(context.Background(), _require, testcommon.GenerateDirectoryName(testName), shareClient)

permissions := sas.FilePermissions{
Read: true,
Expand All @@ -247,10 +250,33 @@ func (d *DirectoryUnrecordedTestsSuite) TestDirectoryClientUsingSAS() {
_require.Error(err)
testcommon.ValidateFileErrorCode(_require, err, fileerror.AuthenticationFailed)

// TODO: create files using dirSASClient
subDirSASClient := dirSASClient.NewSubdirectoryClient("subdir")
_, err = subDirSASClient.Create(context.Background(), nil)
_require.Error(err)
testcommon.ValidateFileErrorCode(_require, err, fileerror.AuthenticationFailed)

// TODO: directory SAS client unable to do create and get properties on directories.
// Also unable to do create or get properties on files. Validate this behaviour.
fileSASClient := dirSASClient.NewFileClient(testcommon.GenerateFileName(testName))
_, err = fileSASClient.Create(context.Background(), 1024, nil)
_require.Error(err)
testcommon.ValidateFileErrorCode(_require, err, fileerror.AuthenticationFailed)

_, err = fileSASClient.GetProperties(context.Background(), nil)
_require.Error(err)
testcommon.ValidateFileErrorCode(_require, err, fileerror.AuthenticationFailed)

// create file using shared key client
_, err = dirClient.NewFileClient(testcommon.GenerateFileName(testName)).Create(context.Background(), 1024, nil)
_require.NoError(err)

// get properties using SAS client
_, err = fileSASClient.GetProperties(context.Background(), nil)
_require.Error(err)
testcommon.ValidateFileErrorCode(_require, err, fileerror.AuthenticationFailed)
}

func (d *DirectoryUnrecordedTestsSuite) TestDirCreateDeleteDefault() {
func (d *DirectoryRecordedTestsSuite) TestDirCreateDeleteDefault() {
_require := require.New(d.T())
testName := d.T().Name()
svcClient, err := testcommon.GetServiceClient(d.T(), testcommon.TestAccountDefault, nil)
Expand Down Expand Up @@ -395,7 +421,7 @@ func (d *DirectoryUnrecordedTestsSuite) TestDirCreateDeleteNonDefault() {
testcommon.ValidateFileErrorCode(_require, err, fileerror.ResourceNotFound)
}

func (d *DirectoryUnrecordedTestsSuite) TestDirCreateNegativePermissions() {
func (d *DirectoryRecordedTestsSuite) TestDirCreateNegativePermissions() {
_require := require.New(d.T())
testName := d.T().Name()
svcClient, err := testcommon.GetServiceClient(d.T(), testcommon.TestAccountDefault, nil)
Expand Down Expand Up @@ -426,7 +452,7 @@ func (d *DirectoryUnrecordedTestsSuite) TestDirCreateNegativePermissions() {
_require.Error(err)
}

func (d *DirectoryUnrecordedTestsSuite) TestDirCreateNegativeAttributes() {
func (d *DirectoryRecordedTestsSuite) TestDirCreateNegativeAttributes() {
_require := require.New(d.T())
testName := d.T().Name()
svcClient, err := testcommon.GetServiceClient(d.T(), testcommon.TestAccountDefault, nil)
Expand All @@ -448,7 +474,7 @@ func (d *DirectoryUnrecordedTestsSuite) TestDirCreateNegativeAttributes() {
testcommon.ValidateFileErrorCode(_require, err, fileerror.InvalidHeaderValue)
}

func (d *DirectoryUnrecordedTestsSuite) TestDirCreateDeleteNegativeMultiLevelDir() {
func (d *DirectoryRecordedTestsSuite) TestDirCreateDeleteNegativeMultiLevelDir() {
_require := require.New(d.T())
testName := d.T().Name()
svcClient, err := testcommon.GetServiceClient(d.T(), testcommon.TestAccountDefault, nil)
Expand Down Expand Up @@ -491,7 +517,7 @@ func (d *DirectoryUnrecordedTestsSuite) TestDirCreateDeleteNegativeMultiLevelDir
_require.NoError(err)
}

func (d *DirectoryUnrecordedTestsSuite) TestDirCreateEndWithSlash() {
func (d *DirectoryRecordedTestsSuite) TestDirCreateEndWithSlash() {
_require := require.New(d.T())
testName := d.T().Name()
svcClient, err := testcommon.GetServiceClient(d.T(), testcommon.TestAccountDefault, nil)
Expand All @@ -516,7 +542,7 @@ func (d *DirectoryUnrecordedTestsSuite) TestDirCreateEndWithSlash() {
_require.NoError(err)
}

func (d *DirectoryUnrecordedTestsSuite) TestDirGetSetMetadataDefault() {
func (d *DirectoryRecordedTestsSuite) TestDirGetSetMetadataDefault() {
_require := require.New(d.T())
testName := d.T().Name()
svcClient, err := testcommon.GetServiceClient(d.T(), testcommon.TestAccountDefault, nil)
Expand Down Expand Up @@ -549,7 +575,7 @@ func (d *DirectoryUnrecordedTestsSuite) TestDirGetSetMetadataDefault() {
_require.Len(gResp.Metadata, 0)
}

func (d *DirectoryUnrecordedTestsSuite) TestDirGetSetMetadataNonDefault() {
func (d *DirectoryRecordedTestsSuite) TestDirGetSetMetadataNonDefault() {
_require := require.New(d.T())
testName := d.T().Name()
svcClient, err := testcommon.GetServiceClient(d.T(), testcommon.TestAccountDefault, nil)
Expand Down Expand Up @@ -589,7 +615,7 @@ func (d *DirectoryUnrecordedTestsSuite) TestDirGetSetMetadataNonDefault() {
_require.EqualValues(gResp.Metadata, md)
}

func (d *DirectoryUnrecordedTestsSuite) TestDirSetMetadataNegative() {
func (d *DirectoryRecordedTestsSuite) TestDirSetMetadataNegative() {
_require := require.New(d.T())
testName := d.T().Name()
svcClient, err := testcommon.GetServiceClient(d.T(), testcommon.TestAccountDefault, nil)
Expand All @@ -613,7 +639,7 @@ func (d *DirectoryUnrecordedTestsSuite) TestDirSetMetadataNegative() {
_require.Error(err)
}

func (d *DirectoryUnrecordedTestsSuite) TestDirGetPropertiesNegative() {
func (d *DirectoryRecordedTestsSuite) TestDirGetPropertiesNegative() {
_require := require.New(d.T())
testName := d.T().Name()
svcClient, err := testcommon.GetServiceClient(d.T(), testcommon.TestAccountDefault, nil)
Expand All @@ -631,7 +657,7 @@ func (d *DirectoryUnrecordedTestsSuite) TestDirGetPropertiesNegative() {
testcommon.ValidateFileErrorCode(_require, err, fileerror.ResourceNotFound)
}

func (d *DirectoryUnrecordedTestsSuite) TestDirGetPropertiesWithBaseDirectory() {
func (d *DirectoryRecordedTestsSuite) TestDirGetPropertiesWithBaseDirectory() {
_require := require.New(d.T())
testName := d.T().Name()
svcClient, err := testcommon.GetServiceClient(d.T(), testcommon.TestAccountDefault, nil)
Expand All @@ -656,7 +682,7 @@ func (d *DirectoryUnrecordedTestsSuite) TestDirGetPropertiesWithBaseDirectory()
_require.NotNil(gResp.IsServerEncrypted)
}

func (d *DirectoryUnrecordedTestsSuite) TestDirGetSetMetadataMergeAndReplace() {
func (d *DirectoryRecordedTestsSuite) TestDirGetSetMetadataMergeAndReplace() {
_require := require.New(d.T())
testName := d.T().Name()
svcClient, err := testcommon.GetServiceClient(d.T(), testcommon.TestAccountDefault, nil)
Expand Down Expand Up @@ -713,10 +739,10 @@ func (d *DirectoryUnrecordedTestsSuite) TestDirGetSetMetadataMergeAndReplace() {
_require.EqualValues(gResp.Metadata, md2)
}

func (d *DirectoryUnrecordedTestsSuite) TestSASDirectoryClientNoKey() {
func (d *DirectoryRecordedTestsSuite) TestSASDirectoryClientNoKey() {
_require := require.New(d.T())
accountName, err := testcommon.GetRequiredEnv(testcommon.AccountNameEnvVar)
_require.NoError(err)
accountName, _ := testcommon.GetGenericAccountInfo(testcommon.TestAccountDefault)
_require.Greater(len(accountName), 0)

testName := d.T().Name()
shareName := testcommon.GenerateShareName(testName)
Expand All @@ -736,12 +762,11 @@ func (d *DirectoryUnrecordedTestsSuite) TestSASDirectoryClientNoKey() {
_require.Equal(err, fileerror.MissingSharedKeyCredential)
}

func (d *DirectoryUnrecordedTestsSuite) TestSASDirectoryClientSignNegative() {
func (d *DirectoryRecordedTestsSuite) TestSASDirectoryClientSignNegative() {
_require := require.New(d.T())
accountName, err := testcommon.GetRequiredEnv(testcommon.AccountNameEnvVar)
_require.NoError(err)
accountKey, err := testcommon.GetRequiredEnv(testcommon.AccountKeyEnvVar)
_require.NoError(err)
accountName, accountKey := testcommon.GetGenericAccountInfo(testcommon.TestAccountDefault)
_require.Greater(len(accountName), 0)
_require.Greater(len(accountKey), 0)

cred, err := service.NewSharedKeyCredential(accountName, accountKey)
_require.NoError(err)
Expand Down
2 changes: 0 additions & 2 deletions sdk/storage/azfile/directory/models.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ type SharedKeyCredential = exported.SharedKeyCredential
// CreateOptions contains the optional parameters for the Client.Create method.
type CreateOptions struct {
// The default value is 'Directory' for Attributes and 'now' for CreationTime and LastWriteTime fields in file.SMBProperties.
// TODO: Change the types of creation time and last write time to string from time.Time to include values like 'now', 'preserve', etc.
FileSMBProperties *file.SMBProperties
// The default value is 'inherit' for Permission field in file.Permissions.
FilePermissions *file.Permissions
Expand Down Expand Up @@ -86,7 +85,6 @@ func (o *GetPropertiesOptions) format() *generated.DirectoryClientGetPropertiesO
// SetPropertiesOptions contains the optional parameters for the Client.SetProperties method.
type SetPropertiesOptions struct {
// The default value is 'preserve' for Attributes, CreationTime and LastWriteTime fields in file.SMBProperties.
// TODO: Change the types of creation time and last write time to string from time.Time to include values like 'now', 'preserve', etc.
FileSMBProperties *file.SMBProperties
// The default value is 'preserve' for Permission field in file.Permissions.
FilePermissions *file.Permissions
Expand Down
Loading

0 comments on commit d3a3ff3

Please sign in to comment.