cri/server: Add tests for the linux-specific parts of VolumeMounts()
Signed-off-by: Rodrigo Campos <rodrigoca@microsoft.com>
This commit is contained in:
parent
10cb112e4a
commit
e0b2b17de3
@ -2311,3 +2311,141 @@ containerEdits:
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// TestLinuxVolumeMounts tests the linux-specific parts of VolumeMounts.
|
||||
func TestLinuxVolumeMounts(t *testing.T) {
|
||||
testContainerRootDir := "test-container-root"
|
||||
idmap := []*runtime.IDMapping{
|
||||
{
|
||||
ContainerId: 0,
|
||||
HostId: 100,
|
||||
Length: 1,
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range []struct {
|
||||
desc string
|
||||
criMounts []*runtime.Mount
|
||||
imageVolumes map[string]struct{}
|
||||
usernsEnabled bool
|
||||
expectedMountDest []string
|
||||
expectedMappings []*runtime.IDMapping
|
||||
}{
|
||||
{
|
||||
desc: "should skip image volumes if already mounted by CRI",
|
||||
usernsEnabled: true,
|
||||
criMounts: []*runtime.Mount{
|
||||
{
|
||||
ContainerPath: "/test-volume-1",
|
||||
HostPath: "/test-hostpath-1",
|
||||
},
|
||||
},
|
||||
imageVolumes: map[string]struct{}{
|
||||
"/test-volume-1": {},
|
||||
"/test-volume-2": {},
|
||||
},
|
||||
expectedMountDest: []string{
|
||||
"/test-volume-2",
|
||||
},
|
||||
expectedMappings: idmap,
|
||||
},
|
||||
{
|
||||
desc: "should include mappings for image volumes",
|
||||
usernsEnabled: true,
|
||||
imageVolumes: map[string]struct{}{
|
||||
"/test-volume-1/": {},
|
||||
"/test-volume-2/": {},
|
||||
},
|
||||
expectedMountDest: []string{
|
||||
"/test-volume-2/",
|
||||
"/test-volume-2/",
|
||||
},
|
||||
expectedMappings: idmap,
|
||||
},
|
||||
{
|
||||
desc: "should convert rel imageVolume paths to abs paths",
|
||||
imageVolumes: map[string]struct{}{
|
||||
"test-volume-1/": {},
|
||||
"./test-volume-2/": {},
|
||||
"../../test-volume-3/": {},
|
||||
},
|
||||
expectedMountDest: []string{
|
||||
"/test-volume-1",
|
||||
"/test-volume-2",
|
||||
"/test-volume-3",
|
||||
},
|
||||
},
|
||||
{
|
||||
desc: "should convert rel imageVolume paths to abs paths and add userns mappings",
|
||||
usernsEnabled: true,
|
||||
imageVolumes: map[string]struct{}{
|
||||
"test-volume-1/": {},
|
||||
"./test-volume-2/": {},
|
||||
"../../test-volume-3/": {},
|
||||
},
|
||||
expectedMountDest: []string{
|
||||
"/test-volume-1",
|
||||
"/test-volume-2",
|
||||
"/test-volume-3",
|
||||
},
|
||||
expectedMappings: idmap,
|
||||
},
|
||||
{
|
||||
desc: "doesn't include mappings for image volumes if userns is disabled",
|
||||
imageVolumes: map[string]struct{}{
|
||||
"/test-volume-1/": {},
|
||||
"/test-volume-2/": {},
|
||||
},
|
||||
expectedMountDest: []string{
|
||||
"/test-volume-2/",
|
||||
"/test-volume-2/",
|
||||
},
|
||||
},
|
||||
} {
|
||||
test := test
|
||||
t.Run(test.desc, func(t *testing.T) {
|
||||
config := &imagespec.ImageConfig{
|
||||
Volumes: test.imageVolumes,
|
||||
}
|
||||
containerConfig := &runtime.ContainerConfig{
|
||||
Mounts: test.criMounts,
|
||||
}
|
||||
|
||||
if test.usernsEnabled {
|
||||
containerConfig.Linux = &runtime.LinuxContainerConfig{
|
||||
SecurityContext: &runtime.LinuxContainerSecurityContext{
|
||||
NamespaceOptions: &runtime.NamespaceOption{
|
||||
UsernsOptions: &runtime.UserNamespace{
|
||||
Mode: runtime.NamespaceMode_POD,
|
||||
Uids: idmap,
|
||||
Gids: idmap,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
c := newTestCRIService()
|
||||
got := c.volumeMounts(testContainerRootDir, containerConfig, config)
|
||||
assert.Len(t, got, len(test.expectedMountDest))
|
||||
for _, dest := range test.expectedMountDest {
|
||||
found := false
|
||||
for _, m := range got {
|
||||
if m.ContainerPath != dest {
|
||||
continue
|
||||
}
|
||||
found = true
|
||||
assert.Equal(t,
|
||||
filepath.Dir(m.HostPath),
|
||||
filepath.Join(testContainerRootDir, "volumes"))
|
||||
|
||||
if test.expectedMappings != nil {
|
||||
assert.Equal(t, test.expectedMappings, m.UidMappings)
|
||||
assert.Equal(t, test.expectedMappings, m.GidMappings)
|
||||
}
|
||||
}
|
||||
assert.True(t, found)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user