diff options
author | Alberto Cortés <alcortesm@gmail.com> | 2016-11-02 10:14:15 +0100 |
---|---|---|
committer | Máximo Cuadros <mcuadros@gmail.com> | 2016-11-02 09:14:15 +0000 |
commit | 1918bfe458729488e4a656cbbef7a2430e7ec2f5 (patch) | |
tree | d130d025584f3db0f781028db8978bb0a6a227ef /formats/packp/ulreq/encoder_test.go | |
parent | 6b7464a22c6177d9e0cf96e1aaaae13c127c3149 (diff) | |
download | go-git-1918bfe458729488e4a656cbbef7a2430e7ec2f5.tar.gz |
ulreq: adds encoder and decoder for upload-request messages (#106)
* ulreq: adds encoder and decoder for upload-request messages
* ulreq: stop using _test suffix for testing package names (@mcuadros comment)
Diffstat (limited to 'formats/packp/ulreq/encoder_test.go')
-rw-r--r-- | formats/packp/ulreq/encoder_test.go | 268 |
1 files changed, 268 insertions, 0 deletions
diff --git a/formats/packp/ulreq/encoder_test.go b/formats/packp/ulreq/encoder_test.go new file mode 100644 index 0000000..56a8c2a --- /dev/null +++ b/formats/packp/ulreq/encoder_test.go @@ -0,0 +1,268 @@ +package ulreq + +import ( + "bytes" + "time" + + "gopkg.in/src-d/go-git.v4/core" + "gopkg.in/src-d/go-git.v4/formats/packp/pktline" + + . "gopkg.in/check.v1" +) + +type SuiteEncoder struct{} + +var _ = Suite(&SuiteEncoder{}) + +// returns a byte slice with the pkt-lines for the given payloads. +func pktlines(c *C, payloads ...string) []byte { + var buf bytes.Buffer + e := pktline.NewEncoder(&buf) + + err := e.EncodeString(payloads...) + c.Assert(err, IsNil, Commentf("building pktlines for %v\n", payloads)) + + return buf.Bytes() +} + +func testEncode(c *C, ur *UlReq, expectedPayloads []string) { + var buf bytes.Buffer + e := NewEncoder(&buf) + + err := e.Encode(ur) + c.Assert(err, IsNil) + obtained := buf.Bytes() + + expected := pktlines(c, expectedPayloads...) + + comment := Commentf("\nobtained = %s\nexpected = %s\n", string(obtained), string(expected)) + + c.Assert(obtained, DeepEquals, expected, comment) +} + +func testEncodeError(c *C, ur *UlReq, expectedErrorRegEx string) { + var buf bytes.Buffer + e := NewEncoder(&buf) + + err := e.Encode(ur) + c.Assert(err, ErrorMatches, expectedErrorRegEx) +} + +func (s *SuiteEncoder) TestZeroValue(c *C) { + ur := New() + expectedErrorRegEx := ".*empty wants.*" + + testEncodeError(c, ur, expectedErrorRegEx) +} + +func (s *SuiteEncoder) TestOneWant(c *C) { + ur := New() + ur.Wants = append(ur.Wants, core.NewHash("1111111111111111111111111111111111111111")) + + expected := []string{ + "want 1111111111111111111111111111111111111111\n", + pktline.FlushString, + } + + testEncode(c, ur, expected) +} + +func (s *SuiteEncoder) TestOneWantWithCapabilities(c *C) { + ur := New() + ur.Wants = append(ur.Wants, core.NewHash("1111111111111111111111111111111111111111")) + ur.Capabilities.Add("sysref", "HEAD:/refs/heads/master") + ur.Capabilities.Add("multi_ack") + ur.Capabilities.Add("thin-pack") + ur.Capabilities.Add("side-band") + ur.Capabilities.Add("ofs-delta") + + expected := []string{ + "want 1111111111111111111111111111111111111111 multi_ack ofs-delta side-band sysref=HEAD:/refs/heads/master thin-pack\n", + pktline.FlushString, + } + + testEncode(c, ur, expected) +} + +func (s *SuiteEncoder) TestWants(c *C) { + ur := New() + ur.Wants = append(ur.Wants, core.NewHash("4444444444444444444444444444444444444444")) + ur.Wants = append(ur.Wants, core.NewHash("1111111111111111111111111111111111111111")) + ur.Wants = append(ur.Wants, core.NewHash("3333333333333333333333333333333333333333")) + ur.Wants = append(ur.Wants, core.NewHash("2222222222222222222222222222222222222222")) + ur.Wants = append(ur.Wants, core.NewHash("5555555555555555555555555555555555555555")) + + expected := []string{ + "want 1111111111111111111111111111111111111111\n", + "want 2222222222222222222222222222222222222222\n", + "want 3333333333333333333333333333333333333333\n", + "want 4444444444444444444444444444444444444444\n", + "want 5555555555555555555555555555555555555555\n", + pktline.FlushString, + } + + testEncode(c, ur, expected) +} + +func (s *SuiteEncoder) TestWantsWithCapabilities(c *C) { + ur := New() + ur.Wants = append(ur.Wants, core.NewHash("4444444444444444444444444444444444444444")) + ur.Wants = append(ur.Wants, core.NewHash("1111111111111111111111111111111111111111")) + ur.Wants = append(ur.Wants, core.NewHash("3333333333333333333333333333333333333333")) + ur.Wants = append(ur.Wants, core.NewHash("2222222222222222222222222222222222222222")) + ur.Wants = append(ur.Wants, core.NewHash("5555555555555555555555555555555555555555")) + + ur.Capabilities.Add("sysref", "HEAD:/refs/heads/master") + ur.Capabilities.Add("multi_ack") + ur.Capabilities.Add("thin-pack") + ur.Capabilities.Add("side-band") + ur.Capabilities.Add("ofs-delta") + + expected := []string{ + "want 1111111111111111111111111111111111111111 multi_ack ofs-delta side-band sysref=HEAD:/refs/heads/master thin-pack\n", + "want 2222222222222222222222222222222222222222\n", + "want 3333333333333333333333333333333333333333\n", + "want 4444444444444444444444444444444444444444\n", + "want 5555555555555555555555555555555555555555\n", + pktline.FlushString, + } + + testEncode(c, ur, expected) +} + +func (s *SuiteEncoder) TestShallow(c *C) { + ur := New() + ur.Wants = append(ur.Wants, core.NewHash("1111111111111111111111111111111111111111")) + ur.Capabilities.Add("multi_ack") + ur.Shallows = append(ur.Shallows, core.NewHash("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")) + + expected := []string{ + "want 1111111111111111111111111111111111111111 multi_ack\n", + "shallow aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n", + pktline.FlushString, + } + + testEncode(c, ur, expected) +} + +func (s *SuiteEncoder) TestManyShallows(c *C) { + ur := New() + ur.Wants = append(ur.Wants, core.NewHash("1111111111111111111111111111111111111111")) + ur.Capabilities.Add("multi_ack") + ur.Shallows = append(ur.Shallows, core.NewHash("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb")) + ur.Shallows = append(ur.Shallows, core.NewHash("dddddddddddddddddddddddddddddddddddddddd")) + ur.Shallows = append(ur.Shallows, core.NewHash("cccccccccccccccccccccccccccccccccccccccc")) + ur.Shallows = append(ur.Shallows, core.NewHash("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")) + + expected := []string{ + "want 1111111111111111111111111111111111111111 multi_ack\n", + "shallow aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n", + "shallow bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n", + "shallow cccccccccccccccccccccccccccccccccccccccc\n", + "shallow dddddddddddddddddddddddddddddddddddddddd\n", + pktline.FlushString, + } + + testEncode(c, ur, expected) +} + +func (s *SuiteEncoder) TestDepthCommits(c *C) { + ur := New() + ur.Wants = append(ur.Wants, core.NewHash("1111111111111111111111111111111111111111")) + ur.Depth = DepthCommits(1234) + + expected := []string{ + "want 1111111111111111111111111111111111111111\n", + "deepen 1234\n", + pktline.FlushString, + } + + testEncode(c, ur, expected) +} + +func (s *SuiteEncoder) TestDepthSinceUTC(c *C) { + ur := New() + ur.Wants = append(ur.Wants, core.NewHash("1111111111111111111111111111111111111111")) + since := time.Date(2015, time.January, 2, 3, 4, 5, 0, time.UTC) + ur.Depth = DepthSince(since) + + expected := []string{ + "want 1111111111111111111111111111111111111111\n", + "deepen-since 1420167845\n", + pktline.FlushString, + } + + testEncode(c, ur, expected) +} + +func (s *SuiteEncoder) TestDepthSinceNonUTC(c *C) { + ur := New() + ur.Wants = append(ur.Wants, core.NewHash("1111111111111111111111111111111111111111")) + berlin, err := time.LoadLocation("Europe/Berlin") + c.Assert(err, IsNil) + since := time.Date(2015, time.January, 2, 3, 4, 5, 0, berlin) + // since value is 2015-01-02 03:04:05 +0100 UTC (Europe/Berlin) or + // 2015-01-02 02:04:05 +0000 UTC, which is 1420164245 Unix seconds. + ur.Depth = DepthSince(since) + + expected := []string{ + "want 1111111111111111111111111111111111111111\n", + "deepen-since 1420164245\n", + pktline.FlushString, + } + + testEncode(c, ur, expected) +} + +func (s *SuiteEncoder) TestDepthReference(c *C) { + ur := New() + ur.Wants = append(ur.Wants, core.NewHash("1111111111111111111111111111111111111111")) + ur.Depth = DepthReference("refs/heads/feature-foo") + + expected := []string{ + "want 1111111111111111111111111111111111111111\n", + "deepen-not refs/heads/feature-foo\n", + pktline.FlushString, + } + + testEncode(c, ur, expected) +} + +func (s *SuiteEncoder) TestAll(c *C) { + ur := New() + ur.Wants = append(ur.Wants, core.NewHash("4444444444444444444444444444444444444444")) + ur.Wants = append(ur.Wants, core.NewHash("1111111111111111111111111111111111111111")) + ur.Wants = append(ur.Wants, core.NewHash("3333333333333333333333333333333333333333")) + ur.Wants = append(ur.Wants, core.NewHash("2222222222222222222222222222222222222222")) + ur.Wants = append(ur.Wants, core.NewHash("5555555555555555555555555555555555555555")) + + ur.Capabilities.Add("sysref", "HEAD:/refs/heads/master") + ur.Capabilities.Add("multi_ack") + ur.Capabilities.Add("thin-pack") + ur.Capabilities.Add("side-band") + ur.Capabilities.Add("ofs-delta") + + ur.Shallows = append(ur.Shallows, core.NewHash("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb")) + ur.Shallows = append(ur.Shallows, core.NewHash("dddddddddddddddddddddddddddddddddddddddd")) + ur.Shallows = append(ur.Shallows, core.NewHash("cccccccccccccccccccccccccccccccccccccccc")) + ur.Shallows = append(ur.Shallows, core.NewHash("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")) + + since := time.Date(2015, time.January, 2, 3, 4, 5, 0, time.UTC) + ur.Depth = DepthSince(since) + + expected := []string{ + "want 1111111111111111111111111111111111111111 multi_ack ofs-delta side-band sysref=HEAD:/refs/heads/master thin-pack\n", + "want 2222222222222222222222222222222222222222\n", + "want 3333333333333333333333333333333333333333\n", + "want 4444444444444444444444444444444444444444\n", + "want 5555555555555555555555555555555555555555\n", + "shallow aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n", + "shallow bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n", + "shallow cccccccccccccccccccccccccccccccccccccccc\n", + "shallow dddddddddddddddddddddddddddddddddddddddd\n", + "deepen-since 1420167845\n", + pktline.FlushString, + } + + testEncode(c, ur, expected) +} |