return err
}
+ // Check the socket path before the daemon writes a file, so that a data
+ // directory with a long path stays empty.
+ socket := filepath.Join(dir, socketFileName)
+ err = checkSocketPath(socket)
+ if err != nil {
+ return err
+ }
+
config, err := loadConfig(dir)
if err != nil {
return err
err = errors.Join(err, memory.Close())
}()
- listener, err := listenSocket(filepath.Join(dir, socketFileName))
+ listener, err := listenSocket(socket)
if err != nil {
return err
}
require.ErrorContains(t, err, "set ONECHAT_DIR to a shorter path")
}
+func TestDaemonWritesNoFileForALongSocketPath(t *testing.T) {
+ dir := filepath.Join(t.TempDir(), strings.Repeat("d", 100))
+ t.Setenv("ONECHAT_DIR", dir)
+
+ err := daemon(t.Context(), io.Discard)
+ require.ErrorContains(t, err, "set ONECHAT_DIR to a shorter path")
+
+ entries, err := os.ReadDir(dir)
+ require.NoError(t, err)
+ require.Empty(t, entries)
+}
+
func TestOneProcessHoldsTheTokens(t *testing.T) {
dir := t.TempDir()
lock, err := lockTokens(dir)