func main() { flag.Parse() maxProcs := runtime.NumCPU() prevMaxProcs := runtime.GOMAXPROCS(maxProcs) log.Println("set GOMAXPROCS to", maxProcs, "was", prevMaxProcs) var backend backend.Backend switch *backendName { case "linux": if *rootPath == "" { log.Fatalln("must specify -root with linux backend") } if *depotPath == "" { log.Fatalln("must specify -depot with linux backend") } if *rootFSPath == "" { log.Fatalln("must specify -rootfs with linux backend") } uidPool := uid_pool.New(10000, 256) _, ipNet, err := net.ParseCIDR("10.254.0.0/22") if err != nil { log.Fatalln("error parsing CIDR:", err) } networkPool := network_pool.New(ipNet) // TODO: base on ephemeral port range portPool := port_pool.New(61000, 6501) var runner command_runner.CommandRunner runner = command_runner.New(*debug) quotaManager, err := quota_manager.New(*depotPath, *rootPath, runner) if err != nil { log.Fatalln("error creating quota manager:", err) } if *disableQuotas { quotaManager.Disable() } pool := container_pool.New( path.Join(*rootPath, "linux"), *depotPath, *rootFSPath, uidPool, networkPool, portPool, runner, quotaManager, ) backend = linux_backend.New(pool, *snapshotsPath) case "fake": backend = fake_backend.New() } log.Println("setting up backend") err := backend.Setup() if err != nil { log.Fatalln("failed to set up backend:", err) } log.Println("starting server; listening with", *listenNetwork, "on", *listenAddr) graceTime := time.Duration(*containerGraceTime) * time.Second wardenServer := server.New(*listenNetwork, *listenAddr, graceTime, backend) err = wardenServer.Start() if err != nil { log.Fatalln("failed to start:", err) } signals := make(chan os.Signal, 1) go func() { <-signals log.Println("stopping...") wardenServer.Stop() os.Exit(0) }() signal.Notify(signals, syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP) select {} }
"github.com/pivotal-cf-experimental/garden/backend" "github.com/pivotal-cf-experimental/garden/backend/fake_backend" "github.com/pivotal-cf-experimental/garden/message_reader" protocol "github.com/pivotal-cf-experimental/garden/protocol" "github.com/pivotal-cf-experimental/garden/server" ) var _ = Describe("The Warden server", func() { Context("when passed a socket", func() { It("listens on the given socket path and chmods it to 0777", func() { tmpdir, err := ioutil.TempDir(os.TempDir(), "warden-server-test") Expect(err).ToNot(HaveOccurred()) socketPath := path.Join(tmpdir, "warden.sock") wardenServer := server.New("unix", socketPath, 0, fake_backend.New()) err = wardenServer.Start() Expect(err).ToNot(HaveOccurred()) Eventually(ErrorDialing("unix", socketPath)).ShouldNot(HaveOccurred()) stat, err := os.Stat(socketPath) Expect(err).ToNot(HaveOccurred()) Expect(int(stat.Mode() & 0777)).To(Equal(0777)) }) It("deletes the socket file if it is already there", func() { tmpdir, err := ioutil.TempDir(os.TempDir(), "warden-server-test") Expect(err).ToNot(HaveOccurred())