Leave out a module whose stored manifest has an unknown field, and raise it (hq ADR 0262 review)
mesh/merge-gate pass: builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step; every machine composes with the change as it…
mesh/repo-check pass: its merge-check.sh passed
mesh/delivery delivered
mesh/delivery-group group feat/setting-defaults failed: a member failed
mesh/merge-gate pass: builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step; every machine composes with the change as it…
mesh/repo-check pass: its merge-check.sh passed
mesh/delivery delivered
mesh/delivery-group group feat/setting-defaults failed: a member failed
A key dropped silently ran a module without what its manifest says, and a key inside a block still failed the whole catalogue. Judge a key by what it is about, and narrow the listing to one machine.
This commit is contained in:
@@ -37,6 +37,14 @@ func TestSettingsListPreferences(t *testing.T) {
|
||||
t.Errorf("%v: %v %v, want %s", c.args, argv, err, c.want)
|
||||
}
|
||||
}
|
||||
for args, want := range map[string]map[string]any{
|
||||
"a module is needed to set values": {"values": `{"width": 300}`},
|
||||
"a module is needed to clear a layer": {"clear": "true"},
|
||||
} {
|
||||
if _, err := argvFor("settings", want); err == nil || !strings.Contains(err.Error(), args) {
|
||||
t.Errorf("%v: %v, want %q", want, err, args)
|
||||
}
|
||||
}
|
||||
if _, err := argvFor("settings", map[string]any{"list": "everything"}); err == nil {
|
||||
t.Error("a listing other than preferences was taken")
|
||||
}
|
||||
@@ -69,3 +77,33 @@ func TestPreferencesSayEachMachinesValueAndItsSource(t *testing.T) {
|
||||
t.Fatal("an empty listing")
|
||||
}
|
||||
}
|
||||
|
||||
// The listing over the real stores: each machine's value with its source; a machine names only the
|
||||
// modules on it; a machine the mesh does not know is refused (novox/hq ADR 0262).
|
||||
func TestPreferencesListedFromTheStores(t *testing.T) {
|
||||
open := aMesh(t)
|
||||
ctx := t.Context()
|
||||
register(t, open, catalogue.Manifest{Module: "notes", Version: "1",
|
||||
Settings: map[string]catalogue.SettingDeclaration{
|
||||
"font-size": {Kind: catalogue.KindPreference, Default: float64(10), Why: "readable at 100 DPI"},
|
||||
},
|
||||
Resources: []map[string]any{{"id": "rc", "type": "file", "path": "/etc/notes.conf", "mode": "0644",
|
||||
"content": "font = ${setting:font-size}\n"}}})
|
||||
if _, err := assign(ctx, open, "laptop", "notes"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := open.inventory.SetSettings(ctx, "laptop", "notes", map[string]any{"font-size": float64(16)}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
all := stdoutOf(t, func() error { return settingsCommand(ctx, []string{"preferences"}) })
|
||||
if !strings.Contains(all, "notes (on laptop)") || !strings.Contains(all, "laptop: 16 (the node)") ||
|
||||
!strings.Contains(all, "font-size, default 10: readable at 100 DPI") {
|
||||
t.Fatalf("the listing:\n%s", all)
|
||||
}
|
||||
if got := stdoutOf(t, func() error { return settingsCommand(ctx, []string{"preferences", "--node", "anchor"}) }); got != "no module on anchor declares a preference\n" {
|
||||
t.Fatalf("a machine without the module:\n%s", got)
|
||||
}
|
||||
if err := settingsCommand(ctx, []string{"preferences", "--node", "nowhere"}); err == nil {
|
||||
t.Fatal("a machine the mesh does not know was answered")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user