func (f Focker) RunStager(writer io.Writer, appDir string) error { prepareStagingFilesystem(utils.CloudfockerHome()) stagingAppDir := prepareStagingApp(appDir, utils.CloudfockerHome()+"/staging") runConfig := config.NewStageRunConfig(stagingAppDir) cli, Stdout, stdoutpipe := docker.GetNewClient() docker.RunConfiguredContainer(cli, Stdout, stdoutpipe, writer, runConfig) f.DeleteContainer(writer, runConfig.ContainerName) return stager.ValidateStagedApp(utils.CloudfockerHome()) }
It("should tell Docker to import the rootfs from the supplied URL", func() { url := "http://test.com/test-img" fakeDockerClient = new(FakeDockerClient) stdout, stdoutPipe := io.Pipe() docker.ImportRootfsImage(fakeDockerClient, stdout, stdoutPipe, buffer, url) Expect(len(fakeDockerClient.cmdImportArgs)).To(Equal(2)) Expect(fakeDockerClient.cmdImportArgs[0]).To(Equal("http://test.com/test-img")) Expect(fakeDockerClient.cmdImportArgs[1]).To(Equal("cloudfocker-base")) }) }) Describe("Running a configured container", func() { It("should tell Docker to run the container with the correct arguments", func() { fakeDockerClient = new(FakeDockerClient) stdout, stdoutPipe := io.Pipe() docker.RunConfiguredContainer(fakeDockerClient, stdout, stdoutPipe, buffer, config.NewStageRunConfig("/tmp/fakeappdir")) Expect(len(fakeDockerClient.cmdRunArgs)).To(Equal(12)) Expect(fakeDockerClient.cmdRunArgs[11]).To(Equal("internal")) }) }) Describe("Stopping the docker container", func() { It("should tell Docker to stop the container", func() { fakeDockerClient = new(FakeDockerClient) stdout, stdoutPipe := io.Pipe() docker.StopContainer(fakeDockerClient, stdout, stdoutPipe, buffer, "cloudfocker-container") Expect(len(fakeDockerClient.cmdStopArgs)).To(Equal(1)) Expect(fakeDockerClient.cmdStopArgs[0]).To(Equal("cloudfocker-container")) }) })
"github.com/cloudcredo/cloudfocker/config" "github.com/cloudcredo/cloudfocker/docker" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = Describe("Parser", func() { Describe("Parsing a RunConfig", func() { Context("with a staging config ", func() { It("should return a slice with all required arguments", func() { os.Setenv("CLOUDFOCKER_HOME", "/home/testuser/.cloudfocker") thisUser, _ := user.Current() userId := thisUser.Uid stageConfig := config.NewStageRunConfig("/home/testuser/testapp") parsedRunCommand := docker.ParseRunCommand(stageConfig) Expect(strings.Join(parsedRunCommand, " ")).To(Equal("-u=" + userId + " --name=cloudfocker-staging --volume=/home/testuser/.cloudfocker/buildpacks:/tmp/cloudfockerbuildpacks --volume=/home/testuser/.cloudfocker/cache:/tmp/cache --volume=/home/testuser/.cloudfocker/droplet:/tmp/droplet --volume=/home/testuser/.cloudfocker/focker:/focker --volume=/home/testuser/.cloudfocker/result:/tmp/result --volume=/home/testuser/testapp:/app cloudfocker-base:latest /focker/fock stage internal")) }) }) Context("with a runtime config ", func() { It("should return a slice with all required arguments", func() { os.Setenv("CLOUDFOCKER_HOME", "/home/testuser/.cloudfocker") thisUser, _ := user.Current() userId := thisUser.Uid testRuntimeRunConfig := testRuntimeRunConfig() parsedRunCommand := docker.ParseRunCommand(testRuntimeRunConfig) Expect(strings.Join(parsedRunCommand, " ")).To(Equal("-u=" + userId + " --name=cloudfocker-runtime -d --volume=/home/testuser/testapp/app:/app --publish=8080:8080 --env=\"HOME=/app\" --env=\"PORT=8080\" --env=\"TMPDIR=/app/tmp\" cloudfocker-base:latest /bin/bash /app/cloudfocker-start.sh /app test test test")) }) }) })