kubelet: add GetHostIDsForPod()
In future commits we will need this to set the user/group of supported volumes of KEP 127 - Phase 1. Signed-off-by: Rodrigo Campos <rodrigoca@microsoft.com>
This commit is contained in:
@@ -25,6 +25,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
||||
featuregatetesting "k8s.io/component-base/featuregate/testing"
|
||||
runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1"
|
||||
pkgfeatures "k8s.io/kubernetes/pkg/features"
|
||||
)
|
||||
|
||||
@@ -176,6 +177,136 @@ func TestUserNsManagerParseUserNsFile(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestUserNsManagerHostIDFromMapping(t *testing.T) {
|
||||
// mapping []*runtimeapi.IDMapping, containerId *int64
|
||||
|
||||
cases := []struct {
|
||||
name string
|
||||
success bool
|
||||
containerId int64 // -1 means a nil ptr will be used.
|
||||
expHostId int64
|
||||
m []*runtimeapi.IDMapping
|
||||
}{
|
||||
{
|
||||
name: "one basic mapping",
|
||||
success: true,
|
||||
containerId: -1,
|
||||
expHostId: 0,
|
||||
m: []*runtimeapi.IDMapping{
|
||||
{
|
||||
HostId: 0,
|
||||
ContainerId: 0,
|
||||
Length: userNsLength,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "one unprivileged mapping",
|
||||
success: true,
|
||||
containerId: -1,
|
||||
expHostId: userNsLength * 2,
|
||||
m: []*runtimeapi.IDMapping{
|
||||
{
|
||||
HostId: userNsLength * 2,
|
||||
ContainerId: 0,
|
||||
Length: userNsLength,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "one unprivileged mapping random id",
|
||||
success: true,
|
||||
containerId: 3,
|
||||
expHostId: userNsLength*2 + 3,
|
||||
m: []*runtimeapi.IDMapping{
|
||||
{
|
||||
HostId: userNsLength * 2,
|
||||
ContainerId: 0,
|
||||
Length: userNsLength,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "two unprivileged mapping",
|
||||
success: true,
|
||||
containerId: 0,
|
||||
expHostId: userNsLength*2 + 0,
|
||||
m: []*runtimeapi.IDMapping{
|
||||
{
|
||||
HostId: userNsLength * 2,
|
||||
ContainerId: 0,
|
||||
Length: 1,
|
||||
},
|
||||
{
|
||||
HostId: userNsLength*2 + 10,
|
||||
ContainerId: 1,
|
||||
Length: 1,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "two unprivileged mapping - random id",
|
||||
success: true,
|
||||
containerId: 1,
|
||||
expHostId: userNsLength*2 + 10,
|
||||
m: []*runtimeapi.IDMapping{
|
||||
{
|
||||
HostId: userNsLength * 2,
|
||||
ContainerId: 0,
|
||||
Length: 1,
|
||||
},
|
||||
{
|
||||
HostId: userNsLength*2 + 10,
|
||||
ContainerId: 1,
|
||||
Length: 1,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "two unprivileged mapping - not mapped user",
|
||||
success: false,
|
||||
containerId: 3,
|
||||
m: []*runtimeapi.IDMapping{
|
||||
{
|
||||
HostId: userNsLength * 2,
|
||||
ContainerId: 0,
|
||||
Length: 1,
|
||||
},
|
||||
{
|
||||
HostId: userNsLength*2 + 1,
|
||||
ContainerId: 1,
|
||||
Length: 1,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "no mappings",
|
||||
success: false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range cases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
var containerId *int64
|
||||
if tc.containerId != -1 {
|
||||
containerId = &tc.containerId
|
||||
}
|
||||
|
||||
id, err := hostIDFromMapping(tc.m, containerId)
|
||||
if (tc.success && err != nil) || (!tc.success && err == nil) {
|
||||
t.Fatalf("%v: expected success: %v - got error: %v", tc.name, tc.success, err)
|
||||
}
|
||||
if !tc.success && err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if id != tc.expHostId {
|
||||
t.Errorf("expected: %v - got: %v", tc.expHostId, id)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkBitmaskFindAndSetFirstZero(t *testing.B) {
|
||||
b := makeBitArray(userNsLength)
|
||||
for i := 0; i < userNsLength; i++ {
|
||||
|
Reference in New Issue
Block a user