aboutsummaryrefslogtreecommitdiff
path: root/src/net/smtp/smtp_test.go
diff options
context:
space:
mode:
authorRob Findley <rfindley@google.com>2020-09-11 14:23:34 -0400
committerRob Findley <rfindley@google.com>2020-09-11 14:23:34 -0400
commitf8b1c17aced24a1618c6984794be9770c5d260be (patch)
tree45af8d39b5c3d9f43d439ebec0a2ba42b49efe70 /src/net/smtp/smtp_test.go
parente5d91ab096a9ff9673311f1a7f3f860a7f9c2062 (diff)
parent07c1788357cfe6a4ee5f6f6a54d4fe9f579fa844 (diff)
downloadgo-f8b1c17aced24a1618c6984794be9770c5d260be.tar.gz
go-f8b1c17aced24a1618c6984794be9770c5d260be.zip
[dev.types] all: merge master into dev.typesdev.types
Change-Id: Ia6964cb4e09153c15cc9c5b441373d1b3cb8f757
Diffstat (limited to 'src/net/smtp/smtp_test.go')
-rw-r--r--src/net/smtp/smtp_test.go213
1 files changed, 213 insertions, 0 deletions
diff --git a/src/net/smtp/smtp_test.go b/src/net/smtp/smtp_test.go
index cfda0790e9..55219372d2 100644
--- a/src/net/smtp/smtp_test.go
+++ b/src/net/smtp/smtp_test.go
@@ -288,6 +288,219 @@ Goodbye.
QUIT
`
+func TestExtensions(t *testing.T) {
+ fake := func(server string) (c *Client, bcmdbuf *bufio.Writer, cmdbuf *strings.Builder) {
+ server = strings.Join(strings.Split(server, "\n"), "\r\n")
+
+ cmdbuf = &strings.Builder{}
+ bcmdbuf = bufio.NewWriter(cmdbuf)
+ var fake faker
+ fake.ReadWriter = bufio.NewReadWriter(bufio.NewReader(strings.NewReader(server)), bcmdbuf)
+ c = &Client{Text: textproto.NewConn(fake), localName: "localhost"}
+
+ return c, bcmdbuf, cmdbuf
+ }
+
+ t.Run("helo", func(t *testing.T) {
+ const (
+ basicServer = `250 mx.google.com at your service
+250 Sender OK
+221 Goodbye
+`
+
+ basicClient = `HELO localhost
+MAIL FROM:<user@gmail.com>
+QUIT
+`
+ )
+
+ c, bcmdbuf, cmdbuf := fake(basicServer)
+
+ if err := c.helo(); err != nil {
+ t.Fatalf("HELO failed: %s", err)
+ }
+ c.didHello = true
+ if err := c.Mail("user@gmail.com"); err != nil {
+ t.Fatalf("MAIL FROM failed: %s", err)
+ }
+ if err := c.Quit(); err != nil {
+ t.Fatalf("QUIT failed: %s", err)
+ }
+
+ bcmdbuf.Flush()
+ actualcmds := cmdbuf.String()
+ client := strings.Join(strings.Split(basicClient, "\n"), "\r\n")
+ if client != actualcmds {
+ t.Fatalf("Got:\n%s\nExpected:\n%s", actualcmds, client)
+ }
+ })
+
+ t.Run("ehlo", func(t *testing.T) {
+ const (
+ basicServer = `250-mx.google.com at your service
+250 SIZE 35651584
+250 Sender OK
+221 Goodbye
+`
+
+ basicClient = `EHLO localhost
+MAIL FROM:<user@gmail.com>
+QUIT
+`
+ )
+
+ c, bcmdbuf, cmdbuf := fake(basicServer)
+
+ if err := c.Hello("localhost"); err != nil {
+ t.Fatalf("EHLO failed: %s", err)
+ }
+ if ok, _ := c.Extension("8BITMIME"); ok {
+ t.Fatalf("Shouldn't support 8BITMIME")
+ }
+ if ok, _ := c.Extension("SMTPUTF8"); ok {
+ t.Fatalf("Shouldn't support SMTPUTF8")
+ }
+ if err := c.Mail("user@gmail.com"); err != nil {
+ t.Fatalf("MAIL FROM failed: %s", err)
+ }
+ if err := c.Quit(); err != nil {
+ t.Fatalf("QUIT failed: %s", err)
+ }
+
+ bcmdbuf.Flush()
+ actualcmds := cmdbuf.String()
+ client := strings.Join(strings.Split(basicClient, "\n"), "\r\n")
+ if client != actualcmds {
+ t.Fatalf("Got:\n%s\nExpected:\n%s", actualcmds, client)
+ }
+ })
+
+ t.Run("ehlo 8bitmime", func(t *testing.T) {
+ const (
+ basicServer = `250-mx.google.com at your service
+250-SIZE 35651584
+250 8BITMIME
+250 Sender OK
+221 Goodbye
+`
+
+ basicClient = `EHLO localhost
+MAIL FROM:<user@gmail.com> BODY=8BITMIME
+QUIT
+`
+ )
+
+ c, bcmdbuf, cmdbuf := fake(basicServer)
+
+ if err := c.Hello("localhost"); err != nil {
+ t.Fatalf("EHLO failed: %s", err)
+ }
+ if ok, _ := c.Extension("8BITMIME"); !ok {
+ t.Fatalf("Should support 8BITMIME")
+ }
+ if ok, _ := c.Extension("SMTPUTF8"); ok {
+ t.Fatalf("Shouldn't support SMTPUTF8")
+ }
+ if err := c.Mail("user@gmail.com"); err != nil {
+ t.Fatalf("MAIL FROM failed: %s", err)
+ }
+ if err := c.Quit(); err != nil {
+ t.Fatalf("QUIT failed: %s", err)
+ }
+
+ bcmdbuf.Flush()
+ actualcmds := cmdbuf.String()
+ client := strings.Join(strings.Split(basicClient, "\n"), "\r\n")
+ if client != actualcmds {
+ t.Fatalf("Got:\n%s\nExpected:\n%s", actualcmds, client)
+ }
+ })
+
+ t.Run("ehlo smtputf8", func(t *testing.T) {
+ const (
+ basicServer = `250-mx.google.com at your service
+250-SIZE 35651584
+250 SMTPUTF8
+250 Sender OK
+221 Goodbye
+`
+
+ basicClient = `EHLO localhost
+MAIL FROM:<user+📧@gmail.com> SMTPUTF8
+QUIT
+`
+ )
+
+ c, bcmdbuf, cmdbuf := fake(basicServer)
+
+ if err := c.Hello("localhost"); err != nil {
+ t.Fatalf("EHLO failed: %s", err)
+ }
+ if ok, _ := c.Extension("8BITMIME"); ok {
+ t.Fatalf("Shouldn't support 8BITMIME")
+ }
+ if ok, _ := c.Extension("SMTPUTF8"); !ok {
+ t.Fatalf("Should support SMTPUTF8")
+ }
+ if err := c.Mail("user+📧@gmail.com"); err != nil {
+ t.Fatalf("MAIL FROM failed: %s", err)
+ }
+ if err := c.Quit(); err != nil {
+ t.Fatalf("QUIT failed: %s", err)
+ }
+
+ bcmdbuf.Flush()
+ actualcmds := cmdbuf.String()
+ client := strings.Join(strings.Split(basicClient, "\n"), "\r\n")
+ if client != actualcmds {
+ t.Fatalf("Got:\n%s\nExpected:\n%s", actualcmds, client)
+ }
+ })
+
+ t.Run("ehlo 8bitmime smtputf8", func(t *testing.T) {
+ const (
+ basicServer = `250-mx.google.com at your service
+250-SIZE 35651584
+250-8BITMIME
+250 SMTPUTF8
+250 Sender OK
+221 Goodbye
+ `
+
+ basicClient = `EHLO localhost
+MAIL FROM:<user+📧@gmail.com> BODY=8BITMIME SMTPUTF8
+QUIT
+`
+ )
+
+ c, bcmdbuf, cmdbuf := fake(basicServer)
+
+ if err := c.Hello("localhost"); err != nil {
+ t.Fatalf("EHLO failed: %s", err)
+ }
+ c.didHello = true
+ if ok, _ := c.Extension("8BITMIME"); !ok {
+ t.Fatalf("Should support 8BITMIME")
+ }
+ if ok, _ := c.Extension("SMTPUTF8"); !ok {
+ t.Fatalf("Should support SMTPUTF8")
+ }
+ if err := c.Mail("user+📧@gmail.com"); err != nil {
+ t.Fatalf("MAIL FROM failed: %s", err)
+ }
+ if err := c.Quit(); err != nil {
+ t.Fatalf("QUIT failed: %s", err)
+ }
+
+ bcmdbuf.Flush()
+ actualcmds := cmdbuf.String()
+ client := strings.Join(strings.Split(basicClient, "\n"), "\r\n")
+ if client != actualcmds {
+ t.Fatalf("Got:\n%s\nExpected:\n%s", actualcmds, client)
+ }
+ })
+}
+
func TestNewClient(t *testing.T) {
server := strings.Join(strings.Split(newClientServer, "\n"), "\r\n")
client := strings.Join(strings.Split(newClientClient, "\n"), "\r\n")