Skip to content

Commit 1379885

Browse files
committed
Add test for RemoveAll method for phys restore
1 parent 624410f commit 1379885

File tree

1 file changed

+141
-0
lines changed

1 file changed

+141
-0
lines changed

pbm/restore/physical_test.go

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55
"net"
66
"os"
7+
"path"
78
"path/filepath"
89
"strings"
910
"testing"
@@ -181,3 +182,143 @@ func TestWaitMgoFreePort(t *testing.T) {
181182
}
182183
})
183184
}
185+
186+
func TestRemoveAll(t *testing.T) {
187+
t.Run("removes all files in dir", func(t *testing.T) {
188+
tmpDir := setupTestFiles(t)
189+
190+
err := removeAll(tmpDir, log.DiscardEvent)
191+
if err != nil {
192+
t.Fatalf("got error when removing all files, err=%v", err)
193+
}
194+
195+
files := readDir(t, tmpDir)
196+
if len(files) != 0 {
197+
t.Fatalf("dir should be empty, got=%d files", len(files))
198+
}
199+
})
200+
201+
t.Run("skiping internal mongod log files", func(t *testing.T) {
202+
tmpDir := setupTestFiles(t)
203+
204+
err := removeAll(tmpDir, log.DiscardEvent, getInternlLogFileSkipRule())
205+
if err != nil {
206+
t.Fatalf("got error when removing all files, err=%v", err)
207+
}
208+
209+
files := readDir(t, tmpDir)
210+
if len(files) != 3 {
211+
t.Fatalf("expected to have 3 log files, got=%d files, names=%s", len(files), files)
212+
}
213+
})
214+
215+
t.Run("skiping fallback dir", func(t *testing.T) {
216+
tmpDir := setupTestFiles(t)
217+
218+
err := removeAll(tmpDir, log.DiscardEvent, getFallbackSyncFileSkipRule())
219+
if err != nil {
220+
t.Fatalf("got error when removing all files, err=%v", err)
221+
}
222+
223+
files := readDir(t, tmpDir)
224+
if len(files) != 1 || files[0] != fallbackDir {
225+
t.Fatalf("expected to have fallback dir, got=%d files/dirs, names=%s", len(files), files)
226+
}
227+
228+
files = readDir(t, path.Join(tmpDir, fallbackDir))
229+
if len(files) != 1 || files[0] != "file.fallback" {
230+
t.Fatalf("expected to have 1 file within fallback dir, got=%d files/dirs, names=%s", len(files), files)
231+
}
232+
})
233+
234+
t.Run("skiping all pbm related", func(t *testing.T) {
235+
tmpDir := setupTestFiles(t)
236+
237+
err := removeAll(tmpDir, log.DiscardEvent, getFallbackSyncFileSkipRule(), getInternlLogFileSkipRule())
238+
if err != nil {
239+
t.Fatalf("got error when removing all files, err=%v", err)
240+
}
241+
242+
files := readDir(t, tmpDir)
243+
if len(files) != 4 {
244+
t.Fatalf("expected to have fallback dir and mongod log file, got=%d files/dirs, names=%s", len(files), files)
245+
}
246+
})
247+
}
248+
249+
func readDir(t *testing.T, dir string) []string {
250+
t.Helper()
251+
252+
d, err := os.Open(dir)
253+
if err != nil {
254+
t.Fatalf("failing opening dir, err=%v", err)
255+
}
256+
defer d.Close()
257+
258+
files, err := d.Readdirnames(-1)
259+
if err != nil {
260+
t.Fatalf("failing reading dir, err=%v", err)
261+
}
262+
263+
return files
264+
}
265+
266+
func setupTestFiles(t *testing.T) string {
267+
tmpDir, err := os.MkdirTemp("", "phys-test-*")
268+
if err != nil {
269+
t.Fatalf("error while creating setup files: %v", err)
270+
}
271+
272+
t.Cleanup(func() {
273+
os.RemoveAll(tmpDir)
274+
})
275+
276+
// tmpDir/
277+
// - file1.txt
278+
// - file2.log
279+
// - file3.txt.tmp
280+
// - subdir/
281+
// - file4.txt
282+
// - file5.log
283+
// - file6.txt.tmp
284+
// - empty/
285+
// - pbm.restore.log
286+
// - pbm.restore.log.2025-05-15T14-33-34
287+
// - pbm.restore.log.2025-05-15T14-37-34
288+
// - .fallbacksync/
289+
// - file.fs.txt
290+
createTestFile(t, filepath.Join(tmpDir, "file1.txt"), "content1")
291+
createTestFile(t, filepath.Join(tmpDir, "file2.log"), "content2")
292+
createTestFile(t, filepath.Join(tmpDir, "file3.txt.tmp"), "content3")
293+
294+
createTestDir(t, filepath.Join(tmpDir, "subdir"))
295+
createTestFile(t, filepath.Join(tmpDir, "subdir", "file4.txt"), "content4")
296+
createTestFile(t, filepath.Join(tmpDir, "subdir", "file5.log"), "content5")
297+
createTestFile(t, filepath.Join(tmpDir, "subdir", "file6.txt.tmp"), "content6")
298+
299+
createTestDir(t, filepath.Join(tmpDir, "empty"))
300+
301+
// files & dirs with additional semantic:
302+
createTestFile(t, filepath.Join(tmpDir, "pbm.restore.log"), "log-content-1")
303+
createTestFile(t, filepath.Join(tmpDir, "pbm.restore.log.2025-05-15T14-33-34"), "log-content-2")
304+
createTestFile(t, filepath.Join(tmpDir, "pbm.restore.log.2025-05-15T14-37-34"), "log-content-3")
305+
306+
createTestDir(t, filepath.Join(tmpDir, fallbackDir))
307+
createTestFile(t, filepath.Join(tmpDir, fallbackDir, "file.fallback"), "content")
308+
309+
return tmpDir
310+
}
311+
312+
func createTestFile(t *testing.T, path, content string) {
313+
t.Helper()
314+
if err := os.WriteFile(path, []byte(content), 0o644); err != nil {
315+
t.Fatalf("error while creating file %s: %v", path, err)
316+
}
317+
}
318+
319+
func createTestDir(t *testing.T, path string) {
320+
t.Helper()
321+
if err := os.Mkdir(path, 0o755); err != nil {
322+
t.Fatalf("error while creating dir %s: %v", path, err)
323+
}
324+
}

0 commit comments

Comments
 (0)