@@ -190,7 +190,7 @@ func makeTestCertFile(t *testing.T, pem, dir string) *os.File {
192func TestGetCertPool_NoRoots(t *testing.T) {
192func TestGetCertPool_NoRoots(t *testing.T) {
193− _, err := GetCertPool([]string(nil))
193+ _, err := GetCertPool([]string(nil), false)
194 assert.Error(t, err, "invalid empty list of Root CAs file paths")
194 assert.Error(t, err, "invalid empty list of Root CAs file paths")
@@ -204,34 +204,52 @@ func TestGetCertPool(t *testing.T) {
205 }(tempDir)
205 }(tempDir)
207+ rootPool, _ := x509.SystemCertPool()
208+ cleanPool := x509.NewCertPool()
207 certFile1 := makeTestCertFile(t, root1Cert, tempDir)
218 certFile1 := makeTestCertFile(t, root1Cert, tempDir)
208 certFile2 := makeTestCertFile(t, root2Cert, tempDir)
219 certFile2 := makeTestCertFile(t, root2Cert, tempDir)
210− certPool, err := GetCertPool([]string{certFile1.Name(), certFile2.Name()})
221+ for _, tc := range tests {
211− assert.NoError(t, err)
222+ // Append certs to "known" pool so we can compare them
223+ assert.True(t, tc.pool.AppendCertsFromPEM([]byte(root1Cert)))
224+ assert.True(t, tc.pool.AppendCertsFromPEM([]byte(root2Cert)))
213− cert1Block, _ := pem.Decode([]byte(cert1Cert))
226+ certPool, err := GetCertPool([]string{certFile1.Name(), certFile2.Name()}, tc.appendCerts)
214− cert1, _ := x509.ParseCertificate(cert1Block.Bytes)
227+ assert.NoError(t, err)
215− assert.Equal(t, cert1.Subject.String(), cert1CertSubj)
228+ assert.True(t, tc.pool.Equal(certPool))
217− cert2Block, _ := pem.Decode([]byte(cert2Cert))
230+ cert1Block, _ := pem.Decode([]byte(cert1Cert))
218− cert2, _ := x509.ParseCertificate(cert2Block.Bytes)
231+ cert1, _ := x509.ParseCertificate(cert1Block.Bytes)
219− assert.Equal(t, cert2.Subject.String(), cert2CertSubj)
232+ assert.Equal(t, cert1.Subject.String(), cert1CertSubj)
221− cert3Block, _ := pem.Decode([]byte(cert3Cert))
234+ cert2Block, _ := pem.Decode([]byte(cert2Cert))
222− cert3, _ := x509.ParseCertificate(cert3Block.Bytes)
235+ cert2, _ := x509.ParseCertificate(cert2Block.Bytes)
223− assert.Equal(t, cert3.Subject.String(), cert3CertSubj)
236+ assert.Equal(t, cert2.Subject.String(), cert2CertSubj)
238+ cert3Block, _ := pem.Decode([]byte(cert3Cert))
239+ cert3, _ := x509.ParseCertificate(cert3Block.Bytes)
240+ assert.Equal(t, cert3.Subject.String(), cert3CertSubj)
225− opts := x509.VerifyOptions{
242+ opts := x509.VerifyOptions{
226− Roots: certPool,
243+ Roots: certPool,
229− // "cert1" and "cert2" should be valid because "root1" and "root2" are in the certPool
246+ // "cert1" and "cert2" should be valid because "root1" and "root2" are in the certPool
230− // "cert3" should not be valid because "root3" is not in the certPool
247+ // "cert3" should not be valid because "root3" is not in the certPool
231− _, err1 := cert1.Verify(opts)
248+ _, err1 := cert1.Verify(opts)
232− assert.NoError(t, err1)
249+ assert.NoError(t, err1)
233− _, err2 := cert2.Verify(opts)
250+ _, err2 := cert2.Verify(opts)
234− assert.NoError(t, err2)
251+ assert.NoError(t, err2)
235− _, err3 := cert3.Verify(opts)
252+ _, err3 := cert3.Verify(opts)
236− assert.Error(t, err3)
253+ assert.Error(t, err3)