Skip to content

Commit 0c2d89b

Browse files
authored
Merge pull request #503 from wneessen/bugfix/fix-long-msg-id-fail-on-macos
Refactored test and validation logic for message content checks
2 parents 08917c9 + 475b8ce commit 0c2d89b

File tree

2 files changed

+45
-46
lines changed

2 files changed

+45
-46
lines changed

msg_test.go

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6675,8 +6675,7 @@ func TestMsg_WriteTo(t *testing.T) {
66756675
wants := []msgContentTest{
66766676
{0, "Date:", false, true, false},
66776677
{1, "MIME-Version: 1.0", true, true, false},
6678-
{2, "Message-ID: <", false, true, false},
6679-
{2, ">", false, false, true},
6678+
{2, "Message-ID:", false, true, false},
66806679
{8, "Content-Type: multipart/mixed;", true, true, false},
66816680
{9, " boundary=", false, true, false},
66826681
{10, "", true, false, false},
@@ -6706,8 +6705,7 @@ func TestMsg_WriteTo(t *testing.T) {
67066705
wants := []msgContentTest{
67076706
{0, "Date:", false, true, false},
67086707
{1, "MIME-Version: 1.0", true, true, false},
6709-
{2, "Message-ID: <", false, true, false},
6710-
{2, ">", false, false, true},
6708+
{2, "Message-ID:", false, true, false},
67116709
{8, "Content-Type: multipart/alternative;", true, true, false},
67126710
{9, " boundary=", false, true, false},
67136711
{10, "", true, false, false},
@@ -6746,8 +6744,7 @@ func TestMsg_WriteTo(t *testing.T) {
67466744
wants := []msgContentTest{
67476745
{0, "Date:", false, true, false},
67486746
{1, "MIME-Version: 1.0", true, true, false},
6749-
{2, "Message-ID: <", false, true, false},
6750-
{2, ">", false, false, true},
6747+
{2, "Message-ID:", false, true, false},
67516748
{8, "Content-Type: multipart/alternative;", true, true, false},
67526749
{9, " boundary=", false, true, false},
67536750
{10, "", true, false, false},
@@ -6781,8 +6778,7 @@ func TestMsg_WriteTo(t *testing.T) {
67816778
wants := []msgContentTest{
67826779
{0, "Date:", false, true, false},
67836780
{1, "MIME-Version: 1.0", true, true, false},
6784-
{2, "Message-ID: <", false, true, false},
6785-
{2, ">", false, false, true},
6781+
{2, "Message-ID:", false, true, false},
67866782
{6, "From: <valid-from@domain.tld>", true, true, false},
67876783
{7, "To: <valid-to@domain.tld>", true, true, false},
67886784
{8, `Content-Type: multipart/mixed;`, true, true, false},
@@ -6852,8 +6848,7 @@ func TestMsg_WriteTo(t *testing.T) {
68526848
wants := []msgContentTest{
68536849
{0, "Date:", false, true, false},
68546850
{1, "MIME-Version: 1.0", true, true, false},
6855-
{2, "Message-ID: <", false, true, false},
6856-
{2, ">", false, false, true},
6851+
{2, "Message-ID:", false, true, false},
68576852
{6, "From: <valid-from@domain.tld>", true, true, false},
68586853
{7, "To: <valid-to@domain.tld>", true, true, false},
68596854
{
@@ -8188,28 +8183,41 @@ func hasSendmail() bool {
81888183

81898184
func checkMessageContent(t *testing.T, buffer *bytes.Buffer, wants []msgContentTest) {
81908185
t.Helper()
8186+
longMsgID := false
8187+
addAfterLine := 0
81918188
lines := strings.Split(buffer.String(), "\r\n")
8189+
for i := range lines {
8190+
if strings.EqualFold(lines[i], "Message-ID:") {
8191+
longMsgID = true
8192+
addAfterLine = i
8193+
}
8194+
}
8195+
81928196
for _, want := range wants {
8197+
addLine := 0
8198+
if longMsgID && want.line > addAfterLine {
8199+
addLine = 1
8200+
}
81938201
if len(lines) <= want.line {
81948202
t.Errorf("expected line %d to be present, got: %d lines in total", want.line, len(lines)-1)
81958203
continue
81968204
}
8197-
if !strings.Contains(lines[want.line], want.data) {
8198-
t.Errorf("expected line %d to contain %q, got: %q", want.line, want.data, lines[want.line])
8205+
if !strings.Contains(lines[want.line+addLine], want.data) {
8206+
t.Errorf("expected line %d to contain %q, got: %q", want.line, want.data, lines[want.line+addLine])
81998207
}
82008208
if want.exact {
8201-
if !strings.EqualFold(lines[want.line], want.data) {
8202-
t.Errorf("expected line %d to be exactly %q, got: %q", want.line, want.data, lines[want.line])
8209+
if !strings.EqualFold(lines[want.line+addLine], want.data) {
8210+
t.Errorf("expected line %d to be exactly %q, got: %q", want.line, want.data, lines[want.line+addLine])
82038211
}
82048212
}
82058213
if want.dataIsPrefix {
8206-
if !strings.HasPrefix(lines[want.line], want.data) {
8207-
t.Errorf("expected line %d to start with %q, got: %q", want.line, want.data, lines[want.line])
8214+
if !strings.HasPrefix(lines[want.line+addLine], want.data) {
8215+
t.Errorf("expected line %d to start with %q, got: %q", want.line, want.data, lines[want.line+addLine])
82088216
}
82098217
}
82108218
if want.dataIsSuffix {
8211-
if !strings.HasSuffix(lines[want.line], want.data) {
8212-
t.Errorf("expected line %d to end with %q, got: %q", want.line, want.data, lines[want.line])
8219+
if !strings.HasSuffix(lines[want.line+addLine], want.data) {
8220+
t.Errorf("expected line %d to end with %q, got: %q", want.line, want.data, lines[want.line+addLine])
82138221
}
82148222
}
82158223
}

quicksend_test.go

Lines changed: 19 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -145,36 +145,27 @@ func TestQuickSend(t *testing.T) {
145145
t.Fatalf("failed to send email: %s", err)
146146
}
147147

148+
wants := []msgContentTest{
149+
{8, "STARTTLS", true, true, false},
150+
{17, "AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk", true, true, false},
151+
{21, "MAIL FROM:<valid-from@domain.tld> BODY=8BITMIME SMTPUTF8", true, true, false},
152+
{23, "RCPT TO:<valid-to@domain.tld>", true, true, false},
153+
{25, "RCPT TO:<valid-to@domain.tld>", true, true, false},
154+
{27, "RCPT TO:<valid-to@domain.tld>", true, true, false},
155+
{34, "Subject: " + subject, true, true, false},
156+
{37, "From: <valid-from@domain.tld>", true, true, false},
157+
{38, "To: <valid-to@domain.tld>, <valid-to@domain.tld>, <valid-to@domain.tld>", true, true, false},
158+
{39, "Content-Transfer-Encoding: quoted-printable", true, true, false},
159+
{40, "Content-Type: text/plain; charset=UTF-8", true, true, false},
160+
{42, "This is a test body", true, true, false},
161+
{43, "With multiple lines", true, true, false},
162+
{44, "", true, true, false},
163+
{45, "Best,", true, true, false},
164+
{46, " The go-mail team", true, true, false},
165+
}
148166
props.BufferMutex.RLock()
149-
resp := strings.Split(echoBuffer.String(), "\r\n")
167+
checkMessageContent(t, echoBuffer, wants)
150168
props.BufferMutex.RUnlock()
151-
152-
expects := []struct {
153-
line int
154-
data string
155-
}{
156-
{8, "STARTTLS"},
157-
{17, "AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk"},
158-
{21, "MAIL FROM:<valid-from@domain.tld> BODY=8BITMIME SMTPUTF8"},
159-
{23, "RCPT TO:<valid-to@domain.tld>"},
160-
{25, "RCPT TO:<valid-to@domain.tld>"},
161-
{27, "RCPT TO:<valid-to@domain.tld>"},
162-
{34, "Subject: " + subject},
163-
{37, "From: <valid-from@domain.tld>"},
164-
{38, "To: <valid-to@domain.tld>, <valid-to@domain.tld>, <valid-to@domain.tld>"},
165-
{39, "Content-Transfer-Encoding: quoted-printable"},
166-
{40, "Content-Type: text/plain; charset=UTF-8"},
167-
{42, "This is a test body"},
168-
{43, "With multiple lines"},
169-
{44, ""},
170-
{45, "Best,"},
171-
{46, " The go-mail team"},
172-
}
173-
for _, expect := range expects {
174-
if !strings.EqualFold(resp[expect.line], expect.data) {
175-
t.Errorf("expected %q at line %d, got: %q", expect.data, expect.line, resp[expect.line])
176-
}
177-
}
178169
})
179170
t.Run("QuickSend uses stronged authentication method", func(t *testing.T) {
180171
ctxAuth, cancelAuth := context.WithCancel(context.Background())

0 commit comments

Comments
 (0)