github.com/schwarzm/garden-linux@v0.0.0-20150507151835-33bca2147c47/integration/bind_mount/bind_mount_suite_test.go (about) 1 package bind_mount_test 2 3 import ( 4 "fmt" 5 "log" 6 "os" 7 _ "os/exec" 8 "syscall" 9 "testing" 10 11 "github.com/cloudfoundry-incubator/garden" 12 . "github.com/onsi/ginkgo" 13 . "github.com/onsi/gomega" 14 "github.com/onsi/gomega/gexec" 15 "github.com/tedsuo/ifrit" 16 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 graphPath = os.Getenv("GARDEN_TEST_GRAPHPATH") 23 24 var gardenBin string 25 26 var gardenRunner *runner.Runner 27 var gardenProcess ifrit.Process 28 29 var gardenClient 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 TestBindMount(t *testing.T) { 48 if rootFSPath == "" { 49 log.Println("GARDEN_TEST_ROOTFS undefined; skipping") 50 return 51 } 52 53 SynchronizedBeforeSuite(func() []byte { 54 gardenPath, err := gexec.Build("github.com/cloudfoundry-incubator/garden-linux", "-a", "-race", "-tags", "daemon") 55 Expect(err).ToNot(HaveOccurred()) 56 return []byte(gardenPath) 57 }, func(gardenPath []byte) { 58 gardenBin = string(gardenPath) 59 }) 60 61 AfterEach(func() { 62 ensureGardenRunning() 63 gardenProcess.Signal(syscall.SIGTERM) 64 Eventually(gardenProcess.Wait(), 10).Should(Receive()) 65 }) 66 67 SynchronizedAfterSuite(func() { 68 }, func() { 69 gexec.CleanupBuildArtifacts() 70 }) 71 72 RegisterFailHandler(Fail) 73 RunSpecs(t, "BindMount Suite") 74 } 75 76 func ensureGardenRunning() { 77 if err := gardenClient.Ping(); err != nil { 78 gardenClient = startGarden() 79 } 80 Expect(gardenClient.Ping()).ToNot(HaveOccurred()) 81 } 82 83 func containerIP(ctr garden.Container) string { 84 info, err := ctr.Info() 85 Expect(err).ToNot(HaveOccurred()) 86 return info.ContainerIP 87 }