github.com/jaylevin/jenkins-library@v1.230.4/pkg/certutils/certutils_test.go (about) 1 package certutils 2 3 import ( 4 "fmt" 5 "net/http" 6 "testing" 7 8 piperhttp "github.com/SAP/jenkins-library/pkg/http" 9 "github.com/SAP/jenkins-library/pkg/mock" 10 "github.com/jarcoal/httpmock" 11 "github.com/stretchr/testify/assert" 12 ) 13 14 const ( 15 caCertsFile = "/kaniko/ssl/certs/ca-certificates.crt" 16 ) 17 18 func TestCertificateUpdate(t *testing.T) { 19 certLinks := []string{"https://test-link-1.com/cert.crt", "https://test-link-2.com/cert.crt"} 20 httpmock.Activate() 21 defer httpmock.DeactivateAndReset() 22 httpmock.RegisterResponder(http.MethodGet, "https://test-link-1.com/cert.crt", httpmock.NewStringResponder(200, "testCert")) 23 httpmock.RegisterResponder(http.MethodGet, "https://test-link-2.com/cert.crt", httpmock.NewStringResponder(200, "testCert")) 24 client := &piperhttp.Client{} 25 client.SetOptions(piperhttp.ClientOptions{MaxRetries: -1, UseDefaultTransport: true}) 26 27 t.Run("success case", func(t *testing.T) { 28 fileUtils := &mock.FilesMock{} 29 fileUtils.AddFile(caCertsFile, []byte("initial cert\n")) 30 31 err := CertificateUpdate(certLinks, client, fileUtils, caCertsFile) 32 33 assert.NoError(t, err) 34 result, err := fileUtils.FileRead(caCertsFile) 35 assert.NoError(t, err) 36 assert.Equal(t, "initial cert\ntestCert\ntestCert\n", string(result)) 37 }) 38 39 t.Run("error case - read certs", func(t *testing.T) { 40 client := &piperhttp.Client{} 41 fileUtils := &mock.FilesMock{} 42 43 err := CertificateUpdate(certLinks, client, fileUtils, caCertsFile) 44 assert.EqualError(t, err, "failed to load file '/kaniko/ssl/certs/ca-certificates.crt': could not read '/kaniko/ssl/certs/ca-certificates.crt'") 45 }) 46 47 t.Run("error case - write certs", func(t *testing.T) { 48 fileUtils := &mock.FilesMock{ 49 FileWriteErrors: map[string]error{ 50 caCertsFile: fmt.Errorf("write error"), 51 }, 52 } 53 fileUtils.AddFile(caCertsFile, []byte("initial cert\n")) 54 55 err := CertificateUpdate(certLinks, client, fileUtils, caCertsFile) 56 assert.EqualError(t, err, "failed to update file '/kaniko/ssl/certs/ca-certificates.crt': write error") 57 }) 58 59 t.Run("error case - get cert via http", func(t *testing.T) { 60 httpmock.RegisterResponder(http.MethodGet, "http://non-existing-url", httpmock.NewStringResponder(404, "not found")) 61 62 fileUtils := &mock.FilesMock{} 63 fileUtils.AddFile(caCertsFile, []byte("initial cert\n")) 64 65 err := CertificateUpdate([]string{"http://non-existing-url"}, client, fileUtils, caCertsFile) 66 assert.Contains(t, err.Error(), "failed to load certificate from url: request to http://non-existing-url returned with response 404") 67 }) 68 69 }