mirror of https://github.com/k3s-io/k3s.git
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.pull/8/head
parent
e7f74d83c6
commit
e22f9ca4ae
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue