blob: 2844bcbf31ef6c9f4d05a59a0510077108967f03 [file]
// Copyright 2022 The etcd Authors
//
// Licensed 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.
//go:build e2e
package common
import (
"fmt"
"os"
"strconv"
"time"
"go.etcd.io/etcd/client/pkg/v3/fileutil"
"go.etcd.io/etcd/tests/v3/framework"
"go.etcd.io/etcd/tests/v3/framework/config"
"go.etcd.io/etcd/tests/v3/framework/e2e"
)
func init() {
testRunner = framework.E2eTestRunner
clusterTestCases = e2eClusterTestCases
}
const (
// minimalE2eEnabledEnvVarName is for reducing e2e test matrix, leading to faster CI runtimes in some cases(e.g., presubmits).
// See https://github.com/etcd-io/etcd/issues/18983 for background.
minimalE2eEnabledEnvVarName = "E2E_TEST_MINIMAL"
)
func minimalE2eEnabled() bool {
v, ok := os.LookupEnv(minimalE2eEnabledEnvVarName)
if !ok {
return false
}
parsed, err := strconv.ParseBool(v)
if err != nil {
fmt.Printf("Invalid %s value %q: %v\n", minimalE2eEnabledEnvVarName, v, err)
return false
}
return parsed
}
func e2eClusterTestCases() []testCase {
minimalTestCases := []testCase{
{
name: "NoTLS",
config: config.ClusterConfig{ClusterSize: 1},
},
{
name: "PeerTLS and ClientTLS",
config: config.ClusterConfig{ClusterSize: 3, PeerTLS: config.ManualTLS, ClientTLS: config.ManualTLS},
},
}
if minimalE2eEnabled() {
return minimalTestCases
}
tcs := append(minimalTestCases,
testCase{
name: "PeerAutoTLS and ClientAutoTLS",
config: config.ClusterConfig{ClusterSize: 3, PeerTLS: config.AutoTLS, ClientTLS: config.AutoTLS},
},
)
if fileutil.Exist(e2e.BinPath.EtcdLastRelease) {
tcs = append(tcs,
testCase{
name: "MinorityLastVersion",
config: config.ClusterConfig{
ClusterSize: 3,
ClusterContext: &e2e.ClusterContext{
Version: e2e.MinorityLastVersion,
},
},
},
testCase{
name: "QuorumLastVersion",
config: config.ClusterConfig{
ClusterSize: 3,
ClusterContext: &e2e.ClusterContext{
Version: e2e.QuorumLastVersion,
},
},
})
}
return tcs
}
func WithAuth(userName, password string) config.ClientOption {
return e2e.WithAuth(userName, password)
}
func WithAuthToken(token string) config.ClientOption {
return e2e.WithAuthToken(token)
}
func WithEndpoints(endpoints []string) config.ClientOption {
return e2e.WithEndpoints(endpoints)
}
func WithDialTimeout(tio time.Duration) config.ClientOption {
return e2e.WithDialTimeout(tio)
}
func WithHTTP2Debug() config.ClusterOption {
return e2e.WithHTTP2Debug()
}
func WithUnixClient() config.ClusterOption {
return e2e.WithUnixClient()
}
func WithTCPClient() config.ClusterOption {
return e2e.WithTCPClient()
}