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  }