Fold the retake test into the prefix test (issue 1748 review 1)
mesh/delivery-group group fix/1748-retake-and-resolver ready: every member ready, and composed together they pass
mesh/delivery closed: the pull request closed unmerged
mesh/check pass 0d97c09c49b4 on 5a38a1221659 | unit 6409 run, 187 kept, 14 skipped | integration 6544 run, 220 kept, 23 skipped | over bound: unit, in…

Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
This commit is contained in:
2026-11-04 22:41:49 +01:00
parent 9c4b2c5e56
commit 0d97c09c49
+27 -29
View File
@@ -86,11 +86,38 @@ func TestOnlyAPushFailureIsBuiltAgainBeforeTheFingerprintChanges(t *testing.T) {
{VersionTaken + "@novox/mesh-sdk@0.1.15 holds another file", false},
{RefusedKind + "a package in go", false},
{"go test: 2 failed", true},
{Retake + "lookup git.novox.be: i/o timeout", true},
} {
if got := FailedUntilChanged(c.err); got == c.again {
t.Errorf("FailedUntilChanged(%q) = %v", c.err, got)
}
}
// A retakeable error opens with Retake and is not one that waits for the fingerprint; the count is on the key's value (issue 1748).
for _, c := range []struct {
err string
want bool
}{
{Retake + "lookup git.novox.be: i/o timeout", true},
{NotPinned + "x", false},
{Retake[:4] + " not the prefix", false},
{"go test: 2 failed", false},
{"", false},
{VersionTaken + Retake, false},
} {
if got := Retakeable(c.err); got != c.want {
t.Errorf("Retakeable(%q) = %v", c.err, got)
}
}
data, err := EncodeBuilderBuild(BuilderBuild{State: BuildFailed, Error: Retake + "x", Retakes: 2})
if err != nil {
t.Fatal(err)
}
if back, err := DecodeBuilderBuild(data); err != nil || back.Retakes != 2 {
t.Fatalf("decoded %+v, %v", back, err)
}
if Retake != "retakeable: " || MaxRetakes != 3 {
t.Fatal("the retake prefix or its bound changed")
}
if NotStored != "not stored: " || NotPinned != "not pinned: " || VersionTaken != "version taken: " || RefusedKind != "refused kind: " {
t.Fatal("a prefix changed its words")
}
@@ -141,32 +168,3 @@ func TestWaitsForIsAPrefixThatIsBuiltAgain(t *testing.T) {
t.Fatalf("WaitsFor = %q", WaitsFor)
}
}
// A retakeable error opens with Retake and is not one that waits for the fingerprint; the count is on the key's value (issue 1748).
func TestRetakeableIsAPrefixTheBuilderTakesAgain(t *testing.T) {
for _, c := range []struct {
err string
want bool
}{
{Retake + "lookup git.novox.be: i/o timeout", true},
{NotPinned + "x", false},
{Retake[:4] + " not the prefix", false},
{"go test: 2 failed", false},
{"", false},
{VersionTaken + Retake, false},
} {
if got := Retakeable(c.err); got != c.want {
t.Errorf("Retakeable(%q) = %v", c.err, got)
}
}
if Retake != "retakeable: " || MaxRetakes != 3 {
t.Fatal("the retake prefix or its bound changed")
}
data, err := EncodeBuilderBuild(BuilderBuild{State: BuildFailed, Error: Retake + "x", Retakes: 2})
if err != nil {
t.Fatal(err)
}
if back, err := DecodeBuilderBuild(data); err != nil || back.Retakes != 2 {
t.Fatalf("decoded %+v, %v", back, err)
}
}