ls: test ncdu output format
This commit is contained in:
parent
509b339d54
commit
4bae54d040
3 changed files with 64 additions and 5 deletions
|
@ -220,8 +220,8 @@ func (p *ncduLsPrinter) Node(path string, node *restic.Node) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if node.Type == "dir" {
|
if node.Type == "dir" {
|
||||||
|
fmt.Fprintf(p.out, ",\n%s[\n%s%s", strings.Repeat(" ", p.depth), strings.Repeat(" ", p.depth+1), string(outJson))
|
||||||
p.depth++
|
p.depth++
|
||||||
fmt.Fprintf(p.out, ", [\n%s%s", strings.Repeat(" ", p.depth), string(outJson))
|
|
||||||
} else {
|
} else {
|
||||||
fmt.Fprintf(p.out, ",\n%s%s", strings.Repeat(" ", p.depth), string(outJson))
|
fmt.Fprintf(p.out, ",\n%s%s", strings.Repeat(" ", p.depth), string(outJson))
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,18 +2,46 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
rtest "github.com/restic/restic/internal/test"
|
rtest "github.com/restic/restic/internal/test"
|
||||||
)
|
)
|
||||||
|
|
||||||
func testRunLs(t testing.TB, gopts GlobalOptions, snapshotID string) []string {
|
func testRunLsWithOpts(t testing.TB, gopts GlobalOptions, opts LsOptions, args []string) []byte {
|
||||||
buf, err := withCaptureStdout(func() error {
|
buf, err := withCaptureStdout(func() error {
|
||||||
gopts.Quiet = true
|
gopts.Quiet = true
|
||||||
opts := LsOptions{}
|
return runLs(context.TODO(), opts, gopts, args)
|
||||||
return runLs(context.TODO(), opts, gopts, []string{snapshotID})
|
|
||||||
})
|
})
|
||||||
rtest.OK(t, err)
|
rtest.OK(t, err)
|
||||||
return strings.Split(buf.String(), "\n")
|
return buf.Bytes()
|
||||||
|
}
|
||||||
|
|
||||||
|
func testRunLs(t testing.TB, gopts GlobalOptions, snapshotID string) []string {
|
||||||
|
out := testRunLsWithOpts(t, gopts, LsOptions{}, []string{snapshotID})
|
||||||
|
return strings.Split(string(out), "\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
func assertIsValidJson(t *testing.T, data []byte) {
|
||||||
|
// Sanity check: output must be valid JSON.
|
||||||
|
var v interface{}
|
||||||
|
err := json.Unmarshal(data, &v)
|
||||||
|
rtest.OK(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRunLsNcdu(t *testing.T) {
|
||||||
|
env, cleanup := withTestEnvironment(t)
|
||||||
|
defer cleanup()
|
||||||
|
|
||||||
|
testRunInit(t, env.gopts)
|
||||||
|
opts := BackupOptions{}
|
||||||
|
testRunBackup(t, filepath.Dir(env.testdata), []string{"testdata"}, opts, env.gopts)
|
||||||
|
|
||||||
|
ncdu := testRunLsWithOpts(t, env.gopts, LsOptions{Ncdu: true}, []string{"latest"})
|
||||||
|
assertIsValidJson(t, ncdu)
|
||||||
|
|
||||||
|
ncdu = testRunLsWithOpts(t, env.gopts, LsOptions{Ncdu: true}, []string{"latest", "/testdata"})
|
||||||
|
assertIsValidJson(t, ncdu)
|
||||||
}
|
}
|
||||||
|
|
|
@ -126,3 +126,34 @@ func TestLsNcduNode(t *testing.T) {
|
||||||
rtest.OK(t, err)
|
rtest.OK(t, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestLsNcdu(t *testing.T) {
|
||||||
|
var buf bytes.Buffer
|
||||||
|
printer := &ncduLsPrinter{
|
||||||
|
out: &buf,
|
||||||
|
}
|
||||||
|
|
||||||
|
printer.Snapshot(&restic.Snapshot{
|
||||||
|
Hostname: "host",
|
||||||
|
Paths: []string{"/example"},
|
||||||
|
})
|
||||||
|
printer.Node("/directory", &restic.Node{
|
||||||
|
Type: "dir",
|
||||||
|
Name: "directory",
|
||||||
|
})
|
||||||
|
printer.Node("/directory/data", &restic.Node{
|
||||||
|
Type: "file",
|
||||||
|
Name: "data",
|
||||||
|
Size: 42,
|
||||||
|
})
|
||||||
|
printer.LeaveDir("/directory")
|
||||||
|
printer.Close()
|
||||||
|
|
||||||
|
rtest.Equals(t, `[1, 2, {"time":"0001-01-01T00:00:00Z","tree":null,"paths":["/example"],"hostname":"host"},
|
||||||
|
[
|
||||||
|
{"name":"directory","asize":0,"dsize":0,"dev":0,"ino":0,"nlink":0,"notreg":false,"uid":0,"gid":0,"mode":0,"mtime":-62135596800},
|
||||||
|
{"name":"data","asize":42,"dsize":42,"dev":0,"ino":0,"nlink":0,"notreg":false,"uid":0,"gid":0,"mode":0,"mtime":-62135596800}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
`, buf.String())
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue