8
8
"testing"
9
9
"time"
10
10
11
+ "cdr.dev/slog"
12
+ "cdr.dev/slog/sloggers/slogtest"
11
13
"github.com/google/uuid"
12
14
"github.com/sqlc-dev/pqtype"
13
15
"github.com/stretchr/testify/require"
@@ -43,6 +45,7 @@ type WorkspaceResponse struct {
43
45
// resources.
44
46
type WorkspaceBuildBuilder struct {
45
47
t testing.TB
48
+ logger slog.Logger
46
49
db database.Store
47
50
ps pubsub.Pubsub
48
51
ws database.WorkspaceTable
@@ -62,7 +65,10 @@ type workspaceBuildDisposition struct {
62
65
// Omitting the template ID on a workspace will also generate a new template
63
66
// with a template version.
64
67
func WorkspaceBuild (t testing.TB ,db database.Store ,ws database.WorkspaceTable )WorkspaceBuildBuilder {
65
- return WorkspaceBuildBuilder {t :t ,db :db ,ws :ws }
68
+ return WorkspaceBuildBuilder {
69
+ t :t ,db :db ,ws :ws ,
70
+ logger :slogtest .Make (t ,& slogtest.Options {}).Named ("dbfake" ).Leveled (slog .LevelDebug ),
71
+ }
66
72
}
67
73
68
74
func (b WorkspaceBuildBuilder )Pubsub (ps pubsub.Pubsub )WorkspaceBuildBuilder {
@@ -131,6 +137,7 @@ func (b WorkspaceBuildBuilder) Do() WorkspaceResponse {
131
137
AgentToken :b .agentToken ,
132
138
}
133
139
if b .ws .TemplateID == uuid .Nil {
140
+ b .logger .Debug (context .Background (),"creating template and version" )
134
141
resp .TemplateVersionResponse = TemplateVersion (b .t ,b .db ).
135
142
Resources (b .resources ... ).
136
143
Pubsub (b .ps ).
@@ -145,6 +152,7 @@ func (b WorkspaceBuildBuilder) Do() WorkspaceResponse {
145
152
146
153
// If no template version is set assume the active version.
147
154
if b .seed .TemplateVersionID == uuid .Nil {
155
+ b .logger .Debug (context .Background (),"assuming active template version" )
148
156
template ,err := b .db .GetTemplateByID (ownerCtx ,b .ws .TemplateID )
149
157
require .NoError (b .t ,err )
150
158
require .NotNil (b .t ,template .ActiveVersionID ,"active version ID unexpectedly nil" )
@@ -156,6 +164,9 @@ func (b WorkspaceBuildBuilder) Do() WorkspaceResponse {
156
164
// nolint: revive
157
165
b .ws = dbgen .Workspace (b .t ,b .db ,b .ws )
158
166
resp .Workspace = b .ws
167
+ b .logger .Debug (context .Background (),"created workspace" ,
168
+ slog .F ("name" ,resp .Workspace .Name ),
169
+ slog .F ("workspace_id" ,resp .Workspace .ID ))
159
170
}
160
171
b .seed .WorkspaceID = b .ws .ID
161
172
b .seed .InitiatorID = takeFirst (b .seed .InitiatorID ,b .ws .OwnerID )
@@ -182,10 +193,12 @@ func (b WorkspaceBuildBuilder) Do() WorkspaceResponse {
182
193
LogsOverflowed :false ,
183
194
})
184
195
require .NoError (b .t ,err ,"insert job" )
196
+ b .logger .Debug (context .Background (),"inserted provisioner job" ,slog .F ("job_id" ,job .ID ))
185
197
186
198
if b .dispo .starting {
187
199
// might need to do this multiple times if we got a template version
188
200
// import job as well
201
+ b .logger .Debug (context .Background (),"looping to acquire provisioner job" )
189
202
for {
190
203
j ,err := b .db .AcquireProvisionerJob (ownerCtx , database.AcquireProvisionerJobParams {
191
204
OrganizationID :job .OrganizationID ,
@@ -202,10 +215,12 @@ func (b WorkspaceBuildBuilder) Do() WorkspaceResponse {
202
215
})
203
216
require .NoError (b .t ,err ,"acquire starting job" )
204
217
if j .ID == job .ID {
218
+ b .logger .Debug (context .Background (),"acquired provisioner job" ,slog .F ("job_id" ,job .ID ))
205
219
break
206
220
}
207
221
}
208
222
}else {
223
+ b .logger .Debug (context .Background (),"completing the provisioner job" )
209
224
err = b .db .UpdateProvisionerJobWithCompleteByID (ownerCtx , database.UpdateProvisionerJobWithCompleteByIDParams {
210
225
ID :job .ID ,
211
226
UpdatedAt :dbtime .Now (),
@@ -221,18 +236,24 @@ func (b WorkspaceBuildBuilder) Do() WorkspaceResponse {
221
236
}
222
237
223
238
resp .Build = dbgen .WorkspaceBuild (b .t ,b .db ,b .seed )
239
+ b .logger .Debug (context .Background (),"created workspace build" ,
240
+ slog .F ("build_id" ,resp .Build .ID ),
241
+ slog .F ("workspace_id" ,resp .Workspace .ID ),
242
+ slog .F ("build_number" ,resp .Build .BuildNumber ))
224
243
225
244
for i := range b .params {
226
245
b .params [i ].WorkspaceBuildID = resp .Build .ID
227
246
}
228
- _ = dbgen .WorkspaceBuildParameters (b .t ,b .db ,b .params )
247
+ params := dbgen .WorkspaceBuildParameters (b .t ,b .db ,b .params )
248
+ b .logger .Debug (context .Background (),"created workspace build parameters" ,slog .F ("count" ,len (params )))
229
249
230
250
if b .ws .Deleted {
231
251
err = b .db .UpdateWorkspaceDeletedByID (ownerCtx , database.UpdateWorkspaceDeletedByIDParams {
232
252
ID :b .ws .ID ,
233
253
Deleted :true ,
234
254
})
235
255
require .NoError (b .t ,err )
256
+ b .logger .Debug (context .Background (),"deleted workspace" ,slog .F ("workspace_id" ,resp .Workspace .ID ))
236
257
}
237
258
238
259
if b .ps != nil {
@@ -243,6 +264,9 @@ func (b WorkspaceBuildBuilder) Do() WorkspaceResponse {
243
264
require .NoError (b .t ,err )
244
265
err = b .ps .Publish (wspubsub .WorkspaceEventChannel (resp .Workspace .OwnerID ),msg )
245
266
require .NoError (b .t ,err )
267
+ b .logger .Debug (context .Background (),"published workspace event" ,
268
+ slog .F ("owner_id" ,resp .Workspace .ID ),
269
+ slog .F ("owner_id" ,resp .Workspace .OwnerID ))
246
270
}
247
271
248
272
agents ,err := b .db .GetWorkspaceAgentsByWorkspaceAndBuildNumber (ownerCtx , database.GetWorkspaceAgentsByWorkspaceAndBuildNumberParams {
@@ -260,7 +284,12 @@ func (b WorkspaceBuildBuilder) Do() WorkspaceResponse {
260
284
err = b .db .DeleteWorkspaceSubAgentByID (ownerCtx ,subAgent .ID )
261
285
require .NoError (b .t ,err ,"delete workspace agent subagent antagonist" )
262
286
263
- b .t .Logf ("inserted deleted subagent antagonist %s (%v) for workspace agent %s (%v)" ,subAgent .Name ,subAgent .ID ,agent .Name ,agent .ID )
287
+ b .logger .Debug (context .Background (),"inserted deleted subagent antagonist" ,
288
+ slog .F ("subagent_name" ,subAgent .Name ),
289
+ slog .F ("subagent_id" ,subAgent .ID ),
290
+ slog .F ("agent_name" ,agent .Name ),
291
+ slog .F ("agent_id" ,agent .ID ),
292
+ )
264
293
}
265
294
}
266
295
@@ -269,6 +298,7 @@ func (b WorkspaceBuildBuilder) Do() WorkspaceResponse {
269
298
270
299
type ProvisionerJobResourcesBuilder struct {
271
300
t testing.TB
301
+ logger slog.Logger
272
302
db database.Store
273
303
jobID uuid.UUID
274
304
transition database.WorkspaceTransition
@@ -281,6 +311,7 @@ func ProvisionerJobResources(
281
311
)ProvisionerJobResourcesBuilder {
282
312
return ProvisionerJobResourcesBuilder {
283
313
t :t ,
314
+ logger :slogtest .Make (t ,& slogtest.Options {}).Named ("dbfake" ).Leveled (slog .LevelDebug ).With (slog .F ("job_id" ,jobID )),
284
315
db :db ,
285
316
jobID :jobID ,
286
317
transition :transition ,
@@ -292,13 +323,17 @@ func (b ProvisionerJobResourcesBuilder) Do() {
292
323
b .t .Helper ()
293
324
transition := b .transition
294
325
if transition == "" {
295
- // Default to start!
326
+ b . logger . Debug ( context . Background (), "setting default transition to start" )
296
327
transition = database .WorkspaceTransitionStart
297
328
}
298
329
for _ ,resource := range b .resources {
299
330
//nolint:gocritic // This is only used by tests.
300
331
err := provisionerdserver .InsertWorkspaceResource (ownerCtx ,b .db ,b .jobID ,transition ,resource ,& telemetry.Snapshot {})
301
332
require .NoError (b .t ,err )
333
+ b .logger .Debug (context .Background (),"created workspace resource" ,
334
+ slog .F ("resource_name" ,resource .Name ),
335
+ slog .F ("agent_count" ,len (resource .Agents )),
336
+ )
302
337
}
303
338
}
304
339
@@ -309,6 +344,7 @@ type TemplateVersionResponse struct {
309
344
310
345
type TemplateVersionBuilder struct {
311
346
t testing.TB
347
+ logger slog.Logger
312
348
db database.Store
313
349
seed database.TemplateVersion
314
350
fileID uuid.UUID
@@ -326,6 +362,7 @@ type TemplateVersionBuilder struct {
326
362
func TemplateVersion (t testing.TB ,db database.Store )TemplateVersionBuilder {
327
363
return TemplateVersionBuilder {
328
364
t :t ,
365
+ logger :slogtest .Make (t ,& slogtest.Options {}).Named ("dbfake" ).Leveled (slog .LevelDebug ),
329
366
db :db ,
330
367
promote :true ,
331
368
autoCreateTemplate :true ,
@@ -396,20 +433,30 @@ func (t TemplateVersionBuilder) Do() TemplateVersionResponse {
396
433
Valid :true ,
397
434
UUID :resp .Template .ID ,
398
435
}
436
+ t .logger .Debug (context .Background (),"created template" ,
437
+ slog .F ("organization_id" ,resp .Template .OrganizationID ),
438
+ slog .F ("template_id" ,resp .Template .CreatedBy ),
439
+ )
399
440
}
400
441
401
442
version := dbgen .TemplateVersion (t .t ,t .db ,t .seed )
443
+ t .logger .Debug (context .Background (),"created template version" ,
444
+ slog .F ("template_version_id" ,version .ID ),
445
+ )
402
446
if t .promote {
403
447
err := t .db .UpdateTemplateActiveVersionByID (ownerCtx , database.UpdateTemplateActiveVersionByIDParams {
404
448
ID :t .seed .TemplateID .UUID ,
405
449
ActiveVersionID :t .seed .ID ,
406
450
UpdatedAt :dbtime .Now (),
407
451
})
408
452
require .NoError (t .t ,err )
453
+ t .logger .Debug (context .Background (),"promoted template version" ,
454
+ slog .F ("template_version_id" ,t .seed .ID ),
455
+ )
409
456
}
410
457
411
458
for _ ,preset := range t .presets {
412
- dbgen .Preset (t .t ,t .db , database.InsertPresetParams {
459
+ prst := dbgen .Preset (t .t ,t .db , database.InsertPresetParams {
413
460
ID :preset .ID ,
414
461
TemplateVersionID :version .ID ,
415
462
Name :preset .Name ,
@@ -421,14 +468,19 @@ func (t TemplateVersionBuilder) Do() TemplateVersionResponse {
421
468
Description :preset .Description ,
422
469
Icon :preset .Icon ,
423
470
})
471
+ t .logger .Debug (context .Background (),"added preset" ,
472
+ slog .F ("preset_id" ,prst .ID ),
473
+ slog .F ("preset_name" ,prst .Name ),
474
+ )
424
475
}
425
476
426
477
for _ ,presetParam := range t .presetParams {
427
- dbgen .PresetParameter (t .t ,t .db , database.InsertPresetParametersParams {
478
+ prm := dbgen .PresetParameter (t .t ,t .db , database.InsertPresetParametersParams {
428
479
TemplateVersionPresetID :presetParam .TemplateVersionPresetID ,
429
480
Names : []string {presetParam .Name },
430
481
Values : []string {presetParam .Value },
431
482
})
483
+ t .logger .Debug (context .Background (),"added preset parameter" ,slog .F ("param_name" ,prm [0 ].Name ))
432
484
}
433
485
434
486
payload ,err := json .Marshal (provisionerdserver.TemplateVersionImportJob {
@@ -448,6 +500,7 @@ func (t TemplateVersionBuilder) Do() TemplateVersionResponse {
448
500
},
449
501
FileID :t .fileID ,
450
502
})
503
+ t .logger .Debug (context .Background (),"added template version import job" ,slog .F ("job_id" ,job .ID ))
451
504
452
505
t .seed .JobID = job .ID
453
506