ldap_login_test.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package ldap
  2. import (
  3. "testing"
  4. . "github.com/smartystreets/goconvey/convey"
  5. "gopkg.in/ldap.v3"
  6. "github.com/grafana/grafana/pkg/infra/log"
  7. )
  8. func TestLdapLogin(t *testing.T) {
  9. Convey("Login using ldap", t, func() {
  10. AuthScenario("When login with invalid credentials", func(scenario *scenarioContext) {
  11. conn := &mockLdapConn{}
  12. entry := ldap.Entry{}
  13. result := ldap.SearchResult{Entries: []*ldap.Entry{&entry}}
  14. conn.setSearchResult(&result)
  15. conn.bindProvider = func(username, password string) error {
  16. return &ldap.Error{
  17. ResultCode: 49,
  18. }
  19. }
  20. auth := &Auth{
  21. server: &ServerConfig{
  22. Attr: AttributeMap{
  23. Username: "username",
  24. Name: "name",
  25. MemberOf: "memberof",
  26. },
  27. SearchBaseDNs: []string{"BaseDNHere"},
  28. },
  29. conn: conn,
  30. log: log.New("test-logger"),
  31. }
  32. err := auth.Login(scenario.loginUserQuery)
  33. Convey("it should return invalid credentials error", func() {
  34. So(err, ShouldEqual, ErrInvalidCredentials)
  35. })
  36. })
  37. AuthScenario("When login with valid credentials", func(scenario *scenarioContext) {
  38. conn := &mockLdapConn{}
  39. entry := ldap.Entry{
  40. DN: "dn", Attributes: []*ldap.EntryAttribute{
  41. {Name: "username", Values: []string{"markelog"}},
  42. {Name: "surname", Values: []string{"Gaidarenko"}},
  43. {Name: "email", Values: []string{"markelog@gmail.com"}},
  44. {Name: "name", Values: []string{"Oleg"}},
  45. {Name: "memberof", Values: []string{"admins"}},
  46. },
  47. }
  48. result := ldap.SearchResult{Entries: []*ldap.Entry{&entry}}
  49. conn.setSearchResult(&result)
  50. conn.bindProvider = func(username, password string) error {
  51. return nil
  52. }
  53. auth := &Auth{
  54. server: &ServerConfig{
  55. Attr: AttributeMap{
  56. Username: "username",
  57. Name: "name",
  58. MemberOf: "memberof",
  59. },
  60. SearchBaseDNs: []string{"BaseDNHere"},
  61. },
  62. conn: conn,
  63. log: log.New("test-logger"),
  64. }
  65. err := auth.Login(scenario.loginUserQuery)
  66. Convey("it should not return error", func() {
  67. So(err, ShouldBeNil)
  68. })
  69. Convey("it should get user", func() {
  70. So(scenario.loginUserQuery.User.Login, ShouldEqual, "markelog")
  71. })
  72. })
  73. })
  74. }