From 37a502cc88c359c588cf51065a9ba3f3cdc3e604 Mon Sep 17 00:00:00 2001 From: Anthony Romano Date: Wed, 12 Apr 2017 13:17:33 -0700 Subject: [PATCH] integration: test requests with valid auth token but disabled auth etcd was crashing since auth was assuming a token implies auth is enabled. --- integration/v3_auth_test.go | 65 +++++++++++++++++++++++++++++-------- 1 file changed, 51 insertions(+), 14 deletions(-) diff --git a/integration/v3_auth_test.go b/integration/v3_auth_test.go index 52436a5e1..0ade82db3 100644 --- a/integration/v3_auth_test.go +++ b/integration/v3_auth_test.go @@ -20,6 +20,7 @@ import ( "golang.org/x/net/context" + "github.com/coreos/etcd/clientv3" "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes" pb "github.com/coreos/etcd/etcdserver/etcdserverpb" "github.com/coreos/etcd/pkg/testutil" @@ -35,23 +36,59 @@ func TestV3AuthEmptyUserGet(t *testing.T) { defer cancel() api := toGRPC(clus.Client(0)) - auth := api.Auth - - if _, err := auth.UserAdd(ctx, &pb.AuthUserAddRequest{Name: "root", Password: "123"}); err != nil { - t.Fatal(err) - } - if _, err := auth.RoleAdd(ctx, &pb.AuthRoleAddRequest{Name: "root"}); err != nil { - t.Fatal(err) - } - if _, err := auth.UserGrantRole(ctx, &pb.AuthUserGrantRoleRequest{User: "root", Role: "root"}); err != nil { - t.Fatal(err) - } - if _, err := auth.AuthEnable(ctx, &pb.AuthEnableRequest{}); err != nil { - t.Fatal(err) - } + authSetupRoot(t, api.Auth) _, err := api.KV.Range(ctx, &pb.RangeRequest{Key: []byte("abc")}) if !eqErrGRPC(err, rpctypes.ErrUserEmpty) { t.Fatalf("got %v, expected %v", err, rpctypes.ErrUserEmpty) } } + +// TestV3AuthTokenWithDisable tests that auth won't crash if +// given a valid token when authentication is disabled +func TestV3AuthTokenWithDisable(t *testing.T) { + defer testutil.AfterTest(t) + clus := NewClusterV3(t, &ClusterConfig{Size: 1}) + defer clus.Terminate(t) + + authSetupRoot(t, toGRPC(clus.Client(0)).Auth) + + c, cerr := clientv3.New(clientv3.Config{Endpoints: clus.Client(0).Endpoints(), Username: "root", Password: "123"}) + if cerr != nil { + t.Fatal(cerr) + } + defer c.Close() + + rctx, cancel := context.WithCancel(context.TODO()) + donec := make(chan struct{}) + go func() { + defer close(donec) + for rctx.Err() == nil { + c.Put(rctx, "abc", "def") + } + }() + + time.Sleep(10 * time.Millisecond) + if _, err := c.AuthDisable(context.TODO()); err != nil { + t.Fatal(err) + } + time.Sleep(10 * time.Millisecond) + + cancel() + <-donec +} + +func authSetupRoot(t *testing.T, auth pb.AuthClient) { + if _, err := auth.UserAdd(context.TODO(), &pb.AuthUserAddRequest{Name: "root", Password: "123"}); err != nil { + t.Fatal(err) + } + if _, err := auth.RoleAdd(context.TODO(), &pb.AuthRoleAddRequest{Name: "root"}); err != nil { + t.Fatal(err) + } + if _, err := auth.UserGrantRole(context.TODO(), &pb.AuthUserGrantRoleRequest{User: "root", Role: "root"}); err != nil { + t.Fatal(err) + } + if _, err := auth.AuthEnable(context.TODO(), &pb.AuthEnableRequest{}); err != nil { + t.Fatal(err) + } +}