Issue 1585, S19: the strict parser, every manifest problem function and the judge's tables (192 declarations, about 5,200 lines) and their 244 tests leave; composition keeps its own refusals and the helpers it uses. The catalogue's tests decode the manifests they build. ParseManifest, ParseManifestWith, ParseManifestForInputs, CatalogueProblems and the rest are gone; mesh-delivery-indexer/judge holds them. Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
40 lines
1.6 KiB
Go
40 lines
1.6 KiB
Go
package catalogue
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
)
|
|
|
|
// A module declares the logs it keeps (novox/hq ADR 0297 §1): a log by its bare name, or with its cap
|
|
// in MiB; the default cap where none is said.
|
|
func TestAManifestMaySayWhatLogsItKeeps(t *testing.T) {
|
|
m, err := decodeForTest([]byte(`{"module":"mesh-issues","version":"1",` +
|
|
`"logs":["changes",{"name":"moves","max-mib":2048}]}`))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(m.Logs) != 2 || m.Logs[0].Name != "changes" || m.Logs[1].Name != "moves" {
|
|
t.Fatalf("logs not read: %+v", m.Logs)
|
|
}
|
|
if m.Logs[0].Cap() != LogDefaultMiB || m.Logs[0].Cap() != 1024 || m.Logs[1].Cap() != 2048 {
|
|
t.Fatalf("caps read as %d and %d", m.Logs[0].Cap(), m.Logs[1].Cap())
|
|
}
|
|
out, _ := json.Marshal(m.Logs)
|
|
if string(out) != `["changes",{"name":"moves","max-mib":2048}]` {
|
|
t.Fatalf("written back as %s", out)
|
|
}
|
|
// 1953 S-age (ADR 0565 §10): a log may keep its entries for an age, written back with it.
|
|
aged, err := decodeForTest([]byte(`{"module":"mesh-hand-acts","version":"1","logs":[{"name":"acts","max-age-days":400}]}`))
|
|
if err != nil || aged.Logs[0].MaxAgeDays != 400 {
|
|
t.Fatalf("an aged log read as %+v, %v", aged.Logs, err)
|
|
}
|
|
if out, _ := json.Marshal(aged.Logs); string(out) != `[{"name":"acts","max-age-days":400}]` {
|
|
t.Fatalf("an aged log written back as %s", out)
|
|
}
|
|
for _, edge := range []string{`{"name":"a","max-mib":1}`, `{"name":"a","max-mib":8192}`, `{"name":"a","max-age-days":3650}`} {
|
|
if _, err := decodeForTest([]byte(`{"module":"a","version":"1","logs":[` + edge + `]}`)); err != nil {
|
|
t.Errorf("%s is inside the caps and was refused: %v", edge, err)
|
|
}
|
|
}
|
|
}
|