github.com/mgoltzsche/ctnr@v0.7.1-alpha/pkg/idutils/user_test.go (about) 1 package idutils 2 3 import ( 4 "io/ioutil" 5 "os" 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 "github.com/stretchr/testify/require" 10 ) 11 12 func TestParseUserExpr(t *testing.T) { 13 for _, c := range []struct { 14 expr string 15 user string 16 group string 17 }{ 18 {"root:root", "root", "root"}, 19 {"root", "root", ""}, 20 {" root ", "root", ""}, 21 {"root:root ", "root", "root"}, 22 {" root : root ", "root", "root"}, 23 {"root:mygroup", "root", "mygroup"}, 24 {":mygroup", "", "mygroup"}, 25 {":", "", ""}, 26 {"", "", ""}, 27 } { 28 u := ParseUser(c.expr) 29 assert.Equal(t, c.user, u.User, "did not resolve user properly: "+c.expr) 30 assert.Equal(t, c.group, u.Group, "did not resolve group properly: "+c.expr) 31 } 32 } 33 34 func TestUserResolve(t *testing.T) { 35 rootfs := newTestRootfs(t) 36 defer os.RemoveAll(rootfs) 37 dir, err := ioutil.TempDir("", "ctnr-test-usr-") 38 require.NoError(t, err) 39 defer os.RemoveAll(dir) 40 for _, c := range []struct { 41 user string 42 group string 43 uid uint 44 gid uint 45 rootfs string 46 resolve bool 47 }{ 48 {"daemon", "daemon", 1, 1, rootfs, true}, 49 {"myuser", "", 9000, 7, rootfs, true}, 50 {"myuser", "testgroup", 9000, 7777, rootfs, true}, 51 {"myuser", "9000", 9000, 9000, rootfs, true}, 52 {"9000", "", 9000, 7, rootfs, true}, 53 {"9000", "testgroup", 9000, 7777, rootfs, true}, 54 {"300", "testgroup", 300, 7777, rootfs, true}, 55 {"300", "300", 300, 300, dir, true}, 56 {"300", "", 300, 300, dir, true}, 57 {"", "", 0, 0, dir, true}, 58 {"unknownusr", "unknowngrp", 0, 0, rootfs, false}, 59 {"unknownusr", "", 0, 0, rootfs, false}, 60 {"", "unknowngrp", 0, 0, rootfs, false}, 61 } { 62 u := User{c.user, c.group} 63 r, err := u.Resolve(c.rootfs) 64 if c.resolve { 65 require.NoError(t, err, "unexpected error for "+u.String()) 66 assert.Equal(t, c.uid, r.Uid, "did not resolve uid properly: "+c.user) 67 assert.Equal(t, c.gid, r.Gid, "did not resolve gid properly: "+u.String()) 68 } else if err == nil { 69 t.Errorf("lookup of user %q should fail", u) 70 } 71 } 72 }