github.com/vmware/govmomi@v0.51.0/simulator/model_test.go (about) 1 // © Broadcom. All Rights Reserved. 2 // The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. 3 // SPDX-License-Identifier: Apache-2.0 4 5 package simulator 6 7 import ( 8 "testing" 9 10 "github.com/vmware/govmomi/simulator/vpx" 11 ) 12 13 func compareModel(t *testing.T, m *Model) { 14 count := m.Count() 15 16 hosts := (m.Host + (m.ClusterHost * m.Cluster)) * m.Datacenter 17 vms := ((m.Host + m.Cluster + m.Pool) * m.Datacenter) * m.Machine 18 // child pools + root pools 19 pools := (m.Pool * m.Cluster * m.Datacenter) + (m.Host+m.Cluster)*m.Datacenter 20 // root folder + Datacenter folders {host,vm,datastore,network} + top-level folders 21 folders := 1 + (4 * m.Datacenter) + (5 * m.Folder) 22 pgs := m.Portgroup + m.PortgroupNSX 23 if pgs > 0 { 24 pgs++ // uplinks 25 } 26 27 tests := []struct { 28 expect int 29 actual int 30 kind string 31 }{ 32 {m.Datacenter, count.Datacenter, "Datacenter"}, 33 {m.Cluster * m.Datacenter, count.Cluster, "Cluster"}, 34 {pgs * m.Datacenter, count.Portgroup, "Portgroup"}, 35 {m.OpaqueNetwork * m.Datacenter, count.OpaqueNetwork, "OpaqueNetwork"}, 36 {m.Datastore * m.Datacenter, count.Datastore, "Datastore"}, 37 {hosts, count.Host, "Host"}, 38 {vms, count.Machine, "VirtualMachine"}, 39 {pools, count.Pool, "ResourcePool"}, 40 {folders, count.Folder, "Folder"}, 41 } 42 43 for _, test := range tests { 44 if test.expect != test.actual { 45 t.Errorf("expected %d %s, actual: %d", test.expect, test.kind, test.actual) 46 } 47 } 48 } 49 50 func TestModelESX(t *testing.T) { 51 m := ESX() 52 defer m.Remove() 53 54 err := m.Create() 55 if err != nil { 56 t.Fatal(err) 57 } 58 59 // Set these for the compareModel math, and for m.Create to fail below 60 m.Datacenter = 1 61 m.Host = 1 62 63 compareModel(t, m) 64 65 err = m.Create() 66 if err == nil { 67 t.Error("expected error") 68 } 69 } 70 71 func TestModelVPX(t *testing.T) { 72 m := VPX() 73 74 defer m.Remove() 75 76 err := m.Create() 77 if err != nil { 78 t.Fatal(err) 79 } 80 81 compareModel(t, m) 82 } 83 84 func TestModelNoSwitchVPX(t *testing.T) { 85 m := VPX() 86 m.Portgroup = 0 // disabled DVS creation 87 88 defer m.Remove() 89 90 err := m.Create() 91 if err != nil { 92 t.Fatal(err) 93 } 94 95 compareModel(t, m) 96 } 97 98 func TestModelNSX(t *testing.T) { 99 m := VPX() 100 m.Portgroup = 0 101 m.PortgroupNSX = 1 102 m.OpaqueNetwork = 1 103 104 defer m.Remove() 105 106 err := m.Create() 107 if err != nil { 108 t.Fatal(err) 109 } 110 111 compareModel(t, m) 112 } 113 114 func TestModelCustomVPX(t *testing.T) { 115 m := &Model{ 116 ServiceContent: vpx.ServiceContent, 117 RootFolder: vpx.RootFolder, 118 Datacenter: 2, 119 Cluster: 2, 120 Host: 2, 121 ClusterHost: 3, 122 Datastore: 1, 123 Machine: 3, 124 Pool: 2, 125 Portgroup: 2, 126 } 127 128 defer m.Remove() 129 130 err := m.Create() 131 if err != nil { 132 t.Fatal(err) 133 } 134 135 compareModel(t, m) 136 } 137 138 func TestModelWithFolders(t *testing.T) { 139 m := VPX() 140 m.Datacenter = 3 141 m.Folder = 2 142 143 defer m.Remove() 144 145 err := m.Create() 146 if err != nil { 147 t.Fatal(err) 148 } 149 150 compareModel(t, m) 151 }