diff options
author | Santiago M. Mola <santi@mola.io> | 2016-12-06 15:49:01 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-12-06 15:49:01 +0100 |
commit | 4429dffca6f4185d09a22725baa728b535c009a7 (patch) | |
tree | 416ef14e79ee1d9cd9bfde30c0ceff7d8bbaa4e4 /plumbing/protocol/packp/report_status_test.go | |
parent | 22fe81f342538ae51442a72356036768f7f1a2f9 (diff) | |
download | go-git-4429dffca6f4185d09a22725baa728b535c009a7.tar.gz |
protocol/packp: add report status message. (#162)
Diffstat (limited to 'plumbing/protocol/packp/report_status_test.go')
-rw-r--r-- | plumbing/protocol/packp/report_status_test.go | 253 |
1 files changed, 253 insertions, 0 deletions
diff --git a/plumbing/protocol/packp/report_status_test.go b/plumbing/protocol/packp/report_status_test.go new file mode 100644 index 0000000..064e514 --- /dev/null +++ b/plumbing/protocol/packp/report_status_test.go @@ -0,0 +1,253 @@ +package packp + +import ( + "bytes" + + "gopkg.in/src-d/go-git.v4/plumbing" + "gopkg.in/src-d/go-git.v4/plumbing/format/pktline" + + . "gopkg.in/check.v1" +) + +type ReportStatusSuite struct{} + +var _ = Suite(&ReportStatusSuite{}) + +func (s *ReportStatusSuite) TestOk(c *C) { + rs := NewReportStatus() + rs.UnpackStatus = "ok" + c.Assert(rs.Ok(), Equals, true) + rs.UnpackStatus = "OK" + c.Assert(rs.Ok(), Equals, false) + rs.UnpackStatus = "" + c.Assert(rs.Ok(), Equals, false) + + cs := &CommandStatus{} + cs.Status = "ok" + c.Assert(cs.Ok(), Equals, true) + cs.Status = "OK" + c.Assert(cs.Ok(), Equals, false) + cs.Status = "" + c.Assert(cs.Ok(), Equals, false) +} + +func (s *ReportStatusSuite) testEncodeDecodeOk(c *C, rs *ReportStatus, lines ...string) { + s.testDecodeOk(c, rs, lines...) + s.testEncodeOk(c, rs, lines...) +} + +func (s *ReportStatusSuite) testDecodeOk(c *C, expected *ReportStatus, lines ...string) { + r := toPktLines(c, lines) + rs := NewReportStatus() + c.Assert(rs.Decode(r), IsNil) + c.Assert(rs, DeepEquals, expected) +} + +func (s *ReportStatusSuite) testDecodeError(c *C, errorMatch string, lines ...string) { + r := toPktLines(c, lines) + rs := NewReportStatus() + c.Assert(rs.Decode(r), ErrorMatches, errorMatch) +} + +func (s *ReportStatusSuite) testEncodeOk(c *C, input *ReportStatus, lines ...string) { + expected := pktlines(c, lines...) + var buf bytes.Buffer + c.Assert(input.Encode(&buf), IsNil) + obtained := buf.Bytes() + + comment := Commentf("\nobtained = %s\nexpected = %s\n", string(obtained), string(expected)) + + c.Assert(obtained, DeepEquals, expected, comment) +} + +func (s *ReportStatusSuite) TestEncodeDecodeOkOneReference(c *C) { + rs := NewReportStatus() + rs.UnpackStatus = "ok" + rs.CommandStatuses = []*CommandStatus{{ + ReferenceName: plumbing.ReferenceName("refs/heads/master"), + Status: "ok", + }} + + s.testEncodeDecodeOk(c, rs, + "unpack ok", + "ok refs/heads/master", + pktline.FlushString, + ) +} + +func (s *ReportStatusSuite) TestEncodeDecodeOkOneReferenceFailed(c *C) { + rs := NewReportStatus() + rs.UnpackStatus = "my error" + rs.CommandStatuses = []*CommandStatus{{ + ReferenceName: plumbing.ReferenceName("refs/heads/master"), + Status: "command error", + }} + + s.testEncodeDecodeOk(c, rs, + "unpack my error", + "ng refs/heads/master command error", + pktline.FlushString, + ) +} + +func (s *ReportStatusSuite) TestEncodeDecodeOkMoreReferences(c *C) { + rs := NewReportStatus() + rs.UnpackStatus = "ok" + rs.CommandStatuses = []*CommandStatus{{ + ReferenceName: plumbing.ReferenceName("refs/heads/master"), + Status: "ok", + }, { + ReferenceName: plumbing.ReferenceName("refs/heads/a"), + Status: "ok", + }, { + ReferenceName: plumbing.ReferenceName("refs/heads/b"), + Status: "ok", + }} + + s.testEncodeDecodeOk(c, rs, + "unpack ok", + "ok refs/heads/master", + "ok refs/heads/a", + "ok refs/heads/b", + pktline.FlushString, + ) +} + +func (s *ReportStatusSuite) TestEncodeDecodeOkMoreReferencesFailed(c *C) { + rs := NewReportStatus() + rs.UnpackStatus = "my error" + rs.CommandStatuses = []*CommandStatus{{ + ReferenceName: plumbing.ReferenceName("refs/heads/master"), + Status: "ok", + }, { + ReferenceName: plumbing.ReferenceName("refs/heads/a"), + Status: "command error", + }, { + ReferenceName: plumbing.ReferenceName("refs/heads/b"), + Status: "ok", + }} + + s.testEncodeDecodeOk(c, rs, + "unpack my error", + "ok refs/heads/master", + "ng refs/heads/a command error", + "ok refs/heads/b", + pktline.FlushString, + ) +} + +func (s *ReportStatusSuite) TestEncodeDecodeOkNoReferences(c *C) { + expected := NewReportStatus() + expected.UnpackStatus = "ok" + + s.testEncodeDecodeOk(c, expected, + "unpack ok", + pktline.FlushString, + ) +} + +func (s *ReportStatusSuite) TestEncodeDecodeOkNoReferencesFailed(c *C) { + rs := NewReportStatus() + rs.UnpackStatus = "my error" + + s.testEncodeDecodeOk(c, rs, + "unpack my error", + pktline.FlushString, + ) +} + +func (s *ReportStatusSuite) TestDecodeErrorOneReferenceNoFlush(c *C) { + expected := NewReportStatus() + expected.UnpackStatus = "ok" + expected.CommandStatuses = []*CommandStatus{{ + ReferenceName: plumbing.ReferenceName("refs/heads/master"), + Status: "ok", + }} + + s.testDecodeError(c, "missing flush", + "unpack ok", + "ok refs/heads/master", + ) +} + +func (s *ReportStatusSuite) TestDecodeErrorEmpty(c *C) { + expected := NewReportStatus() + expected.UnpackStatus = "ok" + expected.CommandStatuses = []*CommandStatus{{ + ReferenceName: plumbing.ReferenceName("refs/heads/master"), + Status: "ok", + }} + + s.testDecodeError(c, "unexpected EOF") +} + +func (s *ReportStatusSuite) TestDecodeErrorMalformed(c *C) { + expected := NewReportStatus() + expected.UnpackStatus = "ok" + expected.CommandStatuses = []*CommandStatus{{ + ReferenceName: plumbing.ReferenceName("refs/heads/master"), + Status: "ok", + }} + + s.testDecodeError(c, "malformed unpack status: unpackok", + "unpackok", + pktline.FlushString, + ) +} + +func (s *ReportStatusSuite) TestDecodeErrorMalformed2(c *C) { + expected := NewReportStatus() + expected.UnpackStatus = "ok" + expected.CommandStatuses = []*CommandStatus{{ + ReferenceName: plumbing.ReferenceName("refs/heads/master"), + Status: "ok", + }} + + s.testDecodeError(c, "malformed unpack status: UNPACK OK", + "UNPACK OK", + pktline.FlushString, + ) +} + +func (s *ReportStatusSuite) TestDecodeErrorMalformedCommandStatus(c *C) { + expected := NewReportStatus() + expected.UnpackStatus = "ok" + expected.CommandStatuses = []*CommandStatus{{ + ReferenceName: plumbing.ReferenceName("refs/heads/master"), + Status: "ok", + }} + + s.testDecodeError(c, "malformed command status: ko refs/heads/master", + "unpack ok", + "ko refs/heads/master", + pktline.FlushString, + ) +} + +func (s *ReportStatusSuite) TestDecodeErrorMalformedCommandStatus2(c *C) { + expected := NewReportStatus() + expected.UnpackStatus = "ok" + expected.CommandStatuses = []*CommandStatus{{ + ReferenceName: plumbing.ReferenceName("refs/heads/master"), + Status: "ok", + }} + + s.testDecodeError(c, "malformed command status: ng refs/heads/master", + "unpack ok", + "ng refs/heads/master", + pktline.FlushString, + ) +} + +func (s *ReportStatusSuite) TestDecodeErrorPrematureFlush(c *C) { + expected := NewReportStatus() + expected.UnpackStatus = "ok" + expected.CommandStatuses = []*CommandStatus{{ + ReferenceName: plumbing.ReferenceName("refs/heads/master"), + Status: "ok", + }} + + s.testDecodeError(c, "premature flush", + pktline.FlushString, + ) +} |