diff options
author | Carlos Tadeu Panato Junior <ctadeu@gmail.com> | 2017-03-11 23:39:00 +0100 |
---|---|---|
committer | enahum <nahumhbl@gmail.com> | 2017-03-11 19:39:00 -0300 |
commit | 11f1859de12be22726a93bb0fd201f3d692022a0 (patch) | |
tree | ffec8cda431c9682dcad870868fe938861a2dc35 /utils | |
parent | b756ae17c08cebc4a6a0baefc2edf5c4f1cf42cb (diff) | |
download | chat-11f1859de12be22726a93bb0fd201f3d692022a0.tar.gz chat-11f1859de12be22726a93bb0fd201f3d692022a0.tar.bz2 chat-11f1859de12be22726a93bb0fd201f3d692022a0.zip |
improvements for inbucket email test and re-enable Email mention test (#5647)
Now if we dont get the mailbox to check the email we try 5 times, if
still no message we disable the email verification.
Diffstat (limited to 'utils')
-rw-r--r-- | utils/inbucket.go | 38 | ||||
-rw-r--r-- | utils/mail_test.go | 26 |
2 files changed, 53 insertions, 11 deletions
diff --git a/utils/inbucket.go b/utils/inbucket.go index 1c747cee8..f80d16efd 100644 --- a/utils/inbucket.go +++ b/utils/inbucket.go @@ -3,8 +3,10 @@ package utils import ( "encoding/json" "fmt" + "io" "net/http" "strings" + "time" ) const ( @@ -58,11 +60,22 @@ func GetMailBox(email string) (results JSONMessageHeaderInbucket, err error) { } defer resp.Body.Close() + if resp.Body == nil { + return nil, fmt.Errorf("No Mailbox") + } + var record JSONMessageHeaderInbucket - if err := json.NewDecoder(resp.Body).Decode(&record); err != nil { - fmt.Println(err) - return nil, err + err = json.NewDecoder(resp.Body).Decode(&record) + switch { + case err == io.EOF: + return nil, fmt.Errorf("Error: %s", err) + case err != nil: + return nil, fmt.Errorf("Error: %s", err) + } + if len(record) == 0 { + return nil, fmt.Errorf("No mailbox") } + return record, nil } @@ -87,7 +100,6 @@ func GetMessageFromMailbox(email, id string) (results JSONMessageInbucket, err e defer resp.Body.Close() if err := json.NewDecoder(resp.Body).Decode(&record); err != nil { - fmt.Println(err) return record, err } return record, nil @@ -113,3 +125,21 @@ func DeleteMailBox(email string) (err error) { return nil } + +func RetryInbucket(attempts int, callback func() error) (err error) { + for i := 0; ; i++ { + err = callback() + if err == nil { + return nil + } + + if i >= (attempts - 1) { + break + } + + time.Sleep(5 * time.Second) + + fmt.Println("retrying...") + } + return fmt.Errorf("After %d attempts, last error: %s", attempts, err) +} diff --git a/utils/mail_test.go b/utils/mail_test.go index 012f10d39..523ca0ba5 100644 --- a/utils/mail_test.go +++ b/utils/mail_test.go @@ -47,13 +47,25 @@ func TestSendMail(t *testing.T) { t.Fatal("Should connect to the STMP Server") } else { //Check if the email was send to the rigth email address - if resultsMailbox, err := GetMailBox(emailTo); err != nil && !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") + 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") + } } } } |