Fix race in TestRunEnvHasHome

It's possible to execute the command that checks user's
$HOME dir before the user is created. Move the code that
creates the user inside exec so it can be serialized.

PiperOrigin-RevId: 302986184
This commit is contained in:
Fabricio Voznika 2020-03-25 15:38:38 -07:00 committed by gVisor bot
parent f2eba94015
commit 5f03dca522
1 changed files with 10 additions and 12 deletions

View File

@ -240,17 +240,7 @@ func TestExecEnvHasHome(t *testing.T) {
}
d := dockerutil.MakeDocker("exec-env-home-test")
// We will check that HOME is set for root user, and also for a new
// non-root user we will create.
newUID := 1234
newHome := "/foo/bar"
// Create a new user with a home directory, and then sleep.
script := fmt.Sprintf(`
mkdir -p -m 777 %s && \
adduser foo -D -u %d -h %s && \
sleep 1000`, newHome, newUID, newHome)
if err := d.Run("alpine", "/bin/sh", "-c", script); err != nil {
if err := d.Run("alpine", "sleep", "1000"); err != nil {
t.Fatalf("docker run failed: %v", err)
}
defer d.CleanUp()
@ -264,7 +254,15 @@ func TestExecEnvHasHome(t *testing.T) {
t.Errorf("wanted exec output to contain %q, got %q", want, got)
}
// Execute the same as uid 123 and expect newHome.
// Create a new user with a home directory.
newUID := 1234
newHome := "/foo/bar"
cmd := fmt.Sprintf("mkdir -p -m 777 %q && adduser foo -D -u %d -h %q", newHome, newUID, newHome)
if _, err := d.Exec("/bin/sh", "-c", cmd); err != nil {
t.Fatalf("docker exec failed: %v", err)
}
// Execute the same as the new user and expect newHome.
got, err = d.ExecAsUser(strconv.Itoa(newUID), "/bin/sh", "-c", "echo $HOME")
if err != nil {
t.Fatalf("docker exec failed: %v", err)