From 3e9714228145aa1578123d5aa7e77d5c219fcb29 Mon Sep 17 00:00:00 2001 From: Valentin David Date: Mon, 30 Sep 2024 13:15:23 +0200 Subject: [PATCH] osutil/user: test with more realistic getent exit codes --- osutil/user/getent_test.go | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/osutil/user/getent_test.go b/osutil/user/getent_test.go index 62dc62d47e9..b21ba37427d 100644 --- a/osutil/user/getent_test.go +++ b/osutil/user/getent_test.go @@ -23,6 +23,7 @@ import ( "fmt" "os" "path/filepath" + "strconv" "testing" . "gopkg.in/check.v1" @@ -46,12 +47,17 @@ func (s *getentSuite) SetUpTest(c *C) { s.getentDir = c.MkDir() s.mockGetent = testutil.MockCommand(c, "getent", fmt.Sprintf(` -cat '%s'/"${1}${2:+/}${2-}" +set -eu +base='%s'/"${1}${2:+/}${2-}" +cat "${base}" +if [ -f "${base}.exit" ]; then + exit "$(cat "${base}.exit")" +fi `, s.getentDir)) s.AddCleanup(s.mockGetent.Restore) } -func (s *getentSuite) mockGetentOutput(c *C, value string, params ...string) { +func (s *getentSuite) mockGetentOutput(c *C, value string, exit int, params ...string) { path := []string{s.getentDir} path = append(path, params...) resultPath := filepath.Join(path...) @@ -60,11 +66,16 @@ func (s *getentSuite) mockGetentOutput(c *C, value string, params ...string) { b := []byte(value) err = os.WriteFile(resultPath, b, 0644) c.Assert(err, IsNil) + if exit != 0 { + exitBytes := []byte(strconv.Itoa(exit)) + err = os.WriteFile(resultPath+".exit", exitBytes, 0644) + c.Assert(err, IsNil) + } } func (s *getentSuite) TestLookupGroupByName(c *C) { s.mockGetentOutput(c, `mygroup:x:60000:myuser,someuser -`, "group", "mygroup") +`, 0, "group", "mygroup") grp, err := user.LookupGroupFromGetent(user.GroupMatchGroupname("mygroup")) c.Assert(err, IsNil) @@ -79,7 +90,7 @@ func (s *getentSuite) TestLookupGroupByNameError(c *C) { } func (s *getentSuite) TestLookupGroupByNameDoesNotExist(c *C) { - s.mockGetentOutput(c, ``, "group", "mygroup") + s.mockGetentOutput(c, ``, 2, "group", "mygroup") grp, err := user.LookupGroupFromGetent(user.GroupMatchGroupname("mygroup")) c.Assert(err, IsNil) @@ -90,7 +101,7 @@ func (s *getentSuite) TestLookupGroupByNumericalName(c *C) { // This is probably not valid s.mockGetentOutput(c, `mygroup:x:60001:myuser,someuser 1mygroup:x:60000:myuser,someuser -`, "group") +`, 0, "group") grp, err := user.LookupGroupFromGetent(user.GroupMatchGroupname("1mygroup")) c.Assert(err, IsNil) @@ -101,7 +112,7 @@ func (s *getentSuite) TestLookupGroupByNumericalName(c *C) { func (s *getentSuite) TestLookupUserByName(c *C) { s.mockGetentOutput(c, `johndoe:x:60000:60000:John Doe:/home/johndoe:/bin/bash -`, "passwd", "johndoe") +`, 0, "passwd", "johndoe") usr, err := user.LookupUserFromGetent(user.UserMatchUsername("johndoe")) c.Assert(err, IsNil) @@ -115,7 +126,7 @@ func (s *getentSuite) TestLookupUserByName(c *C) { func (s *getentSuite) TestLookupUserByUid(c *C) { s.mockGetentOutput(c, `johndoe:x:60000:60000:John Doe:/home/johndoe:/bin/bash -`, "passwd", "60000") +`, 0, "passwd", "60000") usr, err := user.LookupUserFromGetent(user.UserMatchUid(60000)) c.Assert(err, IsNil) @@ -131,7 +142,7 @@ func (s *getentSuite) TestLookupUserByNumericalName(c *C) { // This is probably not valid s.mockGetentOutput(c, `johndoe:x:60001:60001:John Doe2:/home/johndoe2:/bin/bash 1johndoe:x:60000:60000:John Doe:/home/johndoe:/bin/bash -`, "passwd") +`, 0, "passwd") usr, err := user.LookupUserFromGetent(user.UserMatchUsername("1johndoe")) c.Assert(err, IsNil) @@ -144,7 +155,7 @@ func (s *getentSuite) TestLookupUserByNumericalName(c *C) { } func (s *getentSuite) TestLookupUserByNameMissing(c *C) { - s.mockGetentOutput(c, ``, "passwd", "johndoe") + s.mockGetentOutput(c, ``, 2, "passwd", "johndoe") usr, err := user.LookupUserFromGetent(user.UserMatchUsername("johndoe")) c.Assert(err, IsNil) @@ -152,7 +163,7 @@ func (s *getentSuite) TestLookupUserByNameMissing(c *C) { } func (s *getentSuite) TestLookupUserUidMissing(c *C) { - s.mockGetentOutput(c, ``, "passwd", "60000") + s.mockGetentOutput(c, ``, 2, "passwd", "60000") usr, err := user.LookupUserFromGetent(user.UserMatchUid(60000)) c.Assert(err, IsNil) @@ -160,7 +171,7 @@ func (s *getentSuite) TestLookupUserUidMissing(c *C) { } func (s *getentSuite) TestLookupGroupByNameMissing(c *C) { - s.mockGetentOutput(c, ``, "group", "mygroup") + s.mockGetentOutput(c, ``, 2, "group", "mygroup") grp, err := user.LookupGroupFromGetent(user.GroupMatchGroupname("mygroup")) c.Assert(err, IsNil)