OSDN Git Service

add package
[bytom/vapor.git] / vendor / github.com / ipfs / go-ipfs-files / tarwriter_test.go
1 package files
2
3 import (
4         "archive/tar"
5         "io"
6         "testing"
7 )
8
9 func TestTarWriter(t *testing.T) {
10         tf := NewMapDirectory(map[string]Node{
11                 "file.txt": NewBytesFile([]byte(text)),
12                 "boop": NewMapDirectory(map[string]Node{
13                         "a.txt": NewBytesFile([]byte("bleep")),
14                         "b.txt": NewBytesFile([]byte("bloop")),
15                 }),
16                 "beep.txt": NewBytesFile([]byte("beep")),
17         })
18
19         pr, pw := io.Pipe()
20         tw, err := NewTarWriter(pw)
21         if err != nil {
22                 t.Fatal(err)
23         }
24         tr := tar.NewReader(pr)
25
26         go func() {
27                 defer tw.Close()
28                 if err := tw.WriteFile(tf, ""); err != nil {
29                         t.Fatal(err)
30                 }
31         }()
32
33         var cur *tar.Header
34
35         checkHeader := func(name string, typ byte, size int64) {
36                 if cur.Name != name {
37                         t.Errorf("got wrong name: %s != %s", cur.Name, name)
38                 }
39                 if cur.Typeflag != typ {
40                         t.Errorf("got wrong type: %d != %d", cur.Typeflag, typ)
41                 }
42                 if cur.Size != size {
43                         t.Errorf("got wrong size: %d != %d", cur.Size, size)
44                 }
45         }
46
47         if cur, err = tr.Next(); err != nil {
48                 t.Fatal(err)
49         }
50         checkHeader("", tar.TypeDir, 0)
51
52         if cur, err = tr.Next(); err != nil {
53                 t.Fatal(err)
54         }
55         checkHeader("beep.txt", tar.TypeReg, 4)
56
57         if cur, err = tr.Next(); err != nil {
58                 t.Fatal(err)
59         }
60         checkHeader("boop", tar.TypeDir, 0)
61
62         if cur, err = tr.Next(); err != nil {
63                 t.Fatal(err)
64         }
65         checkHeader("boop/a.txt", tar.TypeReg, 5)
66
67         if cur, err = tr.Next(); err != nil {
68                 t.Fatal(err)
69         }
70         checkHeader("boop/b.txt", tar.TypeReg, 5)
71
72         if cur, err = tr.Next(); err != nil {
73                 t.Fatal(err)
74         }
75         checkHeader("file.txt", tar.TypeReg, 13)
76
77         if cur, err = tr.Next(); err != io.EOF {
78                 t.Fatal(err)
79         }
80 }