1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2024-12-12 10:55:20 +02:00
sap-jenkins-library/cmd/containerSaveImage_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

131 lines
4.2 KiB
Go

//go:build unit
// +build unit
package cmd
import (
"fmt"
"os"
"path/filepath"
"testing"
"github.com/SAP/jenkins-library/pkg/mock"
"github.com/SAP/jenkins-library/pkg/telemetry"
"github.com/stretchr/testify/assert"
v1 "github.com/google/go-containerregistry/pkg/v1"
"github.com/google/go-containerregistry/pkg/v1/fake"
)
func TestRunContainerSaveImage(t *testing.T) {
telemetryData := telemetry.CustomData{}
t.Run("success case", func(t *testing.T) {
config := containerSaveImageOptions{}
config.FilePath = "testfile.tar"
dClient := mock.DownloadMock{}
files := mock.FilesMock{}
cacheFolder, err := files.TempDir("", "containerSaveImage-")
assert.NoError(t, err)
dClient.Stub = func(imgRef string, dest string) (v1.Image, error) {
files.AddFile(dest, []byte("This is a test"))
return &fake.FakeImage{}, nil
}
filePath, err := runContainerSaveImage(&config, &telemetryData, cacheFolder, cacheFolder, &dClient, &files)
assert.NoError(t, err)
content, err := files.FileRead(filepath.Join(cacheFolder, "testfile.tar"))
assert.NoError(t, err)
assert.Equal(t, "This is a test", string(content))
assert.Contains(t, filePath, "testfile.tar")
})
t.Run("failure - download image", func(t *testing.T) {
config := containerSaveImageOptions{}
tmpFolder := t.TempDir()
dClient := mock.DownloadMock{ReturnError: "download error"}
files := mock.FilesMock{}
_, err := runContainerSaveImage(&config, &telemetryData, filepath.Join(tmpFolder, "cache"), tmpFolder, &dClient, &files)
assert.EqualError(t, err, "failed to download docker image: download error")
})
}
func TestFilenameFromContainer(t *testing.T) {
tt := []struct {
rootPath string
containerImage string
expected string
}{
{rootPath: "", containerImage: "image:tag", expected: "image_tag.tar"},
{rootPath: "root/path", containerImage: "image:tag", expected: filepath.Join("root/path", "image_tag.tar")},
{rootPath: "", containerImage: "my.registry.com:55555/path/to/my/image:tag", expected: "my_registry_com_55555_path_to_my_image_tag.tar"},
{rootPath: "root/path", containerImage: "my.registry.com:55555/path/to/my/image:tag", expected: filepath.Join("root/path", "my_registry_com_55555_path_to_my_image_tag.tar")},
}
for _, test := range tt {
assert.Equal(t, test.expected, filenameFromContainer(test.rootPath, test.containerImage))
}
}
func TestCorrectContainerDockerConfigEnvVar(t *testing.T) {
t.Run("with credentials", func(t *testing.T) {
// init
utilsMock := mock.FilesMock{}
utilsMock.CurrentDir = "/tmp/test"
dockerConfigFile := "myConfig/docker.json"
utilsMock.AddFile(dockerConfigFile, []byte("{}"))
resetValue := os.Getenv("DOCKER_CONFIG")
os.Setenv("DOCKER_CONFIG", "")
defer os.Setenv("DOCKER_CONFIG", resetValue)
// test
err := correctContainerDockerConfigEnvVar(&containerSaveImageOptions{DockerConfigJSON: dockerConfigFile}, &utilsMock)
// assert
assert.NoError(t, err)
assert.NotNil(t, os.Getenv("DOCKER_CONFIG"))
})
t.Run("with added credentials", func(t *testing.T) {
// init
utilsMock := mock.FilesMock{}
utilsMock.CurrentDir = "/tmp/test"
dockerConfigFile := "myConfig/docker.json"
utilsMock.AddFile(dockerConfigFile, []byte("{}"))
resetValue := os.Getenv("DOCKER_CONFIG")
os.Setenv("DOCKER_CONFIG", "")
defer os.Setenv("DOCKER_CONFIG", resetValue)
// test
err := correctContainerDockerConfigEnvVar(&containerSaveImageOptions{DockerConfigJSON: dockerConfigFile, ContainerRegistryURL: "https://test.registry", ContainerRegistryUser: "testuser", ContainerRegistryPassword: "testPassword"}, &utilsMock)
// assert
assert.NoError(t, err)
assert.NotNil(t, os.Getenv("DOCKER_CONFIG"))
absoluteFilePath, _ := utilsMock.Abs(fmt.Sprintf("%s/%s", os.Getenv("DOCKER_CONFIG"), "config.json"))
content, _ := utilsMock.FileRead(absoluteFilePath)
assert.Contains(t, string(content), "https://test.registry")
})
t.Run("without credentials", func(t *testing.T) {
// init
utilsMock := mock.FilesMock{}
resetValue := os.Getenv("DOCKER_CONFIG")
os.Setenv("DOCKER_CONFIG", "")
defer os.Setenv("DOCKER_CONFIG", resetValue)
// test
err := correctContainerDockerConfigEnvVar(&containerSaveImageOptions{}, &utilsMock)
// assert
assert.NoError(t, err)
assert.NotNil(t, os.Getenv("DOCKER_CONFIG"))
})
}