From 55a7830ff9adf703a99beae4680462a3018d63d7 Mon Sep 17 00:00:00 2001 From: Simon Frei Date: Tue, 13 Mar 2018 14:03:10 +0100 Subject: [PATCH] lib/fs, lib/model: Make tests caching compatible (fixes #4749) (#4804) --- lib/fs/basicfs_watch_test.go | 1 + lib/model/.gitignore | 2 - lib/model/model_test.go | 149 ++++++++++++------ lib/model/progressemitter_test.go | 7 +- lib/model/requests_test.go | 23 +-- lib/model/rwfolder_test.go | 28 +--- lib/model/testdata/.stignore | 2 - .../testdata/{~syncthing~file.tmp => tmpfile} | Bin 8 files changed, 122 insertions(+), 90 deletions(-) delete mode 100644 lib/model/.gitignore delete mode 100644 lib/model/testdata/.stignore rename lib/model/testdata/{~syncthing~file.tmp => tmpfile} (100%) diff --git a/lib/fs/basicfs_watch_test.go b/lib/fs/basicfs_watch_test.go index 45c3d321b..9f9d32f7d 100644 --- a/lib/fs/basicfs_watch_test.go +++ b/lib/fs/basicfs_watch_test.go @@ -40,6 +40,7 @@ func TestMain(m *testing.M) { backendBuffer = 10 defer func() { backendBuffer = 500 + os.RemoveAll(testDir) }() os.Exit(m.Run()) } diff --git a/lib/model/.gitignore b/lib/model/.gitignore deleted file mode 100644 index e4883156d..000000000 --- a/lib/model/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.stfolder -.stignore diff --git a/lib/model/model_test.go b/lib/model/model_test.go index b45c19829..493e05ad8 100644 --- a/lib/model/model_test.go +++ b/lib/model/model_test.go @@ -36,10 +36,12 @@ import ( ) var device1, device2 protocol.DeviceID -var defaultConfig *config.Wrapper +var defaultCfgWrapper *config.Wrapper var defaultFolderConfig config.FolderConfiguration var defaultFs fs.Filesystem +var defaultCfg config.Configuration var defaultAutoAcceptCfg config.Configuration +var tmpLocation string func init() { device1, _ = protocol.DeviceIDFromString("AIR6LPZ-7K4PTTV-UXQSMUU-CPQ5YWH-OEDFIIQ-JUG777G-2YQXXR5-YD6AWQR") @@ -48,7 +50,7 @@ func init() { defaultFolderConfig = config.NewFolderConfiguration(protocol.LocalDeviceID, "default", "default", fs.FilesystemTypeBasic, "testdata") defaultFolderConfig.Devices = []config.FolderDeviceConfiguration{{DeviceID: device1}} - _defaultConfig := config.Configuration{ + defaultCfg = config.Configuration{ Version: config.CurrentVersion, Folders: []config.FolderConfiguration{defaultFolderConfig}, Devices: []config.DeviceConfiguration{config.NewDeviceConfiguration(device1, "device1")}, @@ -57,7 +59,6 @@ func init() { KeepTemporariesH: 1, }, } - defaultConfig = config.Wrap("/tmp/test", _defaultConfig) defaultAutoAcceptCfg = config.Configuration{ Devices: []config.DeviceConfiguration{ { @@ -106,10 +107,52 @@ func init() { } } +func TestMain(m *testing.M) { + tmpLocation = "/tmp" + if runtime.GOOS == "windows" { + tmpLocation = filepath.Join("testdata", "tmp") + if err := os.MkdirAll(tmpLocation, 0777); err != nil { + panic(err) + } + } + + tmpName := fs.TempName("file") + if err := osutil.Copy(defaultFs, "tmpfile", tmpName); err != nil { + panic(err) + } + future := time.Now().Add(time.Hour) + if err := os.Chtimes(filepath.Join("testdata", tmpName), future, future); err != nil { + panic(err) + } + + var wrapperPath string + defaultCfgWrapper, wrapperPath = createTmpWrapper(defaultCfg) + + exitCode := m.Run() + + os.Remove(wrapperPath) + defaultFs.Remove(tmpName) + defaultFs.RemoveAll(config.DefaultMarkerName) + defaultFs.RemoveAll(tmpLocation) + + os.Exit(exitCode) +} + +func createTmpWrapper(cfg config.Configuration) (*config.Wrapper, string) { + tmpFile, err := ioutil.TempFile(tmpLocation, "syncthing-testConfig-") + if err != nil { + panic(err) + } + wrapper := config.Wrap(tmpFile.Name(), cfg) + tmpFile.Close() + return wrapper, tmpFile.Name() +} + func newState(cfg config.Configuration) (*config.Wrapper, *Model) { db := db.OpenMemory() - wcfg := config.Wrap("/tmp/test", cfg) + wcfg, path := createTmpWrapper(cfg) + defer os.Remove(path) m := NewModel(wcfg, protocol.LocalDeviceID, "syncthing", "dev", db, nil) for _, folder := range cfg.Folders { @@ -125,7 +168,7 @@ func newState(cfg config.Configuration) (*config.Wrapper, *Model) { func TestRequest(t *testing.T) { db := db.OpenMemory() - m := NewModel(defaultConfig, protocol.LocalDeviceID, "syncthing", "dev", db, nil) + m := NewModel(defaultCfgWrapper, protocol.LocalDeviceID, "syncthing", "dev", db, nil) // device1 shares default, but device2 doesn't m.AddFolder(defaultFolderConfig) @@ -204,7 +247,7 @@ func BenchmarkIndex_100(b *testing.B) { func benchmarkIndex(b *testing.B, nfiles int) { db := db.OpenMemory() - m := NewModel(defaultConfig, protocol.LocalDeviceID, "syncthing", "dev", db, nil) + m := NewModel(defaultCfgWrapper, protocol.LocalDeviceID, "syncthing", "dev", db, nil) m.AddFolder(defaultFolderConfig) m.StartFolder("default") m.ServeBackground() @@ -234,7 +277,7 @@ func BenchmarkIndexUpdate_10000_1(b *testing.B) { func benchmarkIndexUpdate(b *testing.B, nfiles, nufiles int) { db := db.OpenMemory() - m := NewModel(defaultConfig, protocol.LocalDeviceID, "syncthing", "dev", db, nil) + m := NewModel(defaultCfgWrapper, protocol.LocalDeviceID, "syncthing", "dev", db, nil) m.AddFolder(defaultFolderConfig) m.StartFolder("default") m.ServeBackground() @@ -422,7 +465,7 @@ func (f *fakeConnection) sendIndexUpdate() { func BenchmarkRequestOut(b *testing.B) { db := db.OpenMemory() - m := NewModel(defaultConfig, protocol.LocalDeviceID, "syncthing", "dev", db, nil) + m := NewModel(defaultCfgWrapper, protocol.LocalDeviceID, "syncthing", "dev", db, nil) m.AddFolder(defaultFolderConfig) m.ServeBackground() defer m.Stop() @@ -452,7 +495,7 @@ func BenchmarkRequestOut(b *testing.B) { func BenchmarkRequestInSingleFile(b *testing.B) { db := db.OpenMemory() - m := NewModel(defaultConfig, protocol.LocalDeviceID, "syncthing", "dev", db, nil) + m := NewModel(defaultCfgWrapper, protocol.LocalDeviceID, "syncthing", "dev", db, nil) m.AddFolder(defaultFolderConfig) m.ServeBackground() defer m.Stop() @@ -481,7 +524,7 @@ func TestDeviceRename(t *testing.T) { ClientName: "syncthing", ClientVersion: "v0.9.4", } - defer os.Remove("tmpconfig.xml") + defer os.Remove("testdata/tmpconfig.xml") rawCfg := config.New(device1) rawCfg.Devices = []config.DeviceConfiguration{ @@ -489,7 +532,7 @@ func TestDeviceRename(t *testing.T) { DeviceID: device1, }, } - cfg := config.Wrap("tmpconfig.xml", rawCfg) + cfg := config.Wrap("testdata/tmpconfig.xml", rawCfg) db := db.OpenMemory() m := NewModel(cfg, protocol.LocalDeviceID, "syncthing", "dev", db, nil) @@ -525,7 +568,7 @@ func TestDeviceRename(t *testing.T) { t.Errorf("Device name got overwritten") } - cfgw, err := config.Load("tmpconfig.xml", protocol.LocalDeviceID) + cfgw, err := config.Load("testdata/tmpconfig.xml", protocol.LocalDeviceID) if err != nil { t.Error(err) return @@ -580,7 +623,9 @@ func TestClusterConfig(t *testing.T) { db := db.OpenMemory() - m := NewModel(config.Wrap("/tmp/test", cfg), protocol.LocalDeviceID, "syncthing", "dev", db, nil) + wrapper, path := createTmpWrapper(cfg) + defer os.Remove(path) + m := NewModel(wrapper, protocol.LocalDeviceID, "syncthing", "dev", db, nil) m.AddFolder(cfg.Folders[0]) m.AddFolder(cfg.Folders[1]) m.ServeBackground() @@ -1406,7 +1451,7 @@ func TestIgnores(t *testing.T) { ioutil.WriteFile("testdata/.stignore", []byte(".*\nquux\n"), 0644) db := db.OpenMemory() - m := NewModel(defaultConfig, protocol.LocalDeviceID, "syncthing", "dev", db, nil) + m := NewModel(defaultCfgWrapper, protocol.LocalDeviceID, "syncthing", "dev", db, nil) m.ServeBackground() defer m.Stop() @@ -1480,7 +1525,7 @@ func TestROScanRecovery(t *testing.T) { RescanIntervalS: 1, MarkerName: config.DefaultMarkerName, } - cfg := config.Wrap("/tmp/test", config.Configuration{ + cfg, path := createTmpWrapper(config.Configuration{ Folders: []config.FolderConfiguration{fcfg}, Devices: []config.DeviceConfiguration{ { @@ -1488,6 +1533,7 @@ func TestROScanRecovery(t *testing.T) { }, }, }) + defer os.Remove(path) os.RemoveAll(fcfg.Path) @@ -1568,7 +1614,7 @@ func TestRWScanRecovery(t *testing.T) { RescanIntervalS: 1, MarkerName: config.DefaultMarkerName, } - cfg := config.Wrap("/tmp/test", config.Configuration{ + cfg, path := createTmpWrapper(config.Configuration{ Folders: []config.FolderConfiguration{fcfg}, Devices: []config.DeviceConfiguration{ { @@ -1576,6 +1622,7 @@ func TestRWScanRecovery(t *testing.T) { }, }, }) + defer os.Remove(path) os.RemoveAll(fcfg.Path) @@ -1644,7 +1691,7 @@ func TestRWScanRecovery(t *testing.T) { func TestGlobalDirectoryTree(t *testing.T) { db := db.OpenMemory() - m := NewModel(defaultConfig, protocol.LocalDeviceID, "syncthing", "dev", db, nil) + m := NewModel(defaultCfgWrapper, protocol.LocalDeviceID, "syncthing", "dev", db, nil) m.AddFolder(defaultFolderConfig) m.ServeBackground() defer m.Stop() @@ -1896,7 +1943,7 @@ func TestGlobalDirectoryTree(t *testing.T) { func TestGlobalDirectorySelfFixing(t *testing.T) { db := db.OpenMemory() - m := NewModel(defaultConfig, protocol.LocalDeviceID, "syncthing", "dev", db, nil) + m := NewModel(defaultCfgWrapper, protocol.LocalDeviceID, "syncthing", "dev", db, nil) m.AddFolder(defaultFolderConfig) m.ServeBackground() @@ -2071,7 +2118,7 @@ func BenchmarkTree_100_10(b *testing.B) { func benchmarkTree(b *testing.B, n1, n2 int) { db := db.OpenMemory() - m := NewModel(defaultConfig, protocol.LocalDeviceID, "syncthing", "dev", db, nil) + m := NewModel(defaultCfgWrapper, protocol.LocalDeviceID, "syncthing", "dev", db, nil) m.AddFolder(defaultFolderConfig) m.ServeBackground() @@ -2236,7 +2283,7 @@ func TestIssue3028(t *testing.T) { // Create a model and default folder db := db.OpenMemory() - m := NewModel(defaultConfig, protocol.LocalDeviceID, "syncthing", "dev", db, nil) + m := NewModel(defaultCfgWrapper, protocol.LocalDeviceID, "syncthing", "dev", db, nil) defCfg := defaultFolderConfig.Copy() defCfg.RescanIntervalS = 86400 m.AddFolder(defCfg) @@ -2278,9 +2325,10 @@ func TestIssue3028(t *testing.T) { func TestIssue4357(t *testing.T) { db := db.OpenMemory() - cfg := defaultConfig.RawCopy() + cfg := defaultCfgWrapper.RawCopy() // Create a separate wrapper not to pollute other tests. - wrapper := config.Wrap("/tmp/test", config.Configuration{}) + wrapper, path := createTmpWrapper(config.Configuration{}) + defer os.Remove(path) m := NewModel(wrapper, protocol.LocalDeviceID, "syncthing", "dev", db, nil) m.ServeBackground() defer m.Stop() @@ -2357,21 +2405,21 @@ func TestScanNoDatabaseWrite(t *testing.T) { // something actually changed. db := db.OpenMemory() - m := NewModel(defaultConfig, protocol.LocalDeviceID, "syncthing", "dev", db, nil) + m := NewModel(defaultCfgWrapper, protocol.LocalDeviceID, "syncthing", "dev", db, nil) m.AddFolder(defaultFolderConfig) m.StartFolder("default") m.ServeBackground() - // Start with no ignores, and restore the previous state when the test completes + // Reach in and update the ignore matcher to one that always does + // reloads when asked to, instead of checking file mtimes. This is + // because we will be changing the files on disk often enough that the + // mtimes will be unreliable to determine change status. + m.fmut.Lock() + m.folderIgnores["default"] = ignore.New(defaultFs, ignore.WithCache(true), ignore.WithChangeDetector(newAlwaysChanged())) + m.fmut.Unlock() - curIgn, _, err := m.GetIgnores("default") - if err != nil { - t.Fatal(err) - } - defer m.SetIgnores("default", curIgn) m.SetIgnores("default", nil) - fakeTime := time.Now().Add(5 * time.Second) - os.Chtimes("testdata/.stignore", fakeTime, fakeTime) + defer os.Remove("testdata/.stignore") // Scan the folder twice. The second scan should be a no-op database wise @@ -2388,8 +2436,6 @@ func TestScanNoDatabaseWrite(t *testing.T) { // Ignore a file we know exists. It'll be updated in the database. m.SetIgnores("default", []string{"foo"}) - fakeTime = time.Now().Add(10 * time.Second) - os.Chtimes("testdata/.stignore", fakeTime, fakeTime) m.ScanFolder("default") c2 := db.Committed() @@ -2441,7 +2487,7 @@ func TestIssue2782(t *testing.T) { defer os.RemoveAll(testDir) db := db.OpenMemory() - m := NewModel(defaultConfig, protocol.LocalDeviceID, "syncthing", "dev", db, nil) + m := NewModel(defaultCfgWrapper, protocol.LocalDeviceID, "syncthing", "dev", db, nil) m.AddFolder(config.NewFolderConfiguration(protocol.LocalDeviceID, "default", "default", fs.FilesystemTypeBasic, "~/"+testName+"/synclink/")) m.StartFolder("default") m.ServeBackground() @@ -2472,7 +2518,7 @@ func TestIndexesForUnknownDevicesDropped(t *testing.T) { t.Error("expected two devices") } - m := NewModel(defaultConfig, protocol.LocalDeviceID, "syncthing", "dev", dbi, nil) + m := NewModel(defaultCfgWrapper, protocol.LocalDeviceID, "syncthing", "dev", dbi, nil) m.AddFolder(defaultFolderConfig) m.StartFolder("default") @@ -2504,7 +2550,8 @@ func TestSharedWithClearedOnDisconnect(t *testing.T) { }, } - wcfg := config.Wrap("/tmp/test", cfg) + wcfg, path := createTmpWrapper(cfg) + defer os.Remove(path) m := NewModel(wcfg, protocol.LocalDeviceID, "syncthing", "dev", dbi, nil) m.AddFolder(fcfg) @@ -2620,7 +2667,7 @@ func TestIssue3496(t *testing.T) { // checks on the completion calculation stuff. dbi := db.OpenMemory() - m := NewModel(defaultConfig, protocol.LocalDeviceID, "syncthing", "dev", dbi, nil) + m := NewModel(defaultCfgWrapper, protocol.LocalDeviceID, "syncthing", "dev", dbi, nil) m.AddFolder(defaultFolderConfig) m.StartFolder("default") m.ServeBackground() @@ -2693,7 +2740,7 @@ func TestIssue3496(t *testing.T) { func TestIssue3804(t *testing.T) { dbi := db.OpenMemory() - m := NewModel(defaultConfig, protocol.LocalDeviceID, "syncthing", "dev", dbi, nil) + m := NewModel(defaultCfgWrapper, protocol.LocalDeviceID, "syncthing", "dev", dbi, nil) m.AddFolder(defaultFolderConfig) m.StartFolder("default") m.ServeBackground() @@ -2708,7 +2755,7 @@ func TestIssue3804(t *testing.T) { func TestIssue3829(t *testing.T) { dbi := db.OpenMemory() - m := NewModel(defaultConfig, protocol.LocalDeviceID, "syncthing", "dev", dbi, nil) + m := NewModel(defaultCfgWrapper, protocol.LocalDeviceID, "syncthing", "dev", dbi, nil) m.AddFolder(defaultFolderConfig) m.StartFolder("default") m.ServeBackground() @@ -2743,7 +2790,8 @@ func TestNoRequestsFromPausedDevices(t *testing.T) { }, } - wcfg := config.Wrap("/tmp/test", cfg) + wcfg, path := createTmpWrapper(cfg) + defer os.Remove(path) m := NewModel(wcfg, protocol.LocalDeviceID, "syncthing", "dev", dbi, nil) m.AddFolder(fcfg) @@ -2843,7 +2891,7 @@ func TestIssue2571(t *testing.T) { } dbi := db.OpenMemory() - m := NewModel(defaultConfig, protocol.LocalDeviceID, "syncthing", "dev", dbi, nil) + m := NewModel(defaultCfgWrapper, protocol.LocalDeviceID, "syncthing", "dev", dbi, nil) m.AddFolder(defaultFolderConfig) m.StartFolder("default") m.ServeBackground() @@ -2895,7 +2943,7 @@ func TestIssue4573(t *testing.T) { fd.Close() dbi := db.OpenMemory() - m := NewModel(defaultConfig, protocol.LocalDeviceID, "syncthing", "dev", dbi, nil) + m := NewModel(defaultCfgWrapper, protocol.LocalDeviceID, "syncthing", "dev", dbi, nil) m.AddFolder(defaultFolderConfig) m.StartFolder("default") m.ServeBackground() @@ -2964,7 +3012,7 @@ func TestInternalScan(t *testing.T) { } dbi := db.OpenMemory() - m := NewModel(defaultConfig, protocol.LocalDeviceID, "syncthing", "dev", dbi, nil) + m := NewModel(defaultCfgWrapper, protocol.LocalDeviceID, "syncthing", "dev", dbi, nil) m.AddFolder(defaultFolderConfig) m.StartFolder("default") m.ServeBackground() @@ -3008,7 +3056,7 @@ func TestCustomMarkerName(t *testing.T) { RescanIntervalS: 1, MarkerName: "myfile", } - cfg := config.Wrap("/tmp/test", config.Configuration{ + cfg, path := createTmpWrapper(config.Configuration{ Folders: []config.FolderConfiguration{fcfg}, Devices: []config.DeviceConfiguration{ { @@ -3016,6 +3064,7 @@ func TestCustomMarkerName(t *testing.T) { }, }, }) + defer os.Remove(path) os.RemoveAll(fcfg.Path) defer os.RemoveAll(fcfg.Path) @@ -3078,7 +3127,7 @@ func TestRemoveDirWithContent(t *testing.T) { fd.Close() dbi := db.OpenMemory() - m := NewModel(defaultConfig, protocol.LocalDeviceID, "syncthing", "dev", dbi, nil) + m := NewModel(defaultCfgWrapper, protocol.LocalDeviceID, "syncthing", "dev", dbi, nil) m.AddFolder(defaultFolderConfig) m.StartFolder("default") m.ServeBackground() @@ -3143,7 +3192,7 @@ func TestIssue4475(t *testing.T) { } dbi := db.OpenMemory() - m := NewModel(defaultConfig, protocol.LocalDeviceID, "syncthing", "dev", dbi, nil) + m := NewModel(defaultCfgWrapper, protocol.LocalDeviceID, "syncthing", "dev", dbi, nil) m.AddFolder(defaultFolderConfig) m.StartFolder("default") m.ServeBackground() @@ -3225,7 +3274,8 @@ func TestVersionRestore(t *testing.T) { rawConfig := config.Configuration{ Folders: []config.FolderConfiguration{fcfg}, } - cfg := config.Wrap("/tmp/test", rawConfig) + cfg, path := createTmpWrapper(rawConfig) + defer os.Remove(path) m := NewModel(cfg, protocol.LocalDeviceID, "syncthing", "dev", dbi, nil) m.AddFolder(fcfg) @@ -3417,8 +3467,9 @@ func TestVersionRestore(t *testing.T) { func TestPausedFolders(t *testing.T) { // Create a separate wrapper not to pollute other tests. - cfg := defaultConfig.RawCopy() - wrapper := config.Wrap("/tmp/test", cfg) + cfg := defaultCfgWrapper.RawCopy() + wrapper, path := createTmpWrapper(cfg) + defer os.Remove(path) db := db.OpenMemory() m := NewModel(wrapper, protocol.LocalDeviceID, "syncthing", "dev", db, nil) diff --git a/lib/model/progressemitter_test.go b/lib/model/progressemitter_test.go index b68674032..3af899fe4 100644 --- a/lib/model/progressemitter_test.go +++ b/lib/model/progressemitter_test.go @@ -8,6 +8,7 @@ package model import ( "fmt" + "os" "path/filepath" "runtime" "testing" @@ -53,10 +54,11 @@ func expectTimeout(w *events.Subscription, t *testing.T) { func TestProgressEmitter(t *testing.T) { w := events.Default.Subscribe(events.DownloadProgress) - c := config.Wrap("/tmp/test", config.Configuration{}) + c, path := createTmpWrapper(config.Configuration{}) c.SetOptions(config.OptionsConfiguration{ ProgressUpdateIntervalS: 0, }) + defer os.Remove(path) p := NewProgressEmitter(c) go p.Serve() @@ -101,11 +103,12 @@ func TestProgressEmitter(t *testing.T) { } func TestSendDownloadProgressMessages(t *testing.T) { - c := config.Wrap("/tmp/test", config.Configuration{}) + c, path := createTmpWrapper(config.Configuration{}) c.SetOptions(config.OptionsConfiguration{ ProgressUpdateIntervalS: 0, TempIndexMinBlocks: 10, }) + defer os.Remove(path) fc := &fakeConnection{} diff --git a/lib/model/requests_test.go b/lib/model/requests_test.go index 7113dbbf0..ea3e10e0e 100644 --- a/lib/model/requests_test.go +++ b/lib/model/requests_test.go @@ -209,11 +209,10 @@ func TestRequestVersioningSymlinkAttack(t *testing.T) { // Sets up a folder with trashcan versioning and tries to use a // deleted symlink to escape - tmpDir, err := ioutil.TempDir(".", "_request-") - if err != nil { - panic("Failed to create temporary testing dir") - } - cfg := defaultConfig.RawCopy() + tmpDir := createTmpDir() + defer os.RemoveAll(tmpDir) + + cfg := defaultCfgWrapper.RawCopy() cfg.Folders[0] = config.NewFolderConfiguration(protocol.LocalDeviceID, "default", "default", fs.FilesystemTypeBasic, tmpDir) cfg.Folders[0].Devices = []config.FolderDeviceConfiguration{ {DeviceID: device1}, @@ -222,7 +221,8 @@ func TestRequestVersioningSymlinkAttack(t *testing.T) { cfg.Folders[0].Versioning = config.VersioningConfiguration{ Type: "trashcan", } - w := config.Wrap("/tmp/cfg", cfg) + w, path := createTmpWrapper(cfg) + defer os.Remove(path) db := db.OpenMemory() m := NewModel(w, device1, "syncthing", "dev", db, nil) @@ -278,7 +278,7 @@ func TestRequestVersioningSymlinkAttack(t *testing.T) { for updates := 0; updates < 1; updates += <-idx { } - path := filepath.Join(tmpdir, "test") + path = filepath.Join(tmpdir, "test") if _, err := os.Lstat(path); !os.IsNotExist(err) { t.Fatal("File escaped to", path) } @@ -300,7 +300,7 @@ func pullInvalidIgnored(t *testing.T, ft config.FolderType) { tmpDir := createTmpDir() defer os.RemoveAll(tmpDir) - cfg := defaultConfig.RawCopy() + cfg := defaultCfgWrapper.RawCopy() cfg.Devices = append(cfg.Devices, config.NewDeviceConfiguration(device2, "device2")) cfg.Folders[0] = config.NewFolderConfiguration(protocol.LocalDeviceID, "default", "default", fs.FilesystemTypeBasic, tmpDir) cfg.Folders[0].Devices = []config.FolderDeviceConfiguration{ @@ -427,7 +427,7 @@ func pullInvalidIgnored(t *testing.T, ft config.FolderType) { func setupModelWithConnection() (*Model, *fakeConnection, string) { tmpDir := createTmpDir() - cfg := defaultConfig.RawCopy() + cfg := defaultCfgWrapper.RawCopy() cfg.Devices = append(cfg.Devices, config.NewDeviceConfiguration(device2, "device2")) cfg.Folders[0] = config.NewFolderConfiguration(protocol.LocalDeviceID, "default", "default", fs.FilesystemTypeBasic, tmpDir) cfg.Folders[0].Devices = []config.FolderDeviceConfiguration{ @@ -439,7 +439,8 @@ func setupModelWithConnection() (*Model, *fakeConnection, string) { } func setupModelWithConnectionManual(cfg config.Configuration) (*Model, *fakeConnection) { - w := config.Wrap("/tmp/cfg", cfg) + w, path := createTmpWrapper(cfg) + defer os.Remove(path) db := db.OpenMemory() m := NewModel(w, device1, "syncthing", "dev", db, nil) @@ -456,7 +457,7 @@ func setupModelWithConnectionManual(cfg config.Configuration) (*Model, *fakeConn } func createTmpDir() string { - tmpDir, err := ioutil.TempDir(".", "_request-") + tmpDir, err := ioutil.TempDir("testdata", "_request-") if err != nil { panic("Failed to create temporary testing dir") } diff --git a/lib/model/rwfolder_test.go b/lib/model/rwfolder_test.go index 1df714591..6415924b0 100644 --- a/lib/model/rwfolder_test.go +++ b/lib/model/rwfolder_test.go @@ -26,25 +26,6 @@ import ( "github.com/syncthing/syncthing/lib/sync" ) -func TestMain(m *testing.M) { - // We do this to make sure that the temp file required for the tests - // does not get removed during the tests. Also set the prefix so it's - // found correctly regardless of platform. - if fs.TempPrefix != fs.WindowsTempPrefix { - originalPrefix := fs.TempPrefix - fs.TempPrefix = fs.WindowsTempPrefix - defer func() { - fs.TempPrefix = originalPrefix - }() - } - future := time.Now().Add(time.Hour) - err := os.Chtimes(filepath.Join("testdata", fs.TempName("file")), future, future) - if err != nil { - panic(err) - } - os.Exit(m.Run()) -} - var blocks = []protocol.BlockInfo{ {Hash: []uint8{0xfa, 0x43, 0x23, 0x9b, 0xce, 0xe7, 0xb9, 0x7c, 0xa6, 0x2f, 0x0, 0x7c, 0xc6, 0x84, 0x87, 0x56, 0xa, 0x39, 0xe1, 0x9f, 0x74, 0xf3, 0xdd, 0xe7, 0x48, 0x6d, 0xb3, 0xf9, 0x8d, 0xf8, 0xe4, 0x71}}, // Zero'ed out block {Offset: 0, Size: 0x20000, Hash: []uint8{0x7e, 0xad, 0xbc, 0x36, 0xae, 0xbb, 0xcf, 0x74, 0x43, 0xe2, 0x7a, 0x5a, 0x4b, 0xb8, 0x5b, 0xce, 0xe6, 0x9e, 0x1e, 0x10, 0xf9, 0x8a, 0xbc, 0x77, 0x95, 0x2, 0x29, 0x60, 0x9e, 0x96, 0xae, 0x6c}}, @@ -94,7 +75,7 @@ func setUpFile(filename string, blockNumbers []int) protocol.FileInfo { func setUpModel(file protocol.FileInfo) *Model { db := db.OpenMemory() - model := NewModel(defaultConfig, protocol.LocalDeviceID, "syncthing", "dev", db, nil) + model := NewModel(defaultCfgWrapper, protocol.LocalDeviceID, "syncthing", "dev", db, nil) model.AddFolder(defaultFolderConfig) // Update index model.updateLocalsFromScanning("default", []protocol.FileInfo{file}) @@ -224,6 +205,7 @@ func TestCopierFinder(t *testing.T) { if err != nil && !os.IsNotExist(err) { t.Error(err) } + defer os.Remove(tempFile) existingBlocks := []int{0, 2, 3, 4, 0, 0, 7, 0} existingFile := setUpFile(fs.TempName("file"), existingBlocks) @@ -285,8 +267,6 @@ func TestCopierFinder(t *testing.T) { } } finish.fd.Close() - - os.Remove(tempFile) } func TestWeakHash(t *testing.T) { @@ -506,7 +486,7 @@ func TestDeregisterOnFailInCopy(t *testing.T) { db := db.OpenMemory() - m := NewModel(defaultConfig, protocol.LocalDeviceID, "syncthing", "dev", db, nil) + m := NewModel(defaultCfgWrapper, protocol.LocalDeviceID, "syncthing", "dev", db, nil) m.AddFolder(defaultFolderConfig) f := setUpSendReceiveFolder(m) @@ -580,7 +560,7 @@ func TestDeregisterOnFailInPull(t *testing.T) { defer os.Remove("testdata/" + fs.TempName("filex")) db := db.OpenMemory() - m := NewModel(defaultConfig, protocol.LocalDeviceID, "syncthing", "dev", db, nil) + m := NewModel(defaultCfgWrapper, protocol.LocalDeviceID, "syncthing", "dev", db, nil) m.AddFolder(defaultFolderConfig) f := setUpSendReceiveFolder(m) diff --git a/lib/model/testdata/.stignore b/lib/model/testdata/.stignore deleted file mode 100644 index cf8fb0fe8..000000000 --- a/lib/model/testdata/.stignore +++ /dev/null @@ -1,2 +0,0 @@ -.* -quux diff --git a/lib/model/testdata/~syncthing~file.tmp b/lib/model/testdata/tmpfile similarity index 100% rename from lib/model/testdata/~syncthing~file.tmp rename to lib/model/testdata/tmpfile