urbit/pkg/king/test/BehnTests.hs

56 lines
1.4 KiB
Haskell
Raw Normal View History

2019-08-01 03:27:13 +03:00
module BehnTests (tests) where
import Arvo
import Data.Acquire
import Data.Conduit
import Data.Conduit.List hiding (take)
import Data.Ord.Unicode
import Noun
import Test.QuickCheck hiding ((.&.))
import Test.Tasty
import Test.Tasty.QuickCheck
import Test.Tasty.TH
import Urbit.Time
import UrbitPrelude
import Vere.Behn
import Vere.Log
import Vere.Pier.Types
import Control.Concurrent (runInBoundThread, threadDelay)
import Data.LargeWord (LargeKey(..))
import GHC.Natural (Natural)
2019-09-18 06:33:38 +03:00
import KingApp (runApp)
2019-08-01 03:27:13 +03:00
import Network.Socket (tupleToHostAddress)
import qualified Urbit.Time as Time
import qualified Vere.Log as Log
--------------------------------------------------------------------------------
king :: KingId
king = KingId 0
2019-08-01 03:27:13 +03:00
-- TODO Timers always fire immediatly. Something is wrong!
timerFires :: Property
2019-09-18 06:33:38 +03:00
timerFires = forAll arbitrary (ioProperty . runApp . runTest)
2019-08-01 03:27:13 +03:00
where
2019-09-18 06:33:38 +03:00
runTest :: () -> RIO e Bool
2019-08-01 03:27:13 +03:00
runTest () = do
q <- newTQueueIO
2019-09-18 06:33:38 +03:00
rwith (liftAcquire $ snd $ behn king (writeTQueue q)) $ \cb -> do
cb (BehnEfDoze (king, ()) (Just (2^20)))
2019-08-01 03:27:13 +03:00
t <- atomically $ readTQueue q
pure True
2019-08-01 03:27:13 +03:00
-- Utils -----------------------------------------------------------------------
tests :: TestTree
tests =
testGroup "Behn"
[ localOption (QuickCheckTests 10) $
testProperty "Behn Timers Fire" $
timerFires
]