summaryrefslogtreecommitdiffstats
path: root/utils/mail_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'utils/mail_test.go')
-rw-r--r--utils/mail_test.go288
1 files changed, 0 insertions, 288 deletions
diff --git a/utils/mail_test.go b/utils/mail_test.go
deleted file mode 100644
index 4cb2d7594..000000000
--- a/utils/mail_test.go
+++ /dev/null
@@ -1,288 +0,0 @@
-// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved.
-// See License.txt for license information.
-
-package utils
-
-import (
- "bytes"
- "fmt"
- "strings"
- "testing"
-
- "net/mail"
- "net/smtp"
-
- "github.com/mattermost/mattermost-server/model"
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
-)
-
-func TestMailConnectionFromConfig(t *testing.T) {
- cfg, _, _, err := LoadConfig("config.json")
- require.Nil(t, err)
-
- if conn, err := ConnectToSMTPServer(cfg); err != nil {
- t.Log(err)
- t.Fatal("Should connect to the STMP Server")
- } else {
- if _, err1 := NewSMTPClient(conn, cfg); err1 != nil {
- t.Log(err)
- t.Fatal("Should get new smtp client")
- }
- }
-
- cfg.EmailSettings.SMTPServer = "wrongServer"
- cfg.EmailSettings.SMTPPort = "553"
-
- if _, err := ConnectToSMTPServer(cfg); err == nil {
- t.Log(err)
- t.Fatal("Should not to the STMP Server")
- }
-}
-
-func TestMailConnectionAdvanced(t *testing.T) {
- cfg, _, _, err := LoadConfig("config.json")
- require.Nil(t, err)
-
- if conn, err := ConnectToSMTPServerAdvanced(
- &SmtpConnectionInfo{
- ConnectionSecurity: cfg.EmailSettings.ConnectionSecurity,
- SkipCertVerification: *cfg.EmailSettings.SkipServerCertificateVerification,
- SmtpServerName: cfg.EmailSettings.SMTPServer,
- SmtpServerHost: cfg.EmailSettings.SMTPServer,
- SmtpPort: cfg.EmailSettings.SMTPPort,
- },
- ); err != nil {
- t.Log(err)
- t.Fatal("Should connect to the STMP Server")
- } else {
- if _, err1 := NewSMTPClientAdvanced(
- conn,
- GetHostnameFromSiteURL(*cfg.ServiceSettings.SiteURL),
- &SmtpConnectionInfo{
- ConnectionSecurity: cfg.EmailSettings.ConnectionSecurity,
- SkipCertVerification: *cfg.EmailSettings.SkipServerCertificateVerification,
- SmtpServerName: cfg.EmailSettings.SMTPServer,
- SmtpServerHost: cfg.EmailSettings.SMTPServer,
- SmtpPort: cfg.EmailSettings.SMTPPort,
- Auth: *cfg.EmailSettings.EnableSMTPAuth,
- SmtpUsername: cfg.EmailSettings.SMTPUsername,
- SmtpPassword: cfg.EmailSettings.SMTPPassword,
- },
- ); err1 != nil {
- t.Log(err)
- t.Fatal("Should get new smtp client")
- }
- }
-
- if _, err := ConnectToSMTPServerAdvanced(
- &SmtpConnectionInfo{
- ConnectionSecurity: cfg.EmailSettings.ConnectionSecurity,
- SkipCertVerification: *cfg.EmailSettings.SkipServerCertificateVerification,
- SmtpServerName: "wrongServer",
- SmtpServerHost: "wrongServer",
- SmtpPort: "553",
- },
- ); err == nil {
- t.Log(err)
- t.Fatal("Should not to the STMP Server")
- }
-
-}
-
-func TestSendMailUsingConfig(t *testing.T) {
- cfg, _, _, err := LoadConfig("config.json")
- require.Nil(t, err)
- T = GetUserTranslations("en")
-
- var emailTo = "test@example.com"
- var emailSubject = "Testing this email"
- var emailBody = "This is a test from autobot"
-
- //Delete all the messages before check the sample email
- DeleteMailBox(emailTo)
-
- if err := SendMailUsingConfig(emailTo, emailSubject, emailBody, cfg, true); err != nil {
- t.Log(err)
- t.Fatal("Should connect to the STMP Server")
- } else {
- //Check if the email was send to the right email address
- var resultsMailbox JSONMessageHeaderInbucket
- err := RetryInbucket(5, func() error {
- var err error
- resultsMailbox, err = GetMailBox(emailTo)
- return err
- })
- if err != nil {
- t.Log(err)
- t.Log("No email was received, maybe due load on the server. Disabling this verification")
- }
- if err == nil && len(resultsMailbox) > 0 {
- if !strings.ContainsAny(resultsMailbox[0].To[0], emailTo) {
- t.Fatal("Wrong To recipient")
- } else {
- if resultsEmail, err := GetMessageFromMailbox(emailTo, resultsMailbox[0].ID); err == nil {
- if !strings.Contains(resultsEmail.Body.Text, emailBody) {
- t.Log(resultsEmail.Body.Text)
- t.Fatal("Received message")
- }
- }
- }
- }
- }
-}
-
-func TestSendMailUsingConfigAdvanced(t *testing.T) {
- cfg, _, _, err := LoadConfig("config.json")
- require.Nil(t, err)
- T = GetUserTranslations("en")
-
- var mimeTo = "test@example.com"
- var smtpTo = "test2@example.com"
- var from = mail.Address{Name: "Nobody", Address: "nobody@mattermost.com"}
- var emailSubject = "Testing this email"
- var emailBody = "This is a test from autobot"
-
- //Delete all the messages before check the sample email
- DeleteMailBox(smtpTo)
-
- fileBackend, err := NewFileBackend(&cfg.FileSettings, true)
- assert.Nil(t, err)
-
- // create two files with the same name that will both be attached to the email
- fileName := "file.txt"
- filePath1 := fmt.Sprintf("test1/%s", fileName)
- filePath2 := fmt.Sprintf("test2/%s", fileName)
- fileContents1 := []byte("hello world")
- fileContents2 := []byte("foo bar")
- _, err = fileBackend.WriteFile(bytes.NewReader(fileContents1), filePath1)
- assert.Nil(t, err)
- _, err = fileBackend.WriteFile(bytes.NewReader(fileContents2), filePath2)
- assert.Nil(t, err)
- defer fileBackend.RemoveFile(filePath1)
- defer fileBackend.RemoveFile(filePath2)
-
- attachments := make([]*model.FileInfo, 2)
- attachments[0] = &model.FileInfo{
- Name: fileName,
- Path: filePath1,
- }
- attachments[1] = &model.FileInfo{
- Name: fileName,
- Path: filePath2,
- }
-
- headers := make(map[string]string)
- headers["TestHeader"] = "TestValue"
-
- if err := SendMailUsingConfigAdvanced(mimeTo, smtpTo, from, emailSubject, emailBody, attachments, headers, cfg, true); err != nil {
- t.Log(err)
- t.Fatal("Should connect to the STMP Server")
- } else {
- //Check if the email was send to the right email address
- var resultsMailbox JSONMessageHeaderInbucket
- err := RetryInbucket(5, func() error {
- var err error
- resultsMailbox, err = GetMailBox(smtpTo)
- return err
- })
- if err != nil {
- t.Log(err)
- t.Fatal("No emails found for address " + smtpTo)
- }
- if err == nil && len(resultsMailbox) > 0 {
- if !strings.ContainsAny(resultsMailbox[0].To[0], smtpTo) {
- t.Fatal("Wrong To recipient")
- } else {
- if resultsEmail, err := GetMessageFromMailbox(smtpTo, resultsMailbox[0].ID); err == nil {
- if !strings.Contains(resultsEmail.Body.Text, emailBody) {
- t.Log(resultsEmail.Body.Text)
- t.Fatal("Received message")
- }
-
- // verify that the To header of the email message is set to the MIME recipient, even though we got it out of the SMTP recipient's email inbox
- assert.Equal(t, mimeTo, resultsEmail.Header["To"][0])
-
- // verify that the MIME from address is correct - unfortunately, we can't verify the SMTP from address
- assert.Equal(t, from.String(), resultsEmail.Header["From"][0])
-
- // check that the custom mime headers came through - header case seems to get mutated
- assert.Equal(t, "TestValue", resultsEmail.Header["Testheader"][0])
-
- // ensure that the attachments were successfully sent
- assert.Len(t, resultsEmail.Attachments, 2)
- assert.Equal(t, fileName, resultsEmail.Attachments[0].Filename)
- assert.Equal(t, fileName, resultsEmail.Attachments[1].Filename)
- attachment1 := string(resultsEmail.Attachments[0].Bytes)
- attachment2 := string(resultsEmail.Attachments[1].Bytes)
- if attachment1 == string(fileContents1) {
- assert.Equal(t, attachment2, string(fileContents2))
- } else if attachment1 == string(fileContents2) {
- assert.Equal(t, attachment2, string(fileContents1))
- } else {
- assert.Fail(t, "Unrecognized attachment contents")
- }
- }
- }
- }
- }
-}
-
-func TestAuthMethods(t *testing.T) {
- auth := &authChooser{
- connectionInfo: &SmtpConnectionInfo{
- SmtpUsername: "test",
- SmtpPassword: "fakepass",
- SmtpServerName: "fakeserver",
- SmtpServerHost: "fakeserver",
- SmtpPort: "25",
- },
- }
- tests := []struct {
- desc string
- server *smtp.ServerInfo
- err string
- }{
- {
- desc: "auth PLAIN success",
- server: &smtp.ServerInfo{Name: "fakeserver:25", Auth: []string{"PLAIN"}, TLS: true},
- },
- {
- desc: "auth PLAIN unencrypted connection fail",
- server: &smtp.ServerInfo{Name: "fakeserver:25", Auth: []string{"PLAIN"}, TLS: false},
- err: "unencrypted connection",
- },
- {
- desc: "auth PLAIN wrong host name",
- server: &smtp.ServerInfo{Name: "wrongServer:999", Auth: []string{"PLAIN"}, TLS: true},
- err: "wrong host name",
- },
- {
- desc: "auth LOGIN success",
- server: &smtp.ServerInfo{Name: "fakeserver:25", Auth: []string{"LOGIN"}, TLS: true},
- },
- {
- desc: "auth LOGIN unencrypted connection fail",
- server: &smtp.ServerInfo{Name: "wrongServer:999", Auth: []string{"LOGIN"}, TLS: true},
- err: "wrong host name",
- },
- {
- desc: "auth LOGIN wrong host name",
- server: &smtp.ServerInfo{Name: "fakeserver:25", Auth: []string{"LOGIN"}, TLS: false},
- err: "unencrypted connection",
- },
- }
-
- for i, test := range tests {
- t.Run(test.desc, func(t *testing.T) {
- _, _, err := auth.Start(test.server)
- got := ""
- if err != nil {
- got = err.Error()
- }
- if got != test.err {
- t.Errorf("%d. got error = %q; want %q", i, got, test.err)
- }
- })
- }
-}