Browse Source

Merge pull request #2617 from andersonvom/issue-2598

Refactor rwfolder tests
Jakob Borg 9 years ago
parent
commit
d98290c17f
1 changed files with 52 additions and 146 deletions
  1. 52 146
      lib/model/rwfolder_test.go

+ 52 - 146
lib/model/rwfolder_test.go

@@ -42,45 +42,57 @@ var blocks = []protocol.BlockInfo{
 
 var folders = []string{"default"}
 
-// Layout of the files: (indexes from the above array)
-// 12345678 - Required file
-// 02005008 - Existing file (currently in the index)
-// 02340070 - Temp file on the disk
-
-func TestHandleFile(t *testing.T) {
-	// After the diff between required and existing we should:
-	// Copy: 2, 5, 8
-	// Pull: 1, 3, 4, 6, 7
-
+func setUpFile(filename string, blockNumbers []int) protocol.FileInfo {
 	// Create existing file
-	existingFile := protocol.FileInfo{
-		Name:     "filex",
+	existingBlocks := make([]protocol.BlockInfo, len(blockNumbers))
+	for i := range blockNumbers {
+		existingBlocks[i] = blocks[blockNumbers[i]]
+	}
+
+	return protocol.FileInfo{
+		Name:     filename,
 		Flags:    0,
 		Modified: 0,
-		Blocks: []protocol.BlockInfo{
-			blocks[0], blocks[2], blocks[0], blocks[0],
-			blocks[5], blocks[0], blocks[0], blocks[8],
-		},
+		Blocks:   existingBlocks,
 	}
+}
 
-	// Create target file
-	requiredFile := existingFile
-	requiredFile.Blocks = blocks[1:]
-
+func setUpModel(file protocol.FileInfo) *Model {
 	db := db.OpenMemory()
-	m := NewModel(defaultConfig, protocol.LocalDeviceID, "device", "syncthing", "dev", db, nil)
-	m.AddFolder(defaultFolderConfig)
+	model := NewModel(defaultConfig, protocol.LocalDeviceID, "device", "syncthing", "dev", db, nil)
+	model.AddFolder(defaultFolderConfig)
 	// Update index
-	m.updateLocals("default", []protocol.FileInfo{existingFile})
+	model.updateLocals("default", []protocol.FileInfo{file})
+	return model
+}
 
-	p := rwFolder{
+func setUpRwFolder(model *Model) rwFolder {
+	return rwFolder{
 		folder:    "default",
 		dir:       "testdata",
-		model:     m,
+		model:     model,
 		errors:    make(map[string]string),
 		errorsMut: sync.NewMutex(),
 	}
+}
+
+// Layout of the files: (indexes from the above array)
+// 12345678 - Required file
+// 02005008 - Existing file (currently in the index)
+// 02340070 - Temp file on the disk
+
+func TestHandleFile(t *testing.T) {
+	// After the diff between required and existing we should:
+	// Copy: 2, 5, 8
+	// Pull: 1, 3, 4, 6, 7
 
+	existingBlocks := []int{0, 2, 0, 0, 5, 0, 0, 8}
+	existingFile := setUpFile("filex", existingBlocks)
+	requiredFile := existingFile
+	requiredFile.Blocks = blocks[1:]
+
+	m := setUpModel(existingFile)
+	p := setUpRwFolder(m)
 	copyChan := make(chan copyBlocksState, 1)
 
 	p.handleFile(requiredFile, copyChan, nil)
@@ -108,35 +120,13 @@ func TestHandleFileWithTemp(t *testing.T) {
 	// Copy: 5, 8
 	// Pull: 1, 6
 
-	// Create existing file
-	existingFile := protocol.FileInfo{
-		Name:     "file",
-		Flags:    0,
-		Modified: 0,
-		Blocks: []protocol.BlockInfo{
-			blocks[0], blocks[2], blocks[0], blocks[0],
-			blocks[5], blocks[0], blocks[0], blocks[8],
-		},
-	}
-
-	// Create target file
+	existingBlocks := []int{0, 2, 0, 0, 5, 0, 0, 8}
+	existingFile := setUpFile("file", existingBlocks)
 	requiredFile := existingFile
 	requiredFile.Blocks = blocks[1:]
 
-	db := db.OpenMemory()
-	m := NewModel(defaultConfig, protocol.LocalDeviceID, "device", "syncthing", "dev", db, nil)
-	m.AddFolder(defaultFolderConfig)
-	// Update index
-	m.updateLocals("default", []protocol.FileInfo{existingFile})
-
-	p := rwFolder{
-		folder:    "default",
-		dir:       "testdata",
-		model:     m,
-		errors:    make(map[string]string),
-		errorsMut: sync.NewMutex(),
-	}
-
+	m := setUpModel(existingFile)
+	p := setUpRwFolder(m)
 	copyChan := make(chan copyBlocksState, 1)
 
 	p.handleFile(requiredFile, copyChan, nil)
@@ -169,47 +159,14 @@ func TestCopierFinder(t *testing.T) {
 		t.Error(err)
 	}
 
-	// Create existing file
-	existingFile := protocol.FileInfo{
-		Name:     defTempNamer.TempName("file"),
-		Flags:    0,
-		Modified: 0,
-		Blocks: []protocol.BlockInfo{
-			blocks[0], blocks[2], blocks[3], blocks[4],
-			blocks[0], blocks[0], blocks[7], blocks[0],
-		},
-	}
-
-	// Create target file
+	existingBlocks := []int{0, 2, 3, 4, 0, 0, 7, 0}
+	existingFile := setUpFile(defTempNamer.TempName("file"), existingBlocks)
 	requiredFile := existingFile
 	requiredFile.Blocks = blocks[1:]
 	requiredFile.Name = "file2"
 
-	db := db.OpenMemory()
-	m := NewModel(defaultConfig, protocol.LocalDeviceID, "device", "syncthing", "dev", db, nil)
-	m.AddFolder(defaultFolderConfig)
-	// Update index
-	m.updateLocals("default", []protocol.FileInfo{existingFile})
-
-	iterFn := func(folder, file string, index int32) bool {
-		return true
-	}
-
-	// Verify that the blocks we say exist on file, really exist in the db.
-	for _, idx := range []int{2, 3, 4, 7} {
-		if m.finder.Iterate(folders, blocks[idx].Hash, iterFn) == false {
-			t.Error("Didn't find block")
-		}
-	}
-
-	p := rwFolder{
-		folder:    "default",
-		dir:       "testdata",
-		model:     m,
-		errors:    make(map[string]string),
-		errorsMut: sync.NewMutex(),
-	}
-
+	m := setUpModel(existingFile)
+	p := setUpRwFolder(m)
 	copyChan := make(chan copyBlocksState)
 	pullChan := make(chan pullBlockState, 4)
 	finisherChan := make(chan *sharedPullerState, 1)
@@ -262,24 +219,9 @@ func TestCopierCleanup(t *testing.T) {
 		return true
 	}
 
-	db := db.OpenMemory()
-	m := NewModel(defaultConfig, protocol.LocalDeviceID, "device", "syncthing", "dev", db, nil)
-	m.AddFolder(defaultFolderConfig)
-
 	// Create a file
-	file := protocol.FileInfo{
-		Name:     "test",
-		Flags:    0,
-		Modified: 0,
-		Blocks:   []protocol.BlockInfo{blocks[0]},
-	}
-
-	// Add file to index
-	m.updateLocals("default", []protocol.FileInfo{file})
-
-	if !m.finder.Iterate(folders, blocks[0].Hash, iterFn) {
-		t.Error("Expected block not found")
-	}
+	file := setUpFile("test", []int{0})
+	m := setUpModel(file)
 
 	file.Blocks = []protocol.BlockInfo{blocks[1]}
 	file.Version = file.Version.Update(protocol.LocalDeviceID.Short())
@@ -311,19 +253,10 @@ func TestCopierCleanup(t *testing.T) {
 // Make sure that the copier routine hashes the content when asked, and pulls
 // if it fails to find the block.
 func TestLastResortPulling(t *testing.T) {
-	db := db.OpenMemory()
-	m := NewModel(defaultConfig, protocol.LocalDeviceID, "device", "syncthing", "dev", db, nil)
-	m.AddFolder(defaultFolderConfig)
-
 	// Add a file to index (with the incorrect block representation, as content
 	// doesn't actually match the block list)
-	file := protocol.FileInfo{
-		Name:     "empty",
-		Flags:    0,
-		Modified: 0,
-		Blocks:   []protocol.BlockInfo{blocks[0]},
-	}
-	m.updateLocals("default", []protocol.FileInfo{file})
+	file := setUpFile("empty", []int{0})
+	m := setUpModel(file)
 
 	// Pretend that we are handling a new file of the same content but
 	// with a different name (causing to copy that particular block)
@@ -333,18 +266,7 @@ func TestLastResortPulling(t *testing.T) {
 		return true
 	}
 
-	// Check that that particular block is there
-	if !m.finder.Iterate(folders, blocks[0].Hash, iterFn) {
-		t.Error("Expected block not found")
-	}
-
-	p := rwFolder{
-		folder:    "default",
-		dir:       "testdata",
-		model:     m,
-		errors:    make(map[string]string),
-		errorsMut: sync.NewMutex(),
-	}
+	p := setUpRwFolder(m)
 
 	copyChan := make(chan copyBlocksState)
 	pullChan := make(chan pullBlockState, 1)
@@ -374,15 +296,7 @@ func TestLastResortPulling(t *testing.T) {
 }
 
 func TestDeregisterOnFailInCopy(t *testing.T) {
-	file := protocol.FileInfo{
-		Name:     "filex",
-		Flags:    0,
-		Modified: 0,
-		Blocks: []protocol.BlockInfo{
-			blocks[0], blocks[2], blocks[0], blocks[0],
-			blocks[5], blocks[0], blocks[0], blocks[8],
-		},
-	}
+	file := setUpFile("filex", []int{0, 2, 0, 0, 5, 0, 0, 8})
 	defer os.Remove("testdata/" + defTempNamer.TempName("filex"))
 
 	db := db.OpenMemory()
@@ -467,15 +381,7 @@ func TestDeregisterOnFailInCopy(t *testing.T) {
 }
 
 func TestDeregisterOnFailInPull(t *testing.T) {
-	file := protocol.FileInfo{
-		Name:     "filex",
-		Flags:    0,
-		Modified: 0,
-		Blocks: []protocol.BlockInfo{
-			blocks[0], blocks[2], blocks[0], blocks[0],
-			blocks[5], blocks[0], blocks[0], blocks[8],
-		},
-	}
+	file := setUpFile("filex", []int{0, 2, 0, 0, 5, 0, 0, 8})
 	defer os.Remove("testdata/" + defTempNamer.TempName("filex"))
 
 	db := db.OpenMemory()