Add missing wlocks around message delivery to account, mostly for tests.

This commit is contained in:
Mechiel Lukkien 2025-03-03 23:59:43 +01:00
parent 2da280f2bb
commit 684c716e4d
No known key found for this signature in database
7 changed files with 50 additions and 37 deletions

View File

@ -450,8 +450,11 @@ func TestCtl(t *testing.T) {
defer msgf.Close()
_, err = msgf.Write(content)
tcheck(t, err, "write message file")
err = acc.DeliverMailbox(ctl.log, "Inbox", m, msgf)
tcheck(t, err, "deliver message")
acc.WithWLock(func() {
err = acc.DeliverMailbox(ctl.log, "Inbox", m, msgf)
tcheck(t, err, "deliver message")
})
}
var msgBadSize store.Message

View File

@ -293,6 +293,8 @@ func TestAuthenticateTLSClientCert(t *testing.T) {
tcheck(t, err, "open account")
err = acc.SetPassword(pkglog, "test1234")
tcheck(t, err, "set password")
err = acc.Close()
tcheck(t, err, "close account")
tc = startArgsMore(t, true, true, nil, &clientConfig, false, true, true, "mjl", addClientCert)
tc.transactf("no", "authenticate plain %s", base64.StdEncoding.EncodeToString([]byte("\u0000other@mox.example\u0000test1234")))
tc.close()

View File

@ -646,10 +646,11 @@ func tinsertmsg(t *testing.T, acc *store.Account, mailbox string, m *store.Messa
defer mf.Close()
_, err = mf.Write([]byte(msg))
tcheck(t, err, "write message")
err = acc.DeliverMailbox(pkglog, mailbox, m, mf)
tcheck(t, err, "deliver message")
err = mf.Close()
tcheck(t, err, "close message")
acc.WithWLock(func() {
err = acc.DeliverMailbox(pkglog, mailbox, m, mf)
tcheck(t, err, "deliver message")
})
}
func tretrain(t *testing.T, acc *store.Account) {

View File

@ -41,13 +41,15 @@ func TestExport(t *testing.T) {
_, err = msgFile.Write([]byte(msg))
tcheck(t, err, "write message")
m := Message{Received: time.Now(), Size: int64(len(msg))}
err = acc.DeliverMailbox(pkglog, "Inbox", &m, msgFile)
tcheck(t, err, "deliver")
acc.WithWLock(func() {
m := Message{Received: time.Now(), Size: int64(len(msg))}
err = acc.DeliverMailbox(pkglog, "Inbox", &m, msgFile)
tcheck(t, err, "deliver")
m = Message{Received: time.Now(), Size: int64(len(msg))}
err = acc.DeliverMailbox(pkglog, "Trash", &m, msgFile)
tcheck(t, err, "deliver")
m = Message{Received: time.Now(), Size: int64(len(msg))}
err = acc.DeliverMailbox(pkglog, "Trash", &m, msgFile)
tcheck(t, err, "deliver")
})
var maildirZip, maildirTar, mboxZip, mboxTar bytes.Buffer

View File

@ -42,8 +42,11 @@ func TestThreadingUpgrade(t *testing.T) {
MsgPrefix: []byte(s),
Received: recv,
}
err = acc.DeliverMailbox(log, "Inbox", &m, f)
tcheck(t, err, "deliver")
acc.WithWLock(func() {
err = acc.DeliverMailbox(log, "Inbox", &m, f)
tcheck(t, err, "deliver")
})
if expThreadID == 0 {
expThreadID = m.ID
}

View File

@ -264,28 +264,30 @@ type testmsg struct {
}
func tdeliver(t *testing.T, acc *store.Account, tm *testmsg) {
msgFile, err := store.CreateMessageTemp(pkglog, "webmail-test")
tcheck(t, err, "create message temp")
defer os.Remove(msgFile.Name())
defer msgFile.Close()
size, err := msgFile.Write(tm.msg.Marshal(t))
tcheck(t, err, "write message temp")
m := store.Message{
Flags: tm.Flags,
RcptToLocalpart: "mox",
RcptToDomain: "other.example",
MsgFromLocalpart: "mjl",
MsgFromDomain: "mox.example",
DKIMDomains: []string{"mox.example"},
Keywords: tm.Keywords,
Size: int64(size),
}
err = acc.DeliverMailbox(pkglog, tm.Mailbox, &m, msgFile)
tcheck(t, err, "deliver test message")
err = msgFile.Close()
tcheck(t, err, "closing test message")
tm.m = m
tm.ID = m.ID
acc.WithWLock(func() {
msgFile, err := store.CreateMessageTemp(pkglog, "webmail-test")
tcheck(t, err, "create message temp")
defer os.Remove(msgFile.Name())
defer msgFile.Close()
size, err := msgFile.Write(tm.msg.Marshal(t))
tcheck(t, err, "write message temp")
m := store.Message{
Flags: tm.Flags,
RcptToLocalpart: "mox",
RcptToDomain: "other.example",
MsgFromLocalpart: "mjl",
MsgFromDomain: "mox.example",
DKIMDomains: []string{"mox.example"},
Keywords: tm.Keywords,
Size: int64(size),
}
err = acc.DeliverMailbox(pkglog, tm.Mailbox, &m, msgFile)
tcheck(t, err, "deliver test message")
err = msgFile.Close()
tcheck(t, err, "closing test message")
tm.m = m
tm.ID = m.ID
})
}
func readBody(r io.Reader) string {

View File

@ -358,7 +358,7 @@ func (x XOps) MailboxesMarkRead(ctx context.Context, log mlog.Log, acc *store.Ac
// MessageMove moves messages to the mailbox represented by mailboxName, or to mailboxID if mailboxName is empty.
func (x XOps) MessageMove(ctx context.Context, log mlog.Log, acc *store.Account, messageIDs []int64, mailboxName string, mailboxID int64) {
acc.WithRLock(func() {
acc.WithWLock(func() {
var changes []store.Change
x.DBWrite(ctx, acc, func(tx *bstore.Tx) {