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) } } }