github.com/sashka/siva@v1.6.0/reader_test.go (about)

     1  package siva
     2  
     3  import (
     4  	"bytes"
     5  	"io/ioutil"
     6  	"os"
     7  	"sort"
     8  
     9  	. "gopkg.in/check.v1"
    10  )
    11  
    12  type ReaderSuite struct{}
    13  
    14  var _ = Suite(&ReaderSuite{})
    15  
    16  func (s *ReaderSuite) TestIndex(c *C) {
    17  	s.testIndex(c, "fixtures/basic.siva")
    18  }
    19  
    20  func (s *ReaderSuite) TestIndexSeveralBlocks(c *C) {
    21  	s.testIndex(c, "fixtures/blocks.siva")
    22  }
    23  
    24  func (s *ReaderSuite) TestIndexOverwrittenFiles(c *C) {
    25  	s.testIndex(c, "fixtures/overwritten.siva")
    26  }
    27  
    28  func (s *ReaderSuite) testIndex(c *C, fixture string) {
    29  	f, err := os.Open(fixture)
    30  	c.Assert(err, IsNil)
    31  
    32  	r := NewReader(f)
    33  	i, err := r.Index()
    34  	i = i.Filter()
    35  	c.Assert(err, IsNil)
    36  	c.Assert(i, HasLen, 3)
    37  	for j, e := range i {
    38  		c.Assert(e.Name, Equals, files[j].Name)
    39  	}
    40  
    41  }
    42  
    43  func (s *ReaderSuite) TestGet(c *C) {
    44  	f, err := os.Open("fixtures/blocks.siva")
    45  	c.Assert(err, IsNil)
    46  
    47  	r := NewReader(f)
    48  	i, err := r.Index()
    49  	c.Assert(err, IsNil)
    50  	c.Assert(i, HasLen, 3)
    51  
    52  	for j, e := range i {
    53  		content, err := r.Get(e)
    54  		c.Assert(err, IsNil)
    55  
    56  		bytes, err := ioutil.ReadAll(content)
    57  		c.Assert(err, IsNil)
    58  
    59  		c.Assert(string(bytes), Equals, files[j].Body)
    60  	}
    61  }
    62  
    63  func (s *ReaderSuite) TestSeekAndRead(c *C) {
    64  	f, err := os.Open("fixtures/blocks.siva")
    65  	c.Assert(err, IsNil)
    66  
    67  	r := NewReader(f)
    68  	i, err := r.Index()
    69  	c.Assert(err, IsNil)
    70  	c.Assert(i, HasLen, 3)
    71  
    72  	for j, e := range i {
    73  		position, err := r.Seek(e)
    74  		c.Assert(err, IsNil)
    75  		c.Assert(uint64(position), Equals, e.absStart)
    76  
    77  		bytes, err := ioutil.ReadAll(r)
    78  		c.Assert(err, IsNil)
    79  
    80  		c.Assert(string(bytes), Equals, files[j].Body)
    81  	}
    82  }
    83  
    84  func (s *ReaderSuite) TestIndexGlob(c *C) {
    85  	s.testIndexGlob(c, "*", []string{
    86  		"file.txt",
    87  	})
    88  	s.testIndexGlob(c, "*/*", []string{
    89  		"letters/a",
    90  		"letters/b",
    91  		"letters/c",
    92  		"numbers/1",
    93  		"numbers/2",
    94  		"numbers/3",
    95  	})
    96  	s.testIndexGlob(c, "letters/*", []string{
    97  		"letters/a",
    98  		"letters/b",
    99  		"letters/c",
   100  	})
   101  	s.testIndexGlob(c, "numbers\\*", []string{
   102  		"numbers/1",
   103  		"numbers/2",
   104  		"numbers/3",
   105  	})
   106  	s.testIndexGlob(c, "nonexistent/*", []string{})
   107  }
   108  
   109  func (s *ReaderSuite) testIndexGlob(c *C, pattern string, expected []string) {
   110  	f, err := os.Open("fixtures/dirs.siva")
   111  	c.Assert(err, IsNil)
   112  
   113  	r := NewReader(f)
   114  	i, err := r.Index()
   115  	c.Assert(err, IsNil)
   116  	c.Assert(i, HasLen, 7)
   117  
   118  	matches, err := i.Glob(pattern)
   119  	c.Assert(err, IsNil)
   120  	matchNames := []string{}
   121  	for _, match := range matches {
   122  		matchNames = append(matchNames, match.Name)
   123  	}
   124  	sort.Strings(matchNames)
   125  
   126  	c.Assert(matchNames, DeepEquals, expected)
   127  
   128  	c.Assert(f.Close(), IsNil)
   129  }
   130  
   131  func (s *ReaderSuite) TestOffset(c *C) {
   132  	data, err := ioutil.ReadFile("fixtures/basic.siva")
   133  	c.Assert(err, IsNil)
   134  
   135  	indexOffset := uint64(len(data))
   136  	data = append(data, 0, 0, 0, 0, 0, 0, 0, 0)
   137  	buf := bytes.NewReader(data)
   138  
   139  	r := NewReader(buf)
   140  	_, err = r.Index()
   141  	_, ok := err.(*IndexReadError)
   142  	c.Assert(ok, Equals, true)
   143  
   144  	r = NewReaderWithOffset(buf, indexOffset)
   145  	i, err := r.Index()
   146  	c.Assert(err, IsNil)
   147  
   148  	entry := i.Find("gopher.txt")
   149  	c.Assert(entry, NotNil)
   150  	c.Assert(entry.Size, Equals, uint64(35))
   151  }