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  }