internal/inbound/inbound_test.go (view raw)
1package inbound
2
3import (
4 "log/slog"
5 "os"
6 "testing"
7
8 "postern/internal/db"
9 "postern/internal/model"
10)
11
12func TestInboundRCPTTO(t *testing.T) {
13 pdb, err := os.CreateTemp(t.TempDir(), "postern.db")
14 if err != nil {
15 t.Fatal(err)
16 }
17
18 d, err := db.OpenDB(&db.Config{DBPath: pdb.Name()})
19 if err != nil {
20 t.Fatal(err)
21 }
22
23 s := &smtpSession{
24 db: d,
25 }
26
27 rcptUser := "testuser"
28
29 tx, err := d.GetWriteTx(t.Context())
30 if err != nil {
31 t.Fatal(err)
32 }
33 _, err = db.InsertUser(t.Context(), tx, rcptUser, []byte{})
34 if err != nil {
35 t.Fatal(err)
36 }
37 err = tx.Commit()
38 if err != nil {
39 t.Fatal(err)
40 }
41
42 err = d.InsertUserAddress(t.Context(), rcptUser, "testuser@example.com")
43 if err != nil {
44 t.Fatal(err)
45 }
46
47 s.authenticatedUser = &model.SMTPAuth{
48 ID: 1,
49 Name: "smtpuser",
50 }
51 s.logger = slog.Default()
52
53 // Test "+" addresses
54 err = s.Rcpt("testuser+tag+two@example.com", nil)
55 if err != nil {
56 t.Fatal(err)
57 }
58
59 // provoke non existing user
60 err = s.Rcpt("notexist+tag+two@example.com", nil)
61 if err == nil {
62 t.Fatal("expected 550 error, got nil")
63 }
64}