@@ -12,63 +12,101 @@ import (
1212 "github.com/coder/coder/testutil"
1313)
1414
15- func TestTokens (t * testing.T ) {
15+ func TestTokenCRUD (t * testing.T ) {
1616 t .Parallel ()
1717
18- t .Run ("CRUD" , func (t * testing.T ) {
19- t .Parallel ()
20-
21- ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
22- defer cancel ()
23- client := coderdtest .New (t , nil )
24- _ = coderdtest .CreateFirstUser (t , client )
25- keys , err := client .GetTokens (ctx , codersdk .Me )
26- require .NoError (t , err )
27- require .Empty (t , keys )
28-
29- res , err := client .CreateToken (ctx , codersdk .Me , codersdk.CreateTokenRequest {})
30- require .NoError (t , err )
31- require .Greater (t , len (res .Key ), 2 )
32-
33- keys , err = client .GetTokens (ctx , codersdk .Me )
34- require .NoError (t , err )
35- require .EqualValues (t , len (keys ), 1 )
36- require .Contains (t , res .Key , keys [0 ].ID )
37- // expires_at must be greater than 50 years
38- require .Greater (t , keys [0 ].ExpiresAt , time .Now ().Add (time .Hour * 438300 ))
39- require .Equal (t , codersdk .APIKeyScopeAll , keys [0 ].Scope )
40-
41- // no update
42-
43- err = client .DeleteAPIKey (ctx , codersdk .Me , keys [0 ].ID )
44- require .NoError (t , err )
45- keys , err = client .GetTokens (ctx , codersdk .Me )
46- require .NoError (t , err )
47- require .Empty (t , keys )
18+ ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
19+ defer cancel ()
20+ client := coderdtest .New (t , nil )
21+ _ = coderdtest .CreateFirstUser (t , client )
22+ keys , err := client .GetTokens (ctx , codersdk .Me )
23+ require .NoError (t , err )
24+ require .Empty (t , keys )
25+
26+ res , err := client .CreateToken (ctx , codersdk .Me , codersdk.CreateTokenRequest {})
27+ require .NoError (t , err )
28+ require .Greater (t , len (res .Key ), 2 )
29+
30+ keys , err = client .GetTokens (ctx , codersdk .Me )
31+ require .NoError (t , err )
32+ require .EqualValues (t , len (keys ), 1 )
33+ require .Contains (t , res .Key , keys [0 ].ID )
34+ // expires_at should default to 30 days
35+ require .Greater (t , keys [0 ].ExpiresAt , time .Now ().Add (time .Hour * 29 * 24 ))
36+ require .Less (t , keys [0 ].ExpiresAt , time .Now ().Add (time .Hour * 31 * 24 ))
37+ require .Equal (t , codersdk .APIKeyScopeAll , keys [0 ].Scope )
38+
39+ // no update
40+
41+ err = client .DeleteAPIKey (ctx , codersdk .Me , keys [0 ].ID )
42+ require .NoError (t , err )
43+ keys , err = client .GetTokens (ctx , codersdk .Me )
44+ require .NoError (t , err )
45+ require .Empty (t , keys )
46+ }
47+
48+ func TestTokenScoped (t * testing.T ) {
49+ t .Parallel ()
50+
51+ ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
52+ defer cancel ()
53+ client := coderdtest .New (t , nil )
54+ _ = coderdtest .CreateFirstUser (t , client )
55+
56+ res , err := client .CreateToken (ctx , codersdk .Me , codersdk.CreateTokenRequest {
57+ Scope : codersdk .APIKeyScopeApplicationConnect ,
4858 })
59+ require .NoError (t , err )
60+ require .Greater (t , len (res .Key ), 2 )
61+
62+ keys , err := client .GetTokens (ctx , codersdk .Me )
63+ require .NoError (t , err )
64+ require .EqualValues (t , len (keys ), 1 )
65+ require .Contains (t , res .Key , keys [0 ].ID )
66+ require .Equal (t , keys [0 ].Scope , codersdk .APIKeyScopeApplicationConnect )
67+ }
68+
69+ func TestTokenDuration (t * testing.T ) {
70+ t .Parallel ()
71+
72+ ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
73+ defer cancel ()
74+ client := coderdtest .New (t , nil )
75+ _ = coderdtest .CreateFirstUser (t , client )
76+
77+ _ , err := client .CreateToken (ctx , codersdk .Me , codersdk.CreateTokenRequest {
78+ Lifetime : time .Hour * 24 * 7 ,
79+ })
80+ require .NoError (t , err )
81+ keys , err := client .GetTokens (ctx , codersdk .Me )
82+ require .NoError (t , err )
83+ require .Greater (t , keys [0 ].ExpiresAt , time .Now ().Add (time .Hour * 6 * 24 ))
84+ require .Less (t , keys [0 ].ExpiresAt , time .Now ().Add (time .Hour * 8 * 24 ))
85+ }
86+
87+ func TestTokenMaxLifetime (t * testing.T ) {
88+ t .Parallel ()
89+
90+ ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
91+ defer cancel ()
92+ dc := coderdtest .DeploymentConfig (t )
93+ dc .MaxTokenLifetime .Value = time .Hour * 24 * 7
94+ client := coderdtest .New (t , & coderdtest.Options {
95+ DeploymentConfig : dc ,
96+ })
97+ _ = coderdtest .CreateFirstUser (t , client )
98+
99+ // success
100+ _ , err := client .CreateToken (ctx , codersdk .Me , codersdk.CreateTokenRequest {
101+ Lifetime : time .Hour * 24 * 6 ,
102+ })
103+ require .NoError (t , err )
49104
50- t .Run ("Scoped" , func (t * testing.T ) {
51- t .Parallel ()
52-
53- ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
54- defer cancel ()
55- client := coderdtest .New (t , nil )
56- _ = coderdtest .CreateFirstUser (t , client )
57-
58- res , err := client .CreateToken (ctx , codersdk .Me , codersdk.CreateTokenRequest {
59- Scope : codersdk .APIKeyScopeApplicationConnect ,
60- })
61- require .NoError (t , err )
62- require .Greater (t , len (res .Key ), 2 )
63-
64- keys , err := client .GetTokens (ctx , codersdk .Me )
65- require .NoError (t , err )
66- require .EqualValues (t , len (keys ), 1 )
67- require .Contains (t , res .Key , keys [0 ].ID )
68- // expires_at must be greater than 50 years
69- require .Greater (t , keys [0 ].ExpiresAt , time .Now ().Add (time .Hour * 438300 ))
70- require .Equal (t , keys [0 ].Scope , codersdk .APIKeyScopeApplicationConnect )
105+ // fail
106+ _ , err = client .CreateToken (ctx , codersdk .Me , codersdk.CreateTokenRequest {
107+ Lifetime : time .Hour * 24 * 8 ,
71108 })
109+ require .ErrorContains (t , err , "lifetime must be less" )
72110}
73111
74112func TestAPIKey (t * testing.T ) {
0 commit comments