fccabbfb5172c5822bd932efa89ae53ccb300509
[acid-state-dist.git] / test / simple.hs
1 {-# LANGUAGE TypeFamilies #-}
2
3 import Data.Acid
4 import Data.Acid.Centered
5 --import Data.SafeCopy
6 --import Data.Typeable
7
8 import Control.Monad (void)
9 import Control.Concurrent
10 import System.Exit
11
12 -- state structures
13 import IntCommon
14
15 delaySec :: Int -> IO ()
16 delaySec n = threadDelay $ n*1000*1000
17
18 -- actual test
19 master :: IO ()
20 master = do
21     acid <- openMasterStateFrom "state/simple/m" "127.0.0.1" 3333 (IntState 0)
22     update acid (SetState 23)
23     delaySec 10
24     closeAcidState acid
25
26 slave :: IO ()
27 slave = do
28     acid <- enslaveStateFrom "state/simple/s1" "localhost" 3333 (IntState 0)
29     delaySec 2
30     val <- query acid GetState
31     closeAcidState acid
32     if val == 23 then
33         exitSuccess
34     else
35         exitFailure
36
37 main :: IO ()
38 main = do
39     void $ forkIO master
40     delaySec 1
41     slave
42     exitSuccess
43