From c1d559d31fdf87bc833c7d4795a88e6fcfeb61c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Wed, 11 Mar 2026 22:29:52 +0100 Subject: Fix updated dm threads check on initial state --- src/Erebos/DirectMessage.hs | 4 ++-- test/message.et | 35 +++++++++++++++++++++++++++++++++++ 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 ]: -- cgit v1.2.3