Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

e2e: add more etcdctl tests #4351

Merged
merged 1 commit into from
Jan 30, 2016
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
154 changes: 133 additions & 21 deletions e2e/etcdctl_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ import (
"github.com/coreos/etcd/pkg/testutil"
)

func TestBasicOpsV2CtlWatchWithProxy(t *testing.T) {
func TestCtlV2Set(t *testing.T) {
defer testutil.AfterTest(t)
testProcessClusterV2CtlWatch(
testProcessClusterV2CtlSetGet(
t,
&etcdProcessClusterConfig{
clusterSize: 3,
Expand All @@ -37,9 +37,9 @@ func TestBasicOpsV2CtlWatchWithProxy(t *testing.T) {
)
}

func TestBasicOpsV2CtlWatchWithProxyNoSync(t *testing.T) {
func TestCtlV2SetNoSync(t *testing.T) {
defer testutil.AfterTest(t)
testProcessClusterV2CtlWatch(
testProcessClusterV2CtlSetGet(
t,
&etcdProcessClusterConfig{
clusterSize: 3,
Expand All @@ -52,38 +52,150 @@ func TestBasicOpsV2CtlWatchWithProxyNoSync(t *testing.T) {
)
}

func etcdctlSet(epc *etcdProcessCluster, key, value string, noSync bool) error {
func etcdctlPrefixArgs(epc *etcdProcessCluster, noSync bool) []string {
endpoint := ""
if proxies := epc.proxies(); len(proxies) != 0 {
endpoint = proxies[0].cfg.acurl.String()
} else if backends := epc.backends(); len(backends) != 0 {
endpoint = backends[0].cfg.acurl.String()
}

putArgs := []string{"../bin/etcdctl", "--endpoint", endpoint}
args := []string{"../bin/etcdctl", "--endpoint", endpoint}
if noSync {
putArgs = append(putArgs, "--no-sync")
args = append(args, "--no-sync")
}
putArgs = append(putArgs, "set", key, value)
return args
}

return spawnWithExpect(putArgs, value)
func etcdctlSet(epc *etcdProcessCluster, key, value string, noSync bool) error {
args := append(etcdctlPrefixArgs(epc, noSync), "set", key, value)
return spawnWithExpect(args, value)
}

func etcdctlWatch(epc *etcdProcessCluster, key, value string, noSync bool, done chan struct{}, errChan chan error) {
endpoint := ""
if proxies := epc.proxies(); len(proxies) != 0 {
endpoint = proxies[0].cfg.acurl.String()
} else if backends := epc.backends(); len(backends) != 0 {
endpoint = backends[0].cfg.acurl.String()
func etcdctlGet(epc *etcdProcessCluster, key, value string, noSync bool) error {
args := append(etcdctlPrefixArgs(epc, noSync), "get", key)
return spawnWithExpect(args, value)
}

func testProcessClusterV2CtlSetGet(t *testing.T, cfg *etcdProcessClusterConfig, noSync bool) {
if fileutil.Exist("../bin/etcdctl") == false {
t.Fatalf("could not find etcdctl binary")
}

watchArgs := []string{"../bin/etcdctl", "--endpoint", endpoint}
if noSync {
watchArgs = append(watchArgs, "--no-sync")
epc, errC := newEtcdProcessCluster(cfg)
if errC != nil {
t.Fatalf("could not start etcd process cluster (%v)", errC)
}
defer func() {
if errC := epc.Close(); errC != nil {
t.Fatalf("error closing etcd processes (%v)", errC)
}
}()

key, value := "foo", "bar"

if err := etcdctlSet(epc, key, value, noSync); err != nil {
t.Fatalf("failed set (%v)", err)
}

if err := etcdctlGet(epc, key, value, noSync); err != nil {
t.Fatalf("failed set (%v)", err)
}
}

func TestCtlV2Ls(t *testing.T) {
defer testutil.AfterTest(t)
testProcessClusterV2CtlLs(
t,
&etcdProcessClusterConfig{
clusterSize: 3,
proxySize: 1,
isClientTLS: false,
isPeerTLS: false,
initialToken: "new",
},
false,
)
}

func TestCtlV2LsNoSync(t *testing.T) {
defer testutil.AfterTest(t)
testProcessClusterV2CtlLs(
t,
&etcdProcessClusterConfig{
clusterSize: 3,
proxySize: 1,
isClientTLS: false,
isPeerTLS: false,
initialToken: "new",
},
true,
)
}

func etcdctlLs(epc *etcdProcessCluster, key string, noSync bool) error {
args := append(etcdctlPrefixArgs(epc, noSync), "ls")
return spawnWithExpect(args, key)
}

func testProcessClusterV2CtlLs(t *testing.T, cfg *etcdProcessClusterConfig, noSync bool) {
if fileutil.Exist("../bin/etcdctl") == false {
t.Fatalf("could not find etcdctl binary")
}
watchArgs = append(watchArgs, "watch", key)

if err := spawnWithExpect(watchArgs, value); err != nil {
epc, errC := newEtcdProcessCluster(cfg)
if errC != nil {
t.Fatalf("could not start etcd process cluster (%v)", errC)
}
defer func() {
if errC := epc.Close(); errC != nil {
t.Fatalf("error closing etcd processes (%v)", errC)
}
}()

key, value := "foo", "bar"

if err := etcdctlSet(epc, key, value, noSync); err != nil {
t.Fatalf("failed set (%v)", err)
}

if err := etcdctlLs(epc, key, noSync); err != nil {
t.Fatalf("failed set (%v)", err)
}
}

func TestCtlV2WatchWithProxy(t *testing.T) {
defer testutil.AfterTest(t)
testProcessClusterV2CtlWatch(
t,
&etcdProcessClusterConfig{
clusterSize: 3,
proxySize: 1,
isClientTLS: false,
isPeerTLS: false,
initialToken: "new",
},
false,
)
}

func TestCtlV2WatchWithProxyNoSync(t *testing.T) {
defer testutil.AfterTest(t)
testProcessClusterV2CtlWatch(
t,
&etcdProcessClusterConfig{
clusterSize: 3,
proxySize: 1,
isClientTLS: false,
isPeerTLS: false,
initialToken: "new",
},
true,
)
}

func etcdctlWatch(epc *etcdProcessCluster, key, value string, noSync bool, done chan struct{}, errChan chan error) {
args := append(etcdctlPrefixArgs(epc, noSync), "watch", key)
if err := spawnWithExpect(args, value); err != nil {
errChan <- err
return
}
Expand Down