Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit4f87ba4

Browse files
authored
chore: update provisioner tag documentation with suggestions from#12315 (#12347)
- Adds more testcases to TestAcquirer_MatchTags- Adds functionality to generate a table from above test- Update provisioner tag documentation with generated table- Apply other feedback from#12315
1 parente57c101 commit4f87ba4

File tree

2 files changed

+203
-80
lines changed

2 files changed

+203
-80
lines changed

‎coderd/provisionerdserver/acquirer_test.go

Lines changed: 129 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import (
44
"context"
55
"database/sql"
66
"encoding/json"
7+
"fmt"
8+
"strings"
79
"sync"
810
"testing"
911
"time"
@@ -54,7 +56,7 @@ func TestAcquirer_Single(t *testing.T) {
5456
workerID:=uuid.New()
5557
pt:= []database.ProvisionerType{database.ProvisionerTypeEcho}
5658
tags:= provisionerdserver.Tags{
57-
"foo":"bar",
59+
"environment":"on-prem",
5860
}
5961
acquiree:=newTestAcquiree(t,workerID,pt,tags)
6062
jobID:=uuid.New()
@@ -82,7 +84,7 @@ func TestAcquirer_MultipleSameDomain(t *testing.T) {
8284
workerIDs:=make(map[uuid.UUID]bool)
8385
pt:= []database.ProvisionerType{database.ProvisionerTypeEcho}
8486
tags:= provisionerdserver.Tags{
85-
"foo":"bar",
87+
"environment":"on-prem",
8688
}
8789
fori:=0;i<10;i++ {
8890
wID:=uuid.New()
@@ -125,7 +127,7 @@ func TestAcquirer_WaitsOnNoJobs(t *testing.T) {
125127
workerID:=uuid.New()
126128
pt:= []database.ProvisionerType{database.ProvisionerTypeEcho}
127129
tags:= provisionerdserver.Tags{
128-
"foo":"bar",
130+
"environment":"on-prem",
129131
}
130132
acquiree:=newTestAcquiree(t,workerID,pt,tags)
131133
jobID:=uuid.New()
@@ -147,10 +149,10 @@ func TestAcquirer_WaitsOnNoJobs(t *testing.T) {
147149
"strong":"bad",
148150
})
149151
postJob(t,ps,database.ProvisionerTypeEcho, provisionerdserver.Tags{
150-
"foo":"fighters",
152+
"environment":"fighters",
151153
})
152154
postJob(t,ps,database.ProvisionerTypeTerraform, provisionerdserver.Tags{
153-
"foo":"bar",
155+
"environment":"on-prem",
154156
})
155157
acquiree.requireBlocked()
156158

@@ -176,7 +178,7 @@ func TestAcquirer_RetriesPending(t *testing.T) {
176178
workerID:=uuid.New()
177179
pt:= []database.ProvisionerType{database.ProvisionerTypeEcho}
178180
tags:= provisionerdserver.Tags{
179-
"foo":"bar",
181+
"environment":"on-prem",
180182
}
181183
acquiree:=newTestAcquiree(t,workerID,pt,tags)
182184
jobID:=uuid.New()
@@ -268,7 +270,7 @@ func TestAcquirer_BackupPoll(t *testing.T) {
268270
workerID:=uuid.New()
269271
pt:= []database.ProvisionerType{database.ProvisionerTypeEcho}
270272
tags:= provisionerdserver.Tags{
271-
"foo":"bar",
273+
"environment":"on-prem",
272274
}
273275
acquiree:=newTestAcquiree(t,workerID,pt,tags)
274276
jobID:=uuid.New()
@@ -294,7 +296,7 @@ func TestAcquirer_UnblockOnCancel(t *testing.T) {
294296
pt:= []database.ProvisionerType{database.ProvisionerTypeEcho}
295297
worker0:=uuid.New()
296298
tags:= provisionerdserver.Tags{
297-
"foo":"bar",
299+
"environment":"on-prem",
298300
}
299301
acquiree0:=newTestAcquiree(t,worker0,pt,tags)
300302
worker1:=uuid.New()
@@ -324,10 +326,7 @@ func TestAcquirer_MatchTags(t *testing.T) {
324326
t.Skip("skipping this test due to -short")
325327
}
326328

327-
someID:=uuid.NewString()
328-
someOtherID:=uuid.NewString()
329-
330-
for_,tt:=range []struct {
329+
testCases:= []struct {
331330
namestring
332331
provisionerJobTagsmap[string]string
333332
acquireJobTagsmap[string]string
@@ -339,72 +338,126 @@ func TestAcquirer_MatchTags(t *testing.T) {
339338
acquireJobTags:map[string]string{"scope":"organization","owner":""},
340339
expectAcquire:true,
341340
},
341+
{
342+
name:"tagged provisioner and tagged job",
343+
provisionerJobTags:map[string]string{"scope":"organization","owner":"","environment":"on-prem"},
344+
acquireJobTags:map[string]string{"scope":"organization","owner":"","environment":"on-prem"},
345+
expectAcquire:true,
346+
},
347+
{
348+
name:"double-tagged provisioner and tagged job",
349+
provisionerJobTags:map[string]string{"scope":"organization","owner":"","environment":"on-prem"},
350+
acquireJobTags:map[string]string{"scope":"organization","owner":"","environment":"on-prem","datacenter":"chicago"},
351+
expectAcquire:true,
352+
},
353+
{
354+
name:"double-tagged provisioner and double-tagged job",
355+
provisionerJobTags:map[string]string{"scope":"organization","owner":"","environment":"on-prem","datacenter":"chicago"},
356+
acquireJobTags:map[string]string{"scope":"organization","owner":"","environment":"on-prem","datacenter":"chicago"},
357+
expectAcquire:true,
358+
},
359+
{
360+
name:"user-scoped provisioner and user-scoped job",
361+
provisionerJobTags:map[string]string{"scope":"user","owner":"aaa"},
362+
acquireJobTags:map[string]string{"scope":"user","owner":"aaa"},
363+
expectAcquire:true,
364+
},
365+
{
366+
name:"user-scoped provisioner with tags and user-scoped job",
367+
provisionerJobTags:map[string]string{"scope":"user","owner":"aaa"},
368+
acquireJobTags:map[string]string{"scope":"user","owner":"aaa","environment":"on-prem"},
369+
expectAcquire:true,
370+
},
371+
{
372+
name:"user-scoped provisioner with tags and user-scoped job with tags",
373+
provisionerJobTags:map[string]string{"scope":"user","owner":"aaa","environment":"on-prem"},
374+
acquireJobTags:map[string]string{"scope":"user","owner":"aaa","environment":"on-prem"},
375+
expectAcquire:true,
376+
},
377+
{
378+
name:"user-scoped provisioner with multiple tags and user-scoped job with tags",
379+
provisionerJobTags:map[string]string{"scope":"user","owner":"aaa","environment":"on-prem"},
380+
acquireJobTags:map[string]string{"scope":"user","owner":"aaa","environment":"on-prem","datacenter":"chicago"},
381+
expectAcquire:true,
382+
},
383+
{
384+
name:"user-scoped provisioner with multiple tags and user-scoped job with multiple tags",
385+
provisionerJobTags:map[string]string{"scope":"user","owner":"aaa","environment":"on-prem","datacenter":"chicago"},
386+
acquireJobTags:map[string]string{"scope":"user","owner":"aaa","environment":"on-prem","datacenter":"chicago"},
387+
expectAcquire:true,
388+
},
342389
{
343390
name:"untagged provisioner and tagged job",
344-
provisionerJobTags:map[string]string{"scope":"organization","owner":"","foo":"bar"},
391+
provisionerJobTags:map[string]string{"scope":"organization","owner":"","environment":"on-prem"},
345392
acquireJobTags:map[string]string{"scope":"organization","owner":""},
346393
expectAcquire:false,
347394
},
348395
{
349396
name:"tagged provisioner and untagged job",
350397
provisionerJobTags:map[string]string{"scope":"organization","owner":""},
351-
acquireJobTags:map[string]string{"scope":"organization","owner":"","foo":"bar"},
398+
acquireJobTags:map[string]string{"scope":"organization","owner":"","environment":"on-prem"},
352399
expectAcquire:false,
353400
},
354401
{
355-
name:"tagged provisioner and tagged job",
356-
provisionerJobTags:map[string]string{"scope":"organization","owner":"","foo":"bar"},
357-
acquireJobTags:map[string]string{"scope":"organization","owner":"","foo":"bar"},
358-
expectAcquire:true,
402+
name:"tagged provisioner anddouble-tagged job",
403+
provisionerJobTags:map[string]string{"scope":"organization","owner":"","environment":"on-prem","datacenter":"chicago"},
404+
acquireJobTags:map[string]string{"scope":"organization","owner":"","environment":"on-prem"},
405+
expectAcquire:false,
359406
},
360407
{
361-
name:"tagged provisioner and double-tagged job",
362-
provisionerJobTags:map[string]string{"scope":"organization","owner":"","foo":"bar","baz":"zap"},
363-
acquireJobTags:map[string]string{"scope":"organization","owner":"","foo":"bar"},
408+
name:"double-tagged provisioner and double-tagged job with differing tags",
409+
provisionerJobTags:map[string]string{"scope":"organization","owner":"","environment":"on-prem","datacenter":"chicago"},
410+
acquireJobTags:map[string]string{"scope":"organization","owner":"","environment":"on-prem","datacenter":"new_york"},
364411
expectAcquire:false,
365412
},
366413
{
367-
name:"double-tagged provisioner andtagged job",
368-
provisionerJobTags:map[string]string{"scope":"organization","owner":"","foo":"bar"},
369-
acquireJobTags:map[string]string{"scope":"organization","owner":"","foo":"bar","baz":"zap"},
370-
expectAcquire:true,
414+
name:"user-scoped provisioner anduntagged job",
415+
provisionerJobTags:map[string]string{"scope":"organization","owner":""},
416+
acquireJobTags:map[string]string{"scope":"user","owner":"aaa"},
417+
expectAcquire:false,
371418
},
372419
{
373-
name:"double-tagged provisioner anddouble-tagged job",
374-
provisionerJobTags:map[string]string{"scope":"organization","owner":"","foo":"bar","baz":"zap"},
375-
acquireJobTags:map[string]string{"scope":"organization","owner":"","foo":"bar","baz":"zap"},
376-
expectAcquire:true,
420+
name:"user-scoped provisioner anddifferent user-scoped job",
421+
provisionerJobTags:map[string]string{"scope":"user","owner":"bbb"},
422+
acquireJobTags:map[string]string{"scope":"user","owner":"aaa"},
423+
expectAcquire:false,
377424
},
378425
{
379-
name:"owner-scoped provisioner anduntagged job",
380-
provisionerJobTags:map[string]string{"scope":"organization","owner":""},
381-
acquireJobTags:map[string]string{"scope":"owner","owner":someID},
426+
name:"org-scoped provisioner anduser-scoped job",
427+
provisionerJobTags:map[string]string{"scope":"user","owner":"aaa"},
428+
acquireJobTags:map[string]string{"scope":"organization","owner":""},
382429
expectAcquire:false,
383430
},
384431
{
385-
name:"owner-scoped provisioner andowner-scoped job",
386-
provisionerJobTags:map[string]string{"scope":"owner","owner":someID},
387-
acquireJobTags:map[string]string{"scope":"owner","owner":someID},
388-
expectAcquire:true,
432+
name:"user-scoped provisioner andorg-scoped job with tags",
433+
provisionerJobTags:map[string]string{"scope":"user","owner":"aaa","environment":"on-prem"},
434+
acquireJobTags:map[string]string{"scope":"organization","owner":""},
435+
expectAcquire:false,
389436
},
390437
{
391-
name:"owner-scoped provisioner anddifferent owner-scoped job",
392-
provisionerJobTags:map[string]string{"scope":"owner","owner":someOtherID},
393-
acquireJobTags:map[string]string{"scope":"owner","owner":someID},
438+
name:"user-scoped provisioner anduser-scoped job with tags",
439+
provisionerJobTags:map[string]string{"scope":"user","owner":"aaa","environment":"on-prem"},
440+
acquireJobTags:map[string]string{"scope":"user","owner":"aaa"},
394441
expectAcquire:false,
395442
},
396443
{
397-
name:"org-scoped provisioner andowner-scoped job",
398-
provisionerJobTags:map[string]string{"scope":"owner","owner":someID},
399-
acquireJobTags:map[string]string{"scope":"organization","owner":""},
444+
name:"user-scoped provisionerwith tagsanduser-scoped job with multiple tags",
445+
provisionerJobTags:map[string]string{"scope":"user","owner":"aaa","environment":"on-prem","datacenter":"chicago"},
446+
acquireJobTags:map[string]string{"scope":"user","owner":"aaa","environment":"on-prem"},
400447
expectAcquire:false,
401448
},
402-
} {
449+
{
450+
name:"user-scoped provisioner with tags and user-scoped job with differing tags",
451+
provisionerJobTags:map[string]string{"scope":"user","owner":"aaa","environment":"on-prem","datacenter":"new_york"},
452+
acquireJobTags:map[string]string{"scope":"user","owner":"aaa","environment":"on-prem","datacenter":"chicago"},
453+
expectAcquire:false,
454+
},
455+
}
456+
for_,tt:=rangetestCases {
403457
tt:=tt
404458
t.Run(tt.name,func(t*testing.T) {
405459
t.Parallel()
406-
407-
ctx:=testutil.Context(t,testutil.WaitShort/2)
460+
ctx:=testutil.Context(t,testutil.WaitShort)
408461
// NOTE: explicitly not using fake store for this test.
409462
db,ps:=dbtestutil.NewDB(t)
410463
log:=slogtest.Make(t,nil).Leveled(slog.LevelDebug)
@@ -443,6 +496,37 @@ func TestAcquirer_MatchTags(t *testing.T) {
443496
}
444497
})
445498
}
499+
500+
t.Run("GenTable",func(t*testing.T) {
501+
t.Parallel()
502+
// Generate a table that can be copy-pasted into docs/admin/provisioners.md
503+
lines:= []string{
504+
"\n",
505+
"| Provisioner Tags | Job Tags | Can Run Job? |",
506+
"|------------------|----------|--------------|",
507+
}
508+
// turn the JSON map into k=v for readability
509+
kvs:=func(mmap[string]string)string {
510+
ss:=make([]string,0,len(m))
511+
// ensure consistent ordering of tags
512+
for_,k:=range []string{"scope","owner","environment","datacenter"} {
513+
ifv,found:=m[k];found {
514+
ss=append(ss,k+"="+v)
515+
}
516+
}
517+
returnstrings.Join(ss," ")
518+
}
519+
for_,tt:=rangetestCases {
520+
acquire:="✅"
521+
if!tt.expectAcquire {
522+
acquire="❌"
523+
}
524+
s:=fmt.Sprintf("| %s | %s | %s |",kvs(tt.acquireJobTags),kvs(tt.provisionerJobTags),acquire)
525+
lines=append(lines,s)
526+
}
527+
t.Logf("You can paste this into docs/admin/provisioners.md")
528+
t.Logf(strings.Join(lines,"\n"))
529+
})
446530
}
447531

448532
funcpostJob(t*testing.T,ps pubsub.Pubsub,pt database.ProvisionerType,tags provisionerdserver.Tags) {

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp