summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2026-03-11 22:29:52 +0100
committerRoman Smrž <roman.smrz@seznam.cz>2026-03-11 22:37:26 +0100
commitc1d559d31fdf87bc833c7d4795a88e6fcfeb61c8 (patch)
tree65ccdb9167eeb4c9fea4f897b9b2719847fe892d
parent2fba2dd6711bbd87aabaaaf5e4bc572ef98e888f (diff)
Fix updated dm threads check on initial stateHEADmaster
-rw-r--r--src/Erebos/DirectMessage.hs4
-rw-r--r--test/message.et35
2 files changed, 37 insertions, 2 deletions
diff --git a/src/Erebos/DirectMessage.hs b/src/Erebos/DirectMessage.hs
index 0b0665c..dafebce 100644
--- a/src/Erebos/DirectMessage.hs
+++ b/src/Erebos/DirectMessage.hs
@@ -306,9 +306,9 @@ findMissingPeers :: Server -> DirectMessageThreads -> ExceptT ErebosError IO ()
findMissingPeers server (DirectMessageThreads states threads) = do
prev <- modifyServiceGlobalState server (Proxy @DirectMessage) $ \gs ->
( gs { dmgsLastState = Just states }, dmgsLastState gs )
- let diffPeers = map (msPeer . fromStored) $ maybe states (storedDifference states) prev
+ let diffPeers = map (msPeer . fromStored) . storedDifference states <$> prev
- forM_ (takeWhile (\t -> any (sameIdentity $ msgPeer t) diffPeers) threads) $ \thread -> do
+ forM_ (takeWhile (\t -> maybe True (any (sameIdentity $ msgPeer t)) diffPeers) threads) $ \thread -> do
when (msgHead thread /= msgReceived thread) $ do
mapM_ (discoverySearch server) $ map (refDigest . storedRef) $ idDataF $ msgPeer thread
diff --git a/test/message.et b/test/message.et
index c4b61e3..3609da5 100644
--- a/test/message.et
+++ b/test/message.et
@@ -267,6 +267,41 @@ test DirectMessageDiscovery:
# Verify the first message
expect /dm-received from Owner1 new yes text hello_to_p4/ from p4
+ # Prepare unsent messages, followed by a delivered one:
+ for p in [ p3, p4 ]:
+ send "stop-server" to p
+ expect /stop-server-done/ from p
+
+ send "dm-send-identity $p4_owner msg1_to_p4" to p1
+ send "dm-send-identity $p3_owner msg_to_p3" to p1
+ send "dm-send-identity $p4_owner msg2_to_p4" to p1
+ send "dm-send-identity $p2_owner msg_to_p2" to p1
+ expect /dm-received from Owner1 new yes text msg_to_p2/ from p2
+
+ # Restart servers to remove peers:
+ for p in [ p1, p2, pd ]:
+ with p:
+ send "stop-server"
+ for p in [ p1, p2, pd ]:
+ with p:
+ expect /stop-server-done/
+ for p in [ p1, p2, p3, p4, pd ]:
+ with p:
+ send "start-server services $services"
+ for p in [ p2, p3, p4, p1 ]:
+ with p:
+ send "peer-add ${pd.node.ip}"
+ expect:
+ /peer 1 addr ${pd.node.ip} 29665/
+ /peer 1 id Discovery/
+ expect from pd:
+ /peer [0-9]+ addr ${p.node.ip} 29665/
+ /peer [0-9]+ id Device. Owner./
+
+ expect /dm-received from Owner1 new yes text msg1_to_p4/ from p4
+ expect /dm-received from Owner1 new yes text msg2_to_p4/ from p4
+ expect /dm-received from Owner1 new yes text msg_to_p3/ from p3
+
for p in [ p1, p2, p3, p4, pd ]:
send "stop-server" to p
for p in [ p1, p2, p3, p4, pd ]: