ldap_private_test.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  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. "github.com/grafana/grafana/pkg/models"
  8. )
  9. func TestLDAPPrivateMethods(t *testing.T) {
  10. Convey("serializeUsers()", t, func() {
  11. Convey("simple case", func() {
  12. server := &Server{
  13. Config: &ServerConfig{
  14. Attr: AttributeMap{
  15. Username: "username",
  16. Name: "name",
  17. MemberOf: "memberof",
  18. Email: "email",
  19. },
  20. SearchBaseDNs: []string{"BaseDNHere"},
  21. },
  22. Connection: &MockConnection{},
  23. log: log.New("test-logger"),
  24. }
  25. entry := ldap.Entry{
  26. DN: "dn",
  27. Attributes: []*ldap.EntryAttribute{
  28. {Name: "username", Values: []string{"roelgerrits"}},
  29. {Name: "surname", Values: []string{"Gerrits"}},
  30. {Name: "email", Values: []string{"roel@test.com"}},
  31. {Name: "name", Values: []string{"Roel"}},
  32. {Name: "memberof", Values: []string{"admins"}},
  33. },
  34. }
  35. users := []*ldap.Entry{&entry}
  36. result, err := server.serializeUsers(users)
  37. So(err, ShouldBeNil)
  38. So(result[0].Login, ShouldEqual, "roelgerrits")
  39. So(result[0].Email, ShouldEqual, "roel@test.com")
  40. So(result[0].Groups, ShouldContain, "admins")
  41. })
  42. Convey("without lastname", func() {
  43. server := &Server{
  44. Config: &ServerConfig{
  45. Attr: AttributeMap{
  46. Username: "username",
  47. Name: "name",
  48. MemberOf: "memberof",
  49. Email: "email",
  50. },
  51. SearchBaseDNs: []string{"BaseDNHere"},
  52. },
  53. Connection: &MockConnection{},
  54. log: log.New("test-logger"),
  55. }
  56. entry := ldap.Entry{
  57. DN: "dn",
  58. Attributes: []*ldap.EntryAttribute{
  59. {Name: "username", Values: []string{"roelgerrits"}},
  60. {Name: "email", Values: []string{"roel@test.com"}},
  61. {Name: "name", Values: []string{"Roel"}},
  62. {Name: "memberof", Values: []string{"admins"}},
  63. },
  64. }
  65. users := []*ldap.Entry{&entry}
  66. result, err := server.serializeUsers(users)
  67. So(err, ShouldBeNil)
  68. So(result[0].Name, ShouldEqual, "Roel")
  69. })
  70. })
  71. Convey("validateGrafanaUser()", t, func() {
  72. Convey("Returns error when user does not belong in any of the specified LDAP groups", func() {
  73. server := &Server{
  74. Config: &ServerConfig{
  75. Groups: []*GroupToOrgRole{
  76. {
  77. OrgID: 1,
  78. },
  79. },
  80. },
  81. log: logger.New("test"),
  82. }
  83. user := &models.ExternalUserInfo{
  84. Login: "markelog",
  85. }
  86. result := server.validateGrafanaUser(user)
  87. So(result, ShouldEqual, ErrInvalidCredentials)
  88. })
  89. Convey("Does not return error when group config is empty", func() {
  90. server := &Server{
  91. Config: &ServerConfig{
  92. Groups: []*GroupToOrgRole{},
  93. },
  94. log: logger.New("test"),
  95. }
  96. user := &models.ExternalUserInfo{
  97. Login: "markelog",
  98. }
  99. result := server.validateGrafanaUser(user)
  100. So(result, ShouldBeNil)
  101. })
  102. Convey("Does not return error when groups are there", func() {
  103. server := &Server{
  104. Config: &ServerConfig{
  105. Groups: []*GroupToOrgRole{
  106. {
  107. OrgID: 1,
  108. },
  109. },
  110. },
  111. log: logger.New("test"),
  112. }
  113. user := &models.ExternalUserInfo{
  114. Login: "markelog",
  115. OrgRoles: map[int64]models.RoleType{
  116. 1: "test",
  117. },
  118. }
  119. result := server.validateGrafanaUser(user)
  120. So(result, ShouldBeNil)
  121. })
  122. })
  123. Convey("shouldAuthAdmin()", t, func() {
  124. Convey("it should require admin auth", func() {
  125. server := &Server{
  126. Config: &ServerConfig{
  127. BindPassword: "test",
  128. },
  129. }
  130. result := server.shouldAuthAdmin()
  131. So(result, ShouldBeTrue)
  132. })
  133. Convey("it should not require admin auth", func() {
  134. server := &Server{
  135. Config: &ServerConfig{
  136. BindPassword: "",
  137. },
  138. }
  139. result := server.shouldAuthAdmin()
  140. So(result, ShouldBeFalse)
  141. })
  142. })
  143. }