func()

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
}