summaryrefslogtreecommitdiff
path: root/Omni/Task/RaceTest.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Omni/Task/RaceTest.hs')
-rw-r--r--Omni/Task/RaceTest.hs31
1 files changed, 16 insertions, 15 deletions
diff --git a/Omni/Task/RaceTest.hs b/Omni/Task/RaceTest.hs
index d4780fd..10d3451 100644
--- a/Omni/Task/RaceTest.hs
+++ b/Omni/Task/RaceTest.hs
@@ -4,13 +4,13 @@
module Omni.Task.RaceTest where
import Alpha
+import Control.Concurrent.Async (mapConcurrently)
+import Data.List (nub)
+import qualified Data.Text as T
import Omni.Task.Core
import qualified Omni.Test as Test
import System.Directory (doesFileExist, removeFile)
import System.Environment (setEnv)
-import Control.Concurrent.Async (mapConcurrently)
-import qualified Data.Text as T
-import Data.List (nub)
test :: Test.Tree
test = Test.group "Omni.Task.Race" [raceTest]
@@ -21,35 +21,36 @@ raceTest =
-- Set up test mode
setEnv "TASK_TEST_MODE" "1"
setEnv "TASK_DB_PATH" ".tasks/race-test.jsonl"
-
+
-- Clean up test database
let testFile = ".tasks/race-test.jsonl"
exists <- doesFileExist testFile
when exists <| removeFile testFile
initTaskDb
-
+
-- Create a parent epic
parent <- createTask "Parent Epic" Epic Nothing Nothing P2 []
let parentId = taskId parent
-
+
-- Create multiple children concurrently
-- We'll create 10 children in parallel
let childCount = 10
- indices = [1..childCount]
-
+ indices = [1 .. childCount]
+
-- Run concurrent creations
- children <- mapConcurrently
- (\i -> createTask ("Child " <> tshow i) WorkTask (Just parentId) Nothing P2 [])
- indices
-
+ children <-
+ mapConcurrently
+ (\i -> createTask ("Child " <> tshow i) WorkTask (Just parentId) Nothing P2 [])
+ indices
+
-- Check for duplicates in generated IDs
let ids = map taskId children
uniqueIds = nub ids
-
+
-- If there was a race condition, we'd have fewer unique IDs than children
length uniqueIds Test.@?= length children
length uniqueIds Test.@?= childCount
-
+
-- Verify IDs follow the pattern parentId.N
for_ ids <| \tid -> do
- (parentId `T.isPrefixOf` tid) Test.@?= True
+ (parentId `T.isPrefixOf` tid) Test.@?= True