github.com/jaylevin/jenkins-library@v1.230.4/cmd/containerSaveImage_test.go (about) 1 package cmd 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "os" 7 "path/filepath" 8 "testing" 9 10 "github.com/SAP/jenkins-library/pkg/mock" 11 "github.com/SAP/jenkins-library/pkg/telemetry" 12 "github.com/stretchr/testify/assert" 13 14 v1 "github.com/google/go-containerregistry/pkg/v1" 15 "github.com/google/go-containerregistry/pkg/v1/fake" 16 ) 17 18 func TestRunContainerSaveImage(t *testing.T) { 19 telemetryData := telemetry.CustomData{} 20 21 t.Run("success case", func(t *testing.T) { 22 config := containerSaveImageOptions{} 23 config.FilePath = "testfile.tar" 24 25 dClient := mock.DownloadMock{} 26 files := mock.FilesMock{} 27 28 cacheFolder, err := files.TempDir("", "containerSaveImage-") 29 assert.NoError(t, err) 30 31 dClient.Stub = func(imgRef string, dest string) (v1.Image, error) { 32 files.AddFile(dest, []byte("This is a test")) 33 return &fake.FakeImage{}, nil 34 } 35 36 filePath, err := runContainerSaveImage(&config, &telemetryData, cacheFolder, cacheFolder, &dClient, &files) 37 assert.NoError(t, err) 38 39 content, err := files.FileRead(filepath.Join(cacheFolder, "testfile.tar")) 40 assert.NoError(t, err) 41 assert.Equal(t, "This is a test", string(content)) 42 43 assert.Contains(t, filePath, "testfile.tar") 44 }) 45 46 t.Run("failure - download image", func(t *testing.T) { 47 config := containerSaveImageOptions{} 48 tmpFolder, err := ioutil.TempDir("", "") 49 if err != nil { 50 t.Fatal("failed to create temp dir") 51 } 52 defer os.RemoveAll(tmpFolder) 53 54 dClient := mock.DownloadMock{ReturnError: "download error"} 55 files := mock.FilesMock{} 56 _, err = runContainerSaveImage(&config, &telemetryData, filepath.Join(tmpFolder, "cache"), tmpFolder, &dClient, &files) 57 assert.EqualError(t, err, "failed to download docker image: download error") 58 }) 59 } 60 61 func TestFilenameFromContainer(t *testing.T) { 62 63 tt := []struct { 64 rootPath string 65 containerImage string 66 expected string 67 }{ 68 {rootPath: "", containerImage: "image:tag", expected: "image_tag.tar"}, 69 {rootPath: "root/path", containerImage: "image:tag", expected: filepath.Join("root/path", "image_tag.tar")}, 70 {rootPath: "", containerImage: "my.registry.com:55555/path/to/my/image:tag", expected: "my_registry_com_55555_path_to_my_image_tag.tar"}, 71 {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")}, 72 } 73 74 for _, test := range tt { 75 assert.Equal(t, test.expected, filenameFromContainer(test.rootPath, test.containerImage)) 76 } 77 78 } 79 80 func TestCorrectContainerDockerConfigEnvVar(t *testing.T) { 81 t.Run("with credentials", func(t *testing.T) { 82 // init 83 utilsMock := mock.FilesMock{} 84 utilsMock.CurrentDir = "/tmp/test" 85 86 dockerConfigFile := "myConfig/docker.json" 87 utilsMock.AddFile(dockerConfigFile, []byte("{}")) 88 89 resetValue := os.Getenv("DOCKER_CONFIG") 90 os.Setenv("DOCKER_CONFIG", "") 91 defer os.Setenv("DOCKER_CONFIG", resetValue) 92 93 // test 94 correctContainerDockerConfigEnvVar(&containerSaveImageOptions{DockerConfigJSON: dockerConfigFile}, &utilsMock) 95 // assert 96 assert.NotNil(t, os.Getenv("DOCKER_CONFIG")) 97 }) 98 t.Run("with added credentials", func(t *testing.T) { 99 // init 100 utilsMock := mock.FilesMock{} 101 utilsMock.CurrentDir = "/tmp/test" 102 103 dockerConfigFile := "myConfig/docker.json" 104 utilsMock.AddFile(dockerConfigFile, []byte("{}")) 105 106 resetValue := os.Getenv("DOCKER_CONFIG") 107 os.Setenv("DOCKER_CONFIG", "") 108 defer os.Setenv("DOCKER_CONFIG", resetValue) 109 110 // test 111 correctContainerDockerConfigEnvVar(&containerSaveImageOptions{DockerConfigJSON: dockerConfigFile, ContainerRegistryURL: "https://test.registry", ContainerRegistryUser: "testuser", ContainerRegistryPassword: "testPassword"}, &utilsMock) 112 // assert 113 assert.NotNil(t, os.Getenv("DOCKER_CONFIG")) 114 absoluteFilePath, _ := utilsMock.Abs(fmt.Sprintf("%s/%s", os.Getenv("DOCKER_CONFIG"), "config.json")) 115 content, _ := utilsMock.FileRead(absoluteFilePath) 116 assert.Contains(t, string(content), "https://test.registry") 117 }) 118 t.Run("without credentials", func(t *testing.T) { 119 // init 120 utilsMock := mock.FilesMock{} 121 resetValue := os.Getenv("DOCKER_CONFIG") 122 os.Setenv("DOCKER_CONFIG", "") 123 defer os.Setenv("DOCKER_CONFIG", resetValue) 124 // test 125 correctContainerDockerConfigEnvVar(&containerSaveImageOptions{}, &utilsMock) 126 // assert 127 assert.NotNil(t, os.Getenv("DOCKER_CONFIG")) 128 }) 129 }