From 6b5b88c2bc53d74da600cabb85f9c8b796005893 Mon Sep 17 00:00:00 2001 From: Tejal Desai Date: Fri, 4 Oct 2019 14:27:24 -0700 Subject: [PATCH] fix creating abs path for urls --- cmd/executor/cmd/root.go | 22 +++++--- cmd/executor/cmd/root_test.go | 99 +++++++++++++++++++++++++++++++++++ 2 files changed, 113 insertions(+), 8 deletions(-) create mode 100644 cmd/executor/cmd/root_test.go diff --git a/cmd/executor/cmd/root.go b/cmd/executor/cmd/root.go index 7eb34bf904..344b798449 100644 --- a/cmd/executor/cmd/root.go +++ b/cmd/executor/cmd/root.go @@ -168,7 +168,7 @@ func cacheFlagsValid() error { // resolveDockerfilePath resolves the Dockerfile path to an absolute path func resolveDockerfilePath() error { - if match, _ := regexp.MatchString("^https?://", opts.DockerfilePath); match { + if isUrl(opts.DockerfilePath) { return nil } if util.FilepathExists(opts.DockerfilePath) { @@ -241,13 +241,8 @@ func resolveRelativePaths() error { } for _, p := range optsPaths { - // Skip empty path - if *p == "" { - continue - } - // Skip path that is already absolute - if filepath.IsAbs(*p) { - logrus.Debugf("Path %s is absolute, skipping", *p) + if path := *p; skipPath(path) { + logrus.Debugf("Skip resolving path %s", path) continue } @@ -266,3 +261,14 @@ func exit(err error) { fmt.Println(err) os.Exit(1) } + +func isUrl(path string) bool { + if match, _ := regexp.MatchString("^https?://", path); match { + return true + } + return false +} + +func skipPath(path string) bool { + return path == "" || isUrl(path) || filepath.IsAbs(path) +} diff --git a/cmd/executor/cmd/root_test.go b/cmd/executor/cmd/root_test.go new file mode 100644 index 0000000000..ee629cffe5 --- /dev/null +++ b/cmd/executor/cmd/root_test.go @@ -0,0 +1,99 @@ +/* +Copyright 2018 Google LLC + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package cmd + +import ( + "testing" + + "github.com/GoogleContainerTools/kaniko/testutil" +) + +func TestSkipPath(t *testing.T) { + tests := []struct { + description string + path string + expected bool + }{ + { + description: "path is a http url", + path: "http://test", + expected: true, + }, + { + description: "path is a https url", + path: "https://test", + expected: true, + }, + { + description: "path is a empty", + path: "", + expected: true, + }, + { + description: "path is already abs", + path: "/tmp/test", + expected: true, + }, + { + description: "path is relative", + path: ".././test", + }, + } + + for _, tt := range tests { + t.Run(tt.description, func(t *testing.T) { + testutil.CheckDeepEqual(t, tt.expected, skipPath(tt.path)) + }) + } +} + +func TestIsUrl(t *testing.T) { + tests := []struct { + description string + path string + expected bool + }{ + { + description: "path is a http url", + path: "http://test", + expected: true, + }, + { + description: "path is a https url", + path: "https://test", + expected: true, + }, + { + description: "path is a empty", + path: "", + }, + { + description: "path is already abs", + path: "/tmp/test", + }, + { + description: "path is relative", + path: ".././test", + }, + } + + for _, tt := range tests { + t.Run(tt.description, func(t *testing.T) { + testutil.CheckDeepEqual(t, tt.expected, isUrl(tt.path)) + }) + } +}