func getValidCredCombinationsForFromTo()

in e2etest/declarativeRunner.go [52:103]


func getValidCredCombinationsForFromTo(fromTo common.FromTo, requestedCredentialTypesSrc, requestedCredentialTypesDst []common.CredentialType, accountTypes []AccountType) [][2]common.CredentialType {
	output := make([][2]common.CredentialType, 0)

	credIsRequested := func(cType common.CredentialType, dst bool) bool {
		if (dst && requestedCredentialTypesDst == nil) || (!dst && requestedCredentialTypesSrc == nil) {
			return true
		}

		toSearch := requestedCredentialTypesSrc
		if dst {
			toSearch = requestedCredentialTypesDst
		}

		for _, v := range toSearch {
			if v == cType {
				return true
			}
		}

		return false
	}

	// determine source types
	var sourceTypes []common.CredentialType
	if fromTo.IsS2S() && (fromTo != common.EFromTo.BlobBlob() && fromTo != common.EFromTo.BlobFile() && fromTo != common.EFromTo.FileFile()) {
		// source must always be anonymous-- no exceptions until OAuth over S2S is introduced.
		sourceTypes = []common.CredentialType{common.ECredentialType.Anonymous()}
	} else {
		sourceTypes = validCredTypesPerLocation[fromTo.From()]
	}

	for _, srcCredType := range sourceTypes {
		if srcCredType == common.ECredentialType.MDOAuthToken() && accountTypes[0] != EAccountType.OAuthManagedDisk() && accountTypes[0] != EAccountType.ManagedDiskSnapshotOAuth() {
			continue // invalid selection
		}

		for _, dstCredType := range validCredTypesPerLocation[fromTo.To()] {
			if dstCredType == common.ECredentialType.MDOAuthToken() && accountTypes[1] != EAccountType.OAuthManagedDisk() && accountTypes[0] != EAccountType.ManagedDiskSnapshotOAuth() {
				continue // invalid selection
			}

			// make sure the user asked for this.
			if !(credIsRequested(srcCredType, false) && credIsRequested(dstCredType, true)) {
				continue
			}

			output = append(output, [2]common.CredentialType{srcCredType, dstCredType})
		}
	}

	return output
}