diff options
Diffstat (limited to 'Omni/Task/RaceTest.hs')
| -rw-r--r-- | Omni/Task/RaceTest.hs | 31 |
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 |
