64 lines
2.4 KiB
Go
64 lines
2.4 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"proxyctl/internal/profile"
|
|
"proxyctl/internal/shell"
|
|
)
|
|
|
|
type commandEnvironment struct {
|
|
identity profile.UserIdentity
|
|
env map[string]string
|
|
}
|
|
|
|
func (e commandEnvironment) CurrentUser() (profile.UserIdentity, error) { return e.identity, nil }
|
|
func (e commandEnvironment) LookupUser(string) (profile.UserIdentity, error) {
|
|
return profile.UserIdentity{}, os.ErrNotExist
|
|
}
|
|
func (e commandEnvironment) LookupEnv(name string) (string, bool) {
|
|
value, ok := e.env[name]
|
|
return value, ok
|
|
}
|
|
|
|
func TestShellInstallAndUninstallCommandsUseInjectedUserRoots(t *testing.T) {
|
|
home := t.TempDir()
|
|
environment := commandEnvironment{identity: profile.UserIdentity{Username: "tester", HomeDir: home, UID: os.Getuid(), GID: os.Getgid()}, env: map[string]string{"SHELL": "/bin/bash", "XDG_CONFIG_HOME": filepath.Join(home, "config"), "XDG_STATE_HOME": filepath.Join(home, "state")}}
|
|
var output bytes.Buffer
|
|
if err := runWithEnvironment([]string{"shell", "install"}, strings.NewReader(""), &output, environment, shell.OSFileSystem{}, "/test/proxyctl"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
startup := filepath.Join(home, ".bashrc")
|
|
data, err := os.ReadFile(startup)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !strings.Contains(string(data), "command '/test/proxyctl'") || !strings.Contains(output.String(), "installed") {
|
|
t.Fatalf("install output/startup = %q / %q", output.String(), data)
|
|
}
|
|
output.Reset()
|
|
if err := runWithEnvironment([]string{"shell", "uninstall"}, strings.NewReader(""), &output, environment, shell.OSFileSystem{}, "/test/proxyctl"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
data, err = os.ReadFile(startup)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if strings.Contains(string(data), "proxyctl shell integration") || !strings.Contains(output.String(), "uninstalled") {
|
|
t.Fatalf("uninstall output/startup = %q / %q", output.String(), data)
|
|
}
|
|
}
|
|
|
|
func TestUnsupportedShellMaintenanceCommandExplainsAvailability(t *testing.T) {
|
|
home := t.TempDir()
|
|
environment := commandEnvironment{identity: profile.UserIdentity{Username: "tester", HomeDir: home, UID: os.Getuid(), GID: os.Getgid()}, env: map[string]string{"SHELL": "/bin/fish"}}
|
|
err := runWithEnvironment([]string{"shell", "install"}, strings.NewReader(""), &bytes.Buffer{}, environment, shell.OSFileSystem{}, "/test/proxyctl")
|
|
if err == nil || !strings.Contains(err.Error(), "Bash or Zsh") {
|
|
t.Fatalf("unsupported Shell error = %v", err)
|
|
}
|
|
}
|