test: Simple refined, SlaveUpdates added
[acid-state-dist.git] / test / Simple.hs
1 {-# LANGUAGE TypeFamilies #-}
2
3 import Data.Acid
4 import Data.Acid.Centered
5
6 import Control.Monad (void, when)
7 import Control.Concurrent (threadDelay)
8 import System.Exit (exitSuccess, exitFailure)
9 import System.Directory (doesDirectoryExist, removeDirectoryRecursive)
10
11 -- state structures
12 import IntCommon
13
14 -- helpers
15 delaySec :: Int -> IO ()
16 delaySec n = threadDelay $ n*1000*1000
17
18 cleanup :: FilePath -> IO ()
19 cleanup path = do
20     sp <- doesDirectoryExist path
21     when sp $ removeDirectoryRecursive path
22
23 -- actual test
24 slave :: IO ()
25 slave = do
26     acid <- enslaveStateFrom "state/Simple/s1" "localhost" 3333 (IntState 0)
27     delaySec 5
28     val <- query acid GetState
29     closeAcidState acid
30     when (val /= 23) $ putStrLn "Slave hasn't got value." >> exitFailure
31
32 main :: IO ()
33 main = do
34     cleanup "state/Simple"
35     acid <- openMasterStateFrom "state/Simple/m" "127.0.0.1" 3333 (IntState 0)
36     update acid (SetState 23)
37     slave
38     closeAcidState acid
39     exitSuccess
40