mirror of
https://github.com/simplex-chat/simplexmq.git
synced 2026-05-28 11:54:27 +00:00
refactor
This commit is contained in:
@@ -4,6 +4,7 @@ packages: .
|
||||
-- packages: . ../http2
|
||||
-- packages: . ../network-transport
|
||||
|
||||
-- uncomment two sections below to run tests with coverage
|
||||
-- package *
|
||||
-- coverage: True
|
||||
-- library-coverage: True
|
||||
|
||||
+2
-1
@@ -1,7 +1,7 @@
|
||||
cabal-version: 1.12
|
||||
|
||||
name: simplexmq
|
||||
version: 6.3.0.502
|
||||
version: 6.3.0.5
|
||||
synopsis: SimpleXMQ message broker
|
||||
description: This package includes <./docs/Simplex-Messaging-Server.html server>,
|
||||
<./docs/Simplex-Messaging-Client.html client> and
|
||||
@@ -457,6 +457,7 @@ test-suite simplexmq-test
|
||||
apps/smp-server/web
|
||||
default-extensions:
|
||||
StrictData
|
||||
-- add -fhpc to ghc-options to run tests with coverage
|
||||
ghc-options: -Weverything -Wno-missing-exported-signatures -Wno-missing-import-lists -Wno-missed-specialisations -Wno-all-missed-specialisations -Wno-unsafe -Wno-safe -Wno-missing-local-signatures -Wno-missing-kind-signatures -Wno-missing-deriving-strategies -Wno-monomorphism-restriction -Wno-prepositive-qualified-module -Wno-implicit-prelude -Wno-missing-safe-haskell-mode -Wno-missing-export-lists -Wno-partial-fields -Wcompat -Werror=incomplete-record-updates -Werror=incomplete-patterns -Werror=incomplete-uni-patterns -Werror=missing-methods -Werror=tabs -Wredundant-constraints -Wincomplete-record-updates -Wunused-type-patterns -O2 -threaded -rtsopts -with-rtsopts=-A64M -with-rtsopts=-N1
|
||||
build-depends:
|
||||
base
|
||||
|
||||
@@ -162,7 +162,7 @@ defaultMaxJournalMsgCount :: Int
|
||||
defaultMaxJournalMsgCount = 256
|
||||
|
||||
defaultMsgQueueQuota :: Int
|
||||
defaultMsgQueueQuota = 4
|
||||
defaultMsgQueueQuota = 128
|
||||
|
||||
defaultStateTailSize :: Int
|
||||
defaultStateTailSize = 512
|
||||
@@ -367,7 +367,7 @@ mkJournalStoreConfig storePath msgQueueQuota maxJournalMsgCount maxJournalStateL
|
||||
maxStateLines = maxJournalStateLines,
|
||||
stateTailSize = defaultStateTailSize,
|
||||
idleInterval = idleQueueInterval,
|
||||
expireBackupsAfter = 300, -- 14 * nominalDay,
|
||||
expireBackupsAfter = 14 * nominalDay,
|
||||
keepMinBackups = 2
|
||||
}
|
||||
|
||||
|
||||
@@ -499,7 +499,7 @@ openMsgQueue ms@JournalMsgStore {config} q@JMQueue {queueDirectory = dir, stateP
|
||||
case st_ of
|
||||
Nothing -> do
|
||||
st <- newMsgQueueState <$> newJournalId (random ms)
|
||||
when shouldBackup $ backupQueueState statePath
|
||||
when shouldBackup $ backupQueueState statePath -- rename invalid state file
|
||||
mkJournalQueue q st Nothing
|
||||
Just st
|
||||
| size st == 0 -> do
|
||||
@@ -536,19 +536,15 @@ openMsgQueue ms@JournalMsgStore {config} q@JMQueue {queueDirectory = dir, stateP
|
||||
-- Temporary backup file will be used when it is present.
|
||||
let tempBackup = statePath <> ".bak"
|
||||
renameFile statePath tempBackup -- 1) temp backup
|
||||
sh <- writeQueueState st -- 2) save state
|
||||
sh <- openFile statePath AppendMode
|
||||
closeOnException sh $ appendState sh st -- 2) save state to new file
|
||||
backupQueueState tempBackup -- 3) timed backup
|
||||
pure sh
|
||||
| otherwise = openFile statePath AppendMode
|
||||
backupQueueState path = do
|
||||
ts <- getCurrentTime
|
||||
renameFile path $ stateBackupPath statePath ts
|
||||
removeBackups
|
||||
writeQueueState st = do
|
||||
sh <- openFile statePath AppendMode
|
||||
closeOnException sh $ appendState sh st
|
||||
pure sh
|
||||
removeBackups = do
|
||||
-- remove old backups
|
||||
times <- sort . mapMaybe backupPathTime <$> listDirectory dir
|
||||
let toDelete = filter (< expireBackupsBefore ms) $ take (length times - keepMinBackups config) times
|
||||
mapM_ (safeRemoveFile "removeBackups" . stateBackupPath statePath) toDelete
|
||||
|
||||
@@ -364,6 +364,7 @@ functionalAPITests t = do
|
||||
it "should suspend agent on timeout, even if pending messages not sent" $
|
||||
testSuspendingAgentTimeout t
|
||||
describe "Batching SMP commands" $ do
|
||||
-- disable this and enable the following test to run tests with coverage
|
||||
it "should subscribe to multiple (200) subscriptions with batching" $
|
||||
testBatchedSubscriptions 200 10 t
|
||||
skip "faster version of the previous test (200 subscriptions gets very slow with test coverage)" $
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
# Running tests with coverage
|
||||
|
||||
1. Uncomment coverage sections in cabal.project file.
|
||||
2. Add `-fhpc` to ghc-options of simplexmq-test in simplexmq.cabal file.
|
||||
3. Disable (`xit`) test "should subscribe to multiple (200) subscriptions with batching", enable (comment `skip`) the next test instead.
|
||||
4. Run `cabal test`.
|
||||
5. Open generated coverage report in the browser.
|
||||
Reference in New Issue
Block a user