@@ -12,6 +12,9 @@ import ProjectM36.TupleSet
1212
1313import System.Exit
1414import Control.Concurrent
15+import Data.UUID (nil)
16+import Data.Either (isRight)
17+import Data.Maybe (isJust)
1518
1619testList :: SessionId -> Connection -> Test
1720testList sessionId conn = TestList $ map (\t -> t sessionId conn) [
@@ -22,7 +25,8 @@ testList sessionId conn = TestList $ map (\t -> t sessionId conn) [
2225 testPlanForDatabaseContextExpr,
2326 testTransactionGraphAsRelation,
2427 testHeadTransactionUUID,
25− testHeadName
28+ testHeadName,
29+ testSession
2630 ]
2731
2832main :: IO ()
@@ -111,7 +115,8 @@ testTransactionGraphAsRelation sessionId conn = TestCase $ do
111115
112116testHeadTransactionUUID :: SessionId -> Connection -> Test
113117testHeadTransactionUUID sessionId conn = TestCase $ do
114− _ <- headTransactionUUID sessionId conn
118+ uuid <- headTransactionUUID sessionId conn
119+ assertBool "invalid head transaction uuid" (isJust uuid)
115120 pure ()
116121
117122testHeadName :: SessionId -> Connection -> Test
@@ -119,4 +124,17 @@ testHeadName sessionId conn = TestCase $ do
119124 mHeadName <- headName sessionId conn
120125 assertEqual "headName failure" (Just "master") mHeadName
121126
122−
127+testSession :: SessionId -> Connection -> Test
128+testSession _ conn = TestCase $ do
129+ -- create and close a new session using AtHead and AtCommit
130+ eSessionId1 <- createSessionAtHead defaultHeadName conn
131+ case eSessionId1 of
132+ Left _ -> assertFailure "invalid session"
133+ Right sessionId1 -> do
134+ mHeadUUID <- headTransactionUUID sessionId1 conn
135+ case mHeadUUID of
136+ Nothing -> assertFailure "invalid head UUID"
137+ Just headUUID -> do
138+ eSessionId2 <- createSessionAtCommit headUUID conn
139+ assertBool ("invalid session: " ++ show eSessionId2) (isRight eSessionId2)
140+ closeSession sessionId1 conn