Skip to content

Commit

Permalink
UnitTest: DockerConfLocation must return a file if it is existent and…
Browse files Browse the repository at this point in the history
… passed using env, or default if the file is incorrect
  • Loading branch information
akram committed Sep 29, 2020
1 parent 1e0c260 commit 612994c
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 11 deletions.
11 changes: 9 additions & 2 deletions pkg/executor/push.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,15 @@ const (
func DockerConfLocation() string {
configFile := "config.json"
if dockerConfig := os.Getenv("DOCKER_CONFIG"); dockerConfig != "" {
if file, err := os.Stat(dockerConfig); err == nil && file.IsDir() {
return filepath.Join(dockerConfig, configFile)
file, err := os.Stat(dockerConfig)
if err == nil {
if file.IsDir() {
return filepath.Join(dockerConfig, configFile)
}
} else {
if os.IsNotExist(err) {
return string(os.PathSeparator) + filepath.Join("kaniko", ".docker", configFile)
}
}
return filepath.Clean(dockerConfig)
}
Expand Down
70 changes: 61 additions & 9 deletions pkg/executor/push_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,11 @@ import (
"github.com/spf13/afero"
)

const (
DefaultKanikoDockerConfigJSON = "/kaniko/.docker/config.json"
DockerConfigEnvKey = "DOCKER_CONFIG"
)

func mustTag(t *testing.T, s string) name.Tag {
tag, err := name.NewTag(s, name.StrictValidation)
if err != nil {
Expand All @@ -45,15 +50,59 @@ func mustTag(t *testing.T, s string) name.Tag {
return tag
}

func TestDockerConfLocationWithFileLocation(t *testing.T) {
originalDockerConfig := os.Getenv(DockerConfigEnvKey)
if err := os.Unsetenv(DockerConfigEnvKey); err != nil {
t.Fatalf("Failed to unset DOCKER_CONFIG: %v", err)
}
file, err := ioutil.TempFile("", "docker.conf")
if err != nil {
t.Fatalf("could not create temp file: %s", err)
}
defer os.Remove(file.Name())
if err := os.Setenv(DockerConfigEnvKey, file.Name()); err != nil {
t.Fatalf("Failed to unset DOCKER_CONFIG: %v", err)
}
unset := DockerConfLocation()
unsetExpected := file.Name()
if unset != unsetExpected {
t.Errorf("Unexpected default Docker configuration file location: expected:'%s' got:'%s'", unsetExpected, unset)
}
restoreOriginalDockerConfigEnv(t, originalDockerConfig)
}

func TestDockerConfLocationWithInvalidFileLocation(t *testing.T) {
originalDockerConfig := os.Getenv(DockerConfigEnvKey)
if err := os.Unsetenv(DockerConfigEnvKey); err != nil {
t.Fatalf("Failed to unset DOCKER_CONFIG: %v", err)
}
tmpDir, err := ioutil.TempDir("", "*")
if err != nil {
t.Fatalf("could not create temp dir: %s", err)
}
defer os.RemoveAll(tmpDir)
random := "fdgdsfrdfgdf-fdfsf-24dsgfd" //replace with a really random string
file := filepath.Join(tmpDir, random) // an random file name, shouldn't exist
if err := os.Setenv(DockerConfigEnvKey, file); err != nil {
t.Fatalf("Failed to unset DOCKER_CONFIG: %v", err)
}
unset := DockerConfLocation()
// as file doesn't point to a real file, DockerConfLocation() should return the default kaniko path for config.json
unsetExpected := DefaultKanikoDockerConfigJSON
if unset != unsetExpected {
t.Errorf("Unexpected default Docker configuration file location: expected:'%s' got:'%s'", unsetExpected, unset)
}
restoreOriginalDockerConfigEnv(t, originalDockerConfig)
}

func TestDockerConfLocation(t *testing.T) {
dcfg := "DOCKER_CONFIG"
originalDockerConfig := os.Getenv(dcfg)
originalDockerConfig := os.Getenv(DockerConfigEnvKey)

if err := os.Unsetenv(dcfg); err != nil {
if err := os.Unsetenv(DockerConfigEnvKey); err != nil {
t.Fatalf("Failed to unset DOCKER_CONFIG: %v", err)
}
unset := DockerConfLocation()
unsetExpected := "/kaniko/.docker/config.json" // will fail on Windows
unsetExpected := DefaultKanikoDockerConfigJSON // will fail on Windows
if unset != unsetExpected {
t.Errorf("Unexpected default Docker configuration file location: expected:'%s' got:'%s'", unsetExpected, unset)
}
Expand All @@ -65,11 +114,11 @@ func TestDockerConfLocation(t *testing.T) {

dir := filepath.Join(tmpDir, "/kaniko/.docker")
os.MkdirAll(dir, os.ModePerm)
if err := os.Setenv(dcfg, dir); err != nil {
if err := os.Setenv(DockerConfigEnvKey, dir); err != nil {
t.Fatalf("Failed to set DOCKER_CONFIG: %v", err)
}
kanikoDefault := DockerConfLocation()
kanikoDefaultExpected := filepath.Join(tmpDir, "/kaniko/.docker/config.json") // will fail on Windows
kanikoDefaultExpected := filepath.Join(tmpDir, DefaultKanikoDockerConfigJSON) // will fail on Windows
if kanikoDefault != kanikoDefaultExpected {
t.Errorf("Unexpected kaniko default Docker conf file location: expected:'%s' got:'%s'", kanikoDefaultExpected, kanikoDefault)
}
Expand All @@ -79,21 +128,24 @@ func TestDockerConfLocation(t *testing.T) {
t.Fatalf("could not create temp dir: %s", err)
}
defer os.RemoveAll(differentPath)
if err := os.Setenv(dcfg, differentPath); err != nil {
if err := os.Setenv(DockerConfigEnvKey, differentPath); err != nil {
t.Fatalf("Failed to set DOCKER_CONFIG: %v", err)
}
set := DockerConfLocation()
setExpected := filepath.Join(differentPath, "config.json") // will fail on Windows ?
if set != setExpected {
t.Errorf("Unexpected DOCKER_CONF-based file location: expected:'%s' got:'%s'", setExpected, set)
}
restoreOriginalDockerConfigEnv(t, originalDockerConfig)
}

func restoreOriginalDockerConfigEnv(t *testing.T, originalDockerConfig string) {
if originalDockerConfig != "" {
if err := os.Setenv(dcfg, originalDockerConfig); err != nil {
if err := os.Setenv(DockerConfigEnvKey, originalDockerConfig); err != nil {
t.Fatalf("Failed to set DOCKER_CONFIG back to original value '%s': %v", originalDockerConfig, err)
}
} else {
if err := os.Unsetenv(dcfg); err != nil {
if err := os.Unsetenv(DockerConfigEnvKey); err != nil {
t.Fatalf("Failed to unset DOCKER_CONFIG after testing: %v", err)
}
}
Expand Down

0 comments on commit 612994c

Please sign in to comment.