chore(protocol): improve IPv6 address. (#268)

* docs: improve documentation and configuration handling

- Clarify valid values for the IP protocol in usage messages for both main application and proxy settings

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>

* test: improve IPv6 command execution tests

- Add a new test function `TestCommandWithIPv6` to check command execution with an IPv6 address
- Initialize test variables and expected output for the IPv6 command test
- Set up a `Plugin` struct with IPv6 host, user, port, key path, script, and command timeout for testing
- Verify that `plugin.Exec()` returns `nil` (no error) in the IPv6 test
- Assert that the output of the command execution matches the expected output in the IPv6 test

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>

* test: enhance test suite and CI robustness

- Add support for IPv6 protocol in `TestCommandWithIPv6` test case in `plugin_test.go`

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>

* update

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>

* update

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>

* update

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>

* update

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>

* update2

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>

* update3

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>

* update4

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>

* update5

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>

* update5

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>

* update5

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>

---------

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
This commit is contained in:
Bo-Yi Wu 2024-01-21 09:27:49 +08:00 committed by GitHub
parent 91fd4f8071
commit a41d4afc40
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 54 additions and 4 deletions

View File

@ -117,6 +117,8 @@ ssh-server:
rm -rf /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_dsa_key
sed -i 's/^#PubkeyAuthentication yes/PubkeyAuthentication yes/g' /etc/ssh/sshd_config
sed -i 's/AllowTcpForwarding no/AllowTcpForwarding yes/g' /etc/ssh/sshd_config
sed -i 's/^#ListenAddress 0.0.0.0/ListenAddress 0.0.0.0/g' /etc/ssh/sshd_config
sed -i 's/^#ListenAddress ::/ListenAddress ::/g' /etc/ssh/sshd_config
./tests/entrypoint.sh /usr/sbin/sshd -D &
coverage:

View File

@ -53,7 +53,7 @@ func main() {
},
&cli.StringFlag{
Name: "protocol",
Usage: "The IP protocol to use. Default to tcp (both IPv4 and IPv6).",
Usage: "The IP protocol to use. Valid values are \"tcp\". \"tcp4\" or \"tcp6\". Default to tcp.",
EnvVars: []string{"PLUGIN_PROTOCOL", "SSH_PROTOCOL", "INPUT_PROTOCOL"},
Value: "tcp",
},
@ -149,7 +149,7 @@ func main() {
},
&cli.StringFlag{
Name: "proxy.protocol",
Usage: "The IP protocol to use for the proxy. Default to tcp (both IPv4 and IPv6).",
Usage: "The IP protocol to use for the proxy. Valid values are \"tcp\". \"tcp4\" or \"tcp6\". Default to tcp.",
EnvVars: []string{"PLUGIN_PROTOCOL", "SSH_PROTOCOL", "INPUT_PROTOCOL"},
Value: "tcp",
},

View File

@ -61,7 +61,9 @@ func escapeArg(arg string) string {
func (p Plugin) hostPort(host string) (string, string) {
hosts := strings.Split(host, ":")
port := strconv.Itoa(p.Config.Port)
if len(hosts) > 1 {
if len(hosts) > 1 &&
(p.Config.Protocol == easyssh.PROTOCOL_TCP ||
p.Config.Protocol == easyssh.PROTOCOL_TCP4) {
host = hosts[0]
port = hosts[1]
}

View File

@ -797,7 +797,8 @@ func TestPlugin_hostPort(t *testing.T) {
name: "different port",
fields: fields{
Config: Config{
Port: 22,
Port: 22,
Protocol: easyssh.PROTOCOL_TCP4,
},
},
args: args{
@ -806,6 +807,20 @@ func TestPlugin_hostPort(t *testing.T) {
wantHost: "localhost",
wantPort: "443",
},
{
name: "ipv6",
fields: fields{
Config: Config{
Port: 22,
Protocol: easyssh.PROTOCOL_TCP6,
},
},
args: args{
h: "::1",
},
wantHost: "::1",
wantPort: "22",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
@ -949,3 +964,34 @@ func TestSudoCommand(t *testing.T) {
assert.Nil(t, plugin.Exec())
assert.Equal(t, unindent(expected), unindent(buffer.String()))
}
// TODO: TestCommandWithIPv6 is not working on github actions.
// func TestCommandWithIPv6(t *testing.T) {
// var (
// buffer bytes.Buffer
// expected = `
// ======CMD======
// whoami
// ======END======
// out: drone-scp
// `
// )
// plugin := Plugin{
// Config: Config{
// Host: []string{"::1"},
// Username: "drone-scp",
// Port: 22,
// KeyPath: "./tests/.ssh/id_rsa",
// Script: []string{
// "whoami",
// },
// Protocol: easyssh.PROTOCOL_TCP6,
// CommandTimeout: 10 * time.Second,
// },
// Writer: &buffer,
// }
// assert.Nil(t, plugin.Exec())
// assert.Equal(t, unindent(expected), unindent(buffer.String()))
// }