func defaultConfig(myName string) config.Configuration { defaultFolder := config.NewFolderConfiguration("default", locations[locDefFolder]) defaultFolder.RescanIntervalS = 60 defaultFolder.MinDiskFreePct = 1 defaultFolder.Devices = []config.FolderDeviceConfiguration{{DeviceID: myID}} defaultFolder.AutoNormalize = true defaultFolder.MaxConflicts = -1 thisDevice := config.NewDeviceConfiguration(myID, myName) thisDevice.Addresses = []string{"dynamic"} newCfg := config.New(myID) newCfg.Folders = []config.FolderConfiguration{defaultFolder} newCfg.Devices = []config.DeviceConfiguration{thisDevice} port, err := getFreePort("127.0.0.1", 8384) if err != nil { l.Fatalln("get free port (GUI):", err) } newCfg.GUI.RawAddress = fmt.Sprintf("127.0.0.1:%d", port) port, err = getFreePort("0.0.0.0", 22000) if err != nil { l.Fatalln("get free port (BEP):", err) } newCfg.Options.ListenAddress = []string{fmt.Sprintf("tcp://0.0.0.0:%d", port)} return newCfg }
func init() { device1, _ = protocol.DeviceIDFromString("AIR6LPZ-7K4PTTV-UXQSMUU-CPQ5YWH-OEDFIIQ-JUG777G-2YQXXR5-YD6AWQR") device2, _ = protocol.DeviceIDFromString("GYRZZQB-IRNPV4Z-T7TC52W-EQYJ3TT-FDQW6MW-DFLMU42-SSSU6EM-FBK2VAY") defaultFolderConfig = config.NewFolderConfiguration("default", "testdata") defaultFolderConfig.Devices = []config.FolderDeviceConfiguration{{DeviceID: device1}} _defaultConfig := config.Configuration{ Folders: []config.FolderConfiguration{defaultFolderConfig}, Devices: []config.DeviceConfiguration{config.NewDeviceConfiguration(device1, "device1")}, Options: config.OptionsConfiguration{ // Don't remove temporaries directly on startup KeepTemporariesH: 1, }, } defaultConfig = config.Wrap("/tmp/test", _defaultConfig) }
func TestIssue2782(t *testing.T) { // CheckFolderHealth should accept a symlinked folder, when using tilde-expanded path. if runtime.GOOS == "windows" { t.Skip("not reliable on Windows") return } home := os.Getenv("HOME") if home == "" { t.Skip("no home") } // Create the test env. Needs to be based on $HOME as tilde expansion is // part of the issue. Skip the test if any of this fails, as we are a // bit outside of our stated domain here... testName := ".syncthing-test." + srand.String(16) testDir := filepath.Join(home, testName) if err := os.RemoveAll(testDir); err != nil { t.Skip(err) } if err := osutil.MkdirAll(testDir+"/syncdir", 0755); err != nil { t.Skip(err) } if err := ioutil.WriteFile(testDir+"/syncdir/file", []byte("hello, world\n"), 0644); err != nil { t.Skip(err) } if err := os.Symlink("syncdir", testDir+"/synclink"); err != nil { t.Skip(err) } defer os.RemoveAll(testDir) db := db.OpenMemory() m := NewModel(defaultConfig, protocol.LocalDeviceID, "device", "syncthing", "dev", db, nil) m.AddFolder(config.NewFolderConfiguration("default", "~/"+testName+"/synclink/")) m.StartFolder("default") m.ServeBackground() defer m.Stop() if err := m.ScanFolder("default"); err != nil { t.Error("scan error:", err) } if err := m.CheckFolderHealth("default"); err != nil { t.Error("health check error:", err) } }
func defaultConfig(myName string) config.Configuration { var defaultFolder config.FolderConfiguration if !noDefaultFolder { l.Infoln("Default folder created and/or linked to new config") folderID := rand.String(5) + "-" + rand.String(5) defaultFolder = config.NewFolderConfiguration(folderID, locations[locDefFolder]) defaultFolder.Label = "Default Folder (" + folderID + ")" defaultFolder.RescanIntervalS = 60 defaultFolder.MinDiskFreePct = 1 defaultFolder.Devices = []config.FolderDeviceConfiguration{{DeviceID: myID}} defaultFolder.AutoNormalize = true defaultFolder.MaxConflicts = -1 } else { l.Infoln("We will skip creation of a default folder on first start since the proper envvar is set") } thisDevice := config.NewDeviceConfiguration(myID, myName) thisDevice.Addresses = []string{"dynamic"} newCfg := config.New(myID) if !noDefaultFolder { newCfg.Folders = []config.FolderConfiguration{defaultFolder} } newCfg.Devices = []config.DeviceConfiguration{thisDevice} port, err := getFreePort("127.0.0.1", 8384) if err != nil { l.Fatalln("get free port (GUI):", err) } newCfg.GUI.RawAddress = fmt.Sprintf("127.0.0.1:%d", port) port, err = getFreePort("0.0.0.0", 22000) if err != nil { l.Fatalln("get free port (BEP):", err) } if port == 22000 { newCfg.Options.ListenAddresses = []string{"default"} } else { newCfg.Options.ListenAddresses = []string{ fmt.Sprintf("tcp://%s", net.JoinHostPort("0.0.0.0", strconv.Itoa(port))), "dynamic+https://relays.syncthing.net/endpoint", } } return newCfg }
func setupModelWithConnection() (*Model, *fakeConnection) { cfg := defaultConfig.RawCopy() cfg.Folders[0] = config.NewFolderConfiguration("default", "_tmpfolder") cfg.Folders[0].PullerSleepS = 1 cfg.Folders[0].Devices = []config.FolderDeviceConfiguration{ {DeviceID: device1}, {DeviceID: device2}, } w := config.Wrap("/tmp/cfg", cfg) db := db.OpenMemory() m := NewModel(w, device1, "device", "syncthing", "dev", db, nil) m.AddFolder(cfg.Folders[0]) m.ServeBackground() m.StartFolder("default") fc := addFakeConn(m, device2) fc.folder = "default" return m, fc }
func defaultConfig(myName string) config.Configuration { var defaultFolder config.FolderConfiguration if !noDefaultFolder { l.Infoln("Default folder created and/or linked to new config") defaultFolder = config.NewFolderConfiguration("default", locations[locDefFolder]) defaultFolder.RescanIntervalS = 60 defaultFolder.MinDiskFreePct = 1 defaultFolder.Devices = []config.FolderDeviceConfiguration{{DeviceID: myID}} defaultFolder.AutoNormalize = true defaultFolder.MaxConflicts = -1 } else { l.Infoln("We will skip creation of a default folder on first start since the proper envvar is set") } thisDevice := config.NewDeviceConfiguration(myID, myName) thisDevice.Addresses = []string{"dynamic"} newCfg := config.New(myID) if !noDefaultFolder { newCfg.Folders = []config.FolderConfiguration{defaultFolder} } newCfg.Devices = []config.DeviceConfiguration{thisDevice} port, err := getFreePort("127.0.0.1", 8384) if err != nil { l.Fatalln("get free port (GUI):", err) } newCfg.GUI.RawAddress = fmt.Sprintf("127.0.0.1:%d", port) port, err = getFreePort("0.0.0.0", 22000) if err != nil { l.Fatalln("get free port (BEP):", err) } newCfg.Options.ListenAddress = []string{fmt.Sprintf("tcp://0.0.0.0:%d", port)} return newCfg }
func TestSharedWithClearedOnDisconnect(t *testing.T) { dbi := db.OpenMemory() fcfg := config.NewFolderConfiguration("default", "testdata") fcfg.Devices = []config.FolderDeviceConfiguration{ {DeviceID: device1}, {DeviceID: device2}, } cfg := config.Configuration{ Folders: []config.FolderConfiguration{fcfg}, Devices: []config.DeviceConfiguration{ config.NewDeviceConfiguration(device1, "device1"), config.NewDeviceConfiguration(device2, "device2"), }, Options: config.OptionsConfiguration{ // Don't remove temporaries directly on startup KeepTemporariesH: 1, }, } wcfg := config.Wrap("/tmp/test", cfg) d2c := &fakeConn{} m := NewModel(wcfg, protocol.LocalDeviceID, "device", "syncthing", "dev", dbi, nil) m.AddFolder(fcfg) m.StartFolder(fcfg.ID) m.ServeBackground() conn1 := connections.Connection{ IntermediateConnection: connections.IntermediateConnection{ Conn: tls.Client(&fakeConn{}, nil), Type: "foo", Priority: 10, }, Connection: &FakeConnection{ id: device1, }, } m.AddConnection(conn1, protocol.HelloResult{}) conn2 := connections.Connection{ IntermediateConnection: connections.IntermediateConnection{ Conn: tls.Client(d2c, nil), Type: "foo", Priority: 10, }, Connection: &FakeConnection{ id: device2, }, } m.AddConnection(conn2, protocol.HelloResult{}) m.ClusterConfig(device1, protocol.ClusterConfig{ Folders: []protocol.Folder{ { ID: "default", Devices: []protocol.Device{ {ID: device1}, {ID: device2}, }, }, }, }) m.ClusterConfig(device2, protocol.ClusterConfig{ Folders: []protocol.Folder{ { ID: "default", Devices: []protocol.Device{ {ID: device1}, {ID: device2}, }, }, }, }) if !m.folderSharedWith("default", device1) { t.Error("not shared with device1") } if !m.folderSharedWith("default", device2) { t.Error("not shared with device2") } if d2c.closed { t.Error("conn already closed") } cfg = cfg.Copy() cfg.Devices = cfg.Devices[:1] if err := wcfg.Replace(cfg); err != nil { t.Error(err) } time.Sleep(100 * time.Millisecond) // Committer notification happens in a separate routine if !m.folderSharedWith("default", device1) { t.Error("not shared with device1") } if m.folderSharedWith("default", device2) { // checks m.deviceFolders t.Error("shared with device2") } if !d2c.closed { t.Error("connection not closed") } if _, ok := wcfg.Devices()[device2]; ok { t.Error("device still in config") } fdevs, ok := m.folderDevices["default"] if !ok { t.Error("folder missing?") } for _, id := range fdevs { if id == device2 { t.Error("still there") } } if _, ok := m.conn[device2]; !ok { t.Error("conn missing early") } if _, ok := m.helloMessages[device2]; !ok { t.Error("hello missing early") } if _, ok := m.deviceDownloads[device2]; !ok { t.Error("downloads missing early") } m.Closed(conn2, fmt.Errorf("foo")) if _, ok := m.conn[device2]; ok { t.Error("conn not missing") } if _, ok := m.helloMessages[device2]; ok { t.Error("hello not missing") } if _, ok := m.deviceDownloads[device2]; ok { t.Error("downloads not missing") } }