]>
src.bluestatic.org Git - mailpopbox.git/blob - pop3_test.go
2 // Copyright 2020 Blue Static <https://www.bluestatic.org>
3 // This program is free software licensed under the GNU General Public License,
4 // version 3.0. The full text of the license can be found in LICENSE.txt.
5 // SPDX-License-Identifier: GPL-3.0-only
19 func TestReset(t
*testing
.T
) {
22 {"msg1", 1, 4, false},
23 {"msg2", 2, 4, false},
27 msg
:= mbox
.GetMessage(1)
29 t
.Errorf("failed to GetMessage #1")
33 t
.Errorf("message %v should not be deleted", msg
)
36 if err
:= mbox
.Delete(msg
); err
!= nil {
41 t
.Errorf("message %v should be deleted", msg
)
47 t
.Errorf("reset did not un-delete message %v", msg
)
51 func TestOpenMailboxAuth(t
*testing
.T
) {
52 dir
, err
:= ioutil
.TempDir("", "maildrop")
54 t
.Errorf("Failed to create temp dir: %v", err
)
57 defer os
.RemoveAll(dir
)
63 Domain
: "example.com",
64 MailboxPassword
: "letmein",
69 MailboxPassword
: "open-sesame",
81 {"mailbox@example.com", "letmein", true},
82 {"mailbox@test.net", "open-sesame", true},
83 {"mailbox@example.com", "open-sesame", false},
84 {"test@test.net", "open-sesame", false},
85 {"mailbox@an-example.net", "letmein", false},
87 for i
, c
:= range cases
{
88 mb
, err
:= s
.OpenMailbox(c
.user
, c
.pass
)
89 got
:= (mb
!= nil && err
== nil)
91 t
.Errorf("Expected error=%v for case %d (%#v), got %v (error=%v, mb=%v)", c
.ok
, i
, c
, got
, err
, mb
)
96 func TestBasicListener(t
*testing
.T
) {
97 dir
, err
:= ioutil
.TempDir("", "maildrop")
99 t
.Errorf("Failed to create temp dir: %v", err
)
102 defer os
.RemoveAll(dir
)
107 Hostname
: "example.com",
110 Domain
: "example.com",
120 conn
, err
:= textproto
.Dial("tcp", "localhost:9648")
122 t
.Errorf("Failed to dial test server: %v", err
)
126 _
, err
= conn
.ReadLine()
128 t
.Errorf("Failed to read line: %v", err
)
133 func TestMailbox(t
*testing
.T
) {
134 dir
, err
:= ioutil
.TempDir("", "maildrop")
136 t
.Errorf("Failed to create temp dir: %v", err
)
139 defer os
.RemoveAll(dir
)
141 // Create the first message.
142 f
, err
:= os
.Create(filepath
.Join(dir
, "a.msg"))
144 t
.Errorf("Failed to create a.msg: %v", err
)
147 for i
:= 0; i
< 1024*10; i
++ {
149 _
, err
= f
.Write(buf
)
151 t
.Errorf("Failed to write a.msg: %v", err
)
156 // Create the second message.
157 f
, err
= os
.Create(filepath
.Join(dir
, "b.msg"))
159 t
.Errorf("Failed to create b.msg: %v", err
)
162 for i
:= 0; i
< 1024*3; i
++ {
164 _
, err
= f
.Write(buf
)
166 t
.Errorf("Failed to write z.msg: %v", err
)
175 Domain
: "example.com",
176 MailboxPassword
: "letmein",
184 // Test message metadata.
185 mb
, err
:= s
.OpenMailbox("mailbox@example.com", "letmein")
187 t
.Errorf("Failed to open mailbox: %v", err
)
190 msgs
, err
:= mb
.ListMessages()
192 t
.Errorf("Failed to list messages: %v", err
)
195 if want
, got
:= 2, len(msgs
); want
!= got
{
196 t
.Errorf("Want %d messages, got %d", want
, got
)
199 if mb
.GetMessage(0) != nil {
200 t
.Errorf("Messages should be 1-indexed")
202 if mb
.GetMessage(3) != nil {
203 t
.Errorf("Retreived unexpected message")
206 if msgs
[0] != mb
.GetMessage(msgs
[0].ID()) {
207 t
.Errorf("Failed to look up message by ID")
210 if want
, got
:= "a", msgs
[0].UniqueID(); want
!= got
{
211 t
.Errorf("Want message #1 unique ID to be %s, got %s", want
, got
)
213 if want
, got
:= 1024*10, msgs
[0].Size(); want
!= got
{
214 t
.Errorf("Want message #1 size to be %v, got %v", want
, got
)
217 if want
, got
:= "b", msgs
[1].UniqueID(); want
!= got
{
218 t
.Errorf("Want message #2 unique ID to be %s, got %s", want
, got
)
220 if want
, got
:= 1024*3, msgs
[1].Size(); want
!= got
{
221 t
.Errorf("Want message #2 size to be %v, got %v", want
, got
)
224 // Test message contents.
225 rc
, err
:= mb
.Retrieve(msgs
[0])
227 t
.Errorf("Failed to retrieve message: %v", err
)
231 // Test deletion marking and reset.
232 err
= mb
.Delete(msgs
[1])
234 t
.Errorf("Failed to mark message #2 for deletion: %v", err
)
237 if !msgs
[1].Deleted() {
238 t
.Errorf("Message should be marked for deletion and isn't")
243 if msgs
[1].Deleted() {
244 t
.Errorf("Message is marked for deletion and shouldn't be")
247 // Test deletion for real.
248 err
= mb
.Delete(msgs
[0])
250 t
.Errorf("Failed to mark message for deletion: %v", err
)
255 t
.Errorf("Failed to close mailbox: %v", err
)
258 mb
, err
= s
.OpenMailbox("mailbox@example.com", "letmein")
260 t
.Errorf("Failed to re-open mailbox: %v", err
)
263 msgs
, err
= mb
.ListMessages()
265 t
.Errorf("Failed to list messages: %v", err
)
268 if want
, got
:= 1, len(msgs
); want
!= got
{
269 t
.Errorf("Number of messages should be %d, got %d", want
, got
)
272 if want
, got
:= "b", msgs
[0].UniqueID(); want
!= got
{
273 t
.Errorf("Message Unique ID should be %s, got %s", want
, got
)