diff --git a/clientv3/integration/dial_test.go b/clientv3/integration/dial_test.go index 5f758ae0c..9d9e6b47f 100644 --- a/clientv3/integration/dial_test.go +++ b/clientv3/integration/dial_test.go @@ -15,17 +15,11 @@ package integration import ( - "fmt" - "io/ioutil" "math/rand" - "net/url" - "os" - "sync" "testing" "time" "github.com/coreos/etcd/clientv3" - "github.com/coreos/etcd/embed" "github.com/coreos/etcd/integration" "github.com/coreos/etcd/pkg/testutil" "golang.org/x/net/context" @@ -64,69 +58,3 @@ func TestDialSetEndpoints(t *testing.T) { } cancel() } - -var ( - testMu sync.Mutex - testPort = 31000 -) - -// TestDialWithHTTPS ensures that client can handle 'https' scheme in endpoints. -func TestDialWithHTTPS(t *testing.T) { - defer testutil.AfterTest(t) - - testMu.Lock() - port := testPort - testPort += 10 // to avoid port conflicts - testMu.Unlock() - - dir, err := ioutil.TempDir(os.TempDir(), "dial-test") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(dir) - - // set up single-node cluster with client auto TLS - cfg := embed.NewConfig() - cfg.Dir = dir - - cfg.ClientAutoTLS = true - clientURL := url.URL{Scheme: "https", Host: fmt.Sprintf("localhost:%d", port)} - cfg.LCUrls, cfg.ACUrls = []url.URL{clientURL}, []url.URL{clientURL} - - peerURL := url.URL{Scheme: "http", Host: fmt.Sprintf("localhost:%d", port+1)} - cfg.LPUrls, cfg.APUrls = []url.URL{peerURL}, []url.URL{peerURL} - cfg.InitialCluster = cfg.Name + "=" + peerURL.String() - - srv, err := embed.StartEtcd(cfg) - if err != nil { - t.Fatal(err) - } - nc := srv.Config() // overwrite config after processing ClientTLSInfo - cfg = &nc - - <-srv.Server.ReadyNotify() - defer func() { - srv.Close() - <-srv.Err() - }() - - // wait for leader election to finish - time.Sleep(500 * time.Millisecond) - - ccfg := clientv3.Config{Endpoints: []string{clientURL.String()}} - tcfg, err := cfg.ClientTLSInfo.ClientConfig() - if err != nil { - t.Fatal(err) - } - ccfg.TLS = tcfg - - cli, err := clientv3.New(ccfg) - if err != nil { - t.Fatal(err) - } - defer cli.Close() - - if _, err = cli.Get(context.Background(), "foo"); err != nil { - t.Fatal(err) - } -} diff --git a/e2e/ctl_v3_test.go b/e2e/ctl_v3_test.go index b390e1760..d52a5ae8c 100644 --- a/e2e/ctl_v3_test.go +++ b/e2e/ctl_v3_test.go @@ -37,6 +37,18 @@ func ctlV3Version(cx ctlCtx) error { return spawnWithExpect(cmdArgs, version.Version) } +// TestCtlV3DialWithHTTPScheme ensures that client handles endpoints with HTTPS scheme. +func TestCtlV3DialWithHTTPScheme(t *testing.T) { + testCtl(t, dialWithSchemeTest, withCfg(configClientTLS)) +} + +func dialWithSchemeTest(cx ctlCtx) { + cmdArgs := append(cx.prefixArgs(cx.epc.endpoints()), "put", "foo", "bar") + if err := spawnWithExpect(cmdArgs, "OK"); err != nil { + cx.t.Fatal(err) + } +} + type ctlCtx struct { t *testing.T cfg etcdProcessClusterConfig @@ -141,12 +153,12 @@ func testCtl(t *testing.T, testFunc func(ctlCtx), opts ...ctlOption) { } } -func (cx *ctlCtx) PrefixArgs() []string { +func (cx *ctlCtx) prefixArgs(eps []string) []string { if len(cx.epc.proxies()) > 0 { // TODO: add proxy check as in v2 panic("v3 proxy not implemented") } - cmdArgs := []string{ctlBinPath, "--endpoints", strings.Join(cx.epc.grpcEndpoints(), ","), "--dial-timeout", cx.dialTimeout.String()} + cmdArgs := []string{ctlBinPath, "--endpoints", strings.Join(eps, ","), "--dial-timeout", cx.dialTimeout.String()} if cx.epc.cfg.clientTLS == clientTLS { if cx.epc.cfg.isClientAutoTLS { cmdArgs = append(cmdArgs, "--insecure-transport=false", "--insecure-skip-tls-verify") @@ -162,6 +174,10 @@ func (cx *ctlCtx) PrefixArgs() []string { return cmdArgs } +func (cx *ctlCtx) PrefixArgs() []string { + return cx.prefixArgs(cx.epc.grpcEndpoints()) +} + func isGRPCTimedout(err error) bool { return strings.Contains(err.Error(), "grpc: timed out trying to connect") }