|
|
@@ -13,6 +13,107 @@
|
|
|
// You should have received a copy of the GNU General Public License along
|
|
|
// with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
-package main_test
|
|
|
+package main
|
|
|
|
|
|
-// Empty test file to generate 0% coverage rather than no coverage
|
|
|
+import (
|
|
|
+ "os"
|
|
|
+ "testing"
|
|
|
+
|
|
|
+ "github.com/syncthing/syncthing/internal/config"
|
|
|
+ "github.com/syncthing/syncthing/internal/files"
|
|
|
+ "github.com/syncthing/syncthing/internal/model"
|
|
|
+ "github.com/syncthing/syncthing/internal/protocol"
|
|
|
+
|
|
|
+ "github.com/syndtr/goleveldb/leveldb"
|
|
|
+ "github.com/syndtr/goleveldb/leveldb/storage"
|
|
|
+)
|
|
|
+
|
|
|
+func TestSanityCheck(t *testing.T) {
|
|
|
+ fcfg := config.FolderConfiguration{
|
|
|
+ ID: "folder",
|
|
|
+ Path: "testdata/testfolder",
|
|
|
+ }
|
|
|
+ cfg := config.Wrap("/tmp/test", config.Configuration{
|
|
|
+ Folders: []config.FolderConfiguration{fcfg},
|
|
|
+ })
|
|
|
+
|
|
|
+ for _, file := range []string{".stfolder", "testfolder", "testfolder/.stfolder"} {
|
|
|
+ _, err := os.Stat("testdata/" + file)
|
|
|
+ if err == nil {
|
|
|
+ t.Error("Found unexpected file")
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ db, _ := leveldb.Open(storage.NewMemStorage(), nil)
|
|
|
+
|
|
|
+ // Case 1 - new folder, directory and marker created
|
|
|
+
|
|
|
+ m := model.NewModel(cfg, "device", "syncthing", "dev", db)
|
|
|
+ sanityCheckFolders(cfg, m)
|
|
|
+
|
|
|
+ if cfg.Folders()["folder"].Invalid != "" {
|
|
|
+ t.Error("Unexpected error", cfg.Folders()["folder"].Invalid)
|
|
|
+ }
|
|
|
+
|
|
|
+ s, err := os.Stat("testdata/testfolder")
|
|
|
+ if err != nil || !s.IsDir() {
|
|
|
+ t.Error(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ _, err = os.Stat("testdata/testfolder/.stfolder")
|
|
|
+ if err != nil {
|
|
|
+ t.Error(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ os.Remove("testdata/testfolder/.stfolder")
|
|
|
+ os.Remove("testdata/testfolder/")
|
|
|
+
|
|
|
+ // Case 2 - new folder, marker created
|
|
|
+
|
|
|
+ fcfg.Path = "testdata/"
|
|
|
+ cfg = config.Wrap("/tmp/test", config.Configuration{
|
|
|
+ Folders: []config.FolderConfiguration{fcfg},
|
|
|
+ })
|
|
|
+
|
|
|
+ m = model.NewModel(cfg, "device", "syncthing", "dev", db)
|
|
|
+ sanityCheckFolders(cfg, m)
|
|
|
+
|
|
|
+ if cfg.Folders()["folder"].Invalid != "" {
|
|
|
+ t.Error("Unexpected error", cfg.Folders()["folder"].Invalid)
|
|
|
+ }
|
|
|
+
|
|
|
+ _, err = os.Stat("testdata/.stfolder")
|
|
|
+ if err != nil {
|
|
|
+ t.Error(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ os.Remove("testdata/.stfolder")
|
|
|
+
|
|
|
+ // Case 3 - marker missing
|
|
|
+
|
|
|
+ set := files.NewSet("folder", db)
|
|
|
+ set.Update(protocol.LocalDeviceID, []protocol.FileInfo{
|
|
|
+ {Name: "dummyfile"},
|
|
|
+ })
|
|
|
+
|
|
|
+ m = model.NewModel(cfg, "device", "syncthing", "dev", db)
|
|
|
+ sanityCheckFolders(cfg, m)
|
|
|
+
|
|
|
+ if cfg.Folders()["folder"].Invalid != "folder marker missing" {
|
|
|
+ t.Error("Incorrect error")
|
|
|
+ }
|
|
|
+
|
|
|
+ // Case 4 - path missing
|
|
|
+
|
|
|
+ fcfg.Path = "testdata/testfolder"
|
|
|
+ cfg = config.Wrap("/tmp/test", config.Configuration{
|
|
|
+ Folders: []config.FolderConfiguration{fcfg},
|
|
|
+ })
|
|
|
+
|
|
|
+ m = model.NewModel(cfg, "device", "syncthing", "dev", db)
|
|
|
+ sanityCheckFolders(cfg, m)
|
|
|
+
|
|
|
+ if cfg.Folders()["folder"].Invalid != "folder path missing" {
|
|
|
+ t.Error("Incorrect error")
|
|
|
+ }
|
|
|
+}
|