github.com/secure-build/gitlab-runner@v12.5.0+incompatible/helpers/tls/ca_chain/resolver_chain_test.go (about) 1 package ca_chain 2 3 import ( 4 "crypto/x509" 5 "errors" 6 "math/big" 7 "testing" 8 9 "github.com/stretchr/testify/assert" 10 ) 11 12 type resolverMockFactory func(t *testing.T) (resolver, func()) 13 14 func newResolverMock(inputCerts []*x509.Certificate, returnCerts []*x509.Certificate, returnErr error) resolverMockFactory { 15 return func(t *testing.T) (resolver, func()) { 16 mock := new(mockResolver) 17 cleanup := func() { 18 mock.AssertExpectations(t) 19 } 20 21 mock. 22 On("Resolve", inputCerts). 23 Return(returnCerts, returnErr). 24 Once() 25 26 return mock, cleanup 27 } 28 } 29 30 func TestChainResolver_Resolve(t *testing.T) { 31 testError := errors.New("test error") 32 33 certs := []*x509.Certificate{{SerialNumber: big.NewInt(1)}} 34 urlCerts := []*x509.Certificate{{SerialNumber: big.NewInt(2)}} 35 verifyCerts := []*x509.Certificate{{SerialNumber: big.NewInt(3)}} 36 37 noopMock := func(t *testing.T) (resolver, func()) { return nil, func() {} } 38 39 tests := map[string]struct { 40 urlResolver resolverMockFactory 41 verifyResolver resolverMockFactory 42 expectedError string 43 expectedCerts []*x509.Certificate 44 }{ 45 "error on urlResolver": { 46 urlResolver: newResolverMock(certs, nil, testError), 47 verifyResolver: noopMock, 48 expectedError: "error while resolving certificates chain with URL: test error", 49 expectedCerts: nil, 50 }, 51 "error on verifyResolver": { 52 urlResolver: newResolverMock(certs, urlCerts, nil), 53 verifyResolver: newResolverMock(urlCerts, nil, testError), 54 expectedError: "error while resolving certificates chain with verification: test error", 55 expectedCerts: nil, 56 }, 57 "certificates resolved properly": { 58 urlResolver: newResolverMock(certs, urlCerts, nil), 59 verifyResolver: newResolverMock(urlCerts, verifyCerts, nil), 60 expectedError: "", 61 expectedCerts: verifyCerts, 62 }, 63 } 64 65 for tn, tc := range tests { 66 t.Run(tn, func(t *testing.T) { 67 urlResolver, cleanupURLResolver := tc.urlResolver(t) 68 defer cleanupURLResolver() 69 70 verifyResolver, cleanupVerifyResolver := tc.verifyResolver(t) 71 defer cleanupVerifyResolver() 72 73 r := newChainResolver(urlResolver, verifyResolver) 74 newCerts, err := r.Resolve(certs) 75 76 if tc.expectedError != "" { 77 assert.EqualError(t, err, tc.expectedError) 78 } else { 79 assert.NoError(t, err) 80 } 81 82 assert.Equal(t, tc.expectedCerts, newCerts) 83 }) 84 } 85 }