diff --git a/cmd/mbf/main.go b/cmd/mbf/main.go index 68d418b5..0d44bdbc 100644 --- a/cmd/mbf/main.go +++ b/cmd/mbf/main.go @@ -136,7 +136,17 @@ func main() { c.NewCommand( "checksum", "Compute checksum of data read from standard input", func([]string) error { - go func() { <-ctx.Done(); os.Exit(1) }() + done := make(chan struct{}) + defer close(done) + go func() { + select { + case <-ctx.Done(): + os.Exit(1) + case <-done: + return + } + }() + h := sha512.New384() if _, err := io.Copy(h, os.Stdin); err != nil { return err diff --git a/cmd/mbf/main_test.go b/cmd/mbf/main_test.go new file mode 100644 index 00000000..8f0d0894 --- /dev/null +++ b/cmd/mbf/main_test.go @@ -0,0 +1,47 @@ +package main + +import ( + "net" + "os" + "testing" + + "hakurei.app/internal/rosa" +) + +func TestMain(m *testing.M) { + rosa.DropCaches(rosa.OptLLVMNoLTO) + os.Exit(m.Run()) +} + +func TestCureAll(t *testing.T) { + t.Parallel() + const env = "ROSA_TEST_DAEMON" + + if !testing.Verbose() { + t.Skip("verbose flag not set") + } + + pathname, ok := os.LookupEnv(env) + if !ok { + t.Skip(env + " not set") + } + + addr := net.UnixAddr{Net: "unix", Name: pathname} + t.Cleanup(func() { + if t.Failed() { + if err := abortRemote(t.Context(), &addr, false); err != nil { + t.Fatal(err) + } + } + }) + + for i := range rosa.PresetEnd { + p := rosa.PArtifact(i) + t.Run(rosa.GetMetadata(p).Name, func(t *testing.T) { + _, err := cureRemote(t.Context(), &addr, rosa.Std.Load(p), 0) + if err != nil { + t.Error(err) + } + }) + } +}