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  }