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