func main() { app := cli.NewApp() app.Name = "fock" app.Version = "0.0.1" app.Usage = "Cloud Focker - fock the Cloud, run apps locally!" app.Action = func(c *cli.Context) { cli.ShowAppHelp(c) } app.Commands = []cli.Command{ { Name: "docker", Usage: "print the local Docker info", Action: func(c *cli.Context) { focker := focker.NewFocker() focker.DockerVersion(os.Stdout) }, }, { Name: "this", Usage: "download the Cloud Foundry base image", Action: func(c *cli.Context) { focker := focker.NewFocker() focker.ImportRootfsImage(os.Stdout) }, }, { Name: "up", Usage: "stage and run the application", Action: func(c *cli.Context) { focker := focker.NewFocker() pwd, err := os.Getwd() if err != nil { log.Fatalf(" %s", err) } else { if err := focker.RunStager(os.Stdout, pwd); err != nil { log.Fatalf(" %s", err) } } focker.RunRuntime(os.Stdout) }, }, { Name: "off", Usage: "stop the application container and remove it", Action: func(c *cli.Context) { focker := focker.NewFocker() focker.StopRuntime(os.Stdout) }, }, { Name: "buildpacks", Usage: "show the buildpacks installed on the local system", Action: func(c *cli.Context) { focker := focker.NewFocker() focker.ListBuildpacks(os.Stdout) }, }, { Name: "add-buildpack", Usage: "add-buildpack [URL] - add a buildpack from a GitHub URL to the local system", Action: func(c *cli.Context) { focker := focker.NewFocker() if url := c.Args().First(); url != "" { focker.AddBuildpack(os.Stdout, url) } else { fmt.Println("Please supply a GitHub URL to download") } }, }, { Name: "delete-buildpack", Usage: "delete-buildpack [BUILDPACK] - delete a buildpack from the local system", Action: func(c *cli.Context) { focker := focker.NewFocker() if buildpack := c.Args().First(); buildpack != "" { focker.DeleteBuildpack(os.Stdout, buildpack) } else { fmt.Println("Please supply a buildpack to delete") } }, }, { Name: "stage", Usage: "only execute the staging phase for the application", Action: func(c *cli.Context) { focker := focker.NewFocker() if internal := c.Args().First(); internal == "internal" { //this is focker being called inside the staging container focker.StageApp(os.Stdout) } else { //this is focker being called by the user, outside of the staging container pwd, err := os.Getwd() if err != nil { log.Fatalf(" %s", err) } else { if err := focker.RunStager(os.Stdout, pwd); err != nil { log.Fatalf(" %s", err) } } } }, }, { Name: "run", Usage: "only run the current staged application", Action: func(c *cli.Context) { focker := focker.NewFocker() focker.RunRuntime(os.Stdout) }, }, } app.Run(os.Args) }
"github.com/hatofmonkeys/cloudfocker/focker" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "github.com/onsi/gomega/gbytes" "github.com/onsi/gomega/gexec" ) var _ = Describe("Focker", func() { var ( testfocker *focker.Focker buffer *gbytes.Buffer ) BeforeEach(func() { testfocker = focker.NewFocker() buffer = gbytes.NewBuffer() }) Describe("Displaying the docker version", func() { It("should tell Docker to output its version", func() { testfocker.DockerVersion(buffer) Eventually(buffer).Should(gbytes.Say(`Checking Docker version`)) Eventually(buffer).Should(gbytes.Say(`Client API version: `)) Eventually(buffer).Should(gbytes.Say(`Go version \(client\): go`)) }) }) Describe("Bootstrapping the base image", func() { //This works, but speed depends on your net connection XIt("should download and tag the lucid64 filesystem", func() {