Commit e22f9ca4 authored by Doug MacEachern's avatar Doug MacEachern

vsphere: fallback to vcsim for testing authentication

The TestVSphereLogin method still defaults to testing against a real vCenter, but if the required environment variables are not set, it can test against vcsim. More tests can be converted to use configFromEnvOrSim(), but can be in follow up PRs.
parent e7f74d83
......@@ -53,7 +53,8 @@ const (
// Test Constants
const (
testDefaultDatacenter = "DC0"
testDefaultDatastore = "LocalDS_0"
TestDefaultDatacenter = "DC0"
TestDefaultDatastore = "LocalDS_0"
TestDefaultNetwork = "VM Network"
testNameNotFound = "enoent"
)
......@@ -54,7 +54,7 @@ func TestDatacenter(t *testing.T) {
t.Error("expected error")
}
dc, err := GetDatacenter(ctx, vc, testDefaultDatacenter)
dc, err := GetDatacenter(ctx, vc, TestDefaultDatacenter)
if err != nil {
t.Error(err)
}
......@@ -74,7 +74,7 @@ func TestDatacenter(t *testing.T) {
t.Error("expected error")
}
vm, err := dc.GetVMByPath(ctx, testDefaultDatacenter+"/vm/"+avm.Name)
vm, err := dc.GetVMByPath(ctx, TestDefaultDatacenter+"/vm/"+avm.Name)
if err != nil {
t.Error(err)
}
......@@ -103,7 +103,7 @@ func TestDatacenter(t *testing.T) {
t.Error("expected error")
}
ds, err := dc.GetDatastoreByName(ctx, testDefaultDatastore)
ds, err := dc.GetDatastoreByName(ctx, TestDefaultDatastore)
if err != nil {
t.Error(err)
}
......@@ -113,7 +113,7 @@ func TestDatacenter(t *testing.T) {
t.Error("expected error")
}
_, err = dc.GetFolderByPath(ctx, testDefaultDatacenter+"/vm")
_, err = dc.GetFolderByPath(ctx, TestDefaultDatacenter+"/vm")
if err != nil {
t.Error(err)
}
......
......@@ -47,7 +47,7 @@ func TestDatastore(t *testing.T) {
vc := &VSphereConnection{Client: c.Client}
dc, err := GetDatacenter(ctx, vc, testDefaultDatacenter)
dc, err := GetDatacenter(ctx, vc, TestDefaultDatacenter)
if err != nil {
t.Error(err)
}
......
......@@ -49,7 +49,7 @@ func TestFolder(t *testing.T) {
vc := &VSphereConnection{Client: c.Client}
dc, err := GetDatacenter(ctx, vc, testDefaultDatacenter)
dc, err := GetDatacenter(ctx, vc, TestDefaultDatacenter)
if err != nil {
t.Error(err)
}
......
......@@ -48,7 +48,7 @@ func TestUtils(t *testing.T) {
vc := &VSphereConnection{Client: c.Client}
dc, err := GetDatacenter(ctx, vc, testDefaultDatacenter)
dc, err := GetDatacenter(ctx, vc, TestDefaultDatacenter)
if err != nil {
t.Error(err)
}
......
......@@ -45,7 +45,7 @@ func TestVirtualMachine(t *testing.T) {
vc := &VSphereConnection{Client: c.Client}
dc, err := GetDatacenter(ctx, vc, testDefaultDatacenter)
dc, err := GetDatacenter(ctx, vc, TestDefaultDatacenter)
if err != nil {
t.Error(err)
}
......
......@@ -360,7 +360,10 @@ func populateVsphereInstanceMap(cfg *VSphereConfig) (map[string]*VSphereInstance
return vsphereInstanceMap, nil
}
// Creates new Contreoller node interface and returns
// getVMUUID allows tests to override GetVMUUID
var getVMUUID = GetVMUUID
// Creates new Controller node interface and returns
func newControllerNode(cfg VSphereConfig) (*VSphere, error) {
var err error
......@@ -399,7 +402,7 @@ func newControllerNode(cfg VSphereConfig) (*VSphere, error) {
glog.Errorf("Failed to get hostname. err: %+v", err)
return nil, err
}
vs.vmUUID, err = GetVMUUID()
vs.vmUUID, err = getVMUUID()
if err != nil {
glog.Errorf("Failed to get uuid. err: %+v", err)
return nil, err
......
......@@ -18,12 +18,14 @@ package vsphere
import (
"context"
"crypto/tls"
"log"
"os"
"strconv"
"strings"
"testing"
"github.com/vmware/govmomi/simulator"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/rand"
"k8s.io/kubernetes/pkg/cloudprovider"
......@@ -59,6 +61,50 @@ func configFromEnv() (cfg VSphereConfig, ok bool) {
return
}
// configFromEnvOrSim returns config from configFromEnv if set,
// otherwise starts a vcsim instance and returns config for use against the vcsim instance.
func configFromEnvOrSim() (VSphereConfig, func()) {
cfg, ok := configFromEnv()
if ok {
return cfg, func() {}
}
model := simulator.VPX()
err := model.Create()
if err != nil {
log.Fatal(err)
}
model.Service.TLS = new(tls.Config)
s := model.Service.NewServer()
cfg.Global.InsecureFlag = true
cfg.Global.VCenterIP = s.URL.Hostname()
cfg.Global.VCenterPort = s.URL.Port()
cfg.Global.User = s.URL.User.Username()
cfg.Global.Password, _ = s.URL.User.Password()
cfg.Global.Datacenter = vclib.TestDefaultDatacenter
cfg.Network.PublicNetwork = vclib.TestDefaultNetwork
cfg.Global.DefaultDatastore = vclib.TestDefaultDatastore
cfg.Disk.SCSIControllerType = os.Getenv("VSPHERE_SCSICONTROLLER_TYPE")
cfg.Global.WorkingDir = os.Getenv("VSPHERE_WORKING_DIR")
cfg.Global.VMName = os.Getenv("VSPHERE_VM_NAME")
if cfg.Global.WorkingDir == "" {
cfg.Global.WorkingDir = "vm" // top-level Datacenter.VmFolder
}
uuid := simulator.Map.Any("VirtualMachine").(*simulator.VirtualMachine).Config.Uuid
getVMUUID = func() (string, error) { return uuid, nil }
return cfg, func() {
getVMUUID = GetVMUUID
s.Close()
model.Remove()
}
}
func TestReadConfig(t *testing.T) {
_, err := readConfig(nil)
if err == nil {
......@@ -110,10 +156,8 @@ func TestNewVSphere(t *testing.T) {
}
func TestVSphereLogin(t *testing.T) {
cfg, ok := configFromEnv()
if !ok {
t.Skipf("No config found in environment")
}
cfg, cleanup := configFromEnvOrSim()
defer cleanup()
// Create vSphere configuration object
vs, err := newControllerNode(cfg)
......@@ -126,8 +170,8 @@ func TestVSphereLogin(t *testing.T) {
defer cancel()
// Create vSphere client
var vcInstance *VSphereInstance
if vcInstance, ok = vs.vsphereInstanceMap[cfg.Global.VCenterIP]; !ok {
vcInstance, ok := vs.vsphereInstanceMap[cfg.Global.VCenterIP]
if !ok {
t.Fatalf("Couldn't get vSphere instance: %s", cfg.Global.VCenterIP)
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment