diff --git a/manager/start.go b/manager/start.go index 2a86132..fab1d6d 100644 --- a/manager/start.go +++ b/manager/start.go @@ -3,6 +3,7 @@ package manager import ( "fmt" "io/ioutil" + "os" "os/exec" "path/filepath" "strings" @@ -121,7 +122,12 @@ func getSystemSrvs() ([]string, error) { } func getUserSrvs(home string) ([]string, error) { - return getSrvs(filepath.Join(home, srvUserPath)) + confDir := filepath.Join(home, srvUserPath) + err := os.MkdirAll(confDir, 0755) + if nil != err { + return nil, err + } + return getSrvs(confDir) } // "come.example.foo.plist" matches "foo" diff --git a/manager/start_stop_test.go b/manager/start_stop_test.go new file mode 100644 index 0000000..c16b819 --- /dev/null +++ b/manager/start_stop_test.go @@ -0,0 +1,32 @@ +package manager + +import ( + "fmt" + "io/ioutil" + "os" + "path/filepath" + "testing" +) + +func TestEmptyUserServicePath(t *testing.T) { + srvs, err := getUserSrvs("/tmp/fakeuser") + if nil != err { + t.Fatal(err) + } + if len(srvs) > 0 { + t.Fatal(fmt.Errorf("sanity fail: shouldn't get services from empty directory")) + } + + dirs, err := ioutil.ReadDir(filepath.Join("/tmp/fakeuser", srvUserPath)) + if nil != err { + t.Fatal(err) + } + if len(dirs) > 0 { + t.Fatal(fmt.Errorf("sanity fail: shouldn't get listing from empty directory")) + } + + err = os.RemoveAll("/tmp/fakeuser") + if nil != err { + panic("couldn't remove /tmp/fakeuser") + } +}