2015-04-09 21:58:00 +02:00
|
|
|
package ssh
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
2020-11-25 18:40:42 +01:00
|
|
|
"github.com/zclconf/go-cty/cty"
|
2015-04-09 21:58:00 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
func TestProvisioner_connInfo(t *testing.T) {
|
2020-11-25 18:40:42 +01:00
|
|
|
v := cty.ObjectVal(map[string]cty.Value{
|
|
|
|
"type": cty.StringVal("ssh"),
|
|
|
|
"user": cty.StringVal("root"),
|
|
|
|
"password": cty.StringVal("supersecret"),
|
|
|
|
"private_key": cty.StringVal("someprivatekeycontents"),
|
|
|
|
"certificate": cty.StringVal("somecertificate"),
|
|
|
|
"host": cty.StringVal("127.0.0.1"),
|
|
|
|
"port": cty.StringVal("22"),
|
|
|
|
"timeout": cty.StringVal("30s"),
|
|
|
|
"bastion_host": cty.StringVal("127.0.1.1"),
|
2021-05-10 17:46:07 +02:00
|
|
|
"bastion_port": cty.NumberIntVal(20022),
|
2020-11-25 18:40:42 +01:00
|
|
|
})
|
|
|
|
|
|
|
|
conf, err := parseConnectionInfo(v)
|
2015-04-09 21:58:00 +02:00
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("err: %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if conf.User != "root" {
|
|
|
|
t.Fatalf("bad: %v", conf)
|
|
|
|
}
|
|
|
|
if conf.Password != "supersecret" {
|
|
|
|
t.Fatalf("bad: %v", conf)
|
|
|
|
}
|
2015-11-12 21:39:41 +01:00
|
|
|
if conf.PrivateKey != "someprivatekeycontents" {
|
2015-04-09 21:58:00 +02:00
|
|
|
t.Fatalf("bad: %v", conf)
|
|
|
|
}
|
2018-09-19 02:36:39 +02:00
|
|
|
if conf.Certificate != "somecertificate" {
|
|
|
|
t.Fatalf("bad: %v", conf)
|
|
|
|
}
|
2015-04-09 21:58:00 +02:00
|
|
|
if conf.Host != "127.0.0.1" {
|
|
|
|
t.Fatalf("bad: %v", conf)
|
|
|
|
}
|
|
|
|
if conf.Port != 22 {
|
|
|
|
t.Fatalf("bad: %v", conf)
|
|
|
|
}
|
|
|
|
if conf.Timeout != "30s" {
|
|
|
|
t.Fatalf("bad: %v", conf)
|
|
|
|
}
|
2020-11-12 16:00:48 +01:00
|
|
|
if conf.ScriptPath != DefaultUnixScriptPath {
|
|
|
|
t.Fatalf("bad: %v", conf)
|
|
|
|
}
|
|
|
|
if conf.TargetPlatform != TargetPlatformUnix {
|
2015-04-09 21:58:00 +02:00
|
|
|
t.Fatalf("bad: %v", conf)
|
|
|
|
}
|
2015-06-22 18:34:02 +02:00
|
|
|
if conf.BastionHost != "127.0.1.1" {
|
|
|
|
t.Fatalf("bad: %v", conf)
|
|
|
|
}
|
2021-05-10 17:46:07 +02:00
|
|
|
if conf.BastionPort != 20022 {
|
2015-06-22 18:34:02 +02:00
|
|
|
t.Fatalf("bad: %v", conf)
|
|
|
|
}
|
|
|
|
if conf.BastionUser != "root" {
|
|
|
|
t.Fatalf("bad: %v", conf)
|
|
|
|
}
|
|
|
|
if conf.BastionPassword != "supersecret" {
|
|
|
|
t.Fatalf("bad: %v", conf)
|
|
|
|
}
|
2015-11-12 21:39:41 +01:00
|
|
|
if conf.BastionPrivateKey != "someprivatekeycontents" {
|
|
|
|
t.Fatalf("bad: %v", conf)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-09-04 00:45:24 +02:00
|
|
|
func TestProvisioner_connInfoIpv6(t *testing.T) {
|
2020-11-25 18:40:42 +01:00
|
|
|
v := cty.ObjectVal(map[string]cty.Value{
|
|
|
|
"type": cty.StringVal("ssh"),
|
|
|
|
"user": cty.StringVal("root"),
|
|
|
|
"password": cty.StringVal("supersecret"),
|
|
|
|
"private_key": cty.StringVal("someprivatekeycontents"),
|
|
|
|
"host": cty.StringVal("::1"),
|
|
|
|
"port": cty.StringVal("22"),
|
|
|
|
"timeout": cty.StringVal("30s"),
|
|
|
|
"bastion_host": cty.StringVal("::1"),
|
|
|
|
})
|
|
|
|
|
|
|
|
conf, err := parseConnectionInfo(v)
|
2016-09-04 00:45:24 +02:00
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("err: %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if conf.Host != "[::1]" {
|
|
|
|
t.Fatalf("bad: %v", conf)
|
|
|
|
}
|
|
|
|
|
|
|
|
if conf.BastionHost != "[::1]" {
|
|
|
|
t.Fatalf("bad %v", conf)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestProvisioner_connInfoHostname(t *testing.T) {
|
2020-11-25 18:40:42 +01:00
|
|
|
v := cty.ObjectVal(map[string]cty.Value{
|
|
|
|
"type": cty.StringVal("ssh"),
|
|
|
|
"user": cty.StringVal("root"),
|
|
|
|
"password": cty.StringVal("supersecret"),
|
|
|
|
"private_key": cty.StringVal("someprivatekeycontents"),
|
|
|
|
"host": cty.StringVal("example.com"),
|
|
|
|
"port": cty.StringVal("22"),
|
|
|
|
"timeout": cty.StringVal("30s"),
|
|
|
|
"bastion_host": cty.StringVal("example.com"),
|
|
|
|
})
|
|
|
|
|
|
|
|
conf, err := parseConnectionInfo(v)
|
2016-09-04 00:45:24 +02:00
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("err: %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if conf.Host != "example.com" {
|
|
|
|
t.Fatalf("bad: %v", conf)
|
|
|
|
}
|
|
|
|
|
|
|
|
if conf.BastionHost != "example.com" {
|
|
|
|
t.Fatalf("bad %v", conf)
|
|
|
|
}
|
|
|
|
}
|
2020-02-11 22:18:04 +01:00
|
|
|
|
|
|
|
func TestProvisioner_connInfoEmptyHostname(t *testing.T) {
|
2020-11-25 18:40:42 +01:00
|
|
|
v := cty.ObjectVal(map[string]cty.Value{
|
|
|
|
"type": cty.StringVal("ssh"),
|
|
|
|
"user": cty.StringVal("root"),
|
|
|
|
"password": cty.StringVal("supersecret"),
|
|
|
|
"private_key": cty.StringVal("someprivatekeycontents"),
|
|
|
|
"port": cty.StringVal("22"),
|
|
|
|
"timeout": cty.StringVal("30s"),
|
|
|
|
})
|
|
|
|
|
|
|
|
_, err := parseConnectionInfo(v)
|
2020-02-11 22:18:04 +01:00
|
|
|
if err == nil {
|
|
|
|
t.Fatalf("bad: should not allow empty host")
|
|
|
|
}
|
|
|
|
}
|
2021-05-10 17:46:07 +02:00
|
|
|
|
|
|
|
func TestProvisioner_stringBastionPort(t *testing.T) {
|
|
|
|
v := cty.ObjectVal(map[string]cty.Value{
|
|
|
|
"type": cty.StringVal("ssh"),
|
|
|
|
"user": cty.StringVal("root"),
|
|
|
|
"password": cty.StringVal("supersecret"),
|
|
|
|
"private_key": cty.StringVal("someprivatekeycontents"),
|
|
|
|
"host": cty.StringVal("example.com"),
|
|
|
|
"port": cty.StringVal("22"),
|
|
|
|
"timeout": cty.StringVal("30s"),
|
|
|
|
"bastion_host": cty.StringVal("example.com"),
|
|
|
|
"bastion_port": cty.StringVal("12345"),
|
|
|
|
})
|
|
|
|
|
|
|
|
conf, err := parseConnectionInfo(v)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("err: %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if conf.BastionPort != 12345 {
|
|
|
|
t.Fatalf("bad %v", conf)
|
|
|
|
}
|
|
|
|
}
|
2021-05-10 19:57:11 +02:00
|
|
|
|
|
|
|
func TestProvisioner_invalidPortNumber(t *testing.T) {
|
|
|
|
v := cty.ObjectVal(map[string]cty.Value{
|
|
|
|
"type": cty.StringVal("ssh"),
|
|
|
|
"user": cty.StringVal("root"),
|
|
|
|
"password": cty.StringVal("supersecret"),
|
|
|
|
"private_key": cty.StringVal("someprivatekeycontents"),
|
|
|
|
"host": cty.StringVal("example.com"),
|
|
|
|
"port": cty.NumberIntVal(123456789),
|
|
|
|
})
|
|
|
|
|
|
|
|
_, err := parseConnectionInfo(v)
|
|
|
|
if err == nil {
|
|
|
|
t.Fatalf("bad: should not allow invalid port number")
|
|
|
|
}
|
|
|
|
if got, want := err.Error(), "value must be a whole number, between 0 and 65535 inclusive"; got != want {
|
|
|
|
t.Errorf("unexpected error\n got: %s\nwant: %s", got, want)
|
|
|
|
}
|
|
|
|
}
|