| package objfile |
| |
| import ( |
| "bytes" |
| "encoding/base64" |
| "fmt" |
| "io" |
| |
| . "gopkg.in/check.v1" |
| "gopkg.in/src-d/go-git.v4/plumbing" |
| ) |
| |
| type SuiteWriter struct{} |
| |
| var _ = Suite(&SuiteWriter{}) |
| |
| func (s *SuiteWriter) TestWriteObjfile(c *C) { |
| for k, fixture := range objfileFixtures { |
| buffer := bytes.NewBuffer(nil) |
| |
| com := fmt.Sprintf("test %d: ", k) |
| hash := plumbing.NewHash(fixture.hash) |
| content, _ := base64.StdEncoding.DecodeString(fixture.content) |
| |
| // Write the data out to the buffer |
| testWriter(c, buffer, hash, fixture.t, content) |
| |
| // Read the data back in from the buffer to be sure it matches |
| testReader(c, buffer, hash, fixture.t, content, com) |
| } |
| } |
| |
| func testWriter(c *C, dest io.Writer, hash plumbing.Hash, t plumbing.ObjectType, content []byte) { |
| size := int64(len(content)) |
| w := NewWriter(dest) |
| |
| err := w.WriteHeader(t, size) |
| c.Assert(err, IsNil) |
| |
| written, err := io.Copy(w, bytes.NewReader(content)) |
| c.Assert(err, IsNil) |
| c.Assert(written, Equals, size) |
| |
| c.Assert(w.Hash(), Equals, hash) |
| c.Assert(w.Close(), IsNil) |
| } |
| |
| func (s *SuiteWriter) TestWriteOverflow(c *C) { |
| buf := bytes.NewBuffer(nil) |
| w := NewWriter(buf) |
| |
| err := w.WriteHeader(plumbing.BlobObject, 8) |
| c.Assert(err, IsNil) |
| |
| n, err := w.Write([]byte("1234")) |
| c.Assert(err, IsNil) |
| c.Assert(n, Equals, 4) |
| |
| n, err = w.Write([]byte("56789")) |
| c.Assert(err, Equals, ErrOverflow) |
| c.Assert(n, Equals, 4) |
| } |
| |
| func (s *SuiteWriter) TestNewWriterInvalidType(c *C) { |
| buf := bytes.NewBuffer(nil) |
| w := NewWriter(buf) |
| |
| err := w.WriteHeader(plumbing.InvalidObject, 8) |
| c.Assert(err, Equals, plumbing.ErrInvalidType) |
| } |
| |
| func (s *SuiteWriter) TestNewWriterInvalidSize(c *C) { |
| buf := bytes.NewBuffer(nil) |
| w := NewWriter(buf) |
| |
| err := w.WriteHeader(plumbing.BlobObject, -1) |
| c.Assert(err, Equals, ErrNegativeSize) |
| err = w.WriteHeader(plumbing.BlobObject, -1651860) |
| c.Assert(err, Equals, ErrNegativeSize) |
| } |