@ -2,6 +2,7 @@ package api
import (
"encoding/json"
"errors"
"net/http"
"net/http/httptest"
"testing"
@ -21,6 +22,12 @@ type LDAPMock struct {
var userSearchResult * models . ExternalUserInfo
var userSearchConfig ldap . ServerConfig
var pingResult [ ] * multildap . ServerStatus
var pingError error
func ( m * LDAPMock ) Ping ( ) ( [ ] * multildap . ServerStatus , error ) {
return pingResult , pingError
}
func ( m * LDAPMock ) Login ( query * models . LoginUserQuery ) ( * models . ExternalUserInfo , error ) {
return & models . ExternalUserInfo { } , nil
@ -35,11 +42,19 @@ func (m *LDAPMock) User(login string) (*models.ExternalUserInfo, ldap.ServerConf
return userSearchResult , userSearchConfig , nil
}
//***
// GetUserFromLDAP tests
//***
func getUserFromLDAPContext ( t * testing . T , requestURL string ) * scenarioContext {
t . Helper ( )
sc := setupScenarioContext ( requestURL )
ldap := setting . LDAPEnabled
setting . LDAPEnabled = true
defer func ( ) { setting . LDAPEnabled = ldap } ( )
hs := & HTTPServer { Cfg : setting . NewCfg ( ) }
sc . defaultHandler = Wrap ( func ( c * models . ReqContext ) Response {
@ -141,7 +156,7 @@ func TestGetUserFromLDAPApiEndpoint_OrgNotfound(t *testing.T) {
var expectedJSON interface { }
_ = json . Unmarshal ( [ ] byte ( expected ) , & expectedJSON )
assert . Equal ( t , jsonResponse , expectedJSON )
assert . Equal ( t , expectedJSON , jsonResponse )
}
func TestGetUserFromLDAPApiEndpoint ( t * testing . T ) {
@ -219,5 +234,70 @@ func TestGetUserFromLDAPApiEndpoint(t *testing.T) {
var expectedJSON interface { }
_ = json . Unmarshal ( [ ] byte ( expected ) , & expectedJSON )
assert . Equal ( t , jsonResponse , expectedJSON )
assert . Equal ( t , expectedJSON , jsonResponse )
}
//***
// GetLDAPStatus tests
//***
func getLDAPStatusContext ( t * testing . T ) * scenarioContext {
t . Helper ( )
requestURL := "/api/admin/ldap/status"
sc := setupScenarioContext ( requestURL )
ldap := setting . LDAPEnabled
setting . LDAPEnabled = true
defer func ( ) { setting . LDAPEnabled = ldap } ( )
hs := & HTTPServer { Cfg : setting . NewCfg ( ) }
sc . defaultHandler = Wrap ( func ( c * models . ReqContext ) Response {
sc . context = c
return hs . GetLDAPStatus ( c )
} )
sc . m . Get ( "/api/admin/ldap/status" , sc . defaultHandler )
sc . resp = httptest . NewRecorder ( )
req , _ := http . NewRequest ( http . MethodGet , requestURL , nil )
sc . req = req
sc . exec ( )
return sc
}
func TestGetLDAPStatusApiEndpoint ( t * testing . T ) {
pingResult = [ ] * multildap . ServerStatus {
{ Host : "10.0.0.3" , Port : 361 , Available : true , Error : nil } ,
{ Host : "10.0.0.3" , Port : 362 , Available : true , Error : nil } ,
{ Host : "10.0.0.5" , Port : 361 , Available : false , Error : errors . New ( "something is awfully wrong" ) } ,
}
getLDAPConfig = func ( ) ( * ldap . Config , error ) {
return & ldap . Config { } , nil
}
newLDAP = func ( _ [ ] * ldap . ServerConfig ) multildap . IMultiLDAP {
return & LDAPMock { }
}
sc := getLDAPStatusContext ( t )
require . Equal ( t , http . StatusOK , sc . resp . Code )
jsonResponse , err := getJSONbody ( sc . resp )
assert . Nil ( t , err )
expected := `
[
{ "host" : "10.0.0.3" , "port" : 361 , "available" : true , "error" : "" } ,
{ "host" : "10.0.0.3" , "port" : 362 , "available" : true , "error" : "" } ,
{ "host" : "10.0.0.5" , "port" : 361 , "available" : false , "error" : "something is awfully wrong" }
]
`
var expectedJSON interface { }
_ = json . Unmarshal ( [ ] byte ( expected ) , & expectedJSON )
assert . Equal ( t , expectedJSON , jsonResponse )
}