in e2etest/scenario_helpers.go [977:1092]
func (s scenarioHelper) enumerateShareFileProperties(a asserter, sc *share.Client) map[string]*objectProperties {
var dirQ []*directory.Client
result := make(map[string]*objectProperties)
root := sc.NewRootDirectoryClient()
rootProps, err := root.GetProperties(ctx, nil)
a.AssertNoErr(err)
rootAttr, err := sharefile.ParseNTFSFileAttributes(rootProps.FileAttributes)
a.AssertNoErr(err)
var rootPerm *string
if permKey := rootProps.FilePermissionKey; permKey != nil {
sharePerm, err := sc.GetPermission(ctx, *permKey, nil)
a.AssertNoErr(err, "Failed to get permissions from key")
rootPerm = sharePerm.Permission
}
result[""] = &objectProperties{
entityType: common.EEntityType.Folder(),
smbPermissionsSddl: rootPerm,
smbAttributes: to.Ptr(ste.FileAttributesToUint32(*rootAttr)),
}
dirQ = append(dirQ, root)
for i := 0; i < len(dirQ); i++ {
currentDirURL := dirQ[i]
pager := currentDirURL.NewListFilesAndDirectoriesPager(nil)
for pager.More() {
lResp, err := pager.NextPage(context.TODO())
a.AssertNoErr(err)
// Process the files and folders we listed
for _, fileInfo := range lResp.Segment.Files {
fileURL := currentDirURL.NewFileClient(*fileInfo.Name)
fProps, err := fileURL.GetProperties(context.TODO(), nil)
a.AssertNoErr(err)
// Construct the properties object
h := contentHeaders{
cacheControl: fProps.CacheControl,
contentDisposition: fProps.ContentDisposition,
contentEncoding: fProps.ContentEncoding,
contentLanguage: fProps.ContentLanguage,
contentType: fProps.ContentType,
contentMD5: fProps.ContentMD5,
}
attr, err := sharefile.ParseNTFSFileAttributes(fProps.FileAttributes)
a.AssertNoErr(err)
fileAttrs := ste.FileAttributesToUint32(*attr)
permissionKey := fProps.FilePermissionKey
var perm string
if permissionKey != nil {
sharePerm, err := sc.GetPermission(ctx, *permissionKey, nil)
a.AssertNoErr(err, "Failed to get permissions from key")
perm = *sharePerm.Permission
}
props := objectProperties{
entityType: common.EEntityType.File(), // only enumerating files in list call
size: fProps.ContentLength,
nameValueMetadata: fProps.Metadata,
contentHeaders: &h,
creationTime: fProps.FileCreationTime,
lastWriteTime: fProps.FileLastWriteTime,
smbAttributes: &fileAttrs,
smbPermissionsSddl: &perm,
}
relativePath := *lResp.DirectoryPath + "/"
if relativePath == "/" {
relativePath = ""
}
result[relativePath+*fileInfo.Name] = &props
}
for _, dirInfo := range lResp.Segment.Directories {
dirURL := currentDirURL.NewSubdirectoryClient(*dirInfo.Name)
dProps, err := dirURL.GetProperties(context.TODO(), nil)
a.AssertNoErr(err)
// Construct the properties object
// Grab the permissions
permissionKey := dProps.FilePermissionKey
var perm string
if permissionKey != nil {
sharePerm, err := sc.GetPermission(ctx, *permissionKey, nil)
a.AssertNoErr(err, "Failed to get permissions from key")
perm = *sharePerm.Permission
}
// Set up properties
props := objectProperties{
entityType: common.EEntityType.Folder(), // Only enumerating directories in list call
nameValueMetadata: dProps.Metadata,
creationTime: dProps.FileCreationTime,
lastWriteTime: dProps.FileLastWriteTime,
smbPermissionsSddl: &perm,
}
// get the directory name properly
relativePath := *lResp.DirectoryPath + "/"
if relativePath == "/" {
relativePath = ""
}
result[relativePath+*dirInfo.Name] = &props
dirQ = append(dirQ, dirURL)
}
}
}
return result
}