github.com/containers/podman/v2@v2.2.2-0.20210501105131-c1e07d070c4c/test/e2e/run_device_test.go (about) 1 package integration 2 3 import ( 4 "os" 5 6 . "github.com/containers/podman/v2/test/utils" 7 . "github.com/onsi/ginkgo" 8 . "github.com/onsi/gomega" 9 ) 10 11 var _ = Describe("Podman run device", func() { 12 var ( 13 tempdir string 14 err error 15 podmanTest *PodmanTestIntegration 16 ) 17 18 BeforeEach(func() { 19 tempdir, err = CreateTempDirInTempDir() 20 if err != nil { 21 os.Exit(1) 22 } 23 podmanTest = PodmanTestCreate(tempdir) 24 podmanTest.Setup() 25 podmanTest.SeedImages() 26 }) 27 28 AfterEach(func() { 29 podmanTest.Cleanup() 30 f := CurrentGinkgoTestDescription() 31 processTestResult(f) 32 33 }) 34 35 It("podman run bad device test", func() { 36 session := podmanTest.Podman([]string{"run", "-q", "--device", "/dev/baddevice", ALPINE, "true"}) 37 session.WaitWithDefaultTimeout() 38 Expect(session).To(ExitWithError()) 39 }) 40 41 It("podman run device test", func() { 42 session := podmanTest.Podman([]string{"run", "-q", "--security-opt", "label=disable", "--device", "/dev/kmsg", ALPINE, "ls", "--color=never", "/dev/kmsg"}) 43 session.WaitWithDefaultTimeout() 44 Expect(session.ExitCode()).To(Equal(0)) 45 Expect(session.OutputToString()).To(Equal("/dev/kmsg")) 46 }) 47 48 It("podman run device rename test", func() { 49 session := podmanTest.Podman([]string{"run", "-q", "--security-opt", "label=disable", "--device", "/dev/kmsg:/dev/kmsg1", ALPINE, "ls", "--color=never", "/dev/kmsg1"}) 50 session.WaitWithDefaultTimeout() 51 Expect(session.ExitCode()).To(Equal(0)) 52 Expect(session.OutputToString()).To(Equal("/dev/kmsg1")) 53 }) 54 55 It("podman run device permission test", func() { 56 session := podmanTest.Podman([]string{"run", "-q", "--security-opt", "label=disable", "--device", "/dev/kmsg:r", ALPINE, "ls", "--color=never", "/dev/kmsg"}) 57 session.WaitWithDefaultTimeout() 58 Expect(session.ExitCode()).To(Equal(0)) 59 Expect(session.OutputToString()).To(Equal("/dev/kmsg")) 60 }) 61 62 It("podman run device rename and permission test", func() { 63 session := podmanTest.Podman([]string{"run", "-q", "--security-opt", "label=disable", "--device", "/dev/kmsg:/dev/kmsg1:r", ALPINE, "ls", "--color=never", "/dev/kmsg1"}) 64 session.WaitWithDefaultTimeout() 65 Expect(session.ExitCode()).To(Equal(0)) 66 Expect(session.OutputToString()).To(Equal("/dev/kmsg1")) 67 }) 68 It("podman run device rename and bad permission test", func() { 69 session := podmanTest.Podman([]string{"run", "-q", "--security-opt", "label=disable", "--device", "/dev/kmsg:/dev/kmsg1:rd", ALPINE, "ls", "--color=never", "/dev/kmsg1"}) 70 session.WaitWithDefaultTimeout() 71 Expect(session).To(ExitWithError()) 72 }) 73 74 It("podman run device host device and container device parameter are directories", func() { 75 SkipIfRootless("Cannot create devices in /dev in rootless mode") 76 Expect(os.MkdirAll("/dev/foodevdir", os.ModePerm)).To(BeNil()) 77 defer os.RemoveAll("/dev/foodevdir") 78 79 mknod := SystemExec("mknod", []string{"/dev/foodevdir/null", "c", "1", "3"}) 80 mknod.WaitWithDefaultTimeout() 81 Expect(mknod.ExitCode()).To(Equal(0)) 82 83 session := podmanTest.Podman([]string{"run", "-q", "--device", "/dev/foodevdir:/dev/bar", ALPINE, "stat", "-c%t:%T", "/dev/bar/null"}) 84 session.WaitWithDefaultTimeout() 85 Expect(session.ExitCode()).To(Equal(0)) 86 Expect(session.OutputToString()).To(Equal("1:3")) 87 }) 88 89 It("podman run device host device with --privileged", func() { 90 if _, err := os.Stat("/dev/kvm"); err != nil { 91 Skip("/dev/kvm not available") 92 } 93 session := podmanTest.Podman([]string{"run", "--privileged", ALPINE, "ls", "/dev/kvm"}) 94 session.WaitWithDefaultTimeout() 95 Expect(session.ExitCode()).To(Equal(0)) 96 }) 97 })