63 lines
2.6 KiB
Go
63 lines
2.6 KiB
Go
//go:build integration
|
|
|
|
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"slices"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/novox/mesh-controller/internal/catalogue"
|
|
"github.com/novox/mesh-controller/internal/inventory"
|
|
"github.com/novox/mesh-controller/internal/link"
|
|
)
|
|
|
|
// novox/hq issue 325, replayed with only what the controller had before its fix, so it can be laid over the
|
|
// older commit. On 2026-10-08 the catalogue's pull request adding `sensors` merged, and the merge asked for
|
|
// its build (issue 300). About a minute later `assign g14 sensors` answered "no module of that name:
|
|
// sensors"; a few minutes later the same call worked, because the build had registered the module. The
|
|
// answer read as "nobody registered it". An assignment made while the build runs says the build — where it
|
|
// is from, since when, its id — is kept, and is made when the build registers the module.
|
|
func TestReplay325(t *testing.T) {
|
|
open := aMesh(t)
|
|
ctx := t.Context()
|
|
if err := open.inventory.RegisterModule(ctx, catalogue.Manifest{Module: "networkmanager", Version: "1"},
|
|
inventory.Source{Repository: "novox/mesh-catalog", Seat: "git", Path: "modules/networkmanager", Ref: "main",
|
|
BuiltFrom: "c0", Head: "c0"}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
asksWithPaths(t)
|
|
m := link.SourceMoved{Owner: "novox", Repo: "mesh-catalog", Base: "main", Commit: "5e450125aa",
|
|
Paths: []string{"modules/sensors/module.json", "modules/sensors/cmd/sensors/main.go"},
|
|
ModuleDirs: []string{"modules/sensors"}, ModuleDirsSaid: true}
|
|
if err := (following{open: open}).SourceMoved(ctx, m); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
said, err := assign(ctx, open, "laptop", "sensors")
|
|
if err != nil {
|
|
t.Fatalf("assign while the merge's build runs was refused: %v", err)
|
|
}
|
|
for _, want := range []string{"being built", "novox/mesh-catalog", "modules/sensors", "b-modules/sensors"} {
|
|
if !strings.Contains(said, want) {
|
|
t.Fatalf("the answer does not say %q:\n%s", want, said)
|
|
}
|
|
}
|
|
|
|
manifest, _ := json.Marshal(catalogue.Manifest{Module: "sensors", Version: "1"})
|
|
if err := (builds{open.inventory, open}).Built(ctx, link.BuildResult{ID: "b-modules/sensors",
|
|
Repository: "novox/mesh-catalog", Path: "modules/sensors", Ref: "main", Commit: "5e450125aa", On: "anchor",
|
|
Module: "sensors", Manifest: manifest,
|
|
Source: &link.SourceOnSeat{Repository: "novox/mesh-catalog", Seat: "git"}}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
assigned, err := open.inventory.Assigned(ctx, "laptop")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !slices.Contains(assigned, "sensors") {
|
|
t.Fatalf("the build registered sensors and laptop runs %v", assigned)
|
|
}
|
|
}
|