(t *testing.T)
| 1070 | } |
| 1071 | |
| 1072 | func TestAuthExpiredForceReconnect(t *testing.T) { |
| 1073 | ts := runTrustServer() |
| 1074 | defer ts.Shutdown() |
| 1075 | |
| 1076 | _, err := nats.Connect(ts.ClientURL()) |
| 1077 | if err == nil { |
| 1078 | t.Fatalf("Expecting an error on connect") |
| 1079 | } |
| 1080 | ukp, err := nkeys.FromSeed(uSeed) |
| 1081 | if err != nil { |
| 1082 | t.Fatalf("Error creating user key pair: %v", err) |
| 1083 | } |
| 1084 | upub, err := ukp.PublicKey() |
| 1085 | if err != nil { |
| 1086 | t.Fatalf("Error getting user public key: %v", err) |
| 1087 | } |
| 1088 | akp, err := nkeys.FromSeed(aSeed) |
| 1089 | if err != nil { |
| 1090 | t.Fatalf("Error creating account key pair: %v", err) |
| 1091 | } |
| 1092 | |
| 1093 | jwtCB := func() (string, error) { |
| 1094 | claims := jwt.NewUserClaims("test") |
| 1095 | claims.Expires = time.Now().Add(time.Second).Unix() |
| 1096 | claims.Subject = upub |
| 1097 | jwt, err := claims.Encode(akp) |
| 1098 | if err != nil { |
| 1099 | return "", err |
| 1100 | } |
| 1101 | return jwt, nil |
| 1102 | } |
| 1103 | sigCB := func(nonce []byte) ([]byte, error) { |
| 1104 | kp, _ := nkeys.FromSeed(uSeed) |
| 1105 | sig, _ := kp.Sign(nonce) |
| 1106 | return sig, nil |
| 1107 | } |
| 1108 | |
| 1109 | errCh := make(chan error, 1) |
| 1110 | nc, err := nats.Connect(ts.ClientURL(), nats.UserJWT(jwtCB, sigCB), nats.ReconnectWait(10*time.Second), |
| 1111 | nats.ErrorHandler(func(_ *nats.Conn, _ *nats.Subscription, err error) { |
| 1112 | errCh <- err |
| 1113 | })) |
| 1114 | if err != nil { |
| 1115 | t.Fatalf("Expected to connect, got %v", err) |
| 1116 | } |
| 1117 | defer nc.Close() |
| 1118 | statusCh := nc.StatusChanged(nats.RECONNECTING, nats.CONNECTED) |
| 1119 | defer close(statusCh) |
| 1120 | newStatus := make(chan nats.Status, 10) |
| 1121 | // non-blocking channel, so we need to be constantly listening |
| 1122 | go func() { |
| 1123 | for { |
| 1124 | s, ok := <-statusCh |
| 1125 | if !ok { |
| 1126 | return |
| 1127 | } |
| 1128 | newStatus <- s |
| 1129 | } |
nothing calls this directly
no test coverage detected