@@ -18,6 +18,7 @@ package e2e
18
18
19
19
import (
20
20
"context"
21
+ "fmt"
21
22
"path/filepath"
22
23
"strings"
23
24
@@ -257,4 +258,54 @@ var _ = Describe("docker", Ordered, ContinueOnFailure, func() {
257
258
Expect (libs ).To (ContainElements ([]string {"libcuda.so" , "libcuda.so.1" }))
258
259
})
259
260
})
261
+
262
+ When ("A container tries to create firmware files on the host" , Ordered , func () {
263
+ var outputDir string
264
+ BeforeAll (func (ctx context.Context ) {
265
+ pwd , _ , err := runner .Run ("pwd" )
266
+ Expect (err ).ToNot (HaveOccurred ())
267
+ outputDir = filepath .Join (strings .TrimSpace (pwd ), "test-output" )
268
+
269
+ _ , _ , err = runner .Run (fmt .Sprintf ("mkdir -p %s" , outputDir ))
270
+ Expect (err ).ToNot (HaveOccurred ())
271
+
272
+ _ , _ , err = runner .Run ("docker pull ubuntu" )
273
+ Expect (err ).ToNot (HaveOccurred ())
274
+
275
+ dockerBuildCmd := fmt .Sprintf (`docker build -t firmware-test --build-arg RM_VERSION="$(basename $(ls -d /lib/firmware/nvidia/*.*))" --build-arg CURRENT_DIR=%q - <<EOF` , outputDir )
276
+ dockerBuildDockerfile := `
277
+ FROM ubuntu
278
+ RUN mkdir -p /lib/firmware/nvidia/
279
+ ARG RM_VERSION
280
+ ARG CURRENT_DIR
281
+ RUN ln -s /../../../../../../../../\$CURRENT_DIR /lib/firmware/nvidia/\$RM_VERSION
282
+ EOF`
283
+ _ , _ , err = runner .Run (dockerBuildCmd + dockerBuildDockerfile )
284
+ Expect (err ).ToNot (HaveOccurred ())
285
+ })
286
+
287
+ AfterAll (func (ctx context.Context ) {
288
+ if outputDir != "" {
289
+ runner .Run (fmt .Sprintf ("rm -rf %s" , outputDir ))
290
+ }
291
+ })
292
+
293
+ It ("should not fail when using CDI" , func (ctx context.Context ) {
294
+ output , _ , err := runner .Run ("docker run --rm --runtime=nvidia --gpus=all firmware-test" )
295
+ Expect (err ).ToNot (HaveOccurred ())
296
+ Expect (output ).To (BeEmpty ())
297
+
298
+ output , _ , _ = runner .Run (fmt .Sprintf ("ls -A %s" , outputDir ))
299
+ Expect (output ).To (BeEmpty ())
300
+ })
301
+
302
+ It ("should fail when using the nvidia-container-runtime-hook" , Label ("legacy" ), func (ctx context.Context ) {
303
+ _ , stderr , err := runner .Run ("docker run --rm --runtime=runc --gpus=all firmware-test" )
304
+ Expect (err ).To (HaveOccurred ())
305
+ Expect (stderr ).To (ContainSubstring ("nvidia-container-cli.real: mount error: path error:" ))
306
+
307
+ output , _ , _ := runner .Run (fmt .Sprintf ("ls -A %s" , outputDir ))
308
+ Expect (output ).To (BeEmpty ())
309
+ })
310
+ })
260
311
})
0 commit comments