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 actual := (mb != nil && err == nil)
91 t.Errorf("Expected error=%v for case %d (%#v), got %v (error=%v, mb=%v)", c.ok, i, c, actual, 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\n", 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)
196 t.Errorf("Expected 2 messages, got %d", len(msgs))
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 msgs[0].UniqueID() != "a" {
211 t.Errorf("Expected message #1 unique ID to be a, got %s", msgs[0].UniqueID())
213 expectedSize := 1024 * 10
214 if msgs[0].Size() != expectedSize {
215 t.Errorf("Expected message #1 size to be %v, got %v", expectedSize, msgs[0].Size())
218 if msgs[1].UniqueID() != "b" {
219 t.Errorf("Expected message #2 unique ID to be b, got %s", msgs[0].UniqueID())
221 expectedSize = 1024 * 3
222 if msgs[1].Size() != expectedSize {
223 t.Errorf("Expected message #2 size to be %v, got %v", expectedSize, msgs[0].Size())
226 // Test message contents.
227 rc, err := mb.Retrieve(msgs[0])
229 t.Errorf("Failed to retrieve message: %v", err)
233 // Test deletion marking and reset.
234 err = mb.Delete(msgs[1])
236 t.Errorf("Failed to mark message #2 for deletion: %v", err)
239 if !msgs[1].Deleted() {
240 t.Errorf("Message should be marked for deletion and isn't")
245 if msgs[1].Deleted() {
246 t.Errorf("Message is marked for deletion and shouldn't be")
249 // Test deletion for real.
250 err = mb.Delete(msgs[0])
252 t.Errorf("Failed to mark message for deletion: %v", err)
257 t.Errorf("Failed to close mailbox: %v", err)
260 mb, err = s.OpenMailbox("mailbox@example.com", "letmein")
262 t.Errorf("Failed to re-open mailbox: %v", err)
265 msgs, err = mb.ListMessages()
267 t.Errorf("Failed to list messages: %v", err)
271 t.Errorf("Number of messages should be 1, got %d", len(msgs))
274 if msgs[0].UniqueID() != "b" {
275 t.Errorf("Message Unique ID should be b, got %s", msgs[0].UniqueID())