package setup import ( "os" "path/filepath" "strings" "testing" ) func TestUnitWithoutJournalGroups(t *testing.T) { vars := map[string]string{"@USER@": "ham", "@GROUP@": "ham", "@HOME@": "/home/ham", "@BIN@": "/usr/local/bin/hamlab", "@CONFIG@": "/home/ham/.config/hamlab/config.json", "@GROUPS@": ""} unit := dropLines(fill(systemdUnit, vars), "SupplementaryGroups=") if strings.Contains(unit, "SupplementaryGroups") || strings.Contains(unit, "@") { t.Fatalf("unit still has a groups line or an unfilled placeholder:\n%s", unit) } if !strings.Contains(unit, "ExecStart=/usr/local/bin/hamlab serve") { t.Fatalf("ExecStart missing:\n%s", unit) } } func TestConfigDirFrom(t *testing.T) { for in, want := range map[string]string{ "Environment=HAMLAB_CONFIG=/home/ham/.config/hamlab/config.json": "/home/ham/.config/hamlab", `export HAMLAB_CONFIG="/root/.config/hamlab/config.json"`: "/root/.config/hamlab", "Environment=HAMLAB_CONFIG=/config.json": "", "Environment=HAMLAB_CONFIG=/etc/passwd": "", } { key := "Environment=HAMLAB_CONFIG=" if strings.HasPrefix(in, "export") { key = "export HAMLAB_CONFIG=" } if got := configDirFrom(in, key); got != want { t.Errorf("%q: got %q want %q", in, got, want) } } } // --purge must never take a shared directory with it. func TestPurgeSparesSharedDirectory(t *testing.T) { home := t.TempDir() os.WriteFile(filepath.Join(home, "config.json"), []byte("{}"), 0o600) os.WriteFile(filepath.Join(home, "thesis.txt"), []byte("irreplaceable"), 0o600) if err := purgeData(home); err != nil { t.Fatal(err) } if _, err := os.Stat(filepath.Join(home, "thesis.txt")); err != nil { t.Fatal("purge deleted a file that wasn't Ham Lab's") } if _, err := os.Stat(filepath.Join(home, "config.json")); err == nil { t.Fatal("purge left config.json behind") } own := filepath.Join(t.TempDir(), "hamlab") os.MkdirAll(own, 0o700) os.WriteFile(filepath.Join(own, "config.json"), []byte("{}"), 0o600) if err := purgeData(own); err != nil { t.Fatal(err) } if _, err := os.Stat(own); err == nil { t.Fatal("purge left Ham Lab's own directory behind") } } func TestFirstMissing(t *testing.T) { base := t.TempDir() if got := firstMissing(filepath.Join(base, "a", "b", "c")); got != filepath.Join(base, "a") { t.Errorf("got %q", got) } if got := firstMissing(base); got != "" { t.Errorf("existing dir: got %q", got) } }