//go:build linux && rootrunner package host import ( "database/sql" "encoding/json" "io" "net" "net/http" "net/url" "sync/atomic" "testing" "time" "github.com/carlosframework/platform/internal/provision" ) func plan14WoodstarProgram(t *testing.T, host, endpoint string) (claimUnitProgram, func(*http.Client)) { t.Helper() ln, err := net.Listen("tcp", "127.0.0.1:0") if err != nil { t.Fatal(err) } var contacted atomic.Int64 srv := &http.Server{Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { contacted.Add(1) io.WriteString(w, `runner upstream`) })} go srv.Serve(ln) t.Cleanup(func() { srv.Close() }) upstream := "http://" + ln.Addr().String() dbPath := provision.NestedDBPath("/data", host) p := claimUnitProgram{Schema: 1, Host: host, Args: []string{"-addr", endpoint, "-db", dbPath, "-allow-private"}} var savedKey string var savedFetch int64 return p, func(c *http.Client) { t.Helper() resp, err := c.Get("http://tenant/unfurl?url=" + url.QueryEscape(upstream)) if err != nil { t.Fatal(err) } var card map[string]any err = json.NewDecoder(resp.Body).Decode(&card) resp.Body.Close() if err != nil || resp.StatusCode != http.StatusOK || card["ok"] != false || contacted.Load() != 0 { t.Fatal("Woodstar containment allowed sibling fetch", resp.Status, card, contacted.Load(), err) } db, err := sql.Open("sqlite", dbPath) if err != nil { t.Fatal(err) } defer db.Close() var key string if err := db.QueryRow("SELECT value FROM config WHERE key = 'img_sign_key'").Scan(&key); err != nil || len(key) != 64 { t.Fatal("Woodstar did not persist its signing key", err) } var fetched int64 if err := db.QueryRow("SELECT fetched_at FROM cards WHERE url = ? AND ok = 0", upstream).Scan(&fetched); err != nil || fetched <= 0 { t.Fatal("Woodstar did not persist its cache", err, fetched) } if savedKey != "" && (savedKey != key || savedFetch != fetched) { t.Fatal("Woodstar restart lost persistent state") } savedKey, savedFetch = key, fetched control := &http.Client{Timeout: time.Second} resp, err = control.Get(upstream) if err != nil { t.Fatal(err) } resp.Body.Close() if contacted.Swap(0) != 1 { t.Fatal("upstream control did not connect") } } }