diff --git a/modules/mesh-delivery-checker/internal/check/beside.go b/modules/mesh-delivery-checker/internal/check/beside.go index 06bc799..2453319 100644 --- a/modules/mesh-delivery-checker/internal/check/beside.go +++ b/modules/mesh-delivery-checker/internal/check/beside.go @@ -26,7 +26,7 @@ const ( // checks/deps). Which commit of each is besideCommit's rule. var besideRules = map[string][]string{ controllerRepo: {catalogueRepository, nodeEngineRepo, SDKRepository}, - nodeEngineRepo: {catalogueRepository, SDKRepository}, + nodeEngineRepo: {catalogueRepository, SDKRepository, controllerRepo}, SDKRepository: {catalogueRepository, nodeEngineRepo}, catalogueRepository: {SDKRepository, controllerRepo}, "novox/mesh-delivery": {SDKRepository, catalogueRepository}, diff --git a/modules/mesh-delivery-checker/internal/check/pins_test.go b/modules/mesh-delivery-checker/internal/check/pins_test.go index ee8f873..c9c2bb1 100644 --- a/modules/mesh-delivery-checker/internal/check/pins_test.go +++ b/modules/mesh-delivery-checker/internal/check/pins_test.go @@ -244,6 +244,39 @@ func TestTheSiblingsAreWhereTheTestsStateThem(t *testing.T) { // review D2, ADR } } +// 1295/R4g: the node-engine's tests read the controller's manifest, so a mesh-host pull request has mesh-controller beside it: +// at the group member's head when the group holds one, else at its trunk. +func hostCase(t *testing.T, pulls ...delivery.CandidatePull) *Case { + t.Helper() + c, err := delivery.DecodeCandidate(candidateOf(t, "feat/x", pulls...)) + if err != nil { + t.Fatal(err) + } + cs := CaseOf(c, map[string]string{"novox/mesh-host": trunkA, controllerRepo: trunkA2}) + if cs == nil { + t.Fatal("no case") + } + return cs +} + +func TestTheNodeEnginesTestsHaveTheControllerBesideThem(t *testing.T) { + const host = "novox/mesh-host" + b := newBench(t) + b.ex.Trunks = trunksOf(t, map[string]string{host: trunkA, controllerRepo: trunkA2, catalogueRepository: trunkS, SDKRepository: trunkS}) + b.judge(t, hostCase(t, pullOf(host, 5, head1))) + if c := besideOf(t, b, host)[controllerRepo]; c.Commit != trunkA2 || c.Ref != "" { + t.Errorf("the controller beside the node-engine alone = %+v, want its trunk %s", c, trunkA2) + } + b = newBench(t) + b.ex.Trunks = trunksOf(t, map[string]string{host: trunkA, controllerRepo: trunkA2, catalogueRepository: trunkS, SDKRepository: trunkS}) + b.ex.Forge = &fakeForge{goMods: map[string]string{controllerRepo + " go.mod " + head2: capturedGoMod(t, "cb54756c3865")}, + onTrunk: map[string]bool{"cb54756c3865": true}} + b.judge(t, hostCase(t, pullOf(host, 5, head1), pullOf(controllerRepo, 9, head2))) + if c := besideOf(t, b, host)[controllerRepo]; c.Commit != head2 || c.Ref != "refs/pull/9/head" { + t.Errorf("the controller beside the node-engine in a group = %+v, want the member's head %s", c, head2) + } +} + func TestThePinOfTheControllerThatCannotBeReadFailsTheCheck(t *testing.T) { // review D2 b := newBench(t) b.ex.Trunks = trunksOf(t, map[string]string{"novox/mesh-controller": trunkA})