diff --git a/cmd/hakurei/command.go b/cmd/hakurei/command.go index 968bb56..f8173e6 100644 --- a/cmd/hakurei/command.go +++ b/cmd/hakurei/command.go @@ -18,9 +18,9 @@ import ( "hakurei.app/container/fhs" "hakurei.app/hst" "hakurei.app/internal" - "hakurei.app/internal/app" - "hakurei.app/internal/app/state" "hakurei.app/internal/env" + "hakurei.app/internal/outcome" + "hakurei.app/internal/state" "hakurei.app/message" "hakurei.app/system/dbus" ) @@ -51,7 +51,7 @@ func buildCommand(ctx context.Context, msg message.Msg, early *earlyHardeningErr Flag(&flagVerbose, "v", command.BoolFlag(false), "Increase log verbosity"). Flag(&flagJSON, "json", command.BoolFlag(false), "Serialise output in JSON when applicable") - c.Command("shim", command.UsageInternal, func([]string) error { app.Shim(msg); return errSuccess }) + c.Command("shim", command.UsageInternal, func([]string) error { outcome.Shim(msg); return errSuccess }) c.Command("app", "Load and start container from configuration file", func(args []string) error { if len(args) < 1 { @@ -64,7 +64,7 @@ func buildCommand(ctx context.Context, msg message.Msg, early *earlyHardeningErr config.Container.Args = append(config.Container.Args, args[1:]...) } - app.Main(ctx, msg, config) + outcome.Main(ctx, msg, config) panic("unreachable") }) @@ -96,7 +96,7 @@ func buildCommand(ctx context.Context, msg message.Msg, early *earlyHardeningErr passwd *user.User passwdOnce sync.Once passwdFunc = func() { - us := strconv.Itoa(app.HsuUid(new(app.Hsu).MustID(msg), flagIdentity)) + us := strconv.Itoa(outcome.HsuUid(new(outcome.Hsu).MustID(msg), flagIdentity)) if u, err := user.LookupId(us); err != nil { msg.Verbosef("cannot look up uid %s", us) passwd = &user.User{ @@ -258,7 +258,7 @@ func buildCommand(ctx context.Context, msg message.Msg, early *earlyHardeningErr } } - app.Main(ctx, msg, config) + outcome.Main(ctx, msg, config) panic("unreachable") }). Flag(&flagDBusConfigSession, "dbus-config", command.StringFlag("builtin"), @@ -321,7 +321,7 @@ func buildCommand(ctx context.Context, msg message.Msg, early *earlyHardeningErr var flagShort bool c.NewCommand("ps", "List active instances", func(args []string) error { var sc hst.Paths - env.CopyPaths().Copy(&sc, new(app.Hsu).MustID(nil)) + env.CopyPaths().Copy(&sc, new(outcome.Hsu).MustID(nil)) printPs(os.Stdout, time.Now().UTC(), state.NewMulti(msg, sc.RunDirPath), flagShort, flagJSON) return errSuccess }).Flag(&flagShort, "short", command.BoolFlag(false), "Print instance id") diff --git a/cmd/hakurei/parse.go b/cmd/hakurei/parse.go index 7041975..bbb9e81 100644 --- a/cmd/hakurei/parse.go +++ b/cmd/hakurei/parse.go @@ -11,9 +11,9 @@ import ( "syscall" "hakurei.app/hst" - "hakurei.app/internal/app" - "hakurei.app/internal/app/state" "hakurei.app/internal/env" + "hakurei.app/internal/outcome" + "hakurei.app/internal/state" "hakurei.app/message" ) @@ -84,7 +84,7 @@ func shortIdentifierString(s string) string { func tryIdentifier(msg message.Msg, name string) (config *hst.Config, entry *hst.State) { return tryIdentifierEntries(msg, name, func() map[hst.ID]*hst.State { var sc hst.Paths - env.CopyPaths().Copy(&sc, new(app.Hsu).MustID(nil)) + env.CopyPaths().Copy(&sc, new(outcome.Hsu).MustID(nil)) s := state.NewMulti(msg, sc.RunDirPath) if entries, err := state.Join(s); err != nil { msg.GetLogger().Printf("cannot join store: %v", err) // not fatal diff --git a/cmd/hakurei/print.go b/cmd/hakurei/print.go index 0dcb59e..ff4764c 100644 --- a/cmd/hakurei/print.go +++ b/cmd/hakurei/print.go @@ -12,9 +12,9 @@ import ( "hakurei.app/hst" "hakurei.app/internal" - "hakurei.app/internal/app" - "hakurei.app/internal/app/state" "hakurei.app/internal/env" + "hakurei.app/internal/outcome" + "hakurei.app/internal/state" "hakurei.app/message" ) @@ -23,7 +23,7 @@ func printShowSystem(output io.Writer, short, flagJSON bool) { t := newPrinter(output) defer t.MustFlush() - info := &hst.Info{Version: internal.Version(), User: new(app.Hsu).MustID(nil)} + info := &hst.Info{Version: internal.Version(), User: new(outcome.Hsu).MustID(nil)} env.CopyPaths().Copy(&info.Paths, info.User) if flagJSON { diff --git a/cmd/hakurei/print_test.go b/cmd/hakurei/print_test.go index 343073a..abdcefc 100644 --- a/cmd/hakurei/print_test.go +++ b/cmd/hakurei/print_test.go @@ -6,7 +6,7 @@ import ( "time" "hakurei.app/hst" - "hakurei.app/internal/app/state" + "hakurei.app/internal/state" ) var ( diff --git a/internal/app/dispatcher.go b/internal/outcome/dispatcher.go similarity index 99% rename from internal/app/dispatcher.go rename to internal/outcome/dispatcher.go index b081ece..77ef646 100644 --- a/internal/app/dispatcher.go +++ b/internal/outcome/dispatcher.go @@ -1,4 +1,4 @@ -package app +package outcome import ( "context" diff --git a/internal/app/dispatcher_test.go b/internal/outcome/dispatcher_test.go similarity index 97% rename from internal/app/dispatcher_test.go rename to internal/outcome/dispatcher_test.go index 839e9e4..e01946c 100644 --- a/internal/app/dispatcher_test.go +++ b/internal/outcome/dispatcher_test.go @@ -1,8 +1,9 @@ -package app +package outcome import ( "bytes" "context" + "encoding/json" "io" "io/fs" "log" @@ -585,6 +586,23 @@ type errorReader struct{ val error } func (r errorReader) Read([]byte) (int, error) { return -1, r.val } +// mustMarshal returns the result of [json.Marshal] as a string and panics on error. +func mustMarshal(v any) string { + if b, err := json.Marshal(v); err != nil { + panic(err.Error()) + } else { + return string(b) + } +} + +// m is a shortcut for [check.MustAbs]. +func m(pathname string) *check.Absolute { return check.MustAbs(pathname) } + +// f returns [hst.FilesystemConfig] wrapped in its [json] adapter. +func f(c hst.FilesystemConfig) hst.FilesystemConfigJSON { + return hst.FilesystemConfigJSON{FilesystemConfig: c} +} + // panicMsgContext implements [message.Msg] and [context.Context] with methods wrapping panic. // This should be assigned to test cases to be checked against. type panicMsgContext struct{} diff --git a/internal/app/finalise.go b/internal/outcome/finalise.go similarity index 99% rename from internal/app/finalise.go rename to internal/outcome/finalise.go index 6cb4f58..184bd90 100644 --- a/internal/app/finalise.go +++ b/internal/outcome/finalise.go @@ -1,4 +1,4 @@ -package app +package outcome import ( "context" diff --git a/internal/app/hsu.go b/internal/outcome/hsu.go similarity index 99% rename from internal/app/hsu.go rename to internal/outcome/hsu.go index 1286249..b110733 100644 --- a/internal/app/hsu.go +++ b/internal/outcome/hsu.go @@ -1,4 +1,4 @@ -package app +package outcome import ( "errors" diff --git a/internal/app/hsu_test.go b/internal/outcome/hsu_test.go similarity index 99% rename from internal/app/hsu_test.go rename to internal/outcome/hsu_test.go index fad724d..4ee7fa9 100644 --- a/internal/app/hsu_test.go +++ b/internal/outcome/hsu_test.go @@ -1,4 +1,4 @@ -package app +package outcome import ( "os" diff --git a/internal/app/app.go b/internal/outcome/main.go similarity index 87% rename from internal/app/app.go rename to internal/outcome/main.go index 0360851..0632796 100644 --- a/internal/app/app.go +++ b/internal/outcome/main.go @@ -1,5 +1,4 @@ -// Package app implements high-level hakurei container behaviour. -package app +package outcome import ( "context" diff --git a/internal/app/app_test.go b/internal/outcome/main_test.go similarity index 98% rename from internal/app/app_test.go rename to internal/outcome/main_test.go index 96113eb..ee1c037 100644 --- a/internal/app/app_test.go +++ b/internal/outcome/main_test.go @@ -1,9 +1,8 @@ -package app +package outcome import ( "bytes" "encoding/gob" - "encoding/json" "errors" "fmt" "io" @@ -28,7 +27,7 @@ import ( "hakurei.app/system/dbus" ) -func TestApp(t *testing.T) { +func TestOutcomeMain(t *testing.T) { t.Parallel() msg := message.NewMsg(nil) msg.SwapVerbose(testing.Verbose()) @@ -653,14 +652,6 @@ func TestApp(t *testing.T) { } } -func mustMarshal(v any) string { - if b, err := json.Marshal(v); err != nil { - panic(err.Error()) - } else { - return string(b) - } -} - func stubDirEntries(names ...string) (e []fs.DirEntry, err error) { e = make([]fs.DirEntry, len(names)) for i, name := range names { @@ -930,11 +921,3 @@ func (k *stubNixOS) fatalf(format string, v ...any) { panic(fmt.Sprintf(format, func (k *stubNixOS) isVerbose() bool { return true } func (k *stubNixOS) verbose(v ...any) { log.Print(v...) } func (k *stubNixOS) verbosef(format string, v ...any) { log.Printf(format, v...) } - -func m(pathname string) *check.Absolute { - return check.MustAbs(pathname) -} - -func f(c hst.FilesystemConfig) hst.FilesystemConfigJSON { - return hst.FilesystemConfigJSON{FilesystemConfig: c} -} diff --git a/internal/app/outcome.go b/internal/outcome/outcome.go similarity index 98% rename from internal/app/outcome.go rename to internal/outcome/outcome.go index 59cdfbd..2397b72 100644 --- a/internal/app/outcome.go +++ b/internal/outcome/outcome.go @@ -1,4 +1,5 @@ -package app +// Package outcome implements the outcome of the privileged and container sides of a hakurei container. +package outcome import ( "errors" diff --git a/internal/app/outcome_test.go b/internal/outcome/outcome_test.go similarity index 98% rename from internal/app/outcome_test.go rename to internal/outcome/outcome_test.go index 5ea3ff9..a03e250 100644 --- a/internal/app/outcome_test.go +++ b/internal/outcome/outcome_test.go @@ -1,4 +1,4 @@ -package app +package outcome import ( "testing" diff --git a/internal/app/process.go b/internal/outcome/process.go similarity index 99% rename from internal/app/process.go rename to internal/outcome/process.go index 7873109..d96c7ef 100644 --- a/internal/app/process.go +++ b/internal/outcome/process.go @@ -1,4 +1,4 @@ -package app +package outcome import ( "context" @@ -16,7 +16,7 @@ import ( "hakurei.app/container/fhs" "hakurei.app/hst" "hakurei.app/internal" - "hakurei.app/internal/app/state" + "hakurei.app/internal/state" "hakurei.app/message" "hakurei.app/system" ) diff --git a/internal/app/shim-signal.c b/internal/outcome/shim-signal.c similarity index 100% rename from internal/app/shim-signal.c rename to internal/outcome/shim-signal.c diff --git a/internal/app/shim-signal.h b/internal/outcome/shim-signal.h similarity index 100% rename from internal/app/shim-signal.h rename to internal/outcome/shim-signal.h diff --git a/internal/app/shim.go b/internal/outcome/shim.go similarity index 99% rename from internal/app/shim.go rename to internal/outcome/shim.go index 11affdd..53d04ea 100644 --- a/internal/app/shim.go +++ b/internal/outcome/shim.go @@ -1,4 +1,4 @@ -package app +package outcome import ( "context" diff --git a/internal/app/shim_test.go b/internal/outcome/shim_test.go similarity index 97% rename from internal/app/shim_test.go rename to internal/outcome/shim_test.go index 19dedd6..e4de9c3 100644 --- a/internal/app/shim_test.go +++ b/internal/outcome/shim_test.go @@ -1,4 +1,4 @@ -package app +package outcome import ( "bytes" @@ -118,7 +118,7 @@ func TestShimEntrypoint(t *testing.T) { spTmpdirOp{}, spAccountOp{}, &spWaylandOp{}, - &spPulseOp{(*[256]byte)(bytes.Repeat([]byte{0}, pulseCookieSizeMax)), pulseCookieSizeMax}, + &spPulseOp{(*[pulseCookieSizeMax]byte)(bytes.Repeat([]byte{0}, pulseCookieSizeMax)), pulseCookieSizeMax}, &spDBusOp{true}, &spFilesystemOp{}, }}, diff --git a/internal/app/spaccount.go b/internal/outcome/spaccount.go similarity index 98% rename from internal/app/spaccount.go rename to internal/outcome/spaccount.go index c9f08fe..0e9c602 100644 --- a/internal/app/spaccount.go +++ b/internal/outcome/spaccount.go @@ -1,4 +1,4 @@ -package app +package outcome import ( "encoding/gob" diff --git a/internal/app/spaccount_test.go b/internal/outcome/spaccount_test.go similarity index 99% rename from internal/app/spaccount_test.go rename to internal/outcome/spaccount_test.go index c5fb7b5..c1693dd 100644 --- a/internal/app/spaccount_test.go +++ b/internal/outcome/spaccount_test.go @@ -1,4 +1,4 @@ -package app +package outcome import ( "os" diff --git a/internal/app/spcontainer.go b/internal/outcome/spcontainer.go similarity index 99% rename from internal/app/spcontainer.go rename to internal/outcome/spcontainer.go index d411cb9..13808ca 100644 --- a/internal/app/spcontainer.go +++ b/internal/outcome/spcontainer.go @@ -1,4 +1,4 @@ -package app +package outcome import ( "encoding/gob" diff --git a/internal/app/spcontainer_test.go b/internal/outcome/spcontainer_test.go similarity index 99% rename from internal/app/spcontainer_test.go rename to internal/outcome/spcontainer_test.go index 154b929..3b00305 100644 --- a/internal/app/spcontainer_test.go +++ b/internal/outcome/spcontainer_test.go @@ -1,4 +1,4 @@ -package app +package outcome import ( "errors" diff --git a/internal/app/spdbus.go b/internal/outcome/spdbus.go similarity index 99% rename from internal/app/spdbus.go rename to internal/outcome/spdbus.go index 429674d..afb62ca 100644 --- a/internal/app/spdbus.go +++ b/internal/outcome/spdbus.go @@ -1,4 +1,4 @@ -package app +package outcome import ( "encoding/gob" diff --git a/internal/app/spdbus_test.go b/internal/outcome/spdbus_test.go similarity index 99% rename from internal/app/spdbus_test.go rename to internal/outcome/spdbus_test.go index 8dcf102..26f1fdc 100644 --- a/internal/app/spdbus_test.go +++ b/internal/outcome/spdbus_test.go @@ -1,4 +1,4 @@ -package app +package outcome import ( "syscall" diff --git a/internal/app/sppulse.go b/internal/outcome/sppulse.go similarity index 99% rename from internal/app/sppulse.go rename to internal/outcome/sppulse.go index fe63f36..a2dc240 100644 --- a/internal/app/sppulse.go +++ b/internal/outcome/sppulse.go @@ -1,4 +1,4 @@ -package app +package outcome import ( "encoding/gob" diff --git a/internal/app/sppulse_test.go b/internal/outcome/sppulse_test.go similarity index 99% rename from internal/app/sppulse_test.go rename to internal/outcome/sppulse_test.go index c622073..9aecb19 100644 --- a/internal/app/sppulse_test.go +++ b/internal/outcome/sppulse_test.go @@ -1,4 +1,4 @@ -package app +package outcome import ( "bytes" diff --git a/internal/app/spruntime.go b/internal/outcome/spruntime.go similarity index 99% rename from internal/app/spruntime.go rename to internal/outcome/spruntime.go index 25c04b8..b458826 100644 --- a/internal/app/spruntime.go +++ b/internal/outcome/spruntime.go @@ -1,4 +1,4 @@ -package app +package outcome import ( "encoding/gob" diff --git a/internal/app/spruntime_test.go b/internal/outcome/spruntime_test.go similarity index 99% rename from internal/app/spruntime_test.go rename to internal/outcome/spruntime_test.go index 1675a7e..00056ed 100644 --- a/internal/app/spruntime_test.go +++ b/internal/outcome/spruntime_test.go @@ -1,4 +1,4 @@ -package app +package outcome import ( "testing" diff --git a/internal/app/sptmpdir.go b/internal/outcome/sptmpdir.go similarity index 98% rename from internal/app/sptmpdir.go rename to internal/outcome/sptmpdir.go index 5b7b54b..4776dad 100644 --- a/internal/app/sptmpdir.go +++ b/internal/outcome/sptmpdir.go @@ -1,4 +1,4 @@ -package app +package outcome import ( "encoding/gob" diff --git a/internal/app/sptmpdir_test.go b/internal/outcome/sptmpdir_test.go similarity index 98% rename from internal/app/sptmpdir_test.go rename to internal/outcome/sptmpdir_test.go index 53b44fb..afa641f 100644 --- a/internal/app/sptmpdir_test.go +++ b/internal/outcome/sptmpdir_test.go @@ -1,4 +1,4 @@ -package app +package outcome import ( "testing" diff --git a/internal/app/spwayland.go b/internal/outcome/spwayland.go similarity index 99% rename from internal/app/spwayland.go rename to internal/outcome/spwayland.go index d8c1838..54119de 100644 --- a/internal/app/spwayland.go +++ b/internal/outcome/spwayland.go @@ -1,4 +1,4 @@ -package app +package outcome import ( "encoding/gob" diff --git a/internal/app/spwayland_test.go b/internal/outcome/spwayland_test.go similarity index 99% rename from internal/app/spwayland_test.go rename to internal/outcome/spwayland_test.go index 89c8147..5cee8de 100644 --- a/internal/app/spwayland_test.go +++ b/internal/outcome/spwayland_test.go @@ -1,4 +1,4 @@ -package app +package outcome import ( "testing" diff --git a/internal/app/spx11.go b/internal/outcome/spx11.go similarity index 99% rename from internal/app/spx11.go rename to internal/outcome/spx11.go index 109cf0c..506fa9a 100644 --- a/internal/app/spx11.go +++ b/internal/outcome/spx11.go @@ -1,4 +1,4 @@ -package app +package outcome import ( "encoding/gob" diff --git a/internal/app/spx11_test.go b/internal/outcome/spx11_test.go similarity index 99% rename from internal/app/spx11_test.go rename to internal/outcome/spx11_test.go index 0486a1e..c958e94 100644 --- a/internal/app/spx11_test.go +++ b/internal/outcome/spx11_test.go @@ -1,4 +1,4 @@ -package app +package outcome import ( "os" diff --git a/internal/app/state/data.go b/internal/state/data.go similarity index 100% rename from internal/app/state/data.go rename to internal/state/data.go diff --git a/internal/app/state/data_test.go b/internal/state/data_test.go similarity index 100% rename from internal/app/state/data_test.go rename to internal/state/data_test.go diff --git a/internal/app/state/header.go b/internal/state/header.go similarity index 100% rename from internal/app/state/header.go rename to internal/state/header.go diff --git a/internal/app/state/header_test.go b/internal/state/header_test.go similarity index 100% rename from internal/app/state/header_test.go rename to internal/state/header_test.go diff --git a/internal/app/state/join.go b/internal/state/join.go similarity index 100% rename from internal/app/state/join.go rename to internal/state/join.go diff --git a/internal/app/state/segment.go b/internal/state/segment.go similarity index 100% rename from internal/app/state/segment.go rename to internal/state/segment.go diff --git a/internal/app/state/segment_test.go b/internal/state/segment_test.go similarity index 100% rename from internal/app/state/segment_test.go rename to internal/state/segment_test.go diff --git a/internal/app/state/state.go b/internal/state/state.go similarity index 100% rename from internal/app/state/state.go rename to internal/state/state.go diff --git a/internal/app/state/state_test.go b/internal/state/state_test.go similarity index 98% rename from internal/app/state/state_test.go rename to internal/state/state_test.go index c387b2e..eed2c89 100644 --- a/internal/app/state/state_test.go +++ b/internal/state/state_test.go @@ -10,7 +10,7 @@ import ( "hakurei.app/container/check" "hakurei.app/hst" - "hakurei.app/internal/app/state" + "hakurei.app/internal/state" "hakurei.app/message" ) diff --git a/internal/app/state/store.go b/internal/state/store.go similarity index 100% rename from internal/app/state/store.go rename to internal/state/store.go diff --git a/internal/app/state/store_test.go b/internal/state/store_test.go similarity index 100% rename from internal/app/state/store_test.go rename to internal/state/store_test.go