mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
Merge pull request #8442 from heyitsanthony/oldrev-test
integration: check concurrent auth ops don't cause old rev errors
This commit is contained in:
commit
ef5e77e361
@ -15,6 +15,8 @@
|
|||||||
package integration
|
package integration
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
"sync"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -292,3 +294,41 @@ func TestV3AuthNonAuthorizedRPCs(t *testing.T) {
|
|||||||
t.Fatalf("could put key (%v), it should cause an error of permission denied", respput)
|
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()
|
||||||
|
}
|
||||||
|
@ -54,5 +54,9 @@ func AssertFalse(t *testing.T, v bool, msg ...string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func isNil(v interface{}) bool {
|
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()
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user