mirror of
https://github.com/containers/podman.git
synced 2025-11-01 10:45:52 +08:00
pkg/machine: cleanup MakeSSHURL
Remove unnecessary type redirection and just make it a normal function. Also unexport it and move the test as it does not need to be public and remove the default value assignments from the struct. Signed-off-by: Paul Holzinger <pholzing@redhat.com>
This commit is contained in:
@ -3,79 +3,12 @@
|
|||||||
package machine
|
package machine
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net"
|
|
||||||
"net/url"
|
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"reflect"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/containers/podman/v5/pkg/machine/connection"
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestRemoteConnectionType_MakeSSHURL(t *testing.T) {
|
|
||||||
var (
|
|
||||||
host = "foobar"
|
|
||||||
path = "/path/to/socket"
|
|
||||||
rc = "ssh"
|
|
||||||
username = "core"
|
|
||||||
)
|
|
||||||
type args struct {
|
|
||||||
host string
|
|
||||||
path string
|
|
||||||
port string
|
|
||||||
userName string
|
|
||||||
}
|
|
||||||
tests := []struct {
|
|
||||||
name string
|
|
||||||
rc connection.RemoteConnectionType
|
|
||||||
args args
|
|
||||||
want url.URL
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
name: "Good no port",
|
|
||||||
rc: "ssh",
|
|
||||||
args: args{
|
|
||||||
host: host,
|
|
||||||
path: path,
|
|
||||||
port: "",
|
|
||||||
userName: username,
|
|
||||||
},
|
|
||||||
want: url.URL{
|
|
||||||
Scheme: rc,
|
|
||||||
User: url.User(username),
|
|
||||||
Host: host,
|
|
||||||
Path: path,
|
|
||||||
ForceQuery: false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Good with port",
|
|
||||||
rc: "ssh",
|
|
||||||
args: args{
|
|
||||||
host: host,
|
|
||||||
path: path,
|
|
||||||
port: "222",
|
|
||||||
userName: username,
|
|
||||||
},
|
|
||||||
want: url.URL{
|
|
||||||
Scheme: rc,
|
|
||||||
User: url.User(username),
|
|
||||||
Host: net.JoinHostPort(host, "222"),
|
|
||||||
Path: path,
|
|
||||||
ForceQuery: false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
for _, tt := range tests {
|
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
|
||||||
if got := tt.rc.MakeSSHURL(tt.args.host, tt.args.path, tt.args.port, tt.args.userName); !reflect.DeepEqual(got, tt.want) { //nolint: scopelint
|
|
||||||
t.Errorf("MakeSSHURL() = %v, want %v", got, tt.want) //nolint: scopelint
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestGetSSHIdentityPath(t *testing.T) {
|
func TestGetSSHIdentityPath(t *testing.T) {
|
||||||
name := "p-test"
|
name := "p-test"
|
||||||
datadir, err := GetGlobalDataDir()
|
datadir, err := GetGlobalDataDir()
|
||||||
|
|||||||
@ -15,10 +15,10 @@ func AddSSHConnectionsToPodmanSocket(uid, port int, identityPath, name, remoteUs
|
|||||||
fmt.Println("An ignition path was provided. No SSH connection was added to Podman")
|
fmt.Println("An ignition path was provided. No SSH connection was added to Podman")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
uri := SSHRemoteConnection.MakeSSHURL(LocalhostIP, fmt.Sprintf("/run/user/%d/podman/podman.sock", uid), strconv.Itoa(port), remoteUsername)
|
uri := makeSSHURL(LocalhostIP, fmt.Sprintf("/run/user/%d/podman/podman.sock", uid), strconv.Itoa(port), remoteUsername)
|
||||||
uriRoot := SSHRemoteConnection.MakeSSHURL(LocalhostIP, "/run/podman/podman.sock", strconv.Itoa(port), "root")
|
uriRoot := makeSSHURL(LocalhostIP, "/run/podman/podman.sock", strconv.Itoa(port), "root")
|
||||||
|
|
||||||
uris := []url.URL{uri, uriRoot}
|
uris := []*url.URL{uri, uriRoot}
|
||||||
names := []string{name, name + "-root"}
|
names := []string{name, name + "-root"}
|
||||||
|
|
||||||
// The first connection defined when connections is empty will become the default
|
// The first connection defined when connections is empty will become the default
|
||||||
@ -28,7 +28,7 @@ func AddSSHConnectionsToPodmanSocket(uid, port int, identityPath, name, remoteUs
|
|||||||
}
|
}
|
||||||
|
|
||||||
for i := 0; i < 2; i++ {
|
for i := 0; i < 2; i++ {
|
||||||
if err := AddConnection(&uris[i], names[i], identityPath, opts.IsDefault && i == 0); err != nil {
|
if err := AddConnection(uris[i], names[i], identityPath, opts.IsDefault && i == 0); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,7 +15,7 @@ import (
|
|||||||
|
|
||||||
const LocalhostIP = "127.0.0.1"
|
const LocalhostIP = "127.0.0.1"
|
||||||
|
|
||||||
func AddConnection(uri fmt.Stringer, name, identity string, isDefault bool) error {
|
func AddConnection(uri *url.URL, name, identity string, isDefault bool) error {
|
||||||
if len(identity) < 1 {
|
if len(identity) < 1 {
|
||||||
return errors.New("identity must be defined")
|
return errors.New("identity must be defined")
|
||||||
}
|
}
|
||||||
@ -108,27 +108,19 @@ func RemoveFilesAndConnections(files []string, names ...string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type RemoteConnectionType string
|
// makeSSHURL creates a URL from the given input
|
||||||
|
func makeSSHURL(host, path, port, userName string) *url.URL {
|
||||||
var SSHRemoteConnection RemoteConnectionType = "ssh"
|
var hostname string
|
||||||
|
|
||||||
// MakeSSHURL
|
|
||||||
func (rc RemoteConnectionType) MakeSSHURL(host, path, port, userName string) url.URL {
|
|
||||||
// TODO Should this function have input verification?
|
|
||||||
userInfo := url.User(userName)
|
|
||||||
uri := url.URL{
|
|
||||||
Scheme: "ssh",
|
|
||||||
Opaque: "",
|
|
||||||
User: userInfo,
|
|
||||||
Host: host,
|
|
||||||
Path: path,
|
|
||||||
RawPath: "",
|
|
||||||
ForceQuery: false,
|
|
||||||
RawQuery: "",
|
|
||||||
Fragment: "",
|
|
||||||
}
|
|
||||||
if len(port) > 0 {
|
if len(port) > 0 {
|
||||||
uri.Host = net.JoinHostPort(uri.Hostname(), port)
|
hostname = net.JoinHostPort(host, port)
|
||||||
|
} else {
|
||||||
|
hostname = host
|
||||||
|
}
|
||||||
|
userInfo := url.User(userName)
|
||||||
|
return &url.URL{
|
||||||
|
Scheme: "ssh",
|
||||||
|
User: userInfo,
|
||||||
|
Host: hostname,
|
||||||
|
Path: path,
|
||||||
}
|
}
|
||||||
return uri
|
|
||||||
}
|
}
|
||||||
|
|||||||
68
pkg/machine/connection/connection_test.go
Normal file
68
pkg/machine/connection/connection_test.go
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
//go:build amd64 || arm64
|
||||||
|
|
||||||
|
package connection
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net"
|
||||||
|
"net/url"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Test_makeSSHURL(t *testing.T) {
|
||||||
|
var (
|
||||||
|
host = "foobar"
|
||||||
|
path = "/path/to/socket"
|
||||||
|
rc = "ssh"
|
||||||
|
username = "core"
|
||||||
|
)
|
||||||
|
type args struct {
|
||||||
|
host string
|
||||||
|
path string
|
||||||
|
port string
|
||||||
|
userName string
|
||||||
|
}
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
args args
|
||||||
|
want *url.URL
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "Good no port",
|
||||||
|
args: args{
|
||||||
|
host: host,
|
||||||
|
path: path,
|
||||||
|
port: "",
|
||||||
|
userName: username,
|
||||||
|
},
|
||||||
|
want: &url.URL{
|
||||||
|
Scheme: rc,
|
||||||
|
User: url.User(username),
|
||||||
|
Host: host,
|
||||||
|
Path: path,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Good with port",
|
||||||
|
args: args{
|
||||||
|
host: host,
|
||||||
|
path: path,
|
||||||
|
port: "222",
|
||||||
|
userName: username,
|
||||||
|
},
|
||||||
|
want: &url.URL{
|
||||||
|
Scheme: rc,
|
||||||
|
User: url.User(username),
|
||||||
|
Host: net.JoinHostPort(host, "222"),
|
||||||
|
Path: path,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
got := makeSSHURL(tt.args.host, tt.args.path, tt.args.port, tt.args.userName)
|
||||||
|
assert.Equal(t, tt.want, got, "URL matches")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user