aboutsummaryrefslogtreecommitdiffstats
path: root/plumbing/protocol/packp/report_status_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'plumbing/protocol/packp/report_status_test.go')
-rw-r--r--plumbing/protocol/packp/report_status_test.go253
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,
+ )
+}