Skip to content

Commit

Permalink
chore: test debt
Browse files Browse the repository at this point in the history
Signed-off-by: Ryan Johnson <[email protected]>
  • Loading branch information
tenthirtyam committed Sep 4, 2024
1 parent 623ba0a commit ad2fdc1
Show file tree
Hide file tree
Showing 17 changed files with 148 additions and 97 deletions.
7 changes: 6 additions & 1 deletion GNUmakefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ PLUGIN_FQN="$(shell grep -E '^module' <go.mod | sed -E 's/module *//')"

COUNT?=1
TEST?=$(shell go list ./...)
TEST_EXCLUDE_DIRS := builder/vsphere/common/testing builder/vsphere/examples/driver version
HASHICORP_PACKER_PLUGIN_SDK_VERSION?=$(shell go list -m github.com/hashicorp/packer-plugin-sdk | cut -d " " -f2)

.PHONY: dev
Expand All @@ -16,7 +17,11 @@ dev:
packer plugins install --path ${BINARY} "$(shell echo "${PLUGIN_FQN}" | sed 's/packer-plugin-//')"

test:
@go test -race -count $(COUNT) $(TEST) -timeout=3m
@dirs=$$(go list $(TEST)); \
for dir in $(TEST_EXCLUDE_DIRS); do \
dirs=$$(echo "$$dirs" | grep -v $$dir); \
done; \
echo "$$dirs" | xargs -L1 go test -race -count $(COUNT) -timeout=3m

install-packer-sdc: ## Install packer sofware development command
@go install github.com/hashicorp/packer-plugin-sdk/cmd/packer-sdc@${HASHICORP_PACKER_PLUGIN_SDK_VERSION}
Expand Down
29 changes: 19 additions & 10 deletions builder/vsphere/common/testing/utility.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,21 @@ import (
"github.com/hashicorp/packer-plugin-vsphere/builder/vsphere/driver"
)

const (
testDefaultUsername = "[email protected]"
testDefaultPassword = "VMw@re1!"
testDefaultApiEndpoint = "vcenter.example.com"
)

func NewVMName() string {
rand.Seed(time.Now().UnixNano())
return fmt.Sprintf("test-%v", rand.Intn(1000))
r := rand.New(rand.NewSource(time.Now().UnixNano()))
return fmt.Sprintf("test-%v", r.Intn(1000))
}

func RenderConfig(builderType string, config map[string]interface{}) string {
t := map[string][]map[string]interface{}{
"builders": {
map[string]interface{}{
"type": builderType,
},
{"type": builderType},
},
}
for k, v := range config {
Expand All @@ -37,21 +41,27 @@ func RenderConfig(builderType string, config map[string]interface{}) string {
func TestConn() (driver.Driver, error) {
username := os.Getenv("VSPHERE_USERNAME")
if username == "" {
username = "root"
username = testDefaultUsername
}

password := os.Getenv("VSPHERE_PASSWORD")
if password == "" {
password = "jetbrains"
password = testDefaultPassword
}

vcenter := os.Getenv("VSPHERE_VCENTER_SERVER")
if vcenter == "" {
vcenter = testDefaultApiEndpoint
}

d, err := driver.NewDriver(&driver.ConnectConfig{
VCenterServer: "vcenter.example.com",
VCenterServer: vcenter,
Username: username,
Password: password,
InsecureConnection: true,
})
if err != nil {
return nil, fmt.Errorf("error connecting to vCenter Server instance: %v", err)
return nil, fmt.Errorf("error connecting to endpoint: %v", err)
}
return d, nil
}
Expand All @@ -61,7 +71,6 @@ func GetVM(d driver.Driver, name string) (driver.VirtualMachine, error) {
if err != nil {
return nil, fmt.Errorf("error finding virtual machine: %v", err)
}

return vm, nil
}

Expand Down
38 changes: 22 additions & 16 deletions builder/vsphere/driver/driver_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,21 +23,27 @@ import (
"github.com/vmware/govmomi/vim25/soap"
)

// Defines whether acceptance tests should be run
const TestHostName = "esxi-01.example.com"
const (
testDefaultUsername = "[email protected]"
testDefaultPassword = "VMw@re1!"
testDefaultApiEndpoint = "vcenter.example.com"
testDefaultHost = "esxi-01.example.com"
)

func newTestDriver(t *testing.T) Driver {
username := os.Getenv("VSPHERE_USERNAME")
if username == "" {
username = "root"
}
password := os.Getenv("VSPHERE_PASSWORD")
if password == "" {
password = "jetbrains"
func getEnv(key, fallback string) string {
if value := os.Getenv(key); value != "" {
return value
}
return fallback
}

func newTestDriver(t *testing.T) Driver {
username := getEnv("VSPHERE_USERNAME", testDefaultUsername)
password := getEnv("VSPHERE_PASSWORD", testDefaultPassword)
vcenter := getEnv("VSPHERE_VCENTER_SERVER", testDefaultApiEndpoint)

d, err := NewDriver(&ConnectConfig{
VCenterServer: "vcenter.example.com",
VCenterServer: vcenter,
Username: username,
Password: password,
InsecureConnection: true,
Expand All @@ -49,8 +55,8 @@ func newTestDriver(t *testing.T) Driver {
}

func newVMName() string {
rand.Seed(time.Now().UTC().UnixNano())
return fmt.Sprintf("test-%v", rand.Intn(1000))
r := rand.New(rand.NewSource(time.Now().UTC().UnixNano()))
return fmt.Sprintf("test-%v", r.Intn(1000))
}

type VCenterSimulator struct {
Expand Down Expand Up @@ -94,23 +100,23 @@ func (s *VCenterSimulator) Close() {
}
}

// Simulator shortcut to choose any pre created VM.
// Simulator shortcut to choose any pre-created virtual machine.
func (s *VCenterSimulator) ChooseSimulatorPreCreatedVM() (VirtualMachine, *simulator.VirtualMachine) {
machine := simulator.Map.Any("VirtualMachine").(*simulator.VirtualMachine)
ref := machine.Reference()
vm := s.driver.NewVM(&ref)
return vm, machine
}

// Simulator shortcut to choose any pre created Datastore.
// Simulator shortcut to choose any pre-created datastore.
func (s *VCenterSimulator) ChooseSimulatorPreCreatedDatastore() (Datastore, *simulator.Datastore) {
ds := simulator.Map.Any("Datastore").(*simulator.Datastore)
ref := ds.Reference()
datastore := s.driver.NewDatastore(&ref)
return datastore, ds
}

// Simulator shortcut to choose any pre created Host.
// Simulator shortcut to choose any pre-created EXSi host.
func (s *VCenterSimulator) ChooseSimulatorPreCreatedHost() (*Host, *simulator.HostSystem) {
h := simulator.Map.Any("HostSystem").(*simulator.HostSystem)
ref := h.Reference()
Expand Down
6 changes: 3 additions & 3 deletions builder/vsphere/driver/host_acc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (
func TestHostAcc(t *testing.T) {
t.Skip("Acceptance tests not configured yet.")
d := newTestDriver(t)
host, err := d.FindHost(TestHostName)
host, err := d.FindHost(testDefaultHost)
if err != nil {
t.Fatalf("unexpected error: '%s'", err)
}
Expand All @@ -19,7 +19,7 @@ func TestHostAcc(t *testing.T) {
if err != nil {
t.Fatalf("unexpected error: '%s'", err)
}
if info.Name != TestHostName {
t.Errorf("unexpected result: expected '%s', but returned '%s'", TestHostName, info.Name)
if info.Name != testDefaultHost {
t.Errorf("unexpected result: expected '%s', but returned '%s'", testDefaultHost, info.Name)
}
}
6 changes: 3 additions & 3 deletions builder/vsphere/driver/vm_clone_acc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ func TestVMAcc_clone(t *testing.T) {

for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
tc.config.Host = TestHostName
tc.config.Host = testDefaultHost
tc.config.Name = newVMName()

templateName := "alpine"
Expand Down Expand Up @@ -88,8 +88,8 @@ func cloneDefaultCheck(t *testing.T, vm VirtualMachine, config *CloneConfig) {
if err != nil {
t.Fatal("Cannot read host properties: ", err)
}
if hostInfo.Name != TestHostName {
t.Errorf("Invalid host name: expected '%v', got '%v'", TestHostName, hostInfo.Name)
if hostInfo.Name != testDefaultHost {
t.Errorf("Invalid host name: expected '%v', got '%v'", testDefaultHost, hostInfo.Name)
}

p := d.NewResourcePool(vmInfo.ResourcePool)
Expand Down
6 changes: 3 additions & 3 deletions builder/vsphere/driver/vm_create_acc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ func TestVMAcc_create(t *testing.T) {

for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
tc.config.Host = TestHostName
tc.config.Host = testDefaultHost
tc.config.Name = newVMName()

d := newTestDriver(t)
Expand Down Expand Up @@ -71,8 +71,8 @@ func createDefaultCheck(t *testing.T, vm VirtualMachine, config *CreateConfig) {
if err != nil {
t.Fatal("Cannot read host properties: ", err)
}
if hostInfo.Name != TestHostName {
t.Errorf("Invalid host name: expected '%v', got '%v'", TestHostName, hostInfo.Name)
if hostInfo.Name != testDefaultHost {
t.Errorf("Invalid host name: expected '%v', got '%v'", testDefaultHost, hostInfo.Name)
}

p := d.NewResourcePool(vmInfo.ResourcePool)
Expand Down
61 changes: 36 additions & 25 deletions builder/vsphere/iso/builder_acc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,13 @@ import (
"github.com/vmware/govmomi/vim25/types"
)

const (
defaultUsername = "[email protected]"
defaultPassword = "VMw@re1!"
defaultApiEndpoint = "vcenter.example.com"
defaultHost = "esxi-01.example.com"
)

func TestAccISOBuilderAcc_default(t *testing.T) {
config := defaultConfig()
testCase := &acctest.PluginTestCase{
Expand All @@ -38,25 +45,18 @@ func TestAccISOBuilderAcc_default(t *testing.T) {
acctest.TestPlugin(t, testCase)
}

func defaultConfig() map[string]interface{} {
username := os.Getenv("VSPHERE_USERNAME")
if username == "" {
username = "root"
}
password := os.Getenv("VSPHERE_PASSWORD")
if password == "" {
password = "jetbrains"
}

vcenter := os.Getenv("VSPHERE_VCENTER_SERVER")
if vcenter == "" {
vcenter = "vcenter.example.com"
func getEnv(key, fallback string) string {
if value := os.Getenv(key); value != "" {
return value
}
return fallback
}

host := os.Getenv("VSPHERE_HOST")
if host == "" {
host = "esxi-01.example.com"
}
func defaultConfig() map[string]interface{} {
username := getEnv("VSPHERE_USERNAME", defaultUsername)
password := getEnv("VSPHERE_PASSWORD", defaultPassword)
vcenter := getEnv("VSPHERE_VCENTER_SERVER", defaultApiEndpoint)
host := getEnv("VSPHERE_HOST", defaultHost)

config := map[string]interface{}{
"vcenter_server": vcenter,
Expand All @@ -65,8 +65,8 @@ func defaultConfig() map[string]interface{} {
"host": host,
"insecure_connection": true,

"ssh_username": "root",
"ssh_password": "jetbrains",
"ssh_username": "packer",
"ssh_password": "VMw@re1!",

"vm_name": commonT.NewVMName(),
"storage": map[string]interface{}{
Expand Down Expand Up @@ -546,21 +546,32 @@ func TestAccISOBuilderAcc_full(t *testing.T) {
func fullConfig() map[string]interface{} {
username := os.Getenv("VSPHERE_USERNAME")
if username == "" {
username = "root"
username = "[email protected]"
}

password := os.Getenv("VSPHERE_PASSWORD")
if password == "" {
password = "jetbrains"
password = "VMw@re1!"
}

vcenter := os.Getenv("VSPHERE_VCENTER_SERVER")
if vcenter == "" {
vcenter = "vcenter.example.com"
}

host := os.Getenv("VSPHERE_HOST")
if host == "" {
host = "esxi-01.example.com"
}

config := map[string]interface{}{
"vcenter_server": "vcenter.example.com",
"vcenter_server": vcenter,
"username": username,
"password": password,
"host": host,
"insecure_connection": true,

"vm_name": commonT.NewVMName(),
"host": "esxi-01.example.com",

"RAM": 512,
"disk_controller_type": []string{
Expand Down Expand Up @@ -602,8 +613,8 @@ func fullConfig() map[string]interface{} {
"/media/floppy/SETUP.SH<enter>",
},

"ssh_username": "root",
"ssh_password": "jetbrains",
"ssh_username": "packer",
"ssh_password": "VMw@re1!",
}

return config
Expand Down
4 changes: 2 additions & 2 deletions examples/builder/vsphere-clone/alpine/alpine.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
"type": "vsphere-clone",

"vcenter_server": "vcenter.example.com",
"username": "root",
"password": "jetbrains",
"username": "[email protected]",
"password": "VMw@re1!",
"insecure_connection": "true",

"template": "alpine",
Expand Down
4 changes: 2 additions & 2 deletions examples/builder/vsphere-clone/alpine/alpine.pkr.hcl
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ source "vsphere-clone" "example_clone" {
communicator = "none"
host = "esxi-01.example.com"
insecure_connection = "true"
password = "jetbrains"
password = "VMw@re1!"
template = "alpine"
username = "root"
username = "[email protected]"
vcenter_server = "vcenter.example.com"
vm_name = "alpine-clone-${local.timestamp}"
}
Expand Down
8 changes: 4 additions & 4 deletions examples/builder/vsphere-iso/alpine/alpine-3.8.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,16 +39,16 @@
"network_card": "vmxnet3"
}
],
"password": "jetbrains",
"ssh_password": "jetbrains",
"ssh_username": "root",
"password": "VMw@re1!",
"ssh_password": "VMw@re1!",
"ssh_username": "packer",
"storage": [
{
"disk_size": 1024,
"disk_thin_provisioned": true
}
],
"username": "root",
"username": "[email protected]",
"vcenter_server": "vcenter.example.com",
"vm_name": "alpine-{{timestamp}}"
}
Expand Down
8 changes: 4 additions & 4 deletions examples/builder/vsphere-iso/alpine/alpine-3.8.pkr.hcl
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,14 @@ source "vsphere-iso" "autogenerated_1" {
network_adapters {
network_card = "vmxnet3"
}
password = "jetbrains"
ssh_password = "jetbrains"
ssh_username = "root"
password = "VMw@re1!"
ssh_password = "VMw@re1!"
ssh_username = "packer"
storage {
disk_size = 1024
disk_thin_provisioned = true
}
username = "root"
username = "[email protected]"
vcenter_server = "vcenter.example.com"
vm_name = "alpine-${local.timestamp}"
}
Expand Down
Loading

0 comments on commit ad2fdc1

Please sign in to comment.