FILE / ScuroNeko/est

internal/ssh/args_test.go

Исходный файл и его история в репозитории.
FILE bb2fa57bbeb0f317d4fdfd94520057bcdeeb37c7
Files
est/internal/ssh/args_test.go
T
ScuroNeko bb2fa57bbe
Golang lint / docker-smoke (push) Successful in 17s
Golang lint / lint (push) Failing after 18s
v1.0.0
2026-08-06 12:22:44 +03:00

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)
}
}