1 // Copyright 2019 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
12 func TestFormatTree(t *testing.T) {
13 n := int64(123456789012)
14 h := RecordHash([]byte("hello world"))
15 golden := "go.sum database tree\n123456789012\nTszzRgjTG6xce+z2AG31kAXYKBgQVtCSCE40HmuwBb0=\n"
16 b := FormatTree(Tree{n, h})
17 if string(b) != golden {
18 t.Errorf("FormatTree(...) = %q, want %q", b, golden)
22 func TestParseTree(t *testing.T) {
23 in := "go.sum database tree\n123456789012\nTszzRgjTG6xce+z2AG31kAXYKBgQVtCSCE40HmuwBb0=\n"
24 goldH := RecordHash([]byte("hello world"))
25 goldN := int64(123456789012)
26 tree, err := ParseTree([]byte(in))
27 if tree.N != goldN || tree.Hash != goldH || err != nil {
28 t.Fatalf("ParseTree(...) = Tree{%d, %v}, %v, want Tree{%d, %v}, nil", tree.N, tree.Hash, err, goldN, goldH)
31 // Check invalid trees.
32 var badTrees = []string{
34 "go.sum database tree\n0xabcdef\nTszzRgjTG6xce+z2AG31kAXYKBgQVtCSCE40HmuwBb0=\n",
35 "go.sum database tree\n123456789012\nTszzRgjTG6xce+z2AG31kAXYKBgQVtCSCE40HmuwBTOOBIG=\n",
37 for _, bad := range badTrees {
38 _, err := ParseTree([]byte(bad))
40 t.Fatalf("ParseTree(%q) succeeded, want failure", in)
44 // Check junk on end is ignored.
45 var goodTrees = []string{
48 in + strings.Repeat("JOE\n", 1000),
50 for _, good := range goodTrees {
51 _, err := ParseTree([]byte(good))
52 if tree.N != goldN || tree.Hash != goldH || err != nil {
53 t.Fatalf("ParseTree(...+%q) = Tree{%d, %v}, %v, want Tree{%d, %v}, nil", good[len(in):], tree.N, tree.Hash, err, goldN, goldH)
58 func TestFormatRecord(t *testing.T) {
59 id := int64(123456789012)
60 text := "hello, world\n"
61 golden := "123456789012\nhello, world\n\n"
62 msg, err := FormatRecord(id, []byte(text))
64 t.Fatalf("FormatRecord: %v", err)
66 if string(msg) != golden {
67 t.Fatalf("FormatRecord(...) = %q, want %q", msg, golden)
70 var badTexts = []string{
76 for _, bad := range badTexts {
77 msg, err := FormatRecord(id, []byte(bad))
79 t.Errorf("FormatRecord(id, %q) = %q, want error", bad, msg)
84 func TestParseRecord(t *testing.T) {
85 in := "123456789012\nhello, world\n\njunk on end\x01\xff"
86 goldID := int64(123456789012)
87 goldText := "hello, world\n"
88 goldRest := "junk on end\x01\xff"
89 id, text, rest, err := ParseRecord([]byte(in))
90 if id != goldID || string(text) != goldText || string(rest) != goldRest || err != nil {
91 t.Fatalf("ParseRecord(%q) = %d, %q, %q, %v, want %d, %q, %q, nil", in, id, text, rest, err, goldID, goldText, goldRest)
94 in = "123456789012\nhello, world\n\n"
95 id, text, rest, err = ParseRecord([]byte(in))
96 if id != goldID || string(text) != goldText || len(rest) != 0 || err != nil {
97 t.Fatalf("ParseRecord(%q) = %d, %q, %q, %v, want %d, %q, %q, nil", in, id, text, rest, err, goldID, goldText, "")
100 t.Fatalf("ParseRecord(%q): rest = []byte(nil), want []byte{}", in)
103 // Check invalid records.
104 var badRecords = []string{
106 "123\nhello\x01world\n\n",
107 "123\nhello\xffworld\n\n",
108 "123\nhello world\n",
109 "0x123\nhello world\n\n",
111 for _, bad := range badRecords {
112 id, text, rest, err := ParseRecord([]byte(bad))
114 t.Fatalf("ParseRecord(%q) = %d, %q, %q, nil, want error", in, id, text, rest)