42 lines
1.3 KiB
Haskell
42 lines
1.3 KiB
Haskell
{-# LANGUAGE CPP #-}
|
||
{-# LANGUAGE OverloadedStrings #-}
|
||
module Ldap.Client.BindSpec (spec) where
|
||
|
||
#if __GLASGOW_HASKELL__ < 710
|
||
import Data.Monoid (mempty)
|
||
#endif
|
||
import Test.Hspec
|
||
import qualified Ldap.Asn1.Type as Ldap.Type
|
||
import Ldap.Client as Ldap
|
||
|
||
import SpecHelper (locally)
|
||
|
||
|
||
spec :: Spec
|
||
spec = do
|
||
it "binds as ‘admin’" $ do
|
||
res <- locally $ \l ->
|
||
Ldap.bind l (Dn "cn=admin") (Password "secret")
|
||
res `shouldBe` Right ()
|
||
|
||
it "tries to bind as ‘admin’ with the wrong password, unsuccessfully" $ do
|
||
res <- locally $ \l ->
|
||
Ldap.bind l (Dn "cn=admin") (Password "public")
|
||
res `shouldBe` Left
|
||
(Ldap.ResponseError
|
||
(Ldap.ResponseErrorCode
|
||
(Ldap.Type.BindRequest 3
|
||
(Ldap.Type.LdapDn (Ldap.Type.LdapString "cn=admin"))
|
||
(Ldap.Type.Simple "public"))
|
||
Ldap.InvalidCredentials
|
||
(Dn "cn=admin")
|
||
"InvalidCredentialsError"))
|
||
|
||
it "binds as ‘pikachu’" $ do
|
||
res <- locally $ \l -> do
|
||
Ldap.bind l (Dn "cn=admin") (Password "secret")
|
||
[Ldap.SearchEntry udn _]
|
||
<- Ldap.search l (Dn "o=localhost") mempty (Attr "cn" := "pikachu") []
|
||
Ldap.bind l udn (Password "i-choose-you")
|
||
res `shouldBe` Right ()
|