1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2024-12-14 11:03:09 +02:00
sap-jenkins-library/pkg/certutils/certutils_test.go
Jk1484 ffc931aad1
feat(golangBuild): use 'unit' build tag to include tests during test execution (#4345)
* Added unit tag as argument. Added description to runTests command. Changed code generator to have unit build tag in generated unit test files.

* Added unit build tag to all unit test files.

* added to new unit test unit build tag

* Update verify-go.yml

* small fix

---------

Co-authored-by: Muhammadali Nazarov <Muhammadali.Nazarov@acronis.com>
Co-authored-by: Christopher Fenner <26137398+CCFenner@users.noreply.github.com>
2023-05-03 21:02:11 +05:00

73 lines
2.5 KiB
Go

//go:build unit
// +build unit
package certutils
import (
"fmt"
"net/http"
"testing"
piperhttp "github.com/SAP/jenkins-library/pkg/http"
"github.com/SAP/jenkins-library/pkg/mock"
"github.com/jarcoal/httpmock"
"github.com/stretchr/testify/assert"
)
const (
caCertsFile = "/kaniko/ssl/certs/ca-certificates.crt"
)
func TestCertificateUpdate(t *testing.T) {
certLinks := []string{"https://test-link-1.com/cert.crt", "https://test-link-2.com/cert.crt"}
httpmock.Activate()
defer httpmock.DeactivateAndReset()
httpmock.RegisterResponder(http.MethodGet, "https://test-link-1.com/cert.crt", httpmock.NewStringResponder(200, "testCert"))
httpmock.RegisterResponder(http.MethodGet, "https://test-link-2.com/cert.crt", httpmock.NewStringResponder(200, "testCert"))
client := &piperhttp.Client{}
client.SetOptions(piperhttp.ClientOptions{MaxRetries: -1, UseDefaultTransport: true})
t.Run("success case", func(t *testing.T) {
fileUtils := &mock.FilesMock{}
fileUtils.AddFile(caCertsFile, []byte("initial cert\n"))
err := CertificateUpdate(certLinks, client, fileUtils, caCertsFile)
assert.NoError(t, err)
result, err := fileUtils.FileRead(caCertsFile)
assert.NoError(t, err)
assert.Equal(t, "initial cert\ntestCert\ntestCert\n", string(result))
})
t.Run("error case - read certs", func(t *testing.T) {
client := &piperhttp.Client{}
fileUtils := &mock.FilesMock{}
err := CertificateUpdate(certLinks, client, fileUtils, caCertsFile)
assert.EqualError(t, err, "failed to load file '/kaniko/ssl/certs/ca-certificates.crt': could not read '/kaniko/ssl/certs/ca-certificates.crt'")
})
t.Run("error case - write certs", func(t *testing.T) {
fileUtils := &mock.FilesMock{
FileWriteErrors: map[string]error{
caCertsFile: fmt.Errorf("write error"),
},
}
fileUtils.AddFile(caCertsFile, []byte("initial cert\n"))
err := CertificateUpdate(certLinks, client, fileUtils, caCertsFile)
assert.EqualError(t, err, "failed to update file '/kaniko/ssl/certs/ca-certificates.crt': write error")
})
t.Run("error case - get cert via http", func(t *testing.T) {
httpmock.RegisterResponder(http.MethodGet, "http://non-existing-url", httpmock.NewStringResponder(404, "not found"))
fileUtils := &mock.FilesMock{}
fileUtils.AddFile(caCertsFile, []byte("initial cert\n"))
err := CertificateUpdate([]string{"http://non-existing-url"}, client, fileUtils, caCertsFile)
assert.Contains(t, err.Error(), "failed to load certificate from url: request to http://non-existing-url returned with response 404")
})
}