diff options
| author | Roman Smrž <roman.smrz@seznam.cz> | 2026-03-11 22:29:52 +0100 |
|---|---|---|
| committer | Roman Smrž <roman.smrz@seznam.cz> | 2026-03-11 22:37:26 +0100 |
| commit | c1d559d31fdf87bc833c7d4795a88e6fcfeb61c8 (patch) | |
| tree | 65ccdb9167eeb4c9fea4f897b9b2719847fe892d | |
| parent | 2fba2dd6711bbd87aabaaaf5e4bc572ef98e888f (diff) | |
| -rw-r--r-- | src/Erebos/DirectMessage.hs | 4 | ||||
| -rw-r--r-- | 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 ]: |