v1.0.0
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user