certificate_test.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package dtls
  2. import (
  3. "crypto/tls"
  4. "reflect"
  5. "testing"
  6. "github.com/pion/dtls/v2/pkg/crypto/selfsign"
  7. )
  8. func TestGetCertificate(t *testing.T) {
  9. certificateWildcard, err := selfsign.GenerateSelfSignedWithDNS("*.test.test")
  10. if err != nil {
  11. t.Fatal(err)
  12. }
  13. certificateTest, err := selfsign.GenerateSelfSignedWithDNS("test.test", "www.test.test", "pop.test.test")
  14. if err != nil {
  15. t.Fatal(err)
  16. }
  17. certificateRandom, err := selfsign.GenerateSelfSigned()
  18. if err != nil {
  19. t.Fatal(err)
  20. }
  21. cfg := &handshakeConfig{
  22. localCertificates: []tls.Certificate{
  23. certificateRandom,
  24. certificateTest,
  25. certificateWildcard,
  26. },
  27. }
  28. testCases := []struct {
  29. desc string
  30. serverName string
  31. expectedCertificate tls.Certificate
  32. }{
  33. {
  34. desc: "Simple match in CN",
  35. serverName: "test.test",
  36. expectedCertificate: certificateTest,
  37. },
  38. {
  39. desc: "Simple match in SANs",
  40. serverName: "www.test.test",
  41. expectedCertificate: certificateTest,
  42. },
  43. {
  44. desc: "Wildcard match",
  45. serverName: "foo.test.test",
  46. expectedCertificate: certificateWildcard,
  47. },
  48. {
  49. desc: "No match return first",
  50. serverName: "foo.bar",
  51. expectedCertificate: certificateRandom,
  52. },
  53. }
  54. for _, test := range testCases {
  55. test := test
  56. t.Run(test.desc, func(t *testing.T) {
  57. t.Parallel()
  58. cert, err := cfg.getCertificate(test.serverName)
  59. if err != nil {
  60. t.Fatal(err)
  61. }
  62. if !reflect.DeepEqual(cert.Leaf, test.expectedCertificate.Leaf) {
  63. t.Fatalf("Certificate does not match: expected(%v) actual(%v)", test.expectedCertificate.Leaf, cert.Leaf)
  64. }
  65. })
  66. }
  67. }