github.com/sashka/siva@v1.6.0/cmd/siva/pack_test.go (about) 1 package main 2 3 import ( 4 "io/ioutil" 5 "os" 6 "path/filepath" 7 "testing" 8 9 "gopkg.in/src-d/go-siva.v1" 10 11 . "gopkg.in/check.v1" 12 ) 13 14 func Test(t *testing.T) { TestingT(t) } 15 16 type PackSuite struct { 17 folder string 18 files []string 19 cwd string 20 } 21 22 var _ = Suite(&PackSuite{}) 23 24 func (s *PackSuite) SetUpTest(c *C) { 25 var err error 26 s.folder, err = ioutil.TempDir("", "siva-cmd-pack") 27 c.Assert(err, IsNil) 28 29 err = os.Mkdir(filepath.Join(s.folder, "files"), 0766) 30 c.Assert(err, IsNil) 31 32 s.files = []string{} 33 for _, f := range files { 34 target := filepath.Join(s.folder, "files", f.Name) 35 err = ioutil.WriteFile(target, []byte(f.Body), 0666) 36 c.Assert(err, IsNil) 37 38 s.files = append(s.files, target) 39 } 40 41 cwd, err := os.Getwd() 42 c.Assert(err, IsNil) 43 s.cwd = cwd 44 } 45 46 func (s *PackSuite) TearDownTest(c *C) { 47 err := os.Chdir(s.cwd) 48 c.Assert(err, IsNil) 49 err = os.RemoveAll(s.folder) 50 c.Assert(err, IsNil) 51 } 52 53 func (s *PackSuite) TestValidate(c *C) { 54 cmd := &CmdPack{} 55 cmd.Args.File = filepath.Join(s.folder, "validate.siva") 56 57 err := cmd.Execute(nil) 58 c.Assert(err, NotNil) 59 } 60 61 func (s *PackSuite) TestBasic(c *C) { 62 cmd := &CmdPack{} 63 cmd.Args.File = filepath.Join(s.folder, "basic.siva") 64 cmd.Input.Files = s.files 65 66 err := cmd.Execute(nil) 67 c.Assert(err, IsNil) 68 69 f, err := os.Open(cmd.Args.File) 70 c.Assert(err, IsNil) 71 72 fi, err := f.Stat() 73 c.Assert(err, IsNil) 74 size := 249 75 for _, file := range s.files { 76 size += len(siva.ToSafePath(file)) 77 } 78 c.Assert(int(fi.Size()), Equals, size) 79 80 r := siva.NewReader(f) 81 i, err := r.Index() 82 c.Assert(err, IsNil) 83 c.Assert(i, HasLen, 3) 84 85 c.Assert(f.Close(), IsNil) 86 } 87 88 func (s *PackSuite) TestDir(c *C) { 89 cmd := &CmdPack{} 90 cmd.Args.File = filepath.Join(s.folder, "dir.siva") 91 cmd.Input.Files = []string{filepath.Join(s.folder, "files")} 92 93 err := cmd.Execute(nil) 94 c.Assert(err, IsNil) 95 96 f, err := os.Open(cmd.Args.File) 97 c.Assert(err, IsNil) 98 99 fi, err := f.Stat() 100 c.Assert(err, IsNil) 101 size := 249 102 for _, file := range s.files { 103 size += len(siva.ToSafePath(file)) 104 } 105 c.Assert(int(fi.Size()), Equals, size) 106 107 r := siva.NewReader(f) 108 i, err := r.Index() 109 c.Assert(err, IsNil) 110 c.Assert(i, HasLen, 3) 111 112 c.Assert(f.Close(), IsNil) 113 } 114 115 func (s *PackSuite) TestAppend(c *C) { 116 cmd := &CmdPack{} 117 118 cmd.Args.File = filepath.Join(s.folder, "append.siva") 119 cmd.Input.Files = s.files[1:] 120 err := cmd.Execute(nil) 121 c.Assert(err, IsNil) 122 123 cmd.Input.Files = s.files[0:1] 124 cmd.Append = true 125 err = cmd.Execute(nil) 126 c.Assert(err, IsNil) 127 128 f, err := os.Open(cmd.Args.File) 129 c.Assert(err, IsNil) 130 131 fi, err := f.Stat() 132 c.Assert(err, IsNil) 133 134 size := 277 135 for _, file := range s.files { 136 size += len(siva.ToSafePath(file)) 137 } 138 c.Assert(int(fi.Size()), Equals, size) 139 140 r := siva.NewReader(f) 141 i, err := r.Index() 142 c.Assert(err, IsNil) 143 c.Assert(i, HasLen, 3) 144 145 c.Assert(f.Close(), IsNil) 146 } 147 148 func (s *PackSuite) TestCleanPaths(c *C) { 149 cmd := &CmdPack{} 150 151 subdir := filepath.Join(s.folder, "files", "subdir") 152 err := os.Mkdir(subdir, 0766) 153 c.Assert(err, IsNil) 154 err = os.Chdir(subdir) 155 c.Assert(err, IsNil) 156 157 cmd.Args.File = filepath.Join(s.folder, "foo.siva") 158 cmd.Input.Files = []string{filepath.Join("..", "gopher.txt")} 159 160 err = cmd.Execute(nil) 161 c.Assert(err, IsNil) 162 163 f, err := os.Open(cmd.Args.File) 164 c.Assert(err, IsNil) 165 166 fi, err := f.Stat() 167 c.Assert(err, IsNil) 168 c.Assert(int(fi.Size()), Equals, 113) 169 170 r := siva.NewReader(f) 171 i, err := r.Index() 172 c.Assert(err, IsNil) 173 c.Assert(i, HasLen, 1) 174 entry := i.Find("gopher.txt") 175 c.Assert(entry, NotNil) 176 c.Assert(entry.Name, Equals, "gopher.txt") 177 178 c.Assert(f.Close(), IsNil) 179 } 180 181 type fileFixture struct { 182 Name, Body string 183 } 184 185 var files = []fileFixture{ 186 {"gopher.txt", "Gopher names:\nGeorge\nGeoffrey\nGonzo"}, 187 {"readme.txt", "This archive contains some text files."}, 188 {"todo.txt", "Get animal handling license."}, 189 }