func (s *S) TestProvisionerRestartCallsTheRestartHook(c *gocheck.C) { var handler FakeSSHServer handler.output = "caad7bbd5411" server := httptest.NewServer(&handler) defer server.Close() host, port, _ := net.SplitHostPort(server.Listener.Addr().String()) portNumber, _ := strconv.Atoi(port) config.Set("docker:ssh-agent-port", portNumber) defer config.Unset("docker:ssh-agent-port") var p dockerProvisioner app := testing.NewFakeApp("almah", "static", 1) cont := container{ ID: handler.output, AppName: app.GetName(), Type: app.GetPlatform(), IP: "10.10.10.10", HostAddr: host, } err := collection().Insert(cont) c.Assert(err, gocheck.IsNil) defer collection().RemoveId(cont.ID) err = p.Restart(app) c.Assert(err, gocheck.IsNil) input := cmdInput{Cmd: "/var/lib/tsuru/restart"} body := handler.bodies[0] c.Assert(body, gocheck.DeepEquals, input) path := "/container/10.10.10.10/cmd" c.Assert(handler.requests[0].URL.Path, gocheck.DeepEquals, path) }
func (s *S) TestNewContainer(c *gocheck.C) { oldClusterNodes := clusterNodes clusterNodes = map[string]string{"server": s.server.URL()} defer func() { clusterNodes = oldClusterNodes }() app := testing.NewFakeApp("app-name", "brainfuck", 1) rtesting.FakeRouter.AddBackend(app.GetName()) defer rtesting.FakeRouter.RemoveBackend(app.GetName()) dockerCluster().PullImage( docker.PullImageOptions{Repository: "tsuru/brainfuck"}, docker.AuthConfiguration{}, ) cont, err := newContainer(app, getImage(app), []string{"docker", "run"}) c.Assert(err, gocheck.IsNil) defer s.removeTestContainer(&cont) c.Assert(cont.ID, gocheck.Not(gocheck.Equals), "") c.Assert(cont, gocheck.FitsTypeOf, container{}) c.Assert(cont.AppName, gocheck.Equals, app.GetName()) c.Assert(cont.Type, gocheck.Equals, app.GetPlatform()) c.Assert(cont.Name, gocheck.Not(gocheck.Equals), "") c.Assert(cont.Name, gocheck.HasLen, 20) u, _ := url.Parse(s.server.URL()) host, _, _ := net.SplitHostPort(u.Host) c.Assert(cont.HostAddr, gocheck.Equals, host) user, err := config.GetString("docker:ssh:user") c.Assert(err, gocheck.IsNil) dcli, _ := docker.NewClient(s.server.URL()) container, err := dcli.InspectContainer(cont.ID) c.Assert(err, gocheck.IsNil) c.Assert(container.Config.User, gocheck.Equals, user) }
func (s *S) TestCreateContainerForward(c *gocheck.C) { err := newImage("tsuru/python", s.server.URL()) c.Assert(err, gocheck.IsNil) client, err := dockerClient.NewClient(s.server.URL()) c.Assert(err, gocheck.IsNil) images, err := client.ListImages(true) c.Assert(err, gocheck.IsNil) cmds := []string{"ps", "-ef"} app := testing.NewFakeApp("myapp", "python", 1) context := action.FWContext{Params: []interface{}{app, images[0].ID, cmds}} r, err := createContainer.Forward(context) c.Assert(err, gocheck.IsNil) cont := r.(container) defer cont.remove() c.Assert(cont, gocheck.FitsTypeOf, container{}) c.Assert(cont.AppName, gocheck.Equals, app.GetName()) c.Assert(cont.Type, gocheck.Equals, app.GetPlatform()) port, err := getPort() c.Assert(err, gocheck.IsNil) c.Assert(cont.Port, gocheck.Equals, port) coll := collection() defer coll.Close() defer coll.Remove(bson.M{"id": cont.ID}) retrieved, err := getContainer(cont.ID) c.Assert(err, gocheck.IsNil) c.Assert(retrieved.ID, gocheck.Equals, cont.ID) c.Assert(retrieved.Status, gocheck.Equals, "created") }