MCPcopy Create free account
hub / github.com/coder/envbuilder / Test_tempRemount

Function Test_tempRemount

internal/ebutil/remount_internal_test.go:25–639  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

23}
24
25func Test_tempRemount(t *testing.T) {
26 t.Parallel()
27
28 t.Run("OK", func(t *testing.T) {
29 t.Parallel()
30
31 ctrl := gomock.NewController(t)
32 mm := NewMockmounter(ctrl)
33 mounts := fakeMounts("/home", "/var/lib/modules:ro", "/proc", "/sys")
34
35 mm.EXPECT().GetMounts().Return(mounts, nil)
36 mm.EXPECT().Stat("/etc/debian_version").Return(nil, os.ErrNotExist)
37 mm.EXPECT().ReadDir("/usr/lib64").Return(nil, os.ErrNotExist)
38 mm.EXPECT().Stat("/var/lib/modules").Return(&fakeFileInfo{name: "modules", isDir: true}, nil)
39 mm.EXPECT().MkdirAll("/.test/var/lib/modules", os.FileMode(0o750)).Times(1).Return(nil)
40 mm.EXPECT().Mount("/var/lib/modules", "/.test/var/lib/modules", "bind", uintptr(syscall.MS_BIND), "").Times(1).Return(nil)
41 mm.EXPECT().Unmount("/var/lib/modules", 0).Times(1).Return(nil)
42 mm.EXPECT().Stat("/etc/debian_version").Return(nil, os.ErrNotExist)
43 mm.EXPECT().Stat("/.test/var/lib/modules").Return(&fakeFileInfo{name: "modules", isDir: true}, nil)
44 mm.EXPECT().MkdirAll("/var/lib/modules", os.FileMode(0o750)).Times(1).Return(nil)
45 mm.EXPECT().Mount("/.test/var/lib/modules", "/var/lib/modules", "bind", uintptr(syscall.MS_BIND), "").Times(1).Return(nil)
46 mm.EXPECT().Unmount("/.test/var/lib/modules", 0).Times(1).Return(nil)
47
48 remount, err := tempRemount(mm, fakeLog(t), "/.test")
49 require.NoError(t, err)
50 err = remount()
51 require.NoError(t, err)
52 // sync.Once should handle multiple remount calls
53 _ = remount()
54 })
55
56 t.Run("OKFile", func(t *testing.T) {
57 t.Parallel()
58
59 ctrl := gomock.NewController(t)
60 mm := NewMockmounter(ctrl)
61 mounts := fakeMounts("/home", "/usr/bin/utility:ro", "/proc", "/sys")
62
63 mm.EXPECT().GetMounts().Return(mounts, nil)
64 mm.EXPECT().Stat("/etc/debian_version").Return(nil, os.ErrNotExist)
65 mm.EXPECT().ReadDir("/usr/lib64").Return(nil, os.ErrNotExist)
66 mm.EXPECT().Stat("/usr/bin/utility").Return(&fakeFileInfo{name: "modules", isDir: false}, nil)
67 mm.EXPECT().MkdirAll("/.test/usr/bin", os.FileMode(0o750)).Times(1).Return(nil)
68 mm.EXPECT().OpenFile("/.test/usr/bin/utility", os.O_CREATE, os.FileMode(0o640)).Times(1).Return(new(os.File), nil)
69 mm.EXPECT().Mount("/usr/bin/utility", "/.test/usr/bin/utility", "bind", uintptr(syscall.MS_BIND), "").Times(1).Return(nil)
70 mm.EXPECT().Unmount("/usr/bin/utility", 0).Times(1).Return(nil)
71 mm.EXPECT().Stat("/etc/debian_version").Return(nil, os.ErrNotExist)
72 mm.EXPECT().Stat("/.test/usr/bin/utility").Return(&fakeFileInfo{name: "modules", isDir: false}, nil)
73 mm.EXPECT().MkdirAll("/usr/bin", os.FileMode(0o750)).Times(1).Return(nil)
74 mm.EXPECT().OpenFile("/usr/bin/utility", os.O_CREATE, os.FileMode(0o640)).Times(1).Return(new(os.File), nil)
75 mm.EXPECT().Mount("/.test/usr/bin/utility", "/usr/bin/utility", "bind", uintptr(syscall.MS_BIND), "").Times(1).Return(nil)
76 mm.EXPECT().Unmount("/.test/usr/bin/utility", 0).Times(1).Return(nil)
77
78 remount, err := tempRemount(mm, fakeLog(t), "/.test")
79 require.NoError(t, err)
80 err = remount()
81 require.NoError(t, err)
82 // sync.Once should handle multiple remount calls

Callers

nothing calls this directly

Calls 15

EXPECTMethod · 0.95
NewMockmounterFunction · 0.85
fakeMountsFunction · 0.85
tempRemountFunction · 0.85
fakeLogFunction · 0.85
remountFunction · 0.85
ErrorMethod · 0.80
GetMountsMethod · 0.65
StatMethod · 0.65
ReadDirMethod · 0.65
MkdirAllMethod · 0.65
MountMethod · 0.65

Tested by

no test coverage detected