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,31 @@ 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 ().Mount ("/usr/bin/utility" , "/.test/usr/bin/utility" , "bind" , uintptr (syscall .MS_BIND ), "" ).Times (1 ).Return (nil )
57
+ mm .EXPECT ().Unmount ("/usr/bin/utility" , 0 ).Times (1 ).Return (nil )
58
+ mm .EXPECT ().Stat ("/.test/usr/bin/utility" ).Return (& fakeFileInfo {isDir : false }, nil )
59
+ mm .EXPECT ().MkdirAll ("/usr/bin" , os .FileMode (0o750 )).Times (1 ).Return (nil )
60
+ mm .EXPECT ().Mount ("/.test/usr/bin/utility" , "/usr/bin/utility" , "bind" , uintptr (syscall .MS_BIND ), "" ).Times (1 ).Return (nil )
61
+ mm .EXPECT ().Unmount ("/.test/usr/bin/utility" , 0 ).Times (1 ).Return (nil )
62
+
63
+ remount , err := tempRemount (mm , fakeLog (t ), "/.test" )
64
+ require .NoError (t , err )
65
+ err = remount ()
66
+ require .NoError (t , err )
67
+ // sync.Once should handle multiple remount calls
68
+ _ = remount ()
69
+ })
70
+
43
71
t .Run ("IgnorePrefixes" , func (t * testing.T ) {
44
72
t .Parallel ()
45
73
@@ -75,6 +103,7 @@ func Test_tempRemount(t *testing.T) {
75
103
mounts := fakeMounts ("/home" , "/var/lib/modules:ro" , "/proc" , "/sys" )
76
104
77
105
mm .EXPECT ().GetMounts ().Return (mounts , nil )
106
+ mm .EXPECT ().Stat ("/var/lib/modules" ).Return (& fakeFileInfo {isDir : true }, nil )
78
107
mm .EXPECT ().MkdirAll ("/.test/var/lib/modules" , os .FileMode (0o750 )).Times (1 ).Return (assert .AnError )
79
108
80
109
remount , err := tempRemount (mm , fakeLog (t ), "/.test" )
@@ -91,6 +120,7 @@ func Test_tempRemount(t *testing.T) {
91
120
mounts := fakeMounts ("/home" , "/var/lib/modules:ro" , "/proc" , "/sys" )
92
121
93
122
mm .EXPECT ().GetMounts ().Return (mounts , nil )
123
+ mm .EXPECT ().Stat ("/var/lib/modules" ).Return (& fakeFileInfo {isDir : true }, nil )
94
124
mm .EXPECT ().MkdirAll ("/.test/var/lib/modules" , os .FileMode (0o750 )).Times (1 ).Return (nil )
95
125
mm .EXPECT ().Mount ("/var/lib/modules" , "/.test/var/lib/modules" , "bind" , uintptr (syscall .MS_BIND ), "" ).Times (1 ).Return (assert .AnError )
96
126
@@ -108,6 +138,7 @@ func Test_tempRemount(t *testing.T) {
108
138
mounts := fakeMounts ("/home" , "/var/lib/modules:ro" , "/proc" , "/sys" )
109
139
110
140
mm .EXPECT ().GetMounts ().Return (mounts , nil )
141
+ mm .EXPECT ().Stat ("/var/lib/modules" ).Return (& fakeFileInfo {isDir : true }, nil )
111
142
mm .EXPECT ().MkdirAll ("/.test/var/lib/modules" , os .FileMode (0o750 )).Times (1 ).Return (nil )
112
143
mm .EXPECT ().Mount ("/var/lib/modules" , "/.test/var/lib/modules" , "bind" , uintptr (syscall .MS_BIND ), "" ).Times (1 ).Return (nil )
113
144
mm .EXPECT ().Unmount ("/var/lib/modules" , 0 ).Times (1 ).Return (assert .AnError )
@@ -126,9 +157,11 @@ func Test_tempRemount(t *testing.T) {
126
157
mounts := fakeMounts ("/home" , "/var/lib/modules:ro" , "/proc" , "/sys" )
127
158
128
159
mm .EXPECT ().GetMounts ().Return (mounts , nil )
160
+ mm .EXPECT ().Stat ("/var/lib/modules" ).Return (& fakeFileInfo {isDir : true }, nil )
129
161
mm .EXPECT ().MkdirAll ("/.test/var/lib/modules" , os .FileMode (0o750 )).Times (1 ).Return (nil )
130
162
mm .EXPECT ().Mount ("/var/lib/modules" , "/.test/var/lib/modules" , "bind" , uintptr (syscall .MS_BIND ), "" ).Times (1 ).Return (nil )
131
163
mm .EXPECT ().Unmount ("/var/lib/modules" , 0 ).Times (1 ).Return (nil )
164
+ mm .EXPECT ().Stat ("/.test/var/lib/modules" ).Return (& fakeFileInfo {isDir : true }, nil )
132
165
mm .EXPECT ().MkdirAll ("/var/lib/modules" , os .FileMode (0o750 )).Times (1 ).Return (assert .AnError )
133
166
134
167
remount , err := tempRemount (mm , fakeLog (t ), "/.test" )
@@ -145,9 +178,11 @@ func Test_tempRemount(t *testing.T) {
145
178
mounts := fakeMounts ("/home" , "/var/lib/modules:ro" , "/proc" , "/sys" )
146
179
147
180
mm .EXPECT ().GetMounts ().Return (mounts , nil )
181
+ mm .EXPECT ().Stat ("/var/lib/modules" ).Return (& fakeFileInfo {isDir : true }, nil )
148
182
mm .EXPECT ().MkdirAll ("/.test/var/lib/modules" , os .FileMode (0o750 )).Times (1 ).Return (nil )
149
183
mm .EXPECT ().Mount ("/var/lib/modules" , "/.test/var/lib/modules" , "bind" , uintptr (syscall .MS_BIND ), "" ).Times (1 ).Return (nil )
150
184
mm .EXPECT ().Unmount ("/var/lib/modules" , 0 ).Times (1 ).Return (nil )
185
+ mm .EXPECT ().Stat ("/.test/var/lib/modules" ).Return (& fakeFileInfo {isDir : true }, nil )
151
186
mm .EXPECT ().MkdirAll ("/var/lib/modules" , os .FileMode (0o750 )).Times (1 ).Return (nil )
152
187
mm .EXPECT ().Mount ("/.test/var/lib/modules" , "/var/lib/modules" , "bind" , uintptr (syscall .MS_BIND ), "" ).Times (1 ).Return (assert .AnError )
153
188
@@ -165,9 +200,11 @@ func Test_tempRemount(t *testing.T) {
165
200
mounts := fakeMounts ("/home" , "/var/lib/modules:ro" , "/proc" , "/sys" )
166
201
167
202
mm .EXPECT ().GetMounts ().Return (mounts , nil )
203
+ mm .EXPECT ().Stat ("/var/lib/modules" ).Return (& fakeFileInfo {isDir : true }, nil )
168
204
mm .EXPECT ().MkdirAll ("/.test/var/lib/modules" , os .FileMode (0o750 )).Times (1 ).Return (nil )
169
205
mm .EXPECT ().Mount ("/var/lib/modules" , "/.test/var/lib/modules" , "bind" , uintptr (syscall .MS_BIND ), "" ).Times (1 ).Return (nil )
170
206
mm .EXPECT ().Unmount ("/var/lib/modules" , 0 ).Times (1 ).Return (nil )
207
+ mm .EXPECT ().Stat ("/.test/var/lib/modules" ).Return (& fakeFileInfo {isDir : true }, nil )
171
208
mm .EXPECT ().MkdirAll ("/var/lib/modules" , os .FileMode (0o750 )).Times (1 ).Return (nil )
172
209
mm .EXPECT ().Mount ("/.test/var/lib/modules" , "/var/lib/modules" , "bind" , uintptr (syscall .MS_BIND ), "" ).Times (1 ).Return (nil )
173
210
mm .EXPECT ().Unmount ("/.test/var/lib/modules" , 0 ).Times (1 ).Return (assert .AnError )
@@ -200,3 +237,16 @@ func fakeLog(t *testing.T) func(notcodersdk.LogLevel, string, ...any) {
200
237
t .Logf (s , a ... )
201
238
}
202
239
}
240
+
241
+ type fakeFileInfo struct {
242
+ isDir bool
243
+ }
244
+
245
+ func (fi * fakeFileInfo ) Name () string { return "" }
246
+ func (fi * fakeFileInfo ) Size () int64 { return 0 }
247
+ func (fi * fakeFileInfo ) Mode () os.FileMode { return 0 }
248
+ func (fi * fakeFileInfo ) ModTime () time.Time { return time.Time {} }
249
+ func (fi * fakeFileInfo ) IsDir () bool { return fi .isDir }
250
+ func (fi * fakeFileInfo ) Sys () any { return nil }
251
+
252
+ var _ os.FileInfo = & fakeFileInfo {}
0 commit comments