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)