From db6f6c5ad3d6c74369df4d3ba9fcdb521db8a44a Mon Sep 17 00:00:00 2001 From: Tejal Desai Date: Mon, 3 Feb 2020 10:11:40 -0800 Subject: [PATCH] more tests and do not error out if user not found --- pkg/commands/user.go | 21 ++++++++++++++------- pkg/commands/user_test.go | 34 +++++++++++++++++++++------------- 2 files changed, 35 insertions(+), 20 deletions(-) diff --git a/pkg/commands/user.go b/pkg/commands/user.go index 35568f74d..d1e4ceb94 100644 --- a/pkg/commands/user.go +++ b/pkg/commands/user.go @@ -17,6 +17,8 @@ limitations under the License. package commands import ( + "fmt" + "github.com/pkg/errors" "strings" "github.com/GoogleContainerTools/kaniko/pkg/dockerfile" @@ -43,17 +45,13 @@ func (r *UserCommand) ExecuteCommand(config *v1.Config, buildArgs *dockerfile.Bu replacementEnvs := buildArgs.ReplacementEnvs(config.Env) userStr, err := util.ResolveEnvironmentReplacement(userAndGroup[0], replacementEnvs, false) if err != nil { - return err + return errors.Wrap(err, fmt.Sprintf("resolving user %s", userAndGroup[0])) } - userObj, err := Lookup(userStr) - if err != nil { - return err - } - groupStr := userObj.Gid + var groupStr = setGroupDefault(userStr) if len(userAndGroup) > 1 { groupStr, err = util.ResolveEnvironmentReplacement(userAndGroup[1], replacementEnvs, false) if err != nil { - return err + return errors.Wrap(err, fmt.Sprintf("resolving group %s", userAndGroup[1])) } } @@ -66,3 +64,12 @@ func (r *UserCommand) ExecuteCommand(config *v1.Config, buildArgs *dockerfile.Bu func (r *UserCommand) String() string { return r.cmd.String() } + +func setGroupDefault(userStr string) string { + userObj, err := Lookup(userStr) + if err != nil { + logrus.Debugf("could not lookup user %s. Setting group empty", userStr) + return "" + } + return userObj.Gid +} diff --git a/pkg/commands/user_test.go b/pkg/commands/user_test.go index a0db5decb..fc90e2ca9 100644 --- a/pkg/commands/user_test.go +++ b/pkg/commands/user_test.go @@ -16,6 +16,7 @@ limitations under the License. package commands import ( + "fmt" "os/user" "testing" @@ -29,66 +30,70 @@ import ( var userTests = []struct { user string - userObj user.User + userObj *user.User expectedUID string expectedGID string }{ { user: "root", - userObj: user.User{Uid: "root", Gid: "root"}, + userObj: &user.User{Uid: "root", Gid: "root"}, expectedUID: "root:root", }, { user: "root-add", - userObj: user.User{Uid: "root-add", Gid: "root"}, + userObj: &user.User{Uid: "root-add", Gid: "root"}, expectedUID: "root-add:root", }, { user: "0", - userObj: user.User{Uid: "0", Gid: "0"}, + userObj: &user.User{Uid: "0", Gid: "0"}, expectedUID: "0:0", }, { user: "fakeUser", - userObj: user.User{Uid: "fakeUser", Gid: "fakeUser"}, + userObj: &user.User{Uid: "fakeUser", Gid: "fakeUser"}, expectedUID: "fakeUser:fakeUser", }, { user: "root:root", - userObj: user.User{Uid: "root", Gid: "some"}, + userObj: &user.User{Uid: "root", Gid: "some"}, expectedUID: "root:root", }, { user: "0:root", - userObj: user.User{Uid: "0"}, + userObj: &user.User{Uid: "0"}, expectedUID: "0:root", }, { user: "root:0", - userObj: user.User{Uid: "root"}, + userObj: &user.User{Uid: "root"}, expectedUID: "root:0", expectedGID: "f0", }, { user: "0:0", - userObj: user.User{Uid: "0"}, + userObj: &user.User{Uid: "0"}, expectedUID: "0:0", }, { user: "$envuser", - userObj: user.User{Uid: "root", Gid: "root"}, + userObj: &user.User{Uid: "root", Gid: "root"}, expectedUID: "root:root", }, { user: "root:$envgroup", - userObj: user.User{Uid: "root"}, + userObj: &user.User{Uid: "root"}, expectedUID: "root:grp", }, { user: "some:grp", - userObj: user.User{Uid: "some"}, + userObj: &user.User{Uid: "some"}, expectedUID: "some:grp", }, + { + user: "some", + expectedUID: "some:", + }, } func TestUpdateUser(t *testing.T) { @@ -105,7 +110,10 @@ func TestUpdateUser(t *testing.T) { }, } Lookup = func(_ string) (*user.User, error) { - return &test.userObj, nil + if test.userObj != nil { + return test.userObj, nil + } + return nil, fmt.Errorf("error while looking up user.") } defer func() { Lookup = util.Lookup }() buildArgs := dockerfile.NewBuildArgs([]string{})