Builds: design 47 G §297, A-98 Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
41 lines
1.4 KiB
Go
41 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/novox/mesh-host/internal/store"
|
|
)
|
|
|
|
// The node agent's Stop stops a module's container from the node's record, asks the machine nothing else and leaves the
|
|
// record, so the module's kept data and its record survive (design 47 G A-98).
|
|
func TestTheNodeAgentsStopStopsAModuleAndRemovesNothing(t *testing.T) {
|
|
was := builtFor
|
|
builtFor = "arch"
|
|
t.Cleanup(func() { builtFor = was })
|
|
path := filepath.Join(t.TempDir(), "state.json")
|
|
var s store.State
|
|
s.Record(store.Applied{ID: "app.box", Type: "container", Target: "app-box"})
|
|
s.Record(store.Applied{ID: "other.box", Type: "container", Target: "other-box"})
|
|
if err := store.Save(path, s); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var asked []string
|
|
opts := options{state: path, runner: func(_ context.Context, name string, args ...string) (string, error) {
|
|
asked = append(asked, name+" "+strings.Join(args, " "))
|
|
return "", nil
|
|
}}
|
|
if res := stopComposition(context.Background(), opts, "app"); res.Failed {
|
|
t.Fatalf("stop failed: %s", res.Detail)
|
|
}
|
|
if !strings.Contains(strings.Join(asked, "\n"), "stop app-box") || strings.Contains(strings.Join(asked, "\n"), "other-box") ||
|
|
strings.Contains(strings.Join(asked, "\n"), " rm ") {
|
|
t.Fatalf("the machine was asked %v", asked)
|
|
}
|
|
if after, err := store.Load(path); err != nil || len(after.Resources) != 2 {
|
|
t.Fatalf("the record changed: %v, %v", after.Resources, err)
|
|
}
|
|
}
|