diff --git a/bindata.go b/bindata.go index f4696b1..b1e3966 100644 --- a/bindata.go +++ b/bindata.go @@ -1593,18 +1593,18 @@ type _bintree_t struct { var _bintree = &_bintree_t{nil, map[string]*_bintree_t{ "assets": &_bintree_t{nil, map[string]*_bintree_t{ - "js": &_bintree_t{nil, map[string]*_bintree_t{ - "controllers.js": &_bintree_t{assets_js_controllers_js, map[string]*_bintree_t{}}, - "strutil.js": &_bintree_t{assets_js_strutil_js, map[string]*_bintree_t{}}, - }}, - "templates": &_bintree_t{nil, map[string]*_bintree_t{ - "index.html": &_bintree_t{assets_templates_index_html, map[string]*_bintree_t{}}, - "layout.html": &_bintree_t{assets_templates_layout_html, map[string]*_bintree_t{}}, - }}, "images": &_bintree_t{nil, map[string]*_bintree_t{ "ajax-loader.gif": &_bintree_t{assets_images_ajax_loader_gif, map[string]*_bintree_t{}}, "github.png": &_bintree_t{assets_images_github_png, map[string]*_bintree_t{}}, "hog.png": &_bintree_t{assets_images_hog_png, map[string]*_bintree_t{}}, }}, + "js": &_bintree_t{nil, map[string]*_bintree_t{ + "controllers.js": &_bintree_t{assets_js_controllers_js, map[string]*_bintree_t{}}, + "strutil.js": &_bintree_t{assets_js_strutil_js, map[string]*_bintree_t{}}, + }}, + "templates": &_bintree_t{nil, map[string]*_bintree_t{ + "layout.html": &_bintree_t{assets_templates_layout_html, map[string]*_bintree_t{}}, + "index.html": &_bintree_t{assets_templates_index_html, map[string]*_bintree_t{}}, + }}, }}, }} diff --git a/mailhog/smtp/protocol/reply.go b/mailhog/smtp/protocol/reply.go index 5907ea6..858325e 100644 --- a/mailhog/smtp/protocol/reply.go +++ b/mailhog/smtp/protocol/reply.go @@ -1,9 +1,6 @@ package protocol -import ( - "strconv" - "strings" -) +import "strconv" // http://www.rfc-editor.org/rfc/rfc5321.txt @@ -19,7 +16,7 @@ func (r Reply) Lines() []string { if len(r.lines) == 0 { l := strconv.Itoa(r.Status) - lines = append(lines, l) + lines = append(lines, l+"\n") return lines } @@ -30,8 +27,6 @@ func (r Reply) Lines() []string { } else { l = strconv.Itoa(r.Status) + "-" + line + "\n" } - logText := strings.Replace(l, "\n", "\\n", -1) - logText = strings.Replace(logText, "\r", "\\r", -1) lines = append(lines, l) } diff --git a/mailhog/smtp/protocol/reply_test.go b/mailhog/smtp/protocol/reply_test.go new file mode 100644 index 0000000..1c18fed --- /dev/null +++ b/mailhog/smtp/protocol/reply_test.go @@ -0,0 +1,122 @@ +package protocol + +// http://www.rfc-editor.org/rfc/rfc5321.txt + +import ( + "testing" + + . "github.com/smartystreets/goconvey/convey" +) + +func TestReply(t *testing.T) { + Convey("Reply creates properly formatted responses", t, func() { + r := &Reply{200, []string{}} + l := r.Lines() + So(l[0], ShouldEqual, "200\n") + + r = &Reply{200, []string{"Ok"}} + l = r.Lines() + So(l[0], ShouldEqual, "200 Ok\n") + + r = &Reply{200, []string{"Ok", "Still ok!"}} + l = r.Lines() + So(l[0], ShouldEqual, "200-Ok\n") + So(l[1], ShouldEqual, "200 Still ok!\n") + + r = &Reply{200, []string{"Ok", "Still ok!", "OINK!"}} + l = r.Lines() + So(l[0], ShouldEqual, "200-Ok\n") + So(l[1], ShouldEqual, "200-Still ok!\n") + So(l[2], ShouldEqual, "200 OINK!\n") + }) +} + +func TestBuiltInReplies(t *testing.T) { + Convey("ReplyIdent is correct", t, func() { + r := ReplyIdent("oink") + So(r.Status, ShouldEqual, 220) + So(len(r.lines), ShouldEqual, 1) + So(r.lines[0], ShouldEqual, "oink") + }) + + Convey("ReplyBye is correct", t, func() { + r := ReplyBye() + So(r.Status, ShouldEqual, 221) + So(len(r.lines), ShouldEqual, 1) + So(r.lines[0], ShouldEqual, "Bye") + }) + + Convey("ReplyAuthOk is correct", t, func() { + r := ReplyAuthOk() + So(r.Status, ShouldEqual, 235) + So(len(r.lines), ShouldEqual, 1) + So(r.lines[0], ShouldEqual, "Authentication successful") + }) + + Convey("ReplyOk is correct", t, func() { + r := ReplyOk() + So(r.Status, ShouldEqual, 250) + So(len(r.lines), ShouldEqual, 1) + So(r.lines[0], ShouldEqual, "Ok") + + r = ReplyOk("oink") + So(r.Status, ShouldEqual, 250) + So(len(r.lines), ShouldEqual, 1) + So(r.lines[0], ShouldEqual, "oink") + + r = ReplyOk("mailhog", "OINK!") + So(r.Status, ShouldEqual, 250) + So(len(r.lines), ShouldEqual, 2) + So(r.lines[0], ShouldEqual, "mailhog") + So(r.lines[1], ShouldEqual, "OINK!") + }) + + Convey("ReplySenderOk is correct", t, func() { + r := ReplySenderOk("test") + So(r.Status, ShouldEqual, 250) + So(len(r.lines), ShouldEqual, 1) + So(r.lines[0], ShouldEqual, "Sender test ok") + }) + + Convey("ReplyRecipientOk is correct", t, func() { + r := ReplyRecipientOk("test") + So(r.Status, ShouldEqual, 250) + So(len(r.lines), ShouldEqual, 1) + So(r.lines[0], ShouldEqual, "Recipient test ok") + }) + + Convey("ReplyAuthResponse is correct", t, func() { + r := ReplyAuthResponse("test") + So(r.Status, ShouldEqual, 334) + So(len(r.lines), ShouldEqual, 1) + So(r.lines[0], ShouldEqual, "test") + }) + + Convey("ReplyDataResponse is correct", t, func() { + r := ReplyDataResponse() + So(r.Status, ShouldEqual, 354) + So(len(r.lines), ShouldEqual, 1) + So(r.lines[0], ShouldEqual, "End data with .") + }) + + Convey("ReplyStorageFailed is correct", t, func() { + r := ReplyStorageFailed("test") + So(r.Status, ShouldEqual, 452) + So(len(r.lines), ShouldEqual, 1) + So(r.lines[0], ShouldEqual, "test") + }) + + Convey("ReplyUnrecognisedCommand is correct", t, func() { + r := ReplyUnrecognisedCommand() + So(r.Status, ShouldEqual, 500) + So(len(r.lines), ShouldEqual, 1) + So(r.lines[0], ShouldEqual, "Unrecognised command") + }) + + Convey("ReplyUnsupportedAuth is correct", t, func() { + r := ReplyUnsupportedAuth() + So(r.Status, ShouldEqual, 504) + So(len(r.lines), ShouldEqual, 1) + So(r.lines[0], ShouldEqual, "Unsupported authentication mechanism") + }) +}