blob: 4e208f6939cc7f578b226982db0dfdfce5b16496 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package integration
import (
"flag"
"fmt"
"strings"
)
// The following flags are flags used in one or more integration tests, and that
// may be used by scripts that execute "go test ./sdks/go/test/integration/...".
// Because any flags used with those commands are used for each package, every
// integration test package must import these flags, even if they are not used.
var (
// BootstrapServers is the address of the bootstrap servers for a Kafka
// cluster, used for Kafka IO tests.
BootstrapServers = flag.String("bootstrap_servers", "",
"URL of the bootstrap servers for the Kafka cluster. Should be accessible by the runner.")
// KafkaJar is a filepath to a jar for starting a Kafka cluster, used for
// Kafka IO tests.
KafkaJar = flag.String("kafka_jar", "",
"The filepath to a jar for starting up a Kafka cluster. Only used if boostrap_servers is unspecified.")
// KafkaJarTimeout attempts to apply an auto-shutdown timeout to the Kafka
// cluster jar. Only used for Kafka IO tests.
KafkaJarTimeout = flag.String("kafka_jar_timeout", "10m",
"Sets an auto-shutdown timeout to the Kafka cluster. "+
"Requires the timeout command to be present in Path, unless the value is set to \"\".")
// BigQueryDataset is the name of the dataset to create tables in for
// BigQuery integration tests.
BigQueryDataset = flag.String("bq_dataset", "",
"Name of the dataset to create tables in for BigQuery tests.")
// BigtableInstance is the name of the Bigtable instance to create tables in
// for Bigtable integration tests.
BigtableInstance = flag.String("bt_instance", "",
"Name of the Bigtable instance to create tables in for Bigtable tests.")
// ExpansionJars contains elements in the form "label:jar" describing jar
// filepaths for expansion services to use in integration tests, and the
// corresponding labels. Once provided through this flag, those jars can
// be used in tests via the ExpansionServices struct.
ExpansionJars stringSlice
// ExpansionAddrs contains elements in the form "label:address" describing
// endpoints for expansion services to use in integration tests, and the
// corresponding labels. Once provided through this flag, those addresses
// can be used in tests via the ExpansionServices struct.
ExpansionAddrs stringSlice
// ExpansionTimeout attempts to apply an auto-shutdown timeout to any
// expansion services started by integration tests.
ExpansionTimeout = flag.Duration("expansion_timeout", 0,
"Sets an auto-shutdown timeout to any started expansion services. "+
"Requires the timeout command to be present in Path, unless the value is set to 0.")
)
func init() {
flag.Var(&ExpansionJars, "expansion_jar",
"Define jar locations for expansion services. Each entry consists of "+
"two values, an arbitrary label and a jar filepath, separated by a "+
"\":\", in the form \"label:jar\". Jars provided through this flag "+
"can be started by tests.")
flag.Var(&ExpansionAddrs, "expansion_addr",
"Define addresses for expansion services. Each entry consists of "+
"two values, an arbitrary label and an address, separated by a "+
"\":\", in the form \"label:address\". Addresses provided through "+
"this flag can be used as expansion addresses by tests.")
}
// GetExpansionJars gets all the jars given to --expansion_jar as a map of label to jar location.
func GetExpansionJars() map[string]string {
ret := make(map[string]string)
for _, jar := range ExpansionJars {
splits := strings.SplitN(jar, ":", 2)
ret[splits[0]] = splits[1]
}
return ret
}
// GetExpansionAddrs gets all the addresses given to --expansion_addr as a map of label to address.
func GetExpansionAddrs() map[string]string {
ret := make(map[string]string)
for _, addr := range ExpansionAddrs {
splits := strings.SplitN(addr, ":", 2)
ret[splits[0]] = splits[1]
}
return ret
}
// stringSlice is a flag.Value implementation for string slices, that allows
// multiple strings to be assigned to one flag by specifying multiple instances
// of the flag.
//
// Example:
//
// var myFlags stringSlice
// flag.Var(&myFlags, "my_flag", "A list of flags")
//
// With the example above, the slice can be set to contain ["foo", "bar"]:
//
// cmd -my_flag foo -my_flag bar
type stringSlice []string
// String implements the String method of flag.Value. This outputs the value
// of the flag as a string.
func (s *stringSlice) String() string {
return fmt.Sprintf("%v", *s)
}
// Set implements the Set method of flag.Value. This stores a string input to
// the flag into a stringSlice representation.
func (s *stringSlice) Set(value string) error {
*s = append(*s, value)
return nil
}
// Get returns the instance itself.
func (s stringSlice) Get() any {
return s
}