5
5
"database/sql"
6
6
"encoding/json"
7
7
"net/url"
8
+ "strings"
8
9
"sync/atomic"
9
10
"testing"
10
11
"time"
@@ -15,6 +16,7 @@ import (
15
16
"golang.org/x/oauth2"
16
17
17
18
"cdr.dev/slog/sloggers/slogtest"
19
+ "github.com/coder/coder/cli/clibase"
18
20
"github.com/coder/coder/coderd/audit"
19
21
"github.com/coder/coder/coderd/database"
20
22
"github.com/coder/coder/coderd/database/dbfake"
@@ -61,6 +63,7 @@ func TestAcquireJob(t *testing.T) {
61
63
Auditor :mockAuditor (),
62
64
TemplateScheduleStore :testTemplateScheduleStore (),
63
65
Tracer :trace .NewNoopTracerProvider ().Tracer ("noop" ),
66
+ DeploymentValues :& codersdk.DeploymentValues {},
64
67
}
65
68
job ,err := srv .AcquireJob (context .Background (),nil )
66
69
require .NoError (t ,err )
@@ -102,6 +105,10 @@ func TestAcquireJob(t *testing.T) {
102
105
t .Parallel ()
103
106
srv := setup (t ,false )
104
107
gitAuthProvider := "github"
108
+ // Set the max session token lifetime so we can assert we
109
+ // create an API key with an expiration within the bounds of the
110
+ // deployment config.
111
+ srv .DeploymentValues .MaxTokenLifetime = clibase .Duration (time .Hour )
105
112
srv .GitAuthConfigs = []* gitauth.Config {{
106
113
ID :gitAuthProvider ,
107
114
OAuth2Config :& testutil.OAuth2Config {},
@@ -216,6 +223,16 @@ func TestAcquireJob(t *testing.T) {
216
223
got ,err := json .Marshal (job .Type )
217
224
require .NoError (t ,err )
218
225
226
+ // Validate that a session token is generated during the job.
227
+ sessionToken := job .Type .(* proto.AcquiredJob_WorkspaceBuild_ ).WorkspaceBuild .Metadata .CoderSessionToken
228
+ require .NotEmpty (t ,sessionToken )
229
+ toks := strings .Split (sessionToken ,"-" )
230
+ require .Len (t ,toks ,2 ,"invalid api key" )
231
+ key ,err := srv .Database .GetAPIKeyByID (ctx ,toks [0 ])
232
+ require .NoError (t ,err )
233
+ require .Equal (t ,int64 (srv .DeploymentValues .MaxTokenLifetime .Value ().Seconds ()),key .LifetimeSeconds )
234
+ require .WithinDuration (t ,time .Now ().Add (srv .DeploymentValues .MaxTokenLifetime .Value ()),key .ExpiresAt ,time .Minute )
235
+
219
236
want ,err := json .Marshal (& proto.AcquiredJob_WorkspaceBuild_ {
220
237
WorkspaceBuild :& proto.AcquiredJob_WorkspaceBuild {
221
238
WorkspaceBuildId :build .ID .String (),
@@ -247,6 +264,7 @@ func TestAcquireJob(t *testing.T) {
247
264
WorkspaceOwnerId :user .ID .String (),
248
265
TemplateName :template .Name ,
249
266
TemplateVersion :version .Name ,
267
+ CoderSessionToken :sessionToken ,
250
268
},
251
269
},
252
270
})
@@ -1205,6 +1223,7 @@ func setup(t *testing.T, ignoreLogErrors bool) *provisionerdserver.Server {
1205
1223
Auditor :mockAuditor (),
1206
1224
TemplateScheduleStore :testTemplateScheduleStore (),
1207
1225
Tracer :trace .NewNoopTracerProvider ().Tracer ("noop" ),
1226
+ DeploymentValues :& codersdk.DeploymentValues {},
1208
1227
}
1209
1228
}
1210
1229