5
5
"strings"
6
6
"syscall"
7
7
"testing"
8
+ time "time"
8
9
9
10
"github.com/coder/envbuilder/internal/notcodersdk"
10
11
"github.com/stretchr/testify/assert"
@@ -25,9 +26,11 @@ func Test_tempRemount(t *testing.T) {
25
26
mounts := fakeMounts ("/home" , "/var/lib/modules:ro" , "/proc" , "/sys" )
26
27
27
28
mm .EXPECT ().GetMounts ().Return (mounts , nil )
29
+ mm .EXPECT ().Stat ("/var/lib/modules" ).Return (& fakeFileInfo {isDir : true }, nil )
28
30
mm .EXPECT ().MkdirAll ("/.test/var/lib/modules" , os .FileMode (0o750 )).Times (1 ).Return (nil )
29
31
mm .EXPECT ().Mount ("/var/lib/modules" , "/.test/var/lib/modules" , "bind" , uintptr (syscall .MS_BIND ), "" ).Times (1 ).Return (nil )
30
32
mm .EXPECT ().Unmount ("/var/lib/modules" , 0 ).Times (1 ).Return (nil )
33
+ mm .EXPECT ().Stat ("/.test/var/lib/modules" ).Return (& fakeFileInfo {isDir : true }, nil )
31
34
mm .EXPECT ().MkdirAll ("/var/lib/modules" , os .FileMode (0o750 )).Times (1 ).Return (nil )
32
35
mm .EXPECT ().Mount ("/.test/var/lib/modules" , "/var/lib/modules" , "bind" , uintptr (syscall .MS_BIND ), "" ).Times (1 ).Return (nil )
33
36
mm .EXPECT ().Unmount ("/.test/var/lib/modules" , 0 ).Times (1 ).Return (nil )
@@ -40,6 +43,33 @@ func Test_tempRemount(t *testing.T) {
40
43
_ = remount ()
41
44
})
42
45
46
+ t .Run ("OKFile" , func (t * testing.T ) {
47
+ t .Parallel ()
48
+
49
+ ctrl := gomock .NewController (t )
50
+ mm := NewMockmounter (ctrl )
51
+ mounts := fakeMounts ("/home" , "/usr/bin/utility:ro" , "/proc" , "/sys" )
52
+
53
+ mm .EXPECT ().GetMounts ().Return (mounts , nil )
54
+ mm .EXPECT ().Stat ("/usr/bin/utility" ).Return (& fakeFileInfo {isDir : false }, nil )
55
+ mm .EXPECT ().MkdirAll ("/.test/usr/bin" , os .FileMode (0o750 )).Times (1 ).Return (nil )
56
+ mm .EXPECT ().OpenFile ("/.test/usr/bin/utility" , os .O_CREATE , os .FileMode (0o640 )).Times (1 ).Return (new (os.File ), nil )
57
+ mm .EXPECT ().Mount ("/usr/bin/utility" , "/.test/usr/bin/utility" , "bind" , uintptr (syscall .MS_BIND ), "" ).Times (1 ).Return (nil )
58
+ mm .EXPECT ().Unmount ("/usr/bin/utility" , 0 ).Times (1 ).Return (nil )
59
+ mm .EXPECT ().Stat ("/.test/usr/bin/utility" ).Return (& fakeFileInfo {isDir : false }, nil )
60
+ mm .EXPECT ().MkdirAll ("/usr/bin" , os .FileMode (0o750 )).Times (1 ).Return (nil )
61
+ mm .EXPECT ().OpenFile ("/usr/bin/utility" , os .O_CREATE , os .FileMode (0o640 )).Times (1 ).Return (new (os.File ), nil )
62
+ mm .EXPECT ().Mount ("/.test/usr/bin/utility" , "/usr/bin/utility" , "bind" , uintptr (syscall .MS_BIND ), "" ).Times (1 ).Return (nil )
63
+ mm .EXPECT ().Unmount ("/.test/usr/bin/utility" , 0 ).Times (1 ).Return (nil )
64
+
65
+ remount , err := tempRemount (mm , fakeLog (t ), "/.test" )
66
+ require .NoError (t , err )
67
+ err = remount ()
68
+ require .NoError (t , err )
69
+ // sync.Once should handle multiple remount calls
70
+ _ = remount ()
71
+ })
72
+
43
73
t .Run ("IgnorePrefixes" , func (t * testing.T ) {
44
74
t .Parallel ()
45
75
@@ -75,6 +105,7 @@ func Test_tempRemount(t *testing.T) {
75
105
mounts := fakeMounts ("/home" , "/var/lib/modules:ro" , "/proc" , "/sys" )
76
106
77
107
mm .EXPECT ().GetMounts ().Return (mounts , nil )
108
+ mm .EXPECT ().Stat ("/var/lib/modules" ).Return (& fakeFileInfo {isDir : true }, nil )
78
109
mm .EXPECT ().MkdirAll ("/.test/var/lib/modules" , os .FileMode (0o750 )).Times (1 ).Return (assert .AnError )
79
110
80
111
remount , err := tempRemount (mm , fakeLog (t ), "/.test" )
@@ -91,6 +122,7 @@ func Test_tempRemount(t *testing.T) {
91
122
mounts := fakeMounts ("/home" , "/var/lib/modules:ro" , "/proc" , "/sys" )
92
123
93
124
mm .EXPECT ().GetMounts ().Return (mounts , nil )
125
+ mm .EXPECT ().Stat ("/var/lib/modules" ).Return (& fakeFileInfo {isDir : true }, nil )
94
126
mm .EXPECT ().MkdirAll ("/.test/var/lib/modules" , os .FileMode (0o750 )).Times (1 ).Return (nil )
95
127
mm .EXPECT ().Mount ("/var/lib/modules" , "/.test/var/lib/modules" , "bind" , uintptr (syscall .MS_BIND ), "" ).Times (1 ).Return (assert .AnError )
96
128
@@ -108,6 +140,7 @@ func Test_tempRemount(t *testing.T) {
108
140
mounts := fakeMounts ("/home" , "/var/lib/modules:ro" , "/proc" , "/sys" )
109
141
110
142
mm .EXPECT ().GetMounts ().Return (mounts , nil )
143
+ mm .EXPECT ().Stat ("/var/lib/modules" ).Return (& fakeFileInfo {isDir : true }, nil )
111
144
mm .EXPECT ().MkdirAll ("/.test/var/lib/modules" , os .FileMode (0o750 )).Times (1 ).Return (nil )
112
145
mm .EXPECT ().Mount ("/var/lib/modules" , "/.test/var/lib/modules" , "bind" , uintptr (syscall .MS_BIND ), "" ).Times (1 ).Return (nil )
113
146
mm .EXPECT ().Unmount ("/var/lib/modules" , 0 ).Times (1 ).Return (assert .AnError )
@@ -126,9 +159,11 @@ func Test_tempRemount(t *testing.T) {
126
159
mounts := fakeMounts ("/home" , "/var/lib/modules:ro" , "/proc" , "/sys" )
127
160
128
161
mm .EXPECT ().GetMounts ().Return (mounts , nil )
162
+ mm .EXPECT ().Stat ("/var/lib/modules" ).Return (& fakeFileInfo {isDir : true }, nil )
129
163
mm .EXPECT ().MkdirAll ("/.test/var/lib/modules" , os .FileMode (0o750 )).Times (1 ).Return (nil )
130
164
mm .EXPECT ().Mount ("/var/lib/modules" , "/.test/var/lib/modules" , "bind" , uintptr (syscall .MS_BIND ), "" ).Times (1 ).Return (nil )
131
165
mm .EXPECT ().Unmount ("/var/lib/modules" , 0 ).Times (1 ).Return (nil )
166
+ mm .EXPECT ().Stat ("/.test/var/lib/modules" ).Return (& fakeFileInfo {isDir : true }, nil )
132
167
mm .EXPECT ().MkdirAll ("/var/lib/modules" , os .FileMode (0o750 )).Times (1 ).Return (assert .AnError )
133
168
134
169
remount , err := tempRemount (mm , fakeLog (t ), "/.test" )
@@ -145,9 +180,11 @@ func Test_tempRemount(t *testing.T) {
145
180
mounts := fakeMounts ("/home" , "/var/lib/modules:ro" , "/proc" , "/sys" )
146
181
147
182
mm .EXPECT ().GetMounts ().Return (mounts , nil )
183
+ mm .EXPECT ().Stat ("/var/lib/modules" ).Return (& fakeFileInfo {isDir : true }, nil )
148
184
mm .EXPECT ().MkdirAll ("/.test/var/lib/modules" , os .FileMode (0o750 )).Times (1 ).Return (nil )
149
185
mm .EXPECT ().Mount ("/var/lib/modules" , "/.test/var/lib/modules" , "bind" , uintptr (syscall .MS_BIND ), "" ).Times (1 ).Return (nil )
150
186
mm .EXPECT ().Unmount ("/var/lib/modules" , 0 ).Times (1 ).Return (nil )
187
+ mm .EXPECT ().Stat ("/.test/var/lib/modules" ).Return (& fakeFileInfo {isDir : true }, nil )
151
188
mm .EXPECT ().MkdirAll ("/var/lib/modules" , os .FileMode (0o750 )).Times (1 ).Return (nil )
152
189
mm .EXPECT ().Mount ("/.test/var/lib/modules" , "/var/lib/modules" , "bind" , uintptr (syscall .MS_BIND ), "" ).Times (1 ).Return (assert .AnError )
153
190
@@ -165,9 +202,11 @@ func Test_tempRemount(t *testing.T) {
165
202
mounts := fakeMounts ("/home" , "/var/lib/modules:ro" , "/proc" , "/sys" )
166
203
167
204
mm .EXPECT ().GetMounts ().Return (mounts , nil )
205
+ mm .EXPECT ().Stat ("/var/lib/modules" ).Return (& fakeFileInfo {isDir : true }, nil )
168
206
mm .EXPECT ().MkdirAll ("/.test/var/lib/modules" , os .FileMode (0o750 )).Times (1 ).Return (nil )
169
207
mm .EXPECT ().Mount ("/var/lib/modules" , "/.test/var/lib/modules" , "bind" , uintptr (syscall .MS_BIND ), "" ).Times (1 ).Return (nil )
170
208
mm .EXPECT ().Unmount ("/var/lib/modules" , 0 ).Times (1 ).Return (nil )
209
+ mm .EXPECT ().Stat ("/.test/var/lib/modules" ).Return (& fakeFileInfo {isDir : true }, nil )
171
210
mm .EXPECT ().MkdirAll ("/var/lib/modules" , os .FileMode (0o750 )).Times (1 ).Return (nil )
172
211
mm .EXPECT ().Mount ("/.test/var/lib/modules" , "/var/lib/modules" , "bind" , uintptr (syscall .MS_BIND ), "" ).Times (1 ).Return (nil )
173
212
mm .EXPECT ().Unmount ("/.test/var/lib/modules" , 0 ).Times (1 ).Return (assert .AnError )
@@ -200,3 +239,16 @@ func fakeLog(t *testing.T) func(notcodersdk.LogLevel, string, ...any) {
200
239
t .Logf (s , a ... )
201
240
}
202
241
}
242
+
243
+ type fakeFileInfo struct {
244
+ isDir bool
245
+ }
246
+
247
+ func (fi * fakeFileInfo ) Name () string { return "" }
248
+ func (fi * fakeFileInfo ) Size () int64 { return 0 }
249
+ func (fi * fakeFileInfo ) Mode () os.FileMode { return 0 }
250
+ func (fi * fakeFileInfo ) ModTime () time.Time { return time.Time {} }
251
+ func (fi * fakeFileInfo ) IsDir () bool { return fi .isDir }
252
+ func (fi * fakeFileInfo ) Sys () any { return nil }
253
+
254
+ var _ os.FileInfo = & fakeFileInfo {}
0 commit comments