Skip to content

Commit 31fe26b

Browse files
committed
ci: add more tests for GetCertsFromBundle and certMatchPrivateKey
1 parent e133573 commit 31fe26b

3 files changed

Lines changed: 110 additions & 45 deletions

File tree

internal/certinfo/common_handlers_test.go

Lines changed: 77 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -102,39 +102,59 @@ func TestCertinfo_GetRootCertsFromString(t *testing.T) {
102102
}
103103

104104
func TestCertinfo_GetCertsFromBundle(t *testing.T) {
105-
t.Run("FileReadErrors", func(t *testing.T) {
106-
t.Parallel()
107-
108-
_, errEmptyString := GetCertsFromBundle(
109-
emptyString,
110-
inputReader,
111-
)
112-
require.Error(t, errEmptyString)
113-
assert.Equal(t,
114-
"empty string provided as certBundlePath",
115-
errEmptyString.Error(),
116-
)
105+
readErrorTests := []struct {
106+
desc string
107+
certPath string
108+
reader Reader
109+
expectedMsg string
110+
}{
111+
{
112+
desc: "emptyString",
113+
certPath: emptyString,
114+
reader: inputReader,
115+
expectedMsg: "empty string provided as certBundlePath",
116+
},
117+
{
118+
desc: "unreadableFile",
119+
certPath: unreadableFile,
120+
reader: mockErrReader,
121+
expectedMsg: "error reading certificate file: unable to read file testdata/unreadable-file.txt",
122+
},
123+
{
124+
desc: "wrong file",
125+
certPath: RSACaCertKeyFile,
126+
reader: inputReader,
127+
expectedMsg: "no valid certificates found in file " + RSACaCertKeyFile,
128+
},
129+
{
130+
desc: "nil Reader",
131+
certPath: RSACaCertFile,
132+
reader: nil,
133+
expectedMsg: "nil Reader provided",
134+
},
135+
{
136+
desc: "broken cert file",
137+
certPath: RSASamplePKCS8BrokenCertificate,
138+
reader: inputReader,
139+
expectedMsg: "error parsing certificate: x509: inner and outer signature algorithm identifiers don't match",
140+
},
141+
}
117142

118-
_, errNoRead := GetCertsFromBundle(
119-
unreadableFile,
120-
mockErrReader,
121-
)
122-
require.Error(t, errNoRead)
123-
assert.Equal(t,
124-
"error reading certificate file: unable to read file testdata/unreadable-file.txt",
125-
errNoRead.Error(),
126-
)
143+
for _, tt := range readErrorTests {
144+
t.Run("Read error "+tt.desc, func(t *testing.T) {
145+
t.Parallel()
127146

128-
_, errWrongFile := GetCertsFromBundle(
129-
RSACaCertKeyFile,
130-
inputReader,
131-
)
132-
require.Error(t, errWrongFile)
133-
assert.Equal(t,
134-
"no valid certificates found in file "+RSACaCertKeyFile,
135-
errWrongFile.Error(),
136-
)
137-
})
147+
_, err := GetCertsFromBundle(
148+
tt.certPath,
149+
tt.reader,
150+
)
151+
require.Error(t, err)
152+
assert.Equal(t,
153+
tt.expectedMsg,
154+
err.Error(),
155+
)
156+
})
157+
}
138158

139159
t.Run("CertImportValidation", func(t *testing.T) {
140160
gotCerts, errCaString := GetCertsFromBundle(
@@ -152,15 +172,6 @@ func TestCertinfo_GetCertsFromBundle(t *testing.T) {
152172
)
153173
}
154174
})
155-
156-
t.Run("nil Reader error", func(t *testing.T) {
157-
_, err := GetCertsFromBundle(
158-
RSACaCertFile,
159-
nil,
160-
)
161-
require.Error(t, err)
162-
require.EqualError(t, err, "nil Reader provided")
163-
})
164175
}
165176

166177
func TestCertinfo_GetKeyFromFile_inputReaderErrors(t *testing.T) {
@@ -447,11 +458,25 @@ func TestCertinfo_getPassphraseIfNeeded(t *testing.T) {
447458
}
448459

449460
func TestCertinfo_certMatchPrivateKey_matchFalse(t *testing.T) {
461+
uncompleteCert := x509.Certificate{
462+
IsCA: false,
463+
}
464+
450465
matchFalseTests := []struct {
451-
desc string
452-
cert *x509.Certificate
453-
key crypto.PrivateKey
466+
desc string
467+
cert *x509.Certificate
468+
key crypto.PrivateKey
469+
expectErr bool
470+
expectMsg string
454471
}{
472+
{
473+
desc: "uncomplete cert",
474+
cert: &uncompleteCert,
475+
key: RSASampleCertKey,
476+
expectErr: true,
477+
expectMsg: "unsupported public key type in certificate",
478+
},
479+
455480
{
456481
desc: "key cert mismatch",
457482
cert: RSACaCertParent,
@@ -475,8 +500,15 @@ func TestCertinfo_certMatchPrivateKey_matchFalse(t *testing.T) {
475500
tt.cert,
476501
tt.key,
477502
)
478-
require.NoError(t, err)
479-
assert.False(t, match)
503+
if !tt.expectErr {
504+
require.NoError(t, err)
505+
assert.False(t, match)
506+
}
507+
508+
if tt.expectErr {
509+
require.Error(t, err)
510+
require.EqualError(t, err, tt.expectMsg)
511+
}
480512
})
481513
}
482514
}

internal/certinfo/main_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ var (
5151
RSASamplePKCS8EncryptedPrivateKey = testdataDir + "/rsa-pkcs8-encrypted-private-key.pem"
5252
RSASamplePKCS8EncBrokenPrivateKey = testdataDir + "/rsa-pkcs8-encrypted-broken-private-key.pem"
5353
RSASamplePKCS8Certificate = testdataDir + "/rsa-pkcs8-crt.pem"
54+
RSASamplePKCS8BrokenCertificate = testdataDir + "/rsa-pkcs8-broken-crt.pem"
5455

5556
ECDSASamplePlaintextPrivateKey = testdataDir + "/ecdsa-plaintext-private-key.pem"
5657
ECDSASampleEncryptedPrivateKey = testdataDir + "/ecdsa-encrypted-private-key.pem"
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIFbTCCA1WgAwIBAgIUBzx2EsVl+ybPvE466xTKQunu37cwDQYJKoZIhvcAAAAA
3+
BQAwXzELMAkGA1UEBhMCREUxEzARBgNVBAgMClNvbWUtU3RhdGUxDzANBgNBBBBB
4+
BkJlcmxpbjEUMBIGA1UECgwLZXhhbXBsZSBMdGQxFDASBgNVBAMMC2V4YW1CCCCC
5+
Y29tMB4XDTI1MTIxMjIyMDcwOFoXDTM1MTIxMDIyMDcwOFowXzELMAkGA1UEBhMC
6+
REUxEzARBgNVBAgMClNvbWUtU3RhdGUxDzANBgNVBAcMBkJlcmxpbjEUMBIGA1UE
7+
CgwLZXhhbXBsZSBMdGQxFDASBgNVBAMMC2V4YW1wbGUuY29tMIICIjANBgkqhkiG
8+
9w0BAQEFAAOCAg8AMIICCgKCAgEAtjvz7pjc6iXFHeCNEgQ9Fj/wLArQ2Rmuqhe2
9+
Lqozt4V8fI8euikVECxXHIF0cDoJmdyY9oU71VKW3qDPS0NcB51rUi0iyfoTPXCy
10+
Sig6tkAewbWc03doUifTLSxSmBz5cjdrZIKK8zkQBtdd3A/B7u/ewRXuRA567vN2
11+
2Gjc5EkrypJUrCWYeFlfcW1UzcbEMag4X3Z3YEmQXppz3EDsm72XZ+KHA3PytKv4
12+
rPM4IMtQkLMCIpvQ/NdbQXcwYorVo6dszCohqI2uc6hfQ0sbNEsvGX7/PakArNr8
13+
JkFif5DWS54tXzfzPz3HMbDFyjAURIguHBa6mBCq/tyTQvBNxNu+N+WERMqJjrKk
14+
MQVVbzZLeEov0cINJipI4IC09CqaHa3LUBsvJQmTRoEZJDvtKDmS6qw+eprJIHgU
15+
R5AJ4Is6CddLHUJnPKLoU3pZdsb7a3ks2d4PiHKuRaVJVs5495d/syfZYejB+C+r
16+
9Uyj48p4VuHknJG5JmGtEc9w5pnWdWiGfPJJCSt5C5cZhjDqIkU/g+LrhYULLQRC
17+
yFQ9oDLWo8zGf8xXYDKNutw/qfjBrCLGApNyqW1MibSQf1JNX3sVljDZaR5k20OW
18+
Yd00wqtubq8rw2KgoKV3KOQa/Dkq6SIFg4krbys+DqnZ2XKtL+Bq1OpAu558A76S
19+
zKjpKT8CAwEAAaMhMB8wHQYDVR0OBBYEFAjuAcgUUDpC4pmbUICqf9TYnsXEMA0G
20+
CSqGSIb3DQEBCwUAA4ICAQAAyrqWKwonL6ZCeuzEjCizXRv0bFSZZBKvggX1z+KS
21+
EDJppjA7vvzC0k9HuWat+qV69xkQ3u+BpnnPa0OSasqI6sQJIMt8Az7EVeqrS074
22+
qedulOIQzZnbH7NOht/EKso9Gz3iP7G3NKf1JsStc9FuSiWaiqsg83iLCAe1py/t
23+
8KM2G/vCvNPYIZAR8RwaNGgBicaOQsPW9PuNphQ9i1tcF2L0pstImoCuCzY0guRt
24+
Ku0syZweF8RYecnKxqSoWHL++vBWHHJ85O6RKjvSYWcCcaU6SkMlgTY7n7xvztrd
25+
U1GKlBnijObU+lIfNv9cxufy7KE9X5qQmwBbDkNPYQSif1dkCzs/3sWQq0aSvpHX
26+
XI/inejkNtInddchh2prdBLHn1yEilQ4Bow4H05ipsnFhB9W+154JpcYI8VN67xr
27+
xMw4DAG2S1byUIfiBW8hU5AKQE9c56SSUdci6kaFVC4FRvd1Nsd3HU/e3mLdw6J9
28+
iIXRnj5TBQkX7WipZKc1NBUXSWa1NNPl8oUe1BwaYG9cqOWWNbeprLBiToqPMpts
29+
0ENmMrxPXrl71akGpj5L7A8I+9W9VtQl5BGTy1fmscqVwlHxDh1iWwV1mLFrlSS0
30+
wlrSh0IajUFG0/M5lvVDH+LGg1z6tDA5KaD3YE4du7JBXFJNMI+kT0cCgNSWmows
31+
IA==
32+
-----END CERTIFICATE-----

0 commit comments

Comments
 (0)