Rotation ran on one machine of four; the others carried package and fail2ban rules nothing read, and one log had reached 4.9 GB. The module installs logrotate, owns /etc/logrotate.conf whole (the distribution's base plus compress/delaycompress, dropping a hand-set olddir that collides same-named logs) and enables logrotate.timer. Seven tools from a Go bundle, the journal's usage and vacuum among them (to-be 42 Phase 1).
81 lines
2.0 KiB
Go
81 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
type resource map[string]any
|
|
|
|
type manifestShape struct {
|
|
Module string `json:"module"`
|
|
Version string `json:"version"`
|
|
Capabilities []string `json:"capabilities"`
|
|
Claims []map[string]any `json:"claims"`
|
|
Tools []string `json:"tools"`
|
|
Resources []resource `json:"resources"`
|
|
Build struct {
|
|
Artifacts []map[string]any `json:"artifacts"`
|
|
} `json:"build"`
|
|
}
|
|
|
|
func manifest(t *testing.T) manifestShape {
|
|
t.Helper()
|
|
raw, err := os.ReadFile("../../module.json")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var m manifestShape
|
|
if err := json.Unmarshal(raw, &m); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
return m
|
|
}
|
|
|
|
func (m manifestShape) resource(t *testing.T, id string) resource {
|
|
t.Helper()
|
|
for _, r := range m.Resources {
|
|
if r["id"] == id {
|
|
return r
|
|
}
|
|
}
|
|
t.Fatalf("no resource %s", id)
|
|
return nil
|
|
}
|
|
|
|
// TestToolsAreTheManifests holds the served tools and the manifest's list to one another, and the
|
|
// bundle to the shape the builder compiles and the runtime loads.
|
|
func TestToolsAreTheManifests(t *testing.T) {
|
|
m := manifest(t)
|
|
names := map[string]bool{}
|
|
for _, tool := range tools(machine(nil, 1000)) {
|
|
if names[tool.Name] {
|
|
t.Errorf("%s is served twice", tool.Name)
|
|
}
|
|
names[tool.Name] = true
|
|
}
|
|
for _, want := range m.Tools {
|
|
if !names[want] {
|
|
t.Errorf("the manifest lists %s and the bundle does not serve it", want)
|
|
}
|
|
delete(names, want)
|
|
}
|
|
if len(names) != 0 {
|
|
t.Errorf("served and not listed: %v", names)
|
|
}
|
|
var tools map[string]any
|
|
for _, a := range m.Build.Artifacts {
|
|
if a["name"] == "tools" {
|
|
tools = a
|
|
}
|
|
}
|
|
if tools == nil || tools["kind"] != "bundle" || tools["language"] != "go" || tools["system"] != "arch" ||
|
|
tools["from"] != "cmd/"+binaryName || tools["binary"] != binaryName {
|
|
t.Fatalf("the tools artifact: %v", tools)
|
|
}
|
|
if loads, _ := tools["loads"].([]any); len(loads) != 1 || loads[0] != binaryName {
|
|
t.Fatalf("loads: %v", tools["loads"])
|
|
}
|
|
}
|