diff --git a/go/vt/vttest/vtprocess.go b/go/vt/vttest/vtprocess.go index b4e4169cae3..72018043bcc 100644 --- a/go/vt/vttest/vtprocess.go +++ b/go/vt/vttest/vtprocess.go @@ -24,17 +24,37 @@ import ( "os" "os/exec" "path" + "regexp" + "strconv" "strings" "syscall" "testing" "time" + vtutils "vitess.io/vitess/go/vt/utils" + "google.golang.org/protobuf/encoding/prototext" "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/servenv" ) +var versionRegex = regexp.MustCompile(`Version: ([0-9]+)\.([0-9]+)\.([0-9]+)`) + +// getMajorVersion extracts the major version from a binary by running binaryName --version +func getMajorVersion(binaryName string) (int, error) { + version, err := exec.Command(binaryName, "--version").Output() + if err != nil { + return 0, err + } + v := versionRegex.FindStringSubmatch(string(version)) + if len(v) != 4 { + return 0, fmt.Errorf("could not parse server version from: %s", version) + } + + return strconv.Atoi(v[1]) +} + // HealthChecker is a callback that impements a service-specific health check // It must return true if the service at the given `addr` is reachable, false // otherwerise. @@ -281,8 +301,12 @@ func VtcomboProcess(environment Environment, args *Config, mysql MySQLManager) ( if servenv.GRPCAuth() == "mtls" { vt.ExtraArgs = append(vt.ExtraArgs, []string{"--grpc-auth-mode", servenv.GRPCAuth(), "--grpc-key", servenv.GRPCKey(), "--grpc-cert", servenv.GRPCCert(), "--grpc-ca", servenv.GRPCCertificateAuthority(), "--grpc-auth-mtls-allowed-substrings", servenv.ClientCertSubstrings()}...) } + vtVer, err := getMajorVersion(vt.Binary) + if err != nil { + return nil, err + } if args.VSchemaDDLAuthorizedUsers != "" { - vt.ExtraArgs = append(vt.ExtraArgs, []string{"--vschema-ddl-authorized-users", args.VSchemaDDLAuthorizedUsers}...) + vt.ExtraArgs = append(vt.ExtraArgs, []string{vtutils.GetFlagVariantForTestsByVersion("--vschema-ddl-authorized-users", vtVer), args.VSchemaDDLAuthorizedUsers}...) } vt.ExtraArgs = append(vt.ExtraArgs, "--mysql-server-version", servenv.MySQLServerVersion()) if socket != "" {