in e2etest/runner.go [58:174]
func (t *TestRunner) SetAllFlags(s *scenario) {
p := s.p
o := s.operation
set := func(key string, value interface{}, dflt interface{}, formats ...string) {
if value == dflt {
return // nothing to do. The flag is not supposed to be set
}
reflectVal := reflect.ValueOf(value) // check for pointer
if reflectVal.Kind() == reflect.Pointer {
result := reflectVal.Elem() // attempt to deref
if result != (reflect.Value{}) && result.CanInterface() { // can we grab the underlying value?
value = result.Interface()
} else {
return // nothing to use
}
}
format := "%v"
if len(formats) > 0 {
format = formats[0]
}
t.flags[key] = fmt.Sprintf(format, value)
}
if o == eOperation.Benchmark() {
set("mode", p.mode, "")
set("file-count", p.fileCount, 0)
set("size-per-file", p.sizePerFile, "")
return
}
if o == eOperation.Cancel() {
set("ignore-error-if-completed", p.ignoreErrorIfCompleted, "")
return
}
// TODO: TODO: nakulkar-msft there will be many more to add here
set("recursive", p.recursive, false)
set("as-subdir", !p.invertedAsSubdir, true)
set("include-path", p.includePath, "")
set("exclude-path", p.excludePath, "")
set("include-pattern", p.includePattern, "")
set("exclude-pattern", p.excludePattern, "")
set("include-after", p.includeAfter, "")
set("include-pattern", p.includePattern, "")
set("exclude-path", p.excludePath, "")
set("exclude-pattern", p.excludePattern, "")
set("cap-mbps", p.capMbps, float32(0))
set("block-size-mb", p.blockSizeMB, float32(0))
set("put-blob-size-mb", p.putBlobSizeMB, float32(0))
set("s2s-detect-source-changed", p.s2sSourceChangeValidation, false)
set("metadata", p.metadata, "")
set("cancel-from-stdin", p.cancelFromStdin, false)
set("preserve-smb-info", p.preserveSMBInfo, nil)
set("preserve-smb-permissions", p.preserveSMBPermissions, false)
set("backup", p.backupMode, false)
set("blob-tags", p.blobTags, "")
set("blob-type", p.blobType, "")
set("s2s-preserve-blob-tags", p.s2sPreserveBlobTags, false)
set("cpk-by-name", p.cpkByName, "")
set("cpk-by-value", p.cpkByValue, false)
set("is-object-dir", p.isObjectDir, false)
set("debug-skip-files", strings.Join(p.debugSkipFiles, ";"), "")
set("check-md5", p.checkMd5.String(), "FailIfDifferent")
set("trailing-dot", p.trailingDot.String(), "Enable")
set("force-if-read-only", p.forceIfReadOnly, false)
set("delete-destination-file", p.deleteDestinationFile, false)
if o == eOperation.Copy() {
set("s2s-preserve-access-tier", p.s2sPreserveAccessTier, true)
set("preserve-posix-properties", p.preservePOSIXProperties, "")
switch p.symlinkHandling {
case common.ESymlinkHandlingType.Follow():
set("follow-symlinks", true, nil)
case common.ESymlinkHandlingType.Preserve():
set("preserve-symlinks", true, nil)
}
target := s.GetTestFiles().objectTarget
if s.fromTo.From() == common.ELocation.Blob() && s.fs.isListOfVersions() { // Otherwise, it must be a list.
s.a.Assert(s.fromTo.From(), equals(), common.ELocation.Blob(), "list of files can only be used in blob.")
versions := s.GetSource().(*resourceBlobContainer).getVersions(s.a, target.objectName)
s.a.Assert(len(versions) > 0, equals(), true, "blob was expected to have versions!")
listOfVersions := make([]string, len(target.versions))
for idx, val := range target.versions {
s.a.Assert(int(val) < len(versions), equals(), true, fmt.Sprintf("Not enough versions are present! (needed version %d of %d)", val, len(versions)))
listOfVersions[idx] = versions[val]
}
file, err := os.CreateTemp("", "listofversions*.json")
defer func(file *os.File) {
_ = file.Close()
}(file)
s.a.AssertNoErr(err, "create temp list of versions file")
for _, v := range listOfVersions {
_, err = file.WriteString(v + "\n")
s.a.AssertNoErr(err, "write to list of versions file")
}
set("list-of-versions", file.Name(), "")
}
} else if o == eOperation.Sync() {
set("delete-destination", p.deleteDestination.String(), "False")
set("preserve-posix-properties", p.preservePOSIXProperties, false)
set("compare-hash", p.compareHash.String(), "None")
set("local-hash-storage-mode", p.hashStorageMode.String(), common.EHashStorageMode.Default().String())
set("hash-meta-dir", p.hashStorageDir, "")
}
}