@@ -96,6 +96,75 @@ func TestNew(t *testing.T) {
96
96
}
97
97
}
98
98
99
+ func TestCreateNewWALFile (t * testing.T ) {
100
+ tests := []struct {
101
+ name string
102
+ fileType interface {}
103
+ forceNew bool
104
+ }{
105
+ {
106
+ name : "creating standard file should succeed and not truncate file" ,
107
+ fileType : & os.File {},
108
+ forceNew : false ,
109
+ },
110
+ {
111
+ name : "creating locked file should succeed and not truncate file" ,
112
+ fileType : & fileutil.LockedFile {},
113
+ forceNew : false ,
114
+ },
115
+ {
116
+ name : "creating standard file with forceNew should truncate file" ,
117
+ fileType : & os.File {},
118
+ forceNew : true ,
119
+ },
120
+ {
121
+ name : "creating locked file with forceNew should truncate file" ,
122
+ fileType : & fileutil.LockedFile {},
123
+ forceNew : true ,
124
+ },
125
+ }
126
+
127
+ for i , tt := range tests {
128
+ t .Run (tt .name , func (t * testing.T ) {
129
+ p := filepath .Join (t .TempDir (), walName (0 , uint64 (i )))
130
+
131
+ // create initial file with some data to verify truncate behavior
132
+ err := os .WriteFile (p , []byte ("test data" ), fileutil .PrivateFileMode )
133
+ require .NoError (t , err )
134
+
135
+ var f interface {}
136
+ switch tt .fileType .(type ) {
137
+ case * os.File :
138
+ f , err = createNewWALFile [* os.File ](p , tt .forceNew )
139
+ require .IsType (t , & os.File {}, f )
140
+ case * fileutil.LockedFile :
141
+ f , err = createNewWALFile [* fileutil.LockedFile ](p , tt .forceNew )
142
+ require .IsType (t , & fileutil.LockedFile {}, f )
143
+ default :
144
+ panic ("unknown file type" )
145
+ }
146
+
147
+ require .NoError (t , err )
148
+
149
+ // validate the file permissions
150
+ fi , err := os .Stat (p )
151
+ require .NoError (t , err )
152
+ expectedPerms := fmt .Sprintf ("%o" , os .FileMode (fileutil .PrivateFileMode ))
153
+ actualPerms := fmt .Sprintf ("%o" , fi .Mode ().Perm ())
154
+ require .Equal (t , expectedPerms , actualPerms , "unexpected file permissions on %q" , p )
155
+
156
+ content , err := os .ReadFile (p )
157
+ require .NoError (t , err )
158
+
159
+ if tt .forceNew {
160
+ require .Empty (t , string (content ), "file content should be truncated but it wasn't" )
161
+ } else {
162
+ require .Equal (t , "test data" , string (content ), "file content should not be truncated but it was" )
163
+ }
164
+ })
165
+ }
166
+ }
167
+
99
168
func TestCreateFailFromPollutedDir (t * testing.T ) {
100
169
p := t .TempDir ()
101
170
os .WriteFile (filepath .Join (p , "test.wal" ), []byte ("data" ), os .ModeTemporary )
0 commit comments