func (s *S) TestContainerCreate(c *check.C) { config.Set("host", "my.cool.tsuru.addr:8080") defer config.Unset("host") app := provisiontest.NewFakeApp("app-name", "brainfuck", 1) app.Memory = 15 app.Swap = 15 app.CpuShare = 50 app.SetEnv(bind.EnvVar{Name: "A", Value: "myenva"}) app.SetEnv(bind.EnvVar{Name: "ABCD", Value: "other env"}) routertest.FakeRouter.AddBackend(app.GetName()) defer routertest.FakeRouter.RemoveBackend(app.GetName()) img := "tsuru/brainfuck:latest" s.p.Cluster().PullImage(docker.PullImageOptions{Repository: img}, docker.AuthConfiguration{}) cont := Container{ Name: "myName", AppName: app.GetName(), Type: app.GetPlatform(), Status: "created", ProcessName: "myprocess1", } err := cont.Create(&CreateArgs{ App: app, ImageID: img, Commands: []string{"docker", "run"}, Provisioner: s.p, }) c.Assert(err, check.IsNil) defer s.removeTestContainer(&cont) c.Assert(cont.ID, check.Not(check.Equals), "") c.Assert(cont.AppName, check.Equals, app.GetName()) c.Assert(cont.Type, check.Equals, app.GetPlatform()) u, _ := url.Parse(s.server.URL()) host, _, _ := net.SplitHostPort(u.Host) c.Assert(cont.HostAddr, check.Equals, host) user, err := config.GetString("docker:user") c.Assert(err, check.IsNil) c.Assert(cont.User, check.Equals, user) dcli, _ := docker.NewClient(s.server.URL()) container, err := dcli.InspectContainer(cont.ID) c.Assert(err, check.IsNil) c.Assert(container.Path, check.Equals, "docker") c.Assert(container.Args, check.DeepEquals, []string{"run"}) c.Assert(container.Config.User, check.Equals, user) c.Assert(container.Config.Memory, check.Equals, app.Memory) c.Assert(container.Config.MemorySwap, check.Equals, app.Memory+app.Swap) c.Assert(container.Config.CPUShares, check.Equals, int64(app.CpuShare)) sort.Strings(container.Config.Env) c.Assert(container.Config.Env, check.DeepEquals, []string{ "A=myenva", "ABCD=other env", "PORT=8888", "TSURU_HOST=my.cool.tsuru.addr:8080", "TSURU_PROCESSNAME=myprocess1", "port=8888", }) }
func (s *S) TestContainerCreateDoesNotSetEnvs(c *check.C) { s.server.CustomHandler("/images/.*/json", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { response := docker.Image{ Config: &docker.Config{ ExposedPorts: map[docker.Port]struct{}{}, }, } j, _ := json.Marshal(response) w.Write(j) })) config.Set("host", "my.cool.tsuru.addr:8080") defer config.Unset("host") app := provisiontest.NewFakeApp("app-name", "brainfuck", 1) app.SetEnv(bind.EnvVar{Name: "A", Value: "myenva"}) app.SetEnv(bind.EnvVar{Name: "ABCD", Value: "other env"}) routertest.FakeRouter.AddBackend(app.GetName()) defer routertest.FakeRouter.RemoveBackend(app.GetName()) img := "tsuru/brainfuck:latest" s.p.Cluster().PullImage(docker.PullImageOptions{Repository: img}, docker.AuthConfiguration{}) cont := Container{ Name: "myName", AppName: app.GetName(), Type: app.GetPlatform(), Status: "created", } err := cont.Create(&CreateArgs{ Deploy: true, App: app, ImageID: img, Commands: []string{"docker", "run"}, Provisioner: s.p, }) c.Assert(err, check.IsNil) defer s.removeTestContainer(&cont) dcli, err := docker.NewClient(s.server.URL()) c.Assert(err, check.IsNil) container, err := dcli.InspectContainer(cont.ID) c.Assert(err, check.IsNil) sort.Strings(container.Config.Env) c.Assert(container.Config.Env, check.DeepEquals, []string{ "PORT=", "TSURU_HOST=my.cool.tsuru.addr:8080", "port=", }) }
func (s *S) TestContainerCreateDontAllocatesPortToImageWithMoreThanOnePortExposed(c *check.C) { s.server.CustomHandler("/images/.*/json", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { response := docker.Image{ Config: &docker.Config{ ExposedPorts: map[docker.Port]struct{}{"3000/tcp": {}, "80/tcp": {}}, }, } j, _ := json.Marshal(response) w.Write(j) })) config.Set("host", "my.cool.tsuru.addr:8080") defer config.Unset("host") app := provisiontest.NewFakeApp("app-name", "brainfuck", 1) app.Memory = 15 app.Swap = 15 app.CpuShare = 50 app.SetEnv(bind.EnvVar{Name: "A", Value: "myenva"}) app.SetEnv(bind.EnvVar{Name: "ABCD", Value: "other env"}) routertest.FakeRouter.AddBackend(app.GetName()) defer routertest.FakeRouter.RemoveBackend(app.GetName()) img := "tsuru/brainfuck:latest" s.p.Cluster().PullImage(docker.PullImageOptions{Repository: img}, docker.AuthConfiguration{}) cont := Container{ Name: "myName", AppName: app.GetName(), Type: app.GetPlatform(), Status: "created", ProcessName: "myprocess1", } err := cont.Create(&CreateArgs{ App: app, ImageID: img, Commands: []string{"docker", "run"}, Provisioner: s.p, }) c.Assert(err, check.NotNil) defer s.removeTestContainer(&cont) }
func (s *S) TestContainerCreate(c *check.C) { s.server.CustomHandler("/images/.*/json", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { response := docker.Image{ Config: &docker.Config{ ExposedPorts: map[docker.Port]struct{}{}, }, } j, _ := json.Marshal(response) w.Write(j) })) config.Set("host", "my.cool.tsuru.addr:8080") defer config.Unset("host") app := provisiontest.NewFakeApp("app-name", "brainfuck", 1) app.Memory = 15 app.Swap = 15 app.CpuShare = 50 app.SetEnv(bind.EnvVar{Name: "A", Value: "myenva"}) app.SetEnv(bind.EnvVar{Name: "ABCD", Value: "other env"}) routertest.FakeRouter.AddBackend(app.GetName()) defer routertest.FakeRouter.RemoveBackend(app.GetName()) img := "tsuru/brainfuck:latest" s.p.Cluster().PullImage(docker.PullImageOptions{Repository: img}, docker.AuthConfiguration{}) cont := Container{ Name: "myName", AppName: app.GetName(), Type: app.GetPlatform(), Status: "created", ProcessName: "myprocess1", ExposedPort: "8888/tcp", } err := cont.Create(&CreateArgs{ App: app, ImageID: img, Commands: []string{"docker", "run"}, Provisioner: s.p, }) c.Assert(err, check.IsNil) defer s.removeTestContainer(&cont) c.Assert(cont.ID, check.Not(check.Equals), "") c.Assert(cont.AppName, check.Equals, app.GetName()) c.Assert(cont.Type, check.Equals, app.GetPlatform()) u, _ := url.Parse(s.server.URL()) host, _, _ := net.SplitHostPort(u.Host) c.Assert(cont.HostAddr, check.Equals, host) dcli, _ := docker.NewClient(s.server.URL()) container, err := dcli.InspectContainer(cont.ID) c.Assert(err, check.IsNil) c.Assert(container.Path, check.Equals, "docker") c.Assert(container.Args, check.DeepEquals, []string{"run"}) c.Assert(container.Config.Memory, check.Equals, app.Memory) c.Assert(container.Config.MemorySwap, check.Equals, app.Memory+app.Swap) c.Assert(container.Config.CPUShares, check.Equals, int64(app.CpuShare)) sort.Strings(container.Config.Env) c.Assert(container.Config.Labels, check.DeepEquals, map[string]string{ "tsuru.container": "true", "tsuru.router.name": "fake", "tsuru.router.type": "fakeType", "tsuru.app.name": "app-name", "tsuru.app.platform": "brainfuck", "tsuru.process.name": "myprocess1", }) c.Assert(container.Config.Env, check.DeepEquals, []string{ "A=myenva", "ABCD=other env", "PORT=8888", "TSURU_HOST=my.cool.tsuru.addr:8080", "TSURU_PROCESSNAME=myprocess1", "port=8888", }) c.Assert(container.State.Running, check.Equals, false) expectedLogOptions := map[string]string{ "syslog-address": "udp://localhost:1514", } expectedPortBindings := map[docker.Port][]docker.PortBinding{ "8888/tcp": {{HostIP: "", HostPort: ""}}, } c.Assert(container.HostConfig.RestartPolicy.Name, check.Equals, "always") c.Assert(container.HostConfig.LogConfig.Type, check.Equals, "syslog") c.Assert(container.HostConfig.LogConfig.Config, check.DeepEquals, expectedLogOptions) c.Assert(container.HostConfig.PortBindings, check.DeepEquals, expectedPortBindings) c.Assert(container.HostConfig.Memory, check.Equals, int64(15)) c.Assert(container.HostConfig.MemorySwap, check.Equals, int64(30)) c.Assert(container.HostConfig.CPUShares, check.Equals, int64(50)) c.Assert(container.HostConfig.OomScoreAdj, check.Equals, 0) c.Assert(cont.Status, check.Equals, "created") }