MCPcopy
hub / github.com/containerd/containerd / TestDoPrepareIDMappedOverlay

Function TestDoPrepareIDMappedOverlay

core/mount/mount_linux_test.go:306–405  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

304}
305
306func TestDoPrepareIDMappedOverlay(t *testing.T) {
307 testutil.RequiresRoot(t)
308
309 k512 := kernel.KernelVersion{Kernel: 5, Major: 12}
310 ok, err := kernel.GreaterEqualThan(k512)
311 require.NoError(t, err)
312 if !ok {
313 t.Skip("GetUsernsFD requires kernel >= 5.12")
314 }
315
316 usernsFD, err := getUsernsFD(testUIDMaps, testGIDMaps)
317 require.NoError(t, err)
318 defer usernsFD.Close()
319
320 type testCase struct {
321 name string
322 injectUmountFault bool
323 }
324
325 tcases := []testCase{
326 {
327 name: "normal",
328 injectUmountFault: false,
329 },
330 {
331 name: "umount-fault",
332 injectUmountFault: true,
333 },
334 }
335
336 for _, tc := range tcases {
337 t.Run(tc.name, func(t *testing.T) {
338 fakeLowerDirsDir := t.TempDir()
339 if !supportsIDMap(fakeLowerDirsDir) {
340 t.Skip("IDmapped mounts not supported on filesystem selected by t.TempDir()")
341 }
342
343 lowerDirs := []string{filepath.Join(fakeLowerDirsDir, "lower1"), filepath.Join(fakeLowerDirsDir, "lower2")}
344 for _, dir := range lowerDirs {
345 require.NoError(t, os.Mkdir(dir, 0755))
346 require.NoError(t, os.WriteFile(filepath.Join(dir, filepath.Base(dir)), []byte("foo"), 0644))
347 }
348
349 remountsLocation := t.TempDir()
350
351 tmpLowerDirs, cleanup, err := doPrepareIDMappedOverlay(remountsLocation, lowerDirs, int(usernsFD.Fd()))
352 require.NoError(t, err)
353 require.Len(t, tmpLowerDirs, len(lowerDirs))
354
355 lowerContents := make([][]byte, len(lowerDirs))
356
357 for i, dir := range lowerDirs {
358 correspondingRemount := tmpLowerDirs[i]
359 filename := filepath.Base(dir)
360
361 expectedFile, err := os.ReadFile(filepath.Join(dir, filename))
362 require.NoError(t, err, "reading comparison test fixture file")
363 lowerContents[i] = expectedFile

Callers

nothing calls this directly

Calls 11

getUsernsFDFunction · 0.85
doPrepareIDMappedOverlayFunction · 0.85
cleanupFunction · 0.85
supportsIDMapFunction · 0.70
CloseMethod · 0.65
RunMethod · 0.65
WriteFileMethod · 0.65
RemoveMethod · 0.65
LenMethod · 0.45
OpenMethod · 0.45
ErrorMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…