forked from TrueCloudLab/restic
72 lines
1.7 KiB
Go
72 lines
1.7 KiB
Go
package khepri_test
|
|
|
|
import (
|
|
"bytes"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/fd0/khepri"
|
|
)
|
|
|
|
func parseTime(str string) time.Time {
|
|
t, err := time.Parse(time.RFC3339Nano, str)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return t
|
|
}
|
|
|
|
func TestTree(t *testing.T) {
|
|
var tree = &khepri.Tree{
|
|
Nodes: []khepri.Node{
|
|
khepri.Node{
|
|
Name: "foobar",
|
|
Mode: 0755,
|
|
ModTime: parseTime("2014-04-20T22:16:54.161401+02:00"),
|
|
AccessTime: parseTime("2014-04-21T22:16:54.161401+02:00"),
|
|
User: 1000,
|
|
Group: 1001,
|
|
Content: []byte{0x41, 0x42, 0x43},
|
|
},
|
|
khepri.Node{
|
|
Name: "baz",
|
|
Mode: 0755,
|
|
User: 1000,
|
|
ModTime: parseTime("2014-04-20T22:16:54.161401+02:00"),
|
|
AccessTime: parseTime("2014-04-21T22:16:54.161401+02:00"),
|
|
Group: 1001,
|
|
Content: []byte("\xde\xad\xbe\xef\xba\xdc\x0d\xe0"),
|
|
},
|
|
},
|
|
}
|
|
|
|
const raw = `{"nodes":[{"name":"foobar","mode":493,"mtime":"2014-04-20T22:16:54.161401+02:00","atime":"2014-04-21T22:16:54.161401+02:00","user":1000,"group":1001,"content":"414243"},{"name":"baz","mode":493,"mtime":"2014-04-20T22:16:54.161401+02:00","atime":"2014-04-21T22:16:54.161401+02:00","user":1000,"group":1001,"content":"deadbeefbadc0de0"}]}`
|
|
|
|
// test save
|
|
buf := &bytes.Buffer{}
|
|
|
|
tree.Save(buf)
|
|
equals(t, raw, strings.TrimRight(buf.String(), "\n"))
|
|
|
|
tree2 := new(khepri.Tree)
|
|
err := tree2.Restore(buf)
|
|
ok(t, err)
|
|
equals(t, tree, tree2)
|
|
|
|
// test nodes for equality
|
|
for i, n := range tree.Nodes {
|
|
equals(t, n.Content, tree2.Nodes[i].Content)
|
|
}
|
|
|
|
// test restore
|
|
buf = bytes.NewBufferString(raw)
|
|
|
|
tree2 = new(khepri.Tree)
|
|
err = tree2.Restore(buf)
|
|
ok(t, err)
|
|
|
|
// test if tree has correctly been restored
|
|
equals(t, tree, tree2)
|
|
}
|