dn_test.go 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package ldap_test
  2. import (
  3. "reflect"
  4. "testing"
  5. "gopkg.in/ldap.v2"
  6. )
  7. func TestSuccessfulDNParsing(t *testing.T) {
  8. testcases := map[string]ldap.DN{
  9. "": ldap.DN{[]*ldap.RelativeDN{}},
  10. "cn=Jim\\2C \\22Hasse Hö\\22 Hansson!,dc=dummy,dc=com": ldap.DN{[]*ldap.RelativeDN{
  11. &ldap.RelativeDN{[]*ldap.AttributeTypeAndValue{&ldap.AttributeTypeAndValue{"cn", "Jim, \"Hasse Hö\" Hansson!"}}},
  12. &ldap.RelativeDN{[]*ldap.AttributeTypeAndValue{&ldap.AttributeTypeAndValue{"dc", "dummy"}}},
  13. &ldap.RelativeDN{[]*ldap.AttributeTypeAndValue{&ldap.AttributeTypeAndValue{"dc", "com"}}}}},
  14. "UID=jsmith,DC=example,DC=net": ldap.DN{[]*ldap.RelativeDN{
  15. &ldap.RelativeDN{[]*ldap.AttributeTypeAndValue{&ldap.AttributeTypeAndValue{"UID", "jsmith"}}},
  16. &ldap.RelativeDN{[]*ldap.AttributeTypeAndValue{&ldap.AttributeTypeAndValue{"DC", "example"}}},
  17. &ldap.RelativeDN{[]*ldap.AttributeTypeAndValue{&ldap.AttributeTypeAndValue{"DC", "net"}}}}},
  18. "OU=Sales+CN=J. Smith,DC=example,DC=net": ldap.DN{[]*ldap.RelativeDN{
  19. &ldap.RelativeDN{[]*ldap.AttributeTypeAndValue{
  20. &ldap.AttributeTypeAndValue{"OU", "Sales"},
  21. &ldap.AttributeTypeAndValue{"CN", "J. Smith"}}},
  22. &ldap.RelativeDN{[]*ldap.AttributeTypeAndValue{&ldap.AttributeTypeAndValue{"DC", "example"}}},
  23. &ldap.RelativeDN{[]*ldap.AttributeTypeAndValue{&ldap.AttributeTypeAndValue{"DC", "net"}}}}},
  24. "1.3.6.1.4.1.1466.0=#04024869": ldap.DN{[]*ldap.RelativeDN{
  25. &ldap.RelativeDN{[]*ldap.AttributeTypeAndValue{&ldap.AttributeTypeAndValue{"1.3.6.1.4.1.1466.0", "Hi"}}}}},
  26. "1.3.6.1.4.1.1466.0=#04024869,DC=net": ldap.DN{[]*ldap.RelativeDN{
  27. &ldap.RelativeDN{[]*ldap.AttributeTypeAndValue{&ldap.AttributeTypeAndValue{"1.3.6.1.4.1.1466.0", "Hi"}}},
  28. &ldap.RelativeDN{[]*ldap.AttributeTypeAndValue{&ldap.AttributeTypeAndValue{"DC", "net"}}}}},
  29. "CN=Lu\\C4\\8Di\\C4\\87": ldap.DN{[]*ldap.RelativeDN{
  30. &ldap.RelativeDN{[]*ldap.AttributeTypeAndValue{&ldap.AttributeTypeAndValue{"CN", "Lučić"}}}}},
  31. }
  32. for test, answer := range testcases {
  33. dn, err := ldap.ParseDN(test)
  34. if err != nil {
  35. t.Errorf(err.Error())
  36. continue
  37. }
  38. if !reflect.DeepEqual(dn, &answer) {
  39. t.Errorf("Parsed DN %s is not equal to the expected structure", test)
  40. for _, rdn := range dn.RDNs {
  41. for _, attribs := range rdn.Attributes {
  42. t.Logf("#%v\n", attribs)
  43. }
  44. }
  45. }
  46. }
  47. }
  48. func TestErrorDNParsing(t *testing.T) {
  49. testcases := map[string]string{
  50. "*": "DN ended with incomplete type, value pair",
  51. "cn=Jim\\0Test": "Failed to decode escaped character: encoding/hex: invalid byte: U+0054 'T'",
  52. "cn=Jim\\0": "Got corrupted escaped character",
  53. "DC=example,=net": "DN ended with incomplete type, value pair",
  54. "1=#0402486": "Failed to decode BER encoding: encoding/hex: odd length hex string",
  55. }
  56. for test, answer := range testcases {
  57. _, err := ldap.ParseDN(test)
  58. if err == nil {
  59. t.Errorf("Expected %s to fail parsing but succeeded\n", test)
  60. } else if err.Error() != answer {
  61. t.Errorf("Unexpected error on %s:\n%s\nvs.\n%s\n", test, answer, err.Error())
  62. }
  63. }
  64. }