github.com/schwarzm/garden-linux@v0.0.0-20150507151835-33bca2147c47/integration/lifecycle/lifecycle_suite_test.go (about)

     1  package lifecycle_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 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  	Expect(client.Ping()).To(Succeed(), "tried to restart garden while it was not running")
    49  	gardenProcess.Signal(syscall.SIGTERM)
    50  	Eventually(gardenProcess.Wait(), 10).Should(Receive())
    51  
    52  	startGarden(argv...)
    53  }
    54  
    55  func ensureGardenRunning() {
    56  	if err := client.Ping(); err != nil {
    57  		client = startGarden()
    58  	}
    59  	Expect(client.Ping()).ToNot(HaveOccurred())
    60  }
    61  
    62  func TestLifecycle(t *testing.T) {
    63  	if rootFSPath == "" {
    64  		log.Println("GARDEN_TEST_ROOTFS undefined; skipping")
    65  		return
    66  	}
    67  
    68  	SynchronizedBeforeSuite(func() []byte {
    69  		gardenPath, err := gexec.Build("github.com/cloudfoundry-incubator/garden-linux", "-a", "-race", "-tags", "daemon")
    70  		Expect(err).ToNot(HaveOccurred())
    71  		return []byte(gardenPath)
    72  	}, func(gardenPath []byte) {
    73  		gardenBin = string(gardenPath)
    74  	})
    75  
    76  	AfterEach(func() {
    77  		ensureGardenRunning()
    78  		gardenProcess.Signal(syscall.SIGQUIT)
    79  		Eventually(gardenProcess.Wait(), 10).Should(Receive())
    80  	})
    81  
    82  	SynchronizedAfterSuite(func() {
    83  		//noop
    84  	}, func() {
    85  		gexec.CleanupBuildArtifacts()
    86  	})
    87  
    88  	RegisterFailHandler(Fail)
    89  	RunSpecs(t, "Lifecycle Suite")
    90  }
    91  
    92  func containerIP(ctr garden.Container) string {
    93  	info, err := ctr.Info()
    94  	Expect(err).ToNot(HaveOccurred())
    95  	return info.ContainerIP
    96  }
    97  
    98  func dumpIP() {
    99  	cmd := exec.Command("ip", "a")
   100  	op, err := cmd.CombinedOutput()
   101  	Expect(err).ToNot(HaveOccurred())
   102  	fmt.Println("IP status:\n", string(op))
   103  
   104  	cmd = exec.Command("iptables", "--list")
   105  	op, err = cmd.CombinedOutput()
   106  	Expect(err).ToNot(HaveOccurred())
   107  	fmt.Println("IP tables chains:\n", string(op))
   108  
   109  	cmd = exec.Command("iptables", "--list-rules")
   110  	op, err = cmd.CombinedOutput()
   111  	Expect(err).ToNot(HaveOccurred())
   112  	fmt.Println("IP tables rules:\n", string(op))
   113  }