project-m36-1.2.0: test/AccessControlList.hs
import Test.HUnit
import ProjectM36.AccessControlList
import qualified Data.UUID as U
import qualified Data.ByteString.Lazy as BS
import Data.Word
import qualified Data.Map as M
import Data.Maybe
import System.Exit
main :: IO ()
main = do
tcounts <- runTestTT (TestList [testBasic])
if errors tcounts + failures tcounts > 0 then exitFailure else exitSuccess
fakeUUID :: Word8 -> U.UUID
fakeUUID x = fromMaybe (error "impossible uuid") (U.fromByteString (BS.concat (replicate 4 w32)))
where w32 = BS.pack (replicate 4 x)
testBasic :: Test
testBasic = TestCase $ do
let func_acl = AccessControlList (M.singleton role1
(grantable ViewFunctionPermission))
role1 = fakeUUID 1
role2 = fakeUUID 2
assertBool "simple hasAccess" (hasAccess [role1] ViewFunctionPermission func_acl)
let func_acl1 = addAccess role1 ExecuteFunctionPermission True func_acl
assertBool "addAccess to existing role" (hasAccess [role1] ExecuteFunctionPermission func_acl1)
let func_acl2 = addAccess role2 ViewFunctionPermission True func_acl
assertBool "addAccess with new role" (hasAccess [role2] ViewFunctionPermission func_acl2)
let func_acl3 = removeAccess role1 ViewFunctionPermission func_acl
assertBool "remove access" (not (hasAccess [role1] ViewFunctionPermission func_acl3))
let func_acl4 = addAccess role2 ExecuteFunctionPermission True func_acl
assertBool "mixed perms" (hasAccess [role2] ExecuteFunctionPermission func_acl4)