2020-09-16 05:02:46 -04:00
|
|
|
package common
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"reflect"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/google/go-cmp/cmp"
|
|
|
|
"github.com/google/go-cmp/cmp/cmpopts"
|
|
|
|
"github.com/hashicorp/packer/common/bootcommand"
|
|
|
|
"github.com/hashicorp/packer/template/interpolate"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestRunConfig_Prepare(t *testing.T) {
|
|
|
|
tc := []struct {
|
|
|
|
name string
|
|
|
|
config *RunConfig
|
|
|
|
expectedConfig *RunConfig
|
|
|
|
driver *DriverConfig
|
|
|
|
errs []error
|
|
|
|
warnings []string
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
name: "VNC dafaults",
|
|
|
|
config: &RunConfig{},
|
|
|
|
expectedConfig: &RunConfig{
|
|
|
|
VNCPortMin: 5900,
|
|
|
|
VNCPortMax: 6000,
|
|
|
|
VNCBindAddress: "127.0.0.1",
|
|
|
|
},
|
|
|
|
driver: new(DriverConfig),
|
|
|
|
errs: nil,
|
|
|
|
warnings: nil,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "VNC port min less than vnc port max",
|
|
|
|
config: &RunConfig{
|
|
|
|
VNCPortMin: 5000,
|
|
|
|
VNCPortMax: 5900,
|
|
|
|
},
|
|
|
|
expectedConfig: &RunConfig{
|
|
|
|
VNCPortMin: 5000,
|
|
|
|
VNCPortMax: 5900,
|
|
|
|
VNCBindAddress: "127.0.0.1",
|
|
|
|
},
|
|
|
|
driver: new(DriverConfig),
|
|
|
|
errs: nil,
|
|
|
|
warnings: nil,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "VNC port min bigger than vnc port max",
|
|
|
|
config: &RunConfig{
|
|
|
|
VNCPortMin: 5900,
|
|
|
|
VNCPortMax: 5000,
|
|
|
|
},
|
|
|
|
expectedConfig: nil,
|
|
|
|
driver: new(DriverConfig),
|
|
|
|
errs: []error{fmt.Errorf("vnc_port_min must be less than vnc_port_max")},
|
|
|
|
warnings: nil,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "VNC port min must be positive",
|
|
|
|
config: &RunConfig{
|
|
|
|
VNCPortMin: -1,
|
|
|
|
},
|
|
|
|
expectedConfig: nil,
|
|
|
|
driver: new(DriverConfig),
|
|
|
|
errs: []error{fmt.Errorf("vnc_port_min must be positive")},
|
|
|
|
warnings: nil,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "fail when vnc_over_websocket set when remote_type is not set",
|
|
|
|
config: &RunConfig{
|
|
|
|
VNCOverWebsocket: true,
|
|
|
|
},
|
|
|
|
expectedConfig: nil,
|
|
|
|
driver: new(DriverConfig),
|
|
|
|
errs: []error{fmt.Errorf("'vnc_over_websocket' can only be used with remote VMWare builds.")},
|
|
|
|
warnings: nil,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "warn about ignored vnc configuration",
|
|
|
|
config: &RunConfig{
|
|
|
|
VNCOverWebsocket: true,
|
|
|
|
VNCPortMin: 5000,
|
|
|
|
VNCPortMax: 5900,
|
|
|
|
},
|
|
|
|
expectedConfig: &RunConfig{
|
|
|
|
VNCOverWebsocket: true,
|
|
|
|
VNCPortMin: 5000,
|
|
|
|
VNCPortMax: 5900,
|
|
|
|
},
|
|
|
|
driver: &DriverConfig{RemoteType: "esxi"},
|
|
|
|
errs: nil,
|
2020-09-17 04:38:33 -04:00
|
|
|
warnings: []string{"[WARN] When 'vnc_over_websocket' is set " +
|
2020-09-16 05:02:46 -04:00
|
|
|
"any other VNC configuration will be ignored."},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, c := range tc {
|
|
|
|
t.Run(c.name, func(t *testing.T) {
|
2020-09-17 04:38:33 -04:00
|
|
|
warnings, errs := c.config.Prepare(interpolate.NewContext(), c.driver)
|
2020-09-16 05:02:46 -04:00
|
|
|
if !reflect.DeepEqual(errs, c.errs) {
|
|
|
|
t.Fatalf("bad: \n expected '%v' \nactual '%v'", c.errs, errs)
|
|
|
|
}
|
|
|
|
if diff := cmp.Diff(warnings, c.warnings); diff != "" {
|
|
|
|
t.Fatalf("unexpected warnings: %s", diff)
|
|
|
|
}
|
|
|
|
if len(c.errs) == 0 {
|
|
|
|
if diff := cmp.Diff(c.config, c.expectedConfig,
|
|
|
|
cmpopts.IgnoreFields(bootcommand.VNCConfig{},
|
|
|
|
"BootConfig",
|
|
|
|
)); diff != "" {
|
|
|
|
t.Fatalf("unexpected config: %s", diff)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|