more tests and do not error out if user not found

This commit is contained in:
Tejal Desai 2020-02-03 10:11:40 -08:00
parent 6894be442f
commit db6f6c5ad3
2 changed files with 35 additions and 20 deletions

View File

@ -17,6 +17,8 @@ limitations under the License.
package commands package commands
import ( import (
"fmt"
"github.com/pkg/errors"
"strings" "strings"
"github.com/GoogleContainerTools/kaniko/pkg/dockerfile" "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) replacementEnvs := buildArgs.ReplacementEnvs(config.Env)
userStr, err := util.ResolveEnvironmentReplacement(userAndGroup[0], replacementEnvs, false) userStr, err := util.ResolveEnvironmentReplacement(userAndGroup[0], replacementEnvs, false)
if err != nil { if err != nil {
return err return errors.Wrap(err, fmt.Sprintf("resolving user %s", userAndGroup[0]))
} }
userObj, err := Lookup(userStr) var groupStr = setGroupDefault(userStr)
if err != nil {
return err
}
groupStr := userObj.Gid
if len(userAndGroup) > 1 { if len(userAndGroup) > 1 {
groupStr, err = util.ResolveEnvironmentReplacement(userAndGroup[1], replacementEnvs, false) groupStr, err = util.ResolveEnvironmentReplacement(userAndGroup[1], replacementEnvs, false)
if err != nil { 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 { func (r *UserCommand) String() string {
return r.cmd.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
}

View File

@ -16,6 +16,7 @@ limitations under the License.
package commands package commands
import ( import (
"fmt"
"os/user" "os/user"
"testing" "testing"
@ -29,66 +30,70 @@ import (
var userTests = []struct { var userTests = []struct {
user string user string
userObj user.User userObj *user.User
expectedUID string expectedUID string
expectedGID string expectedGID string
}{ }{
{ {
user: "root", user: "root",
userObj: user.User{Uid: "root", Gid: "root"}, userObj: &user.User{Uid: "root", Gid: "root"},
expectedUID: "root:root", expectedUID: "root:root",
}, },
{ {
user: "root-add", user: "root-add",
userObj: user.User{Uid: "root-add", Gid: "root"}, userObj: &user.User{Uid: "root-add", Gid: "root"},
expectedUID: "root-add:root", expectedUID: "root-add:root",
}, },
{ {
user: "0", user: "0",
userObj: user.User{Uid: "0", Gid: "0"}, userObj: &user.User{Uid: "0", Gid: "0"},
expectedUID: "0:0", expectedUID: "0:0",
}, },
{ {
user: "fakeUser", user: "fakeUser",
userObj: user.User{Uid: "fakeUser", Gid: "fakeUser"}, userObj: &user.User{Uid: "fakeUser", Gid: "fakeUser"},
expectedUID: "fakeUser:fakeUser", expectedUID: "fakeUser:fakeUser",
}, },
{ {
user: "root:root", user: "root:root",
userObj: user.User{Uid: "root", Gid: "some"}, userObj: &user.User{Uid: "root", Gid: "some"},
expectedUID: "root:root", expectedUID: "root:root",
}, },
{ {
user: "0:root", user: "0:root",
userObj: user.User{Uid: "0"}, userObj: &user.User{Uid: "0"},
expectedUID: "0:root", expectedUID: "0:root",
}, },
{ {
user: "root:0", user: "root:0",
userObj: user.User{Uid: "root"}, userObj: &user.User{Uid: "root"},
expectedUID: "root:0", expectedUID: "root:0",
expectedGID: "f0", expectedGID: "f0",
}, },
{ {
user: "0:0", user: "0:0",
userObj: user.User{Uid: "0"}, userObj: &user.User{Uid: "0"},
expectedUID: "0:0", expectedUID: "0:0",
}, },
{ {
user: "$envuser", user: "$envuser",
userObj: user.User{Uid: "root", Gid: "root"}, userObj: &user.User{Uid: "root", Gid: "root"},
expectedUID: "root:root", expectedUID: "root:root",
}, },
{ {
user: "root:$envgroup", user: "root:$envgroup",
userObj: user.User{Uid: "root"}, userObj: &user.User{Uid: "root"},
expectedUID: "root:grp", expectedUID: "root:grp",
}, },
{ {
user: "some:grp", user: "some:grp",
userObj: user.User{Uid: "some"}, userObj: &user.User{Uid: "some"},
expectedUID: "some:grp", expectedUID: "some:grp",
}, },
{
user: "some",
expectedUID: "some:",
},
} }
func TestUpdateUser(t *testing.T) { func TestUpdateUser(t *testing.T) {
@ -105,7 +110,10 @@ func TestUpdateUser(t *testing.T) {
}, },
} }
Lookup = func(_ string) (*user.User, error) { 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 }() defer func() { Lookup = util.Lookup }()
buildArgs := dockerfile.NewBuildArgs([]string{}) buildArgs := dockerfile.NewBuildArgs([]string{})