Skip to content

Commit

Permalink
Merge pull request #8442 from heyitsanthony/oldrev-test
Browse files Browse the repository at this point in the history
integration: check concurrent auth ops don't cause old rev errors
  • Loading branch information
Anthony Romano authored Aug 25, 2017
2 parents d76b29c + dfed636 commit ef5e77e
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 1 deletion.
40 changes: 40 additions & 0 deletions integration/v3_auth_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
package integration

import (
"fmt"
"sync"
"testing"
"time"

Expand Down Expand Up @@ -292,3 +294,41 @@ func TestV3AuthNonAuthorizedRPCs(t *testing.T) {
t.Fatalf("could put key (%v), it should cause an error of permission denied", respput)
}
}

func TestV3AuthOldRevConcurrent(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(),
DialTimeout: 5 * time.Second,
Username: "root",
Password: "123",
})
testutil.AssertNil(t, cerr)
defer c.Close()

var wg sync.WaitGroup
f := func(i int) {
defer wg.Done()
role, user := fmt.Sprintf("test-role-%d", i), fmt.Sprintf("test-user-%d", i)
_, err := c.RoleAdd(context.TODO(), role)
testutil.AssertNil(t, err)
_, err = c.RoleGrantPermission(context.TODO(), role, "", clientv3.GetPrefixRangeEnd(""), clientv3.PermissionType(clientv3.PermReadWrite))
testutil.AssertNil(t, err)
_, err = c.UserAdd(context.TODO(), user, "123")
testutil.AssertNil(t, err)
_, err = c.Put(context.TODO(), "a", "b")
testutil.AssertNil(t, err)
}
// needs concurrency to trigger
numRoles := 2
wg.Add(numRoles)
for i := 0; i < numRoles; i++ {
go f(i)
}
wg.Wait()
}
6 changes: 5 additions & 1 deletion pkg/testutil/assert.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,5 +54,9 @@ func AssertFalse(t *testing.T, v bool, msg ...string) {
}

func isNil(v interface{}) bool {
return v == nil || reflect.ValueOf(v).IsNil()
if v == nil {
return true
}
rv := reflect.ValueOf(v)
return rv.Kind() != reflect.Struct && rv.IsNil()
}

0 comments on commit ef5e77e

Please sign in to comment.