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  }