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  }