diff --git a/file_log.go b/file_log.go index 14f0d32b4..99e469d56 100644 --- a/file_log.go +++ b/file_log.go @@ -58,7 +58,7 @@ func NewFileLogFactory(settings *Settings) (LogFactory, error) { return logFactory, nil } -func (f fileLogFactory) buildFileLog(prefix string, logPath string) (fileLog, error) { +func newFileLog(prefix string, logPath string) (fileLog, error) { l := fileLog{} eventLogName := path.Join(logPath, prefix+".event.current.log") @@ -68,7 +68,7 @@ func (f fileLogFactory) buildFileLog(prefix string, logPath string) (fileLog, er return l, err } - fileFlags := os.O_RDWR | os.O_CREATE + fileFlags := os.O_RDWR | os.O_CREATE | os.O_APPEND eventFile, err := os.OpenFile(eventLogName, fileFlags, os.ModePerm) if err != nil { return l, err @@ -86,7 +86,7 @@ func (f fileLogFactory) buildFileLog(prefix string, logPath string) (fileLog, er } func (f fileLogFactory) Create() (Log, error) { - return f.buildFileLog("GLOBAL", f.globalLogPath) + return newFileLog("GLOBAL", f.globalLogPath) } func (f fileLogFactory) CreateSessionLog(sessionID SessionID) (Log, error) { @@ -101,5 +101,5 @@ func (f fileLogFactory) CreateSessionLog(sessionID SessionID) (Log, error) { prefixParts = append(prefixParts, sessionID.Qualifier) } - return f.buildFileLog(strings.Join(prefixParts, "-"), logPath) + return newFileLog(strings.Join(prefixParts, "-"), logPath) } diff --git a/file_log_test.go b/file_log_test.go index b3901ecb5..6f978d06a 100644 --- a/file_log_test.go +++ b/file_log_test.go @@ -1,6 +1,10 @@ package quickfix import ( + "bufio" + "fmt" + "os" + "path" "strings" "testing" ) @@ -45,3 +49,82 @@ SessionQualifier=BS t.Error("Should have returned factory") } } + +type fileLogHelper struct { + LogPath string + Prefix string + Log Log +} + +func newFileLogHelper(t *testing.T) *fileLogHelper { + prefix := "myprefix" + logPath := path.Join(os.TempDir(), fmt.Sprintf("TestLogStore-%d", os.Getpid())) + + log, err := newFileLog(prefix, logPath) + if err != nil { + t.Error("Unexpected error", err) + } + + return &fileLogHelper{ + LogPath: logPath, + Prefix: prefix, + Log: log, + } +} + +func TestNewFileLog(t *testing.T) { + helper := newFileLogHelper(t) + + tests := []struct { + expectedPath string + }{ + {path.Join(helper.LogPath, fmt.Sprintf("%v.messages.current.log", helper.Prefix))}, + {path.Join(helper.LogPath, fmt.Sprintf("%v.event.current.log", helper.Prefix))}, + } + + for _, test := range tests { + if _, err := os.Stat(test.expectedPath); os.IsNotExist(err) { + t.Errorf("%v does not exist", test.expectedPath) + } + } +} + +func TestFileLog_Append(t *testing.T) { + helper := newFileLogHelper(t) + + messageLogFile, err := os.Open(path.Join(helper.LogPath, fmt.Sprintf("%v.messages.current.log", helper.Prefix))) + if err != nil { + t.Error("Unexpected error", err) + } + defer messageLogFile.Close() + + eventLogFile, err := os.Open(path.Join(helper.LogPath, fmt.Sprintf("%v.event.current.log", helper.Prefix))) + if err != nil { + t.Error("Unexpected error", err) + } + defer eventLogFile.Close() + + messageScanner := bufio.NewScanner(messageLogFile) + eventScanner := bufio.NewScanner(eventLogFile) + + helper.Log.OnIncoming("incoming") + if !messageScanner.Scan() { + t.Error("Unexpected EOF") + } + + helper.Log.OnEvent("Event") + if !eventScanner.Scan() { + t.Error("Unexpected EOF") + } + + newHelper := newFileLogHelper(t) + newHelper.Log.OnIncoming("incoming") + if !messageScanner.Scan() { + t.Error("Unexpected EOF") + } + + newHelper.Log.OnEvent("Event") + if !eventScanner.Scan() { + t.Error("Unexpected EOF") + } +}