summaryrefslogtreecommitdiff
path: root/cmd/restic/cmd_find_integration_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/restic/cmd_find_integration_test.go')
-rw-r--r--cmd/restic/cmd_find_integration_test.go87
1 files changed, 87 insertions, 0 deletions
diff --git a/cmd/restic/cmd_find_integration_test.go b/cmd/restic/cmd_find_integration_test.go
new file mode 100644
index 000000000..dd8ab87fd
--- /dev/null
+++ b/cmd/restic/cmd_find_integration_test.go
@@ -0,0 +1,87 @@
+package main
+
+import (
+ "context"
+ "encoding/json"
+ "strings"
+ "testing"
+ "time"
+
+ rtest "github.com/restic/restic/internal/test"
+)
+
+func testRunFind(t testing.TB, wantJSON bool, gopts GlobalOptions, pattern string) []byte {
+ buf, err := withCaptureStdout(func() error {
+ gopts.JSON = wantJSON
+
+ opts := FindOptions{}
+ return runFind(context.TODO(), opts, gopts, []string{pattern})
+ })
+ rtest.OK(t, err)
+ return buf.Bytes()
+}
+
+func TestFind(t *testing.T) {
+ env, cleanup := withTestEnvironment(t)
+ defer cleanup()
+
+ datafile := testSetupBackupData(t, env)
+ opts := BackupOptions{}
+
+ testRunBackup(t, "", []string{env.testdata}, opts, env.gopts)
+ testRunCheck(t, env.gopts)
+
+ results := testRunFind(t, false, env.gopts, "unexistingfile")
+ rtest.Assert(t, len(results) == 0, "unexisting file found in repo (%v)", datafile)
+
+ results = testRunFind(t, false, env.gopts, "testfile")
+ lines := strings.Split(string(results), "\n")
+ rtest.Assert(t, len(lines) == 2, "expected one file found in repo (%v)", datafile)
+
+ results = testRunFind(t, false, env.gopts, "testfile*")
+ lines = strings.Split(string(results), "\n")
+ rtest.Assert(t, len(lines) == 4, "expected three files found in repo (%v)", datafile)
+}
+
+type testMatch struct {
+ Path string `json:"path,omitempty"`
+ Permissions string `json:"permissions,omitempty"`
+ Size uint64 `json:"size,omitempty"`
+ Date time.Time `json:"date,omitempty"`
+ UID uint32 `json:"uid,omitempty"`
+ GID uint32 `json:"gid,omitempty"`
+}
+
+type testMatches struct {
+ Hits int `json:"hits,omitempty"`
+ SnapshotID string `json:"snapshot,omitempty"`
+ Matches []testMatch `json:"matches,omitempty"`
+}
+
+func TestFindJSON(t *testing.T) {
+ env, cleanup := withTestEnvironment(t)
+ defer cleanup()
+
+ datafile := testSetupBackupData(t, env)
+ opts := BackupOptions{}
+
+ testRunBackup(t, "", []string{env.testdata}, opts, env.gopts)
+ testRunCheck(t, env.gopts)
+
+ results := testRunFind(t, true, env.gopts, "unexistingfile")
+ matches := []testMatches{}
+ rtest.OK(t, json.Unmarshal(results, &matches))
+ rtest.Assert(t, len(matches) == 0, "expected no match in repo (%v)", datafile)
+
+ results = testRunFind(t, true, env.gopts, "testfile")
+ rtest.OK(t, json.Unmarshal(results, &matches))
+ rtest.Assert(t, len(matches) == 1, "expected a single snapshot in repo (%v)", datafile)
+ rtest.Assert(t, len(matches[0].Matches) == 1, "expected a single file to match (%v)", datafile)
+ rtest.Assert(t, matches[0].Hits == 1, "expected hits to show 1 match (%v)", datafile)
+
+ results = testRunFind(t, true, env.gopts, "testfile*")
+ rtest.OK(t, json.Unmarshal(results, &matches))
+ rtest.Assert(t, len(matches) == 1, "expected a single snapshot in repo (%v)", datafile)
+ rtest.Assert(t, len(matches[0].Matches) == 3, "expected 3 files to match (%v)", datafile)
+ rtest.Assert(t, matches[0].Hits == 3, "expected hits to show 3 matches (%v)", datafile)
+}