func()

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, "")
	}
}