Feature 57 (config and provisioning): release the catalogue, the reviewed release branch merged with main, on top of main

This commit is contained in:
2026-10-16 09:42:45 +00:00
parent ee1b15d7f0
commit 0260ae92f6
646 changed files with 37611 additions and 1861 deletions
@@ -16,8 +16,8 @@ import (
func TestTheDefaultIsMadviseAndTheUnitFollowsTheSetting(t *testing.T) {
m := manifest(t)
s := m.Settings["transparent-huge-pages"]
if s["kind"] != "preference" || s["default"] != "madvise" || s["why"] == "" {
s := m.Config["transparent-huge-pages"]
if s["type"] != "string" || s["default"] != "madvise" || s["description"] == "" || s["trusted"] != true {
t.Fatalf("the setting: %v", s)
}
var ids []string
@@ -30,10 +30,10 @@ func TestTheDefaultIsMadviseAndTheUnitFollowsTheSetting(t *testing.T) {
script := m.resource(t, "huge-pages")
// The script runs as root, so the setting it is written from is set at the terminal alone (issue 339).
if script["path"] != "${dir:state}/huge-pages" || script["mode"] != "0755" || script["trusted"] != true ||
!strings.Contains(script["content"].(string), "want='${setting:transparent-huge-pages}'") {
!strings.Contains(script.text(t), "want='${config:transparent-huge-pages}'") {
t.Fatalf("the script: %v", script["path"])
}
unit := m.resource(t, "unit")["content"].(string)
unit := m.resource(t, "unit").text(t)
for _, line := range []string{"Type=oneshot", "RemainAfterExit=yes", "ExecStart=${dir:state}/huge-pages apply",
"ExecReload=${dir:state}/huge-pages apply", "ExecStop=${dir:state}/huge-pages restore", "WantedBy=sysinit.target",
"DefaultDependencies=no", "ProtectSystem=strict", "ReadWritePaths=${dir:state}", "ProtectHome=yes", "PrivateNetwork=yes",
@@ -75,8 +75,8 @@ func newBedIn(t *testing.T, dir, want, found string) bed {
t.Helper()
b := bed{script: filepath.Join(dir, "huge-pages"), sys: filepath.Join(dir, "thp"), state: filepath.Join(dir, "state"),
rotated: filepath.Join(dir, "rotated")}
content := manifest(t).resource(t, "huge-pages")["content"].(string)
content = strings.ReplaceAll(content, "${setting:transparent-huge-pages}", want)
content := manifest(t).resource(t, "huge-pages").text(t)
content = strings.ReplaceAll(content, "${config:transparent-huge-pages}", want)
content = strings.ReplaceAll(content, "${dir:state}", b.state)
if strings.Contains(content, "${") {
t.Fatalf("a substitution the test does not make is left in the script")
+12 -1
View File
@@ -3,6 +3,7 @@ package main
import (
"encoding/json"
"os"
"path/filepath"
"testing"
)
@@ -11,7 +12,7 @@ type resource map[string]any
type manifestShape struct {
Module string `json:"module"`
Capabilities []string `json:"capabilities"`
Settings map[string]map[string]any `json:"settings"`
Config map[string]map[string]any `json:"config"`
Tools []string `json:"tools"`
Resources []resource `json:"resources"`
Build struct {
@@ -77,3 +78,13 @@ func TestToolsAreTheManifests(t *testing.T) {
t.Fatalf("loads: %v", tools["loads"])
}
}
// text is the file text a resource keeps in its template under files/ (novox/hq ADR 0349 §2).
func (r resource) text(t *testing.T) string {
t.Helper()
raw, err := os.ReadFile(filepath.Join("../..", r["template"].(string)))
if err != nil {
t.Fatal(err)
}
return string(raw)
}