func (s *S) TestCommandsToRun(c *gocheck.C) { rfs := ftesting.RecordingFs{} f, err := rfs.Create("/opt/me/id_dsa.pub") c.Assert(err, gocheck.IsNil) f.Write([]byte("ssh-rsa ohwait! me@machine\n")) f.Close() old := fsystem fsystem = &rfs defer func() { fsystem = old }() config.Set("docker:ssh:sshd-path", "/opt/bin/sshd") config.Set("docker:ssh:public-key", "/opt/me/id_dsa.pub") config.Set("docker:ssh:private-key", "/opt/me/id_dsa") defer config.Unset("docker:ssh:sshd-path") defer config.Unset("docker:ssh:public-key") defer config.Unset("docker:ssh:private-key") app := testing.NewFakeApp("myapp", "python", 1) cmd, err := commandToRun(app) c.Assert(err, gocheck.IsNil) sshCmd := "/var/lib/tsuru/add-key ssh-rsa ohwait! me@machine && /opt/bin/sshd -D" expected := []string{ "docker", "run", "-d", "-t", "-p", s.port, fmt.Sprintf("%s/python", s.repoNamespace), "/bin/bash", "-c", sshCmd, } c.Assert(cmd, gocheck.DeepEquals, expected) }
func (s *S) TestSSHCmdsDefaultKeyFile(c *gocheck.C) { rfs := ftesting.RecordingFs{} f, err := rfs.Create(os.ExpandEnv("${HOME}/.ssh/id_rsa.pub")) c.Assert(err, gocheck.IsNil) f.Write([]byte("ssh-rsa ohwait! me@machine")) f.Close() old := fsystem fsystem = &rfs defer func() { fsystem = old }() commands, err := sshCmds() c.Assert(err, gocheck.IsNil) c.Assert(commands[0], gocheck.Equals, "/var/lib/tsuru/add-key ssh-rsa ohwait! me@machine") }
func (s *S) TestSSHCmdsDefaultSSHDPath(c *gocheck.C) { rfs := ftesting.RecordingFs{} f, err := rfs.Create("/opt/me/id_dsa.pub") c.Assert(err, gocheck.IsNil) f.Write([]byte("ssh-rsa ohwait! me@machine")) f.Close() old := fsystem fsystem = &rfs defer func() { fsystem = old }() config.Set("docker:ssh:public-key", "/opt/me/id_dsa.pub") defer config.Unset("docker:ssh:public-key") commands, err := sshCmds() c.Assert(err, gocheck.IsNil) c.Assert(commands[1], gocheck.Equals, "sudo /usr/sbin/sshd -D") }
func (s *S) TestPluginInstall(c *gocheck.C) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "fakeplugin") })) defer ts.Close() rfs := ftesting.RecordingFs{} fsystem = &rfs defer func() { fsystem = nil }() var stdout bytes.Buffer context := cmd.Context{ Args: []string{"myplugin", ts.URL}, Stdout: &stdout, } client := cmd.NewClient(nil, nil, manager) command := pluginInstall{} err := command.Run(&context, client) c.Assert(err, gocheck.IsNil) pluginsPath := cmd.JoinWithUserDir(".tsuru", "plugins") hasAction := rfs.HasAction(fmt.Sprintf("mkdirall %s with mode 0755", pluginsPath)) c.Assert(hasAction, gocheck.Equals, true) pluginPath := cmd.JoinWithUserDir(".tsuru", "plugins", "myplugin") hasAction = rfs.HasAction(fmt.Sprintf("openfile %s with mode 0755", pluginPath)) c.Assert(hasAction, gocheck.Equals, true) f, err := rfs.Open(pluginPath) c.Assert(err, gocheck.IsNil) data, err := ioutil.ReadAll(f) c.Assert(err, gocheck.IsNil) c.Assert("fakeplugin\n", gocheck.Equals, string(data)) expected := `Plugin "myplugin" successfully installed!` + "\n" c.Assert(expected, gocheck.Equals, stdout.String()) }
func (s *S) TestKeyRemove(c *gocheck.C) { var stdout, stderr bytes.Buffer u, err := user.Current() c.Assert(err, gocheck.IsNil) p := path.Join(u.HomeDir, ".ssh", "id_rsa.pub") expected := "Key successfully removed!\n" context := cmd.Context{ Args: []string{}, Stdout: &stdout, Stderr: &stderr, } client := cmd.NewClient(&http.Client{Transport: &testing.Transport{Message: "success", Status: http.StatusOK}}, nil, manager) fs := fs_test.RecordingFs{FileContent: "user-key"} command := KeyRemove{keyReader{fsystem: &fs}} err = command.Run(&context, client) c.Assert(err, gocheck.IsNil) c.Assert(stdout.String(), gocheck.Equals, expected) c.Assert(fs.HasAction("open "+p), gocheck.Equals, true) }
func (s *S) TestPluginRemove(c *gocheck.C) { rfs := ftesting.RecordingFs{} fsystem = &rfs defer func() { fsystem = nil }() var stdout bytes.Buffer context := cmd.Context{ Args: []string{"myplugin"}, Stdout: &stdout, } client := cmd.NewClient(nil, nil, manager) command := pluginRemove{} err := command.Run(&context, client) c.Assert(err, gocheck.IsNil) pluginPath := cmd.JoinWithUserDir(".tsuru", "plugins", "myplugin") hasAction := rfs.HasAction(fmt.Sprintf("remove %s", pluginPath)) c.Assert(hasAction, gocheck.Equals, true) expected := `Plugin "myplugin" successfully removed!` + "\n" c.Assert(expected, gocheck.Equals, stdout.String()) }