api_test.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package authorization // import "github.com/docker/docker/pkg/authorization"
  2. import (
  3. "crypto/rand"
  4. "crypto/rsa"
  5. "crypto/tls"
  6. "crypto/x509"
  7. "crypto/x509/pkix"
  8. "math/big"
  9. "net/http"
  10. "testing"
  11. "time"
  12. "gotest.tools/assert"
  13. is "gotest.tools/assert/cmp"
  14. )
  15. func TestPeerCertificateMarshalJSON(t *testing.T) {
  16. template := &x509.Certificate{
  17. IsCA: true,
  18. BasicConstraintsValid: true,
  19. SubjectKeyId: []byte{1, 2, 3},
  20. SerialNumber: big.NewInt(1234),
  21. Subject: pkix.Name{
  22. Country: []string{"Earth"},
  23. Organization: []string{"Mother Nature"},
  24. },
  25. NotBefore: time.Now(),
  26. NotAfter: time.Now().AddDate(5, 5, 5),
  27. ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageClientAuth, x509.ExtKeyUsageServerAuth},
  28. KeyUsage: x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign,
  29. }
  30. // generate private key
  31. privatekey, err := rsa.GenerateKey(rand.Reader, 2048)
  32. assert.NilError(t, err)
  33. publickey := &privatekey.PublicKey
  34. // create a self-signed certificate. template = parent
  35. var parent = template
  36. raw, err := x509.CreateCertificate(rand.Reader, template, parent, publickey, privatekey)
  37. assert.NilError(t, err)
  38. cert, err := x509.ParseCertificate(raw)
  39. assert.NilError(t, err)
  40. var certs = []*x509.Certificate{cert}
  41. addr := "www.authz.com/auth"
  42. req, err := http.NewRequest("GET", addr, nil)
  43. assert.NilError(t, err)
  44. req.RequestURI = addr
  45. req.TLS = &tls.ConnectionState{}
  46. req.TLS.PeerCertificates = certs
  47. req.Header.Add("header", "value")
  48. for _, c := range req.TLS.PeerCertificates {
  49. pcObj := PeerCertificate(*c)
  50. t.Run("Marshalling :", func(t *testing.T) {
  51. raw, err = pcObj.MarshalJSON()
  52. assert.Assert(t, raw != nil)
  53. assert.NilError(t, err)
  54. })
  55. t.Run("UnMarshalling :", func(t *testing.T) {
  56. err := pcObj.UnmarshalJSON(raw)
  57. assert.Assert(t, is.Nil(err))
  58. assert.Equal(t, "Earth", pcObj.Subject.Country[0])
  59. assert.Equal(t, true, pcObj.IsCA)
  60. })
  61. }
  62. }