Skip to content

Commit a67f2e7

Browse files
committed
Move some generic funcs into fileutil.go
1 parent 6c16edb commit a67f2e7

File tree

3 files changed

+69
-30
lines changed

3 files changed

+69
-30
lines changed

filestore.go

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -75,35 +75,6 @@ func newFileStore(sessionID SessionID, dirname string) (*fileStore, error) {
7575
return store, nil
7676
}
7777

78-
func closeFile(f *os.File) error {
79-
if f != nil {
80-
if err := f.Close(); err != nil {
81-
if !os.IsNotExist(err) {
82-
return err
83-
}
84-
}
85-
}
86-
return nil
87-
}
88-
89-
func removeFile(fname string) error {
90-
err := os.Remove(fname)
91-
if (err != nil) && !os.IsNotExist(err) {
92-
return err
93-
}
94-
return nil
95-
}
96-
97-
// openOrCreateFile opens a file for reading and writing, creating it if necessary
98-
func openOrCreateFile(fname string, perm os.FileMode) (f *os.File, err error) {
99-
if f, err = os.OpenFile(fname, os.O_RDWR, perm); err != nil {
100-
if f, err = os.OpenFile(fname, os.O_RDWR|os.O_CREATE, perm); err != nil {
101-
return nil, fmt.Errorf("error opening or creating file: %s: %s", fname, err.Error())
102-
}
103-
}
104-
return f, nil
105-
}
106-
10778
// Reset deletes the store files and sets the seqnums back to 1
10879
func (store *fileStore) Reset() error {
10980
store.cache.Reset()

fileutil.go

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package quickfix
22

3-
import "strings"
3+
import (
4+
"fmt"
5+
"os"
6+
"strings"
7+
)
48

59
func sessionIDFilenamePrefix(s SessionID) string {
610
sender := []string{s.SenderCompID}
@@ -25,3 +29,34 @@ func sessionIDFilenamePrefix(s SessionID) string {
2529
}
2630
return strings.Join(fname, "-")
2731
}
32+
33+
// closeFile behaves like Close, except that no error is returned if the file does not exist
34+
func closeFile(f *os.File) error {
35+
if f != nil {
36+
if err := f.Close(); err != nil {
37+
if !os.IsNotExist(err) {
38+
return err
39+
}
40+
}
41+
}
42+
return nil
43+
}
44+
45+
// removeFile behaves like os.Remove, except that no error is returned if the file does not exist
46+
func removeFile(fname string) error {
47+
err := os.Remove(fname)
48+
if (err != nil) && !os.IsNotExist(err) {
49+
return err
50+
}
51+
return nil
52+
}
53+
54+
// openOrCreateFile opens a file for reading and writing, creating it if necessary
55+
func openOrCreateFile(fname string, perm os.FileMode) (f *os.File, err error) {
56+
if f, err = os.OpenFile(fname, os.O_RDWR, perm); err != nil {
57+
if f, err = os.OpenFile(fname, os.O_RDWR|os.O_CREATE, perm); err != nil {
58+
return nil, fmt.Errorf("error opening or creating file: %s: %s", fname, err.Error())
59+
}
60+
}
61+
return f, nil
62+
}

fileutil_test.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,25 @@
11
package quickfix
22

33
import (
4+
"fmt"
5+
"os"
6+
"path"
47
"testing"
58

69
"github.com/stretchr/testify/require"
710
)
811

12+
func requireNotFileExists(t *testing.T, fname string) {
13+
_, err := os.Stat(fname)
14+
require.NotNil(t, err)
15+
require.True(t, os.IsNotExist(err))
16+
}
17+
18+
func requireFileExists(t *testing.T, fname string) {
19+
_, err := os.Stat(fname)
20+
require.Nil(t, err)
21+
}
22+
923
func TestSessionIDFilename_MinimallyQualifiedSessionID(t *testing.T) {
1024
// When the session ID is
1125
sessionID := SessionID{BeginString: "FIX.4.4", SenderCompID: "SENDER", TargetCompID: "TARGET"}
@@ -30,3 +44,22 @@ func TestSessionIDFilename_FullyQualifiedSessionID(t *testing.T) {
3044
// Then the filename should be
3145
require.Equal(t, "FIX.4.4-A_B_C-D_E_F-G", sessionIDFilenamePrefix(sessionID))
3246
}
47+
48+
func TestOpenOrCreateFile(t *testing.T) {
49+
// When the file doesn't exist yet
50+
fname := path.Join(os.TempDir(), fmt.Sprintf("TestOpenOrCreateFile-%d", os.Getpid()))
51+
requireNotFileExists(t, fname)
52+
defer os.Remove(fname)
53+
54+
// Then it should be created
55+
f, err := openOrCreateFile(fname, 0664)
56+
requireFileExists(t, fname)
57+
58+
// When the file already exists
59+
f.Close()
60+
61+
// Then it should be opened
62+
f, err = openOrCreateFile(fname, 0664)
63+
require.Nil(t, err)
64+
require.Nil(t, f.Close())
65+
}

0 commit comments

Comments
 (0)