lib/model: Improve filesystem operations during tests (fixes #5422)

* lib/fs, lib/model: Improve filesystem operations during tests (fixes #5422)

Introduces MustFilesystem that panics on errors and should be used for operations
during testing which must never fail.
Create temporary directories outside of testdata.

* don't do a filesystem, just a wrapper around os for testing

* fix copyright
This commit is contained in:
Simon Frei
2019-01-11 13:56:05 +01:00
committed by Audrius Butkevicius
parent 24ffd8be99
commit 0b03b6a9ec
7 changed files with 380 additions and 236 deletions

View File

@@ -22,29 +22,19 @@ import (
)
func TestRecvOnlyRevertDeletes(t *testing.T) {
testOs := &fatalOs{t}
// Make sure that we delete extraneous files and directories when we hit
// Revert.
if err := os.RemoveAll("_recvonly"); err != nil && !os.IsNotExist(err) {
t.Fatal(err)
}
defer func() {
if err := os.RemoveAll("_recvonly"); err != nil && !os.IsNotExist(err) {
t.Fatal(err)
}
}()
testOs.RemoveAll("_recvonly")
defer testOs.RemoveAll("_recvonly")
// Create some test data
if err := os.MkdirAll("_recvonly/.stfolder", 0755); err != nil {
t.Fatal(err)
}
if err := os.MkdirAll("_recvonly/ignDir", 0755); err != nil {
t.Fatal(err)
}
if err := os.MkdirAll("_recvonly/unknownDir", 0755); err != nil {
t.Fatal(err)
}
testOs.MkdirAll("_recvonly/.stfolder", 0755)
testOs.MkdirAll("_recvonly/ignDir", 0755)
testOs.MkdirAll("_recvonly/unknownDir", 0755)
if err := ioutil.WriteFile("_recvonly/ignDir/ignFile", []byte("hello\n"), 0644); err != nil {
t.Fatal(err)
}
@@ -125,23 +115,17 @@ func TestRecvOnlyRevertDeletes(t *testing.T) {
}
func TestRecvOnlyRevertNeeds(t *testing.T) {
testOs := &fatalOs{t}
// Make sure that a new file gets picked up and considered latest, then
// gets considered old when we hit Revert.
if err := os.RemoveAll("_recvonly"); err != nil && !os.IsNotExist(err) {
t.Fatal(err)
}
defer func() {
if err := os.RemoveAll("_recvonly"); err != nil && !os.IsNotExist(err) {
t.Fatal(err)
}
}()
testOs.RemoveAll("_recvonly")
defer testOs.RemoveAll("_recvonly")
// Create some test data
if err := os.MkdirAll("_recvonly/.stfolder", 0755); err != nil {
t.Fatal(err)
}
testOs.MkdirAll("_recvonly/.stfolder", 0755)
oldData := []byte("hello\n")
knownFiles := setupKnownFiles(t, oldData)
@@ -231,20 +215,14 @@ func TestRecvOnlyRevertNeeds(t *testing.T) {
}
func TestRecvOnlyUndoChanges(t *testing.T) {
if err := os.RemoveAll("_recvonly"); err != nil && !os.IsNotExist(err) {
t.Fatal(err)
}
defer func() {
if err := os.RemoveAll("_recvonly"); err != nil && !os.IsNotExist(err) {
t.Fatal(err)
}
}()
testOs := &fatalOs{t}
testOs.RemoveAll("_recvonly")
defer testOs.RemoveAll("_recvonly")
// Create some test data
if err := os.MkdirAll("_recvonly/.stfolder", 0755); err != nil {
t.Fatal(err)
}
testOs.MkdirAll("_recvonly/.stfolder", 0755)
oldData := []byte("hello\n")
knownFiles := setupKnownFiles(t, oldData)
@@ -307,9 +285,7 @@ func TestRecvOnlyUndoChanges(t *testing.T) {
// Remove the file again and undo the modification
if err := os.Remove(file); err != nil {
t.Fatal(err)
}
testOs.Remove(file)
if err := ioutil.WriteFile("_recvonly/knownDir/knownFile", oldData, 0644); err != nil {
t.Fatal(err)
}
@@ -324,22 +300,17 @@ func TestRecvOnlyUndoChanges(t *testing.T) {
}
func setupKnownFiles(t *testing.T, data []byte) []protocol.FileInfo {
if err := os.MkdirAll("_recvonly/knownDir", 0755); err != nil {
t.Fatal(err)
}
testOs := &fatalOs{t}
testOs.MkdirAll("_recvonly/knownDir", 0755)
if err := ioutil.WriteFile("_recvonly/knownDir/knownFile", data, 0644); err != nil {
t.Fatal(err)
}
t0 := time.Now().Add(-1 * time.Minute)
if err := os.Chtimes("_recvonly/knownDir/knownFile", t0, t0); err != nil {
t.Fatal(err)
}
testOs.Chtimes("_recvonly/knownDir/knownFile", t0, t0)
fi, err := os.Stat("_recvonly/knownDir/knownFile")
if err != nil {
t.Fatal(err)
}
fi, _ := testOs.Stat("_recvonly/knownDir/knownFile")
blocks, _ := scanner.Blocks(context.TODO(), bytes.NewReader(data), protocol.BlockSize(int64(len(data))), int64(len(data)), nil, true)
knownFiles := []protocol.FileInfo{
{