diff options
| author | Jakob Unterwurzacher | 2021-05-24 14:28:36 +0200 | 
|---|---|---|
| committer | Jakob Unterwurzacher | 2021-05-26 13:17:56 +0200 | 
| commit | 9695f0e524aa2debd173d676a8fd56ad26603c5a (patch) | |
| tree | 937ce59ac316df49010eb64c6347d1079220e619 /tests/plaintextnames | |
| parent | 629d0a5ad7307b4a3b5fb4b87c432a76ac256c1a (diff) | |
tests: add TestFileHoleCopy
Currently fails.
Diffstat (limited to 'tests/plaintextnames')
| -rw-r--r-- | tests/plaintextnames/file_holes_test.go | 96 | 
1 files changed, 96 insertions, 0 deletions
| diff --git a/tests/plaintextnames/file_holes_test.go b/tests/plaintextnames/file_holes_test.go new file mode 100644 index 0000000..d046cea --- /dev/null +++ b/tests/plaintextnames/file_holes_test.go @@ -0,0 +1,96 @@ +package plaintextnames + +import ( +	"fmt" +	"os" +	"os/exec" +	"testing" + +	"github.com/rfjakob/gocryptfs/tests/test_helpers" + +	"github.com/rfjakob/gocryptfs/contrib/findholes/holes" +) + +func findHolesPretty(t *testing.T, path string) string { +	f, err := os.Open(path) +	if err != nil { +		t.Fatal(err) +	} +	defer f.Close() + +	segments, err := holes.Find(int(f.Fd())) +	if err != nil { +		t.Fatal(err) +	} + +	return holes.PrettyPrint(segments) +} + +// TestFileHoleCopy creates a sparse times, copies it a few times, and check if +// the copies are the same (including the location of holes and data sections). +// +// The test runs with -plaintextnames because that makes it easier to manipulate +// cipherdir directly. +func TestFileHoleCopy(t *testing.T) { +	n := "TestFileHoleCopy" +	pPath := []string{pDir + "/" + n} +	cPath := []string{cDir + "/" + n} + +	f, err := os.Create(pPath[0]) +	if err != nil { +		t.Fatal(err) +	} +	// | hole | x | hole | x | hole | +	buf := []byte("x") +	f.WriteAt(buf, 10000) +	f.WriteAt(buf, 30000) +	f.Truncate(50000) +	f.Sync() +	f.Close() + +	// You have to update this value manually when you change the sequence +	// above +	md5 := test_helpers.Md5fn(pPath[0]) +	if md5 != "4e8d0742bccfbcdbf1d71be688e4e81c" { +		t.Fatalf("wrong md5: %s", md5) +	} + +	pSegments := []string{findHolesPretty(t, pPath[0])} +	cSegments := []string{findHolesPretty(t, cPath[0])} + +	for i := 1; i < 5; i++ { +		pPath = append(pPath, fmt.Sprintf("%s.%d", pPath[0], i)) +		cPath = append(cPath, fmt.Sprintf("%s.%d", cPath[0], i)) + +		out, err := exec.Command("cp", "--sparse=auto", pPath[i-1], pPath[i]).CombinedOutput() +		if err != nil { +			t.Fatal(string(out)) +		} + +		tmp := test_helpers.Md5fn(pPath[0]) +		if tmp != md5 { +			t.Errorf("pPath[%d]: wrong md5, have %s, want %s", i, tmp, md5) +		} + +		pSegments = append(pSegments, findHolesPretty(t, pPath[i])) +		cSegments = append(cSegments, findHolesPretty(t, cPath[i])) +	} + +	for i := range pSegments { +		t.Logf("pSegments[%d]: %s", i, pSegments[i]) +		if i < len(pSegments)-1 { +			if pSegments[i+1] != pSegments[i] { +				t.Errorf("error: this is different than pSegments[%d]!", i+1) +			} +		} +	} +	t.Log("------------------------------------") +	for i := range cSegments { +		t.Logf("cSegments[%d]: %s", i, cSegments[i]) +		if i < len(pSegments)-1 { +			if cSegments[i+1] != cSegments[i] { +				t.Errorf("error: this is different than cSegments[%d]!", i+1) +			} +		} +	} +} | 
