...
1
16
17 package cert
18
19 import (
20 "crypto/x509"
21 "crypto/x509/pkix"
22 "encoding/pem"
23 "net"
24 "os"
25 "testing"
26
27 "k8s.io/client-go/util/keyutil"
28 netutils "k8s.io/utils/net"
29 )
30
31 func TestMakeCSR(t *testing.T) {
32 keyFile := "testdata/dontUseThisKey.pem"
33 subject := &pkix.Name{
34 CommonName: "kube-worker",
35 }
36 dnsSANs := []string{"localhost"}
37 ipSANs := []net.IP{netutils.ParseIPSloppy("127.0.0.1")}
38
39 keyData, err := os.ReadFile(keyFile)
40 if err != nil {
41 t.Fatal(err)
42 }
43 key, err := keyutil.ParsePrivateKeyPEM(keyData)
44 if err != nil {
45 t.Fatal(err)
46 }
47 csrPEM, err := MakeCSR(key, subject, dnsSANs, ipSANs)
48 if err != nil {
49 t.Error(err)
50 }
51 csrBlock, rest := pem.Decode(csrPEM)
52 if csrBlock == nil {
53 t.Fatal("Unable to decode MakeCSR result.")
54 }
55 if len(rest) != 0 {
56 t.Error("Found more than one PEM encoded block in the result.")
57 }
58 if csrBlock.Type != CertificateRequestBlockType {
59 t.Errorf("Found block type %q, wanted 'CERTIFICATE REQUEST'", csrBlock.Type)
60 }
61 csr, err := x509.ParseCertificateRequest(csrBlock.Bytes)
62 if err != nil {
63 t.Errorf("Found %v parsing MakeCSR result as a CertificateRequest.", err)
64 }
65 if csr.Subject.CommonName != subject.CommonName {
66 t.Errorf("Wanted %v, got %v", subject, csr.Subject)
67 }
68 if len(csr.DNSNames) != 1 {
69 t.Errorf("Wanted 1 DNS name in the result, got %d", len(csr.DNSNames))
70 } else if csr.DNSNames[0] != dnsSANs[0] {
71 t.Errorf("Wanted %v, got %v", dnsSANs[0], csr.DNSNames[0])
72 }
73 if len(csr.IPAddresses) != 1 {
74 t.Errorf("Wanted 1 IP address in the result, got %d", len(csr.IPAddresses))
75 } else if csr.IPAddresses[0].String() != ipSANs[0].String() {
76 t.Errorf("Wanted %v, got %v", ipSANs[0], csr.IPAddresses[0])
77 }
78 }
79
View as plain text