github.com/schwarzm/garden-linux@v0.0.0-20150507151835-33bca2147c47/integration/device/device_suite_test.go (about) 1 package device_test 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "log" 7 "os" 8 "syscall" 9 "testing" 10 11 . "github.com/onsi/ginkgo" 12 . "github.com/onsi/gomega" 13 "github.com/onsi/gomega/gexec" 14 "github.com/tedsuo/ifrit" 15 16 "github.com/cloudfoundry-incubator/garden" 17 "github.com/cloudfoundry-incubator/garden-linux/integration/runner" 18 ) 19 20 var binPath = "../../old/linux_backend/bin" // relative to test suite directory 21 var rootFSPath = os.Getenv("GARDEN_TEST_ROOTFS") 22 var fuseRootFSPath = os.Getenv("GARDEN_FUSE_TEST_ROOTFS") 23 var graphPath = os.Getenv("GARDEN_TEST_GRAPHPATH") 24 25 var gardenBin string 26 var gardenRunner *runner.Runner 27 var gardenProcess ifrit.Process 28 29 var client garden.Client 30 31 func startGarden(argv ...string) garden.Client { 32 gardenAddr := fmt.Sprintf("/tmp/garden_%d.sock", GinkgoParallelNode()) 33 34 { // Check this test suite is in the correct directory 35 b, err := os.Open(binPath) 36 Expect(err).ToNot(HaveOccurred()) 37 b.Close() 38 } 39 40 gardenRunner = runner.New("unix", gardenAddr, gardenBin, binPath, rootFSPath, graphPath, argv...) 41 42 gardenProcess = ifrit.Invoke(gardenRunner) 43 44 return gardenRunner.NewClient() 45 } 46 47 func restartGarden(argv ...string) { 48 gardenProcess.Signal(syscall.SIGINT) 49 Eventually(gardenProcess.Wait(), "10s").Should(Receive()) 50 51 startGarden(argv...) 52 } 53 54 func TestDevice(t *testing.T) { 55 if fuseRootFSPath == "" { 56 log.Println("GARDEN_FUSE_TEST_ROOTFS undefined; skipping") 57 return 58 } 59 60 var beforeSuite struct { 61 GardenPath string 62 } 63 64 SynchronizedBeforeSuite(func() []byte { 65 var err error 66 beforeSuite.GardenPath, err = gexec.Build("github.com/cloudfoundry-incubator/garden-linux", "-a", "-race", "-tags", "daemon") 67 Expect(err).ToNot(HaveOccurred()) 68 69 b, err := json.Marshal(beforeSuite) 70 Expect(err).ToNot(HaveOccurred()) 71 72 return b 73 }, func(paths []byte) { 74 err := json.Unmarshal(paths, &beforeSuite) 75 Expect(err).ToNot(HaveOccurred()) 76 77 gardenBin = beforeSuite.GardenPath 78 }) 79 80 AfterEach(func() { 81 gardenProcess.Signal(syscall.SIGQUIT) 82 Eventually(gardenProcess.Wait(), "10s").Should(Receive()) 83 }) 84 85 SynchronizedAfterSuite(func() { 86 //noop 87 }, func() { 88 gexec.CleanupBuildArtifacts() 89 }) 90 91 RegisterFailHandler(Fail) 92 RunSpecs(t, "Device Suite") 93 }