mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
tests: Handle simple TLS configuration for cluster in common framework
This commit is contained in:
parent
f7ee30cc41
commit
1c8adcd830
@ -18,12 +18,13 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"go.etcd.io/etcd/tests/v3/framework/config"
|
||||||
"go.etcd.io/etcd/tests/v3/framework/testutils"
|
"go.etcd.io/etcd/tests/v3/framework/testutils"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestKVPut(t *testing.T) {
|
func TestKVPut(t *testing.T) {
|
||||||
testRunner.BeforeTest(t)
|
testRunner.BeforeTest(t)
|
||||||
clus := testRunner.NewCluster(t)
|
clus := testRunner.NewCluster(t, config.ClusterConfig{ClusterSize: 1, PeerTLS: config.AutoTLS})
|
||||||
defer clus.Close()
|
defer clus.Close()
|
||||||
cc := clus.Client()
|
cc := clus.Client()
|
||||||
|
|
||||||
@ -33,7 +34,7 @@ func TestKVPut(t *testing.T) {
|
|||||||
if err := cc.Put(key, value); err != nil {
|
if err := cc.Put(key, value); err != nil {
|
||||||
t.Fatalf("count not put key %q, err: %s", key, err)
|
t.Fatalf("count not put key %q, err: %s", key, err)
|
||||||
}
|
}
|
||||||
resp, err := cc.Get(key, testutils.GetOptions{Serializable: true})
|
resp, err := cc.Get(key, config.GetOptions{Serializable: true})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("count not get key %q, err: %s", key, err)
|
t.Fatalf("count not get key %q, err: %s", key, err)
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
package testutils
|
package config
|
||||||
|
|
||||||
import clientv3 "go.etcd.io/etcd/client/v3"
|
import clientv3 "go.etcd.io/etcd/client/v3"
|
||||||
|
|
29
tests/framework/config/cluster.go
Normal file
29
tests/framework/config/cluster.go
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
// 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.
|
||||||
|
|
||||||
|
package config
|
||||||
|
|
||||||
|
type TLSConfig string
|
||||||
|
|
||||||
|
const (
|
||||||
|
NoTLS TLSConfig = ""
|
||||||
|
AutoTLS TLSConfig = "auto-tls"
|
||||||
|
ManualTLS TLSConfig = "manual-tls"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ClusterConfig struct {
|
||||||
|
ClusterSize int
|
||||||
|
PeerTLS TLSConfig
|
||||||
|
ClientTLS TLSConfig
|
||||||
|
}
|
@ -19,6 +19,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"go.etcd.io/etcd/client/pkg/v3/testutil"
|
"go.etcd.io/etcd/client/pkg/v3/testutil"
|
||||||
|
"go.etcd.io/etcd/tests/v3/framework/config"
|
||||||
"go.etcd.io/etcd/tests/v3/framework/e2e"
|
"go.etcd.io/etcd/tests/v3/framework/e2e"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -37,8 +38,37 @@ func (e e2eRunner) BeforeTest(t testing.TB) {
|
|||||||
e2e.BeforeTest(t)
|
e2e.BeforeTest(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e e2eRunner) NewCluster(t testing.TB) Cluster {
|
func (e e2eRunner) NewCluster(t testing.TB, cfg config.ClusterConfig) Cluster {
|
||||||
epc, err := e2e.NewEtcdProcessCluster(t, e2e.ConfigStandalone(*e2e.NewConfigAutoTLS()))
|
e2eConfig := e2e.EtcdProcessClusterConfig{
|
||||||
|
InitialToken: "new",
|
||||||
|
ClusterSize: cfg.ClusterSize,
|
||||||
|
}
|
||||||
|
switch cfg.ClientTLS {
|
||||||
|
case config.NoTLS:
|
||||||
|
e2eConfig.ClientTLS = e2e.ClientNonTLS
|
||||||
|
case config.AutoTLS:
|
||||||
|
e2eConfig.IsClientAutoTLS = true
|
||||||
|
e2eConfig.ClientTLS = e2e.ClientTLS
|
||||||
|
case config.ManualTLS:
|
||||||
|
e2eConfig.IsClientAutoTLS = false
|
||||||
|
e2eConfig.ClientTLS = e2e.ClientTLS
|
||||||
|
default:
|
||||||
|
t.Fatalf("ClientTLS config %q not supported", cfg.ClientTLS)
|
||||||
|
}
|
||||||
|
switch cfg.PeerTLS {
|
||||||
|
case config.NoTLS:
|
||||||
|
e2eConfig.IsPeerTLS = false
|
||||||
|
e2eConfig.IsPeerAutoTLS = false
|
||||||
|
case config.AutoTLS:
|
||||||
|
e2eConfig.IsPeerTLS = true
|
||||||
|
e2eConfig.IsPeerAutoTLS = true
|
||||||
|
case config.ManualTLS:
|
||||||
|
e2eConfig.IsPeerTLS = true
|
||||||
|
e2eConfig.IsPeerAutoTLS = false
|
||||||
|
default:
|
||||||
|
t.Fatalf("PeerTLS config %q not supported", cfg.PeerTLS)
|
||||||
|
}
|
||||||
|
epc, err := e2e.NewEtcdProcessCluster(t, &e2eConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("could not start etcd integrationCluster: %s", err)
|
t.Fatalf("could not start etcd integrationCluster: %s", err)
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
clientv3 "go.etcd.io/etcd/client/v3"
|
clientv3 "go.etcd.io/etcd/client/v3"
|
||||||
"go.etcd.io/etcd/tests/v3/framework/testutils"
|
"go.etcd.io/etcd/tests/v3/framework/config"
|
||||||
)
|
)
|
||||||
|
|
||||||
type EtcdctlV3 struct {
|
type EtcdctlV3 struct {
|
||||||
@ -39,7 +39,7 @@ func (ctl *EtcdctlV3) DowngradeEnable(version string) error {
|
|||||||
return SpawnWithExpect(ctl.cmdArgs("downgrade", "enable", version), "Downgrade enable success")
|
return SpawnWithExpect(ctl.cmdArgs("downgrade", "enable", version), "Downgrade enable success")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ctl *EtcdctlV3) Get(key string, o testutils.GetOptions) (*clientv3.GetResponse, error) {
|
func (ctl *EtcdctlV3) Get(key string, o config.GetOptions) (*clientv3.GetResponse, error) {
|
||||||
args := ctl.cmdArgs()
|
args := ctl.cmdArgs()
|
||||||
if o.Serializable {
|
if o.Serializable {
|
||||||
args = append(args, "--consistency", "s")
|
args = append(args, "--consistency", "s")
|
||||||
|
@ -16,12 +16,15 @@ package framework
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"go.etcd.io/etcd/client/pkg/v3/testutil"
|
"go.etcd.io/etcd/client/pkg/v3/testutil"
|
||||||
|
"go.etcd.io/etcd/client/pkg/v3/transport"
|
||||||
clientv3 "go.etcd.io/etcd/client/v3"
|
clientv3 "go.etcd.io/etcd/client/v3"
|
||||||
|
"go.etcd.io/etcd/tests/v3/framework/config"
|
||||||
"go.etcd.io/etcd/tests/v3/framework/integration"
|
"go.etcd.io/etcd/tests/v3/framework/integration"
|
||||||
"go.etcd.io/etcd/tests/v3/framework/testutils"
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
type integrationRunner struct{}
|
type integrationRunner struct{}
|
||||||
@ -34,13 +37,41 @@ func (e integrationRunner) BeforeTest(t testing.TB) {
|
|||||||
integration.BeforeTest(t)
|
integration.BeforeTest(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e integrationRunner) NewCluster(t testing.TB) Cluster {
|
func (e integrationRunner) NewCluster(t testing.TB, cfg config.ClusterConfig) Cluster {
|
||||||
|
var err error
|
||||||
|
var integrationCfg integration.ClusterConfig
|
||||||
|
integrationCfg.Size = cfg.ClusterSize
|
||||||
|
integrationCfg.ClientTLS, err = tlsInfo(t, cfg.ClientTLS)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("ClientTLS: %s", err)
|
||||||
|
}
|
||||||
|
integrationCfg.PeerTLS, err = tlsInfo(t, cfg.PeerTLS)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("PeerTLS: %s", err)
|
||||||
|
}
|
||||||
return &integrationCluster{
|
return &integrationCluster{
|
||||||
Cluster: integration.NewCluster(t, &integration.ClusterConfig{Size: 1}),
|
Cluster: integration.NewCluster(t, &integrationCfg),
|
||||||
t: t,
|
t: t,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func tlsInfo(t testing.TB, cfg config.TLSConfig) (*transport.TLSInfo, error) {
|
||||||
|
switch cfg {
|
||||||
|
case config.NoTLS:
|
||||||
|
return nil, nil
|
||||||
|
case config.AutoTLS:
|
||||||
|
tls, err := transport.SelfCert(zap.NewNop(), t.TempDir(), []string{"localhost"}, 1)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to generate cert: %s", err)
|
||||||
|
}
|
||||||
|
return &tls, nil
|
||||||
|
case config.ManualTLS:
|
||||||
|
return &integration.TestTLSInfo, nil
|
||||||
|
default:
|
||||||
|
return nil, fmt.Errorf("config %q not supported", cfg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type integrationCluster struct {
|
type integrationCluster struct {
|
||||||
*integration.Cluster
|
*integration.Cluster
|
||||||
t testing.TB
|
t testing.TB
|
||||||
@ -63,7 +94,7 @@ type integrationClient struct {
|
|||||||
*clientv3.Client
|
*clientv3.Client
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c integrationClient) Get(key string, o testutils.GetOptions) (*clientv3.GetResponse, error) {
|
func (c integrationClient) Get(key string, o config.GetOptions) (*clientv3.GetResponse, error) {
|
||||||
clientOpts := []clientv3.OpOption{}
|
clientOpts := []clientv3.OpOption{}
|
||||||
if o.Revision != 0 {
|
if o.Revision != 0 {
|
||||||
clientOpts = append(clientOpts, clientv3.WithRev(int64(o.Revision)))
|
clientOpts = append(clientOpts, clientv3.WithRev(int64(o.Revision)))
|
||||||
|
@ -18,13 +18,13 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
clientv3 "go.etcd.io/etcd/client/v3"
|
clientv3 "go.etcd.io/etcd/client/v3"
|
||||||
"go.etcd.io/etcd/tests/v3/framework/testutils"
|
"go.etcd.io/etcd/tests/v3/framework/config"
|
||||||
)
|
)
|
||||||
|
|
||||||
type testRunner interface {
|
type testRunner interface {
|
||||||
TestMain(m *testing.M)
|
TestMain(m *testing.M)
|
||||||
BeforeTest(testing.TB)
|
BeforeTest(testing.TB)
|
||||||
NewCluster(testing.TB) Cluster
|
NewCluster(testing.TB, config.ClusterConfig) Cluster
|
||||||
}
|
}
|
||||||
|
|
||||||
type Cluster interface {
|
type Cluster interface {
|
||||||
@ -34,5 +34,5 @@ type Cluster interface {
|
|||||||
|
|
||||||
type Client interface {
|
type Client interface {
|
||||||
Put(key, value string) error
|
Put(key, value string) error
|
||||||
Get(key string, opts testutils.GetOptions) (*clientv3.GetResponse, error)
|
Get(key string, opts config.GetOptions) (*clientv3.GetResponse, error)
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"go.etcd.io/etcd/client/pkg/v3/testutil"
|
"go.etcd.io/etcd/client/pkg/v3/testutil"
|
||||||
|
"go.etcd.io/etcd/tests/v3/framework/config"
|
||||||
)
|
)
|
||||||
|
|
||||||
type unitRunner struct{}
|
type unitRunner struct{}
|
||||||
@ -38,7 +39,7 @@ func (e unitRunner) TestMain(m *testing.M) {
|
|||||||
func (e unitRunner) BeforeTest(t testing.TB) {
|
func (e unitRunner) BeforeTest(t testing.TB) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e unitRunner) NewCluster(t testing.TB) Cluster {
|
func (e unitRunner) NewCluster(t testing.TB, cfg config.ClusterConfig) Cluster {
|
||||||
testutil.SkipTestIfShortMode(t, "Cannot create clusters in --short tests")
|
testutil.SkipTestIfShortMode(t, "Cannot create clusters in --short tests")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user