1package packp 2 3import ( 4 "bytes" 5 "io/ioutil" 6 7 "github.com/go-git/go-git/v5/plumbing" 8 "github.com/go-git/go-git/v5/plumbing/protocol/packp/capability" 9 10 . "gopkg.in/check.v1" 11) 12 13type UploadPackResponseSuite struct{} 14 15var _ = Suite(&UploadPackResponseSuite{}) 16 17func (s *UploadPackResponseSuite) TestDecodeNAK(c *C) { 18 raw := "0008NAK\nPACK" 19 20 req := NewUploadPackRequest() 21 res := NewUploadPackResponse(req) 22 defer res.Close() 23 24 err := res.Decode(ioutil.NopCloser(bytes.NewBufferString(raw))) 25 c.Assert(err, IsNil) 26 27 pack, err := ioutil.ReadAll(res) 28 c.Assert(err, IsNil) 29 c.Assert(pack, DeepEquals, []byte("PACK")) 30} 31 32func (s *UploadPackResponseSuite) TestDecodeDepth(c *C) { 33 raw := "00000008NAK\nPACK" 34 35 req := NewUploadPackRequest() 36 req.Depth = DepthCommits(1) 37 38 res := NewUploadPackResponse(req) 39 defer res.Close() 40 41 err := res.Decode(ioutil.NopCloser(bytes.NewBufferString(raw))) 42 c.Assert(err, IsNil) 43 44 pack, err := ioutil.ReadAll(res) 45 c.Assert(err, IsNil) 46 c.Assert(pack, DeepEquals, []byte("PACK")) 47} 48 49func (s *UploadPackResponseSuite) TestDecodeMalformed(c *C) { 50 raw := "00000008ACK\nPACK" 51 52 req := NewUploadPackRequest() 53 req.Depth = DepthCommits(1) 54 55 res := NewUploadPackResponse(req) 56 defer res.Close() 57 58 err := res.Decode(ioutil.NopCloser(bytes.NewBufferString(raw))) 59 c.Assert(err, NotNil) 60} 61 62func (s *UploadPackResponseSuite) TestDecodeMultiACK(c *C) { 63 req := NewUploadPackRequest() 64 req.Capabilities.Set(capability.MultiACK) 65 66 res := NewUploadPackResponse(req) 67 defer res.Close() 68 69 err := res.Decode(ioutil.NopCloser(bytes.NewBuffer(nil))) 70 c.Assert(err, NotNil) 71} 72 73func (s *UploadPackResponseSuite) TestReadNoDecode(c *C) { 74 req := NewUploadPackRequest() 75 req.Capabilities.Set(capability.MultiACK) 76 77 res := NewUploadPackResponse(req) 78 defer res.Close() 79 80 n, err := res.Read(nil) 81 c.Assert(err, Equals, ErrUploadPackResponseNotDecoded) 82 c.Assert(n, Equals, 0) 83} 84 85func (s *UploadPackResponseSuite) TestEncodeNAK(c *C) { 86 pf := ioutil.NopCloser(bytes.NewBuffer([]byte("[PACK]"))) 87 req := NewUploadPackRequest() 88 res := NewUploadPackResponseWithPackfile(req, pf) 89 defer func() { c.Assert(res.Close(), IsNil) }() 90 91 b := bytes.NewBuffer(nil) 92 c.Assert(res.Encode(b), IsNil) 93 94 expected := "0008NAK\n[PACK]" 95 c.Assert(b.String(), Equals, expected) 96} 97 98func (s *UploadPackResponseSuite) TestEncodeDepth(c *C) { 99 pf := ioutil.NopCloser(bytes.NewBuffer([]byte("PACK"))) 100 req := NewUploadPackRequest() 101 req.Depth = DepthCommits(1) 102 103 res := NewUploadPackResponseWithPackfile(req, pf) 104 defer func() { c.Assert(res.Close(), IsNil) }() 105 106 b := bytes.NewBuffer(nil) 107 c.Assert(res.Encode(b), IsNil) 108 109 expected := "00000008NAK\nPACK" 110 c.Assert(b.String(), Equals, expected) 111} 112 113func (s *UploadPackResponseSuite) TestEncodeMultiACK(c *C) { 114 pf := ioutil.NopCloser(bytes.NewBuffer([]byte("[PACK]"))) 115 req := NewUploadPackRequest() 116 117 res := NewUploadPackResponseWithPackfile(req, pf) 118 defer func() { c.Assert(res.Close(), IsNil) }() 119 res.ACKs = []plumbing.Hash{ 120 plumbing.NewHash("5dc01c595e6c6ec9ccda4f6f69c131c0dd945f81"), 121 plumbing.NewHash("5dc01c595e6c6ec9ccda4f6f69c131c0dd945f82"), 122 } 123 124 b := bytes.NewBuffer(nil) 125 c.Assert(res.Encode(b), NotNil) 126} 127