diff --git a/modules/mesh-delivery-builder/cmd/mesh-delivery-builder/integration_test.go b/modules/mesh-delivery-builder/cmd/mesh-delivery-builder/integration_test.go index ebbc9ee5..eee4c068 100644 --- a/modules/mesh-delivery-builder/cmd/mesh-delivery-builder/integration_test.go +++ b/modules/mesh-delivery-builder/cmd/mesh-delivery-builder/integration_test.go @@ -9,6 +9,7 @@ import ( "encoding/json" "errors" "fmt" + "maps" "os" "path/filepath" "slices" @@ -613,6 +614,29 @@ func TestBuilderMakesADoneKeyWithTheDigests(t *testing.T) { // 1607/AC7 if a := reg.answered(t, key, again); a.Refused || a.Do != versions.AgainRenumber || a.Version != "0.1.6" { t.Errorf("builder_publish_again = %+v, want a new number, 0.1.6", a) } + // Running-testing note (review round 1): two claims never get one number on the bus's own compare-and-set, as + // the builder's state versions keeps them: eight claims of one name at once, eight versions. + store := versions.Versions{Store: awaitedVersions{process.AwaitBucket(b.ctx, b.js, nil, versions.Bucket, "", t.Logf)}} + numbers := make(chan string, 8) + var claims sync.WaitGroup + for i := range 8 { + claims.Go(func() { + d, _, err := store.Number(b.ctx, versions.Claim{Name: "netcheck/race", Kind: versions.KindBundle, Fingerprint: fmt.Sprintf("f%d", i)}) + if err != nil { + t.Error(err) + } + numbers <- d.Version + }) + } + claims.Wait() + close(numbers) + got := map[string]bool{} + for v := range numbers { + got[v] = true + } + if len(got) != 8 { + t.Errorf("eight claims of one name at once were numbered %v, want eight versions", slices.Sorted(maps.Keys(got))) + } if got := reg.numberedOf("netcheck/tools-go"); len(got) != 2 || got[1] != "0.1.6" { t.Errorf("version.numbered of netcheck/tools-go = %v, want 0.1.6 said after 0.1.5", got) }