packages feed

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)