mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
tests: a test case for watch with auth token expiration
Signed-off-by: Hitoshi Mitake <h.mitake@gmail.com>
This commit is contained in:
parent
7b568f23ab
commit
528dd82be9
@ -136,7 +136,8 @@ type ClusterConfig struct {
|
||||
|
||||
DiscoveryURL string
|
||||
|
||||
AuthToken string
|
||||
AuthToken string
|
||||
AuthTokenTTL uint
|
||||
|
||||
UseGRPC bool
|
||||
|
||||
@ -314,6 +315,7 @@ func (c *cluster) mustNewMember(t testutil.TB, memberNumber int64) *member {
|
||||
name: c.generateMemberName(),
|
||||
memberNumber: memberNumber,
|
||||
authToken: c.cfg.AuthToken,
|
||||
authTokenTTL: c.cfg.AuthTokenTTL,
|
||||
peerTLS: c.cfg.PeerTLS,
|
||||
clientTLS: c.cfg.ClientTLS,
|
||||
quotaBackendBytes: c.cfg.QuotaBackendBytes,
|
||||
@ -624,6 +626,7 @@ type memberConfig struct {
|
||||
peerTLS *transport.TLSInfo
|
||||
clientTLS *transport.TLSInfo
|
||||
authToken string
|
||||
authTokenTTL uint
|
||||
quotaBackendBytes int64
|
||||
maxTxnOps uint
|
||||
maxRequestBytes uint
|
||||
@ -715,6 +718,9 @@ func mustNewMember(t testutil.TB, mcfg memberConfig) *member {
|
||||
if mcfg.authToken != "" {
|
||||
m.AuthToken = mcfg.authToken
|
||||
}
|
||||
if mcfg.authTokenTTL != 0 {
|
||||
m.TokenTTL = mcfg.authTokenTTL
|
||||
}
|
||||
|
||||
m.BcryptCost = uint(bcrypt.MinCost) // use min bcrypt cost to speedy up integration testing
|
||||
|
||||
|
@ -498,3 +498,36 @@ func TestV3AuthRestartMember(t *testing.T) {
|
||||
_, err = c2.Put(context.TODO(), "foo", "bar2")
|
||||
testutil.AssertNil(t, err)
|
||||
}
|
||||
|
||||
func TestV3AuthWatchAndTokenExpire(t *testing.T) {
|
||||
BeforeTest(t)
|
||||
clus := NewClusterV3(t, &ClusterConfig{Size: 1, AuthTokenTTL: 3})
|
||||
defer clus.Terminate(t)
|
||||
|
||||
ctx, cancel := context.WithTimeout(context.TODO(), 10*time.Second)
|
||||
defer cancel()
|
||||
|
||||
authSetupRoot(t, toGRPC(clus.Client(0)).Auth)
|
||||
|
||||
c, cerr := NewClient(t, clientv3.Config{Endpoints: clus.Client(0).Endpoints(), Username: "root", Password: "123"})
|
||||
if cerr != nil {
|
||||
t.Fatal(cerr)
|
||||
}
|
||||
defer c.Close()
|
||||
|
||||
_, err := c.Put(ctx, "key", "val")
|
||||
if err != nil {
|
||||
t.Fatalf("Unexpected error from Put: %v", err)
|
||||
}
|
||||
|
||||
// The first watch gets a valid auth token through watcher.newWatcherGrpcStream()
|
||||
// We should discard the first one by waiting TTL after the first watch.
|
||||
wChan := c.Watch(ctx, "key", clientv3.WithRev(1))
|
||||
watchResponse := <-wChan
|
||||
|
||||
time.Sleep(5 * time.Second)
|
||||
|
||||
wChan = c.Watch(ctx, "key", clientv3.WithRev(1))
|
||||
watchResponse = <-wChan
|
||||
testutil.AssertNil(t, watchResponse.Err())
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user