MCPcopy Index your code
hub / github.com/coder/coder / TestResumeTokenKeyProvider

Function TestResumeTokenKeyProvider

tailnet/resume_test.go:18–92  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

16)
17
18func TestResumeTokenKeyProvider(t *testing.T) {
19 t.Parallel()
20
21 key, err := tailnet.GenerateResumeTokenSigningKey()
22 require.NoError(t, err)
23
24 t.Run("OK", func(t *testing.T) {
25 t.Parallel()
26
27 ctx := testutil.Context(t, testutil.WaitShort)
28 id := uuid.New()
29 clock := quartz.NewMock(t)
30 provider := tailnet.NewResumeTokenKeyProvider(newKeySigner(key), clock, tailnet.DefaultResumeTokenExpiry)
31 token, err := provider.GenerateResumeToken(ctx, id)
32 require.NoError(t, err)
33 require.NotNil(t, token)
34 require.NotEmpty(t, token.Token)
35 require.Equal(t, tailnet.DefaultResumeTokenExpiry/2, token.RefreshIn.AsDuration())
36 require.WithinDuration(t, clock.Now().Add(tailnet.DefaultResumeTokenExpiry), token.ExpiresAt.AsTime(), time.Second)
37
38 gotID, err := provider.VerifyResumeToken(ctx, token.Token)
39 require.NoError(t, err)
40 require.Equal(t, id, gotID)
41 })
42
43 t.Run("Expired", func(t *testing.T) {
44 t.Parallel()
45
46 ctx := testutil.Context(t, testutil.WaitShort)
47 id := uuid.New()
48 clock := quartz.NewMock(t)
49 provider := tailnet.NewResumeTokenKeyProvider(newKeySigner(key), clock, tailnet.DefaultResumeTokenExpiry)
50 token, err := provider.GenerateResumeToken(ctx, id)
51 require.NoError(t, err)
52 require.NotNil(t, token)
53 require.NotEmpty(t, token.Token)
54 require.Equal(t, tailnet.DefaultResumeTokenExpiry/2, token.RefreshIn.AsDuration())
55 require.WithinDuration(t, clock.Now().Add(tailnet.DefaultResumeTokenExpiry), token.ExpiresAt.AsTime(), time.Second)
56
57 // Advance time past expiry. Account for leeway.
58 _ = clock.Advance(tailnet.DefaultResumeTokenExpiry + time.Second*61)
59
60 _, err = provider.VerifyResumeToken(ctx, token.Token)
61 require.Error(t, err)
62 require.ErrorIs(t, err, jwt.ErrExpired)
63 })
64
65 t.Run("InvalidToken", func(t *testing.T) {
66 t.Parallel()
67
68 ctx := testutil.Context(t, testutil.WaitShort)
69 provider := tailnet.NewResumeTokenKeyProvider(newKeySigner(key), quartz.NewMock(t), tailnet.DefaultResumeTokenExpiry)
70 _, err := provider.VerifyResumeToken(ctx, "invalid")
71 require.ErrorContains(t, err, "parse JWS")
72 })
73
74 t.Run("VerifyError", func(t *testing.T) {
75 t.Parallel()

Callers

nothing calls this directly

Calls 12

GenerateResumeTokenMethod · 0.95
VerifyResumeTokenMethod · 0.95
ContextFunction · 0.92
newKeySignerFunction · 0.85
NotEmptyMethod · 0.80
RunMethod · 0.65
NewMethod · 0.65
AddMethod · 0.65
EqualMethod · 0.45
ErrorMethod · 0.45

Tested by

no test coverage detected