Skip to content

Commit

Permalink
tests: Migrate endpoint tests to common framework
Browse files Browse the repository at this point in the history
  • Loading branch information
kkkkun committed Mar 15, 2022
1 parent 4e97271 commit a1f24e9
Show file tree
Hide file tree
Showing 7 changed files with 180 additions and 133 deletions.
58 changes: 58 additions & 0 deletions tests/common/endpoint_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
// 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 common

import (
"testing"
"time"

"go.etcd.io/etcd/tests/v3/framework/config"
"go.etcd.io/etcd/tests/v3/framework/testutils"
)

func TestEndpointStatus(t *testing.T) {
testRunner.BeforeTest(t)
clus := testRunner.NewCluster(t, config.ClusterConfig{ClusterSize: 3})
defer clus.Close()
testutils.ExecuteWithTimeout(t, 10*time.Second, func() {
_, err := clus.Client().Status()
if err != nil {
t.Fatalf("get endpoint status error: %v", err)
}
})
}

func TestEndpointHashKV(t *testing.T) {
testRunner.BeforeTest(t)
clus := testRunner.NewCluster(t, config.ClusterConfig{ClusterSize: 3})
defer clus.Close()
testutils.ExecuteWithTimeout(t, 10*time.Second, func() {
_, err := clus.Client().HashKV(0)
if err != nil {
t.Fatalf("get endpoint hashkv error: %v", err)
}
})
}

func TestEndpointHealth(t *testing.T) {
testRunner.BeforeTest(t)
clus := testRunner.NewCluster(t, config.ClusterConfig{ClusterSize: 3})
defer clus.Close()
testutils.ExecuteWithTimeout(t, 10*time.Second, func() {
if err := clus.Client().Health(); err != nil {
t.Fatalf("get endpoint health error: %v", err)
}
})
}
11 changes: 10 additions & 1 deletion tests/e2e/ctl_v3_auth_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import (
"testing"
"time"

"go.etcd.io/etcd/client/v3"
clientv3 "go.etcd.io/etcd/client/v3"
"go.etcd.io/etcd/tests/v3/framework/e2e"
)

Expand Down Expand Up @@ -1256,3 +1256,12 @@ func authTestRevisionConsistency(cx ctlCtx) {
cx.t.Fatalf("auth revison shouldn't change when restarting etcd, expected: %d, got: %d", oldAuthRevision, newAuthRevision)
}
}

func ctlV3EndpointHealth(cx ctlCtx) error {
cmdArgs := append(cx.PrefixArgs(), "endpoint", "health")
lines := make([]string, cx.epc.Cfg.ClusterSize)
for i := range lines {
lines[i] = "is healthy"
}
return e2e.SpawnWithExpects(cmdArgs, cx.envMap, lines...)
}
93 changes: 0 additions & 93 deletions tests/e2e/ctl_v3_endpoint_test.go

This file was deleted.

67 changes: 67 additions & 0 deletions tests/framework/e2e/etcdctl.go
Original file line number Diff line number Diff line change
Expand Up @@ -176,3 +176,70 @@ func (ctl *EtcdctlV3) Compact(rev int64, o config.CompactOption) (*clientv3.Comp

return nil, SpawnWithExpect(args, fmt.Sprintf("compacted revision %v", rev))
}

func (ctl *EtcdctlV3) Status() ([]*clientv3.StatusResponse, error) {
args := ctl.cmdArgs()
args = append(args, "endpoint", "status", "-w", "json")
args = append(args, "--endpoints", strings.Join(ctl.endpoints, ","))
cmd, err := SpawnCmd(args, nil)
if err != nil {
return nil, err
}

var epStatus []*struct {
Endpoint string
Status *clientv3.StatusResponse
}
line, err := cmd.Expect("header")
if err != nil {
return nil, err
}
err = json.Unmarshal([]byte(line), &epStatus)
if err != nil {
return nil, err
}
resp := make([]*clientv3.StatusResponse, len(epStatus))
for _, e := range epStatus {
resp = append(resp, e.Status)
}
return resp, err
}

func (ctl *EtcdctlV3) HashKV(rev int64) ([]*clientv3.HashKVResponse, error) {
args := ctl.cmdArgs()
args = append(args, "endpoint", "hashkv", "-w", "json")
args = append(args, "--endpoints", strings.Join(ctl.endpoints, ","))
args = append(args, "--rev", fmt.Sprint(rev))
cmd, err := SpawnCmd(args, nil)
if err != nil {
return nil, err
}
var epHashKVs []*struct {
Endpoint string
HashKV *clientv3.HashKVResponse
}
line, err := cmd.Expect("header")
if err != nil {
return nil, err
}
err = json.Unmarshal([]byte(line), &epHashKVs)
if err != nil {
return nil, err
}
resp := make([]*clientv3.HashKVResponse, len(epHashKVs))
for _, e := range epHashKVs {
resp = append(resp, e.HashKV)
}
return resp, err
}

func (ctl *EtcdctlV3) Health() error {
args := ctl.cmdArgs()
args = append(args, "endpoint", "health")
lines := make([]string, len(ctl.endpoints))
for i := range lines {
lines[i] = "is healthy"
}
return SpawnWithExpects(args, map[string]string{}, lines...)

}
41 changes: 41 additions & 0 deletions tests/framework/integration.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,12 @@ import (
"fmt"
"testing"

healthpb "google.golang.org/grpc/health/grpc_health_v1"

"go.etcd.io/etcd/client/pkg/v3/testutil"
"go.etcd.io/etcd/client/pkg/v3/transport"
clientv3 "go.etcd.io/etcd/client/v3"

"go.etcd.io/etcd/tests/v3/framework/config"
"go.etcd.io/etcd/tests/v3/framework/integration"
"go.uber.org/zap"
Expand Down Expand Up @@ -155,3 +158,41 @@ func (c integrationClient) Compact(rev int64, o config.CompactOption) (*clientv3
}
return c.Client.Compact(ctx, rev, clientOpts...)
}

func (c integrationClient) Status() ([]*clientv3.StatusResponse, error) {
endpoints := c.Client.Endpoints()
var resp []*clientv3.StatusResponse
for _, ep := range endpoints {
status, err := c.Client.Status(context.Background(), ep)
if err != nil {
return nil, err
}
resp = append(resp, status)
}
return resp, nil
}

func (c integrationClient) HashKV(rev int64) ([]*clientv3.HashKVResponse, error) {
endpoints := c.Client.Endpoints()
var resp []*clientv3.HashKVResponse
for _, ep := range endpoints {
hashKV, err := c.Client.HashKV(context.Background(), ep, rev)
if err != nil {
return nil, err
}
resp = append(resp, hashKV)
}
return resp, nil
}

func (c integrationClient) Health() error {
cli := healthpb.NewHealthClient(c.Client.ActiveConnection())
resp, err := cli.Check(context.TODO(), &healthpb.HealthCheckRequest{})
if err != nil {
return err
}
if resp.Status != healthpb.HealthCheckResponse_SERVING {
return fmt.Errorf("status expected %s, got %s", healthpb.HealthCheckResponse_SERVING, resp.Status)
}
return nil
}
4 changes: 4 additions & 0 deletions tests/framework/interface.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,8 @@ type Client interface {
Get(key string, opts config.GetOptions) (*clientv3.GetResponse, error)
Delete(key string, opts config.DeleteOptions) (*clientv3.DeleteResponse, error)
Compact(rev int64, opts config.CompactOption) (*clientv3.CompactResponse, error)

Status() ([]*clientv3.StatusResponse, error)
HashKV(rev int64) ([]*clientv3.HashKVResponse, error)
Health() error
}
39 changes: 0 additions & 39 deletions tests/integration/v3_health_test.go

This file was deleted.

0 comments on commit a1f24e9

Please sign in to comment.