on master help sign in
loosen server state type

add server state test

commit804b0baf9c1c48b5945c991696c9898b6fef50ec authorAgentM <agentm@themactionfaction.com> dateFri 18 Dec 2020, 13:14 (6 years ago) parent9b7209e
2 files changed+30−7
src/Network/RPC/Curryer/Server.hs+3−4 test/Curryer/Test/Basic.hs+27−3
src/Network/RPC/Curryer/Server.hs+3−4
@@ -27,7 +27,6 @@ import qualified Data.Binary as B
2727import qualified Data.UUID as UUIDBase
2828import qualified Data.UUID.V4 as UUIDBase
2929import Control.Monad
30−import Control.Concurrent.STM
3130
3231import qualified Network.RPC.Curryer.StreamlyAdditions as SA
3332--import Control.Monad
@@ -104,7 +103,7 @@ data RequestHandler serverState where
104103
105104-- | Passed to
106105data ConnectionState a = ConnectionState {
107− connectionServerState :: STM a,
106+ connectionServerState :: a,
108107 connectionSocket :: Locking Socket
109108 }
110109
@@ -211,7 +210,7 @@ type NewMessageHandler req resp = req -> IO resp
211210
212211serve ::
213212 MessageHandlers s->
214− STM s ->
213+ s ->
215214 HostAddr ->
216215 PortNumber ->
217216 Maybe (MVar SockAddr) ->
@@ -246,7 +245,7 @@ matchEnvelope envelope dispatchf =
246245serverEnvelopeHandler ::
247246 Locking Socket
248247 -> MessageHandlers s
249− -> STM s
248+ -> s
250249 -> Envelope
251250 -> IO ()
252251serverEnvelopeHandler _ _ _ (Envelope _ TimeoutResponseMessage _ _) = pure ()
test/Curryer/Test/Basic.hs+27−3
@@ -24,6 +24,7 @@ testTree = testGroup "basic" [testCase "simple" testSimpleCall
2424 ,testCase "client sync timeout" testSyncClientCallTimeout
2525 ,testCase "server-side exception" testSyncException
2626 ,testCase "multi-threaded client" testMultithreadedClient
27+ ,testCase "server state" testServerState
2728 ]
2829
2930
@@ -51,6 +52,10 @@ data ThrowServerSideExceptionReq = ThrowServerSideExceptionReq
5152 deriving (Generic, Show)
5253 deriving Serialise via WineryVariant ThrowServerSideExceptionReq
5354
55+data ChangeServerState = ChangeServerState
56+ deriving (Generic, Show)
57+ deriving Serialise via WineryVariant ChangeServerState
58+
5459--used to server -> client async request
5560data AsyncHelloReq = AsyncHelloReq String
5661 deriving (Generic, Show)
@@ -112,8 +117,8 @@ testAsyncServerCall = do
112117 cancel server
113118
114119
115−emptyServerState :: STM ()
116−emptyServerState = pure ()
120+emptyServerState :: ()
121+emptyServerState = ()
117122
118123--test that the client can make a non-blocking call
119124testAsyncClientCall :: Assertion
@@ -180,5 +185,24 @@ testMultithreadedClient = do
180185 --putStrLn "plus one"
181186 close conn
182187 cancel server
183−
188+
189+testServerState :: Assertion
190+testServerState = do
191+ readyVar <- newEmptyMVar
192+
193+ let serverHandlers = [RequestHandler (\sState ChangeServerState ->
194+ atomically $
195+ modifyTVar (connectionServerState sState) (+ 1))
196+ ]
197+ serverState <- newTVarIO @Int 1
198+ server <- async (serve serverHandlers serverState localHostAddr 0 (Just readyVar))
199+ (SockAddrInet port _) <- takeMVar readyVar
200+ conn <- connect [] localHostAddr port
201+ ret <- call conn ChangeServerState
202+ assertEqual "server ret" (Right ()) ret
203+ serverState' <- readTVarIO serverState
204+ assertEqual "server state" 2 serverState'
205+ close conn
206+ cancel server
207+
184208