FILE / ScuroNeko/est
internal/ssh/args_test.go
Исходный файл и его история в репозитории.
92 lines
2.3 KiB
Go
92 lines
2.3 KiB
Go
package ssh
|
|
|
|
import (
|
|
"errors"
|
|
"reflect"
|
|
"strings"
|
|
"testing"
|
|
|
|
"git.scuroneko.dev/ScuroNeko/est/internal/config"
|
|
)
|
|
|
|
func TestPrepareArgsRemoteForwardUsesLoopbackDefaults(t *testing.T) {
|
|
args, err := prepareArgs("/etc/ssh/est.conf", config.ProxyEntry{
|
|
Direction: config.LocalToRemote,
|
|
Host: "vps",
|
|
LocalPort: 22,
|
|
RemotePort: 2222,
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("prepareArgs() error = %v", err)
|
|
}
|
|
|
|
want := []string{
|
|
"-N", "-T", "-o", "ExitOnForwardFailure=yes",
|
|
"-F", "/etc/ssh/est.conf",
|
|
"-R", "127.0.0.1:2222:127.0.0.1:22",
|
|
"vps",
|
|
}
|
|
if !reflect.DeepEqual(args, want) {
|
|
t.Errorf("prepareArgs() = %#v, want %#v", args, want)
|
|
}
|
|
}
|
|
|
|
func TestPrepareArgsLocalForwardWithIdentityFile(t *testing.T) {
|
|
args, err := prepareArgs("/etc/ssh/est.conf", config.ProxyEntry{
|
|
Direction: config.RemoteToLocal,
|
|
Host: "db-vps",
|
|
LocalIP: "127.0.0.2",
|
|
LocalPort: 5433,
|
|
RemoteIP: "10.0.0.10",
|
|
RemotePort: 5432,
|
|
IdentityFile: "/keys/db-vps",
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("prepareArgs() error = %v", err)
|
|
}
|
|
|
|
want := []string{
|
|
"-N", "-T", "-o", "ExitOnForwardFailure=yes",
|
|
"-F", "/etc/ssh/est.conf",
|
|
"-i", "/keys/db-vps",
|
|
"-L", "127.0.0.2:5433:10.0.0.10:5432",
|
|
"db-vps",
|
|
}
|
|
if !reflect.DeepEqual(args, want) {
|
|
t.Errorf("prepareArgs() = %#v, want %#v", args, want)
|
|
}
|
|
}
|
|
|
|
func TestPrepareArgsRejectsInvalidEntry(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
entry config.ProxyEntry
|
|
want error
|
|
}{
|
|
{name: "missing host", entry: config.ProxyEntry{LocalPort: 1, RemotePort: 2}, want: ErrEmptyHost},
|
|
{name: "missing local port", entry: config.ProxyEntry{Host: "vps", RemotePort: 2}, want: ErrEmptyLocalPort},
|
|
{name: "missing remote port", entry: config.ProxyEntry{Host: "vps", LocalPort: 1}, want: ErrEmptyRemotePort},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
_, err := prepareArgs("/etc/ssh/est.conf", tt.entry)
|
|
if !errors.Is(err, tt.want) {
|
|
t.Errorf("prepareArgs() error = %v, want %v", err, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestPrepareArgsRejectsUnknownDirection(t *testing.T) {
|
|
_, err := prepareArgs("/etc/ssh/est.conf", config.ProxyEntry{
|
|
Direction: "unknown",
|
|
Host: "vps",
|
|
LocalPort: 1,
|
|
RemotePort: 2,
|
|
})
|
|
if err == nil || !strings.Contains(err.Error(), "invalid direction") {
|
|
t.Fatalf("prepareArgs() error = %v, want invalid-direction error", err)
|
|
}
|
|
}
|