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:
Paul Holzinger
2024-02-16 14:41:14 +01:00
parent 5fc351a67a
commit d60757cca6
4 changed files with 86 additions and 93 deletions

View File

@ -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()

View File

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

View File

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

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