github.com/vmware/govmomi@v0.43.0/simulator/host_network_system_test.go (about) 1 /* 2 Copyright (c) 2017 VMware, Inc. All Rights Reserved. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package simulator 18 19 import ( 20 "context" 21 "testing" 22 23 "github.com/vmware/govmomi/find" 24 "github.com/vmware/govmomi/object" 25 "github.com/vmware/govmomi/simulator/esx" 26 "github.com/vmware/govmomi/vim25/mo" 27 "github.com/vmware/govmomi/vim25/types" 28 ) 29 30 func TestHostNetworkSystem(t *testing.T) { 31 ctx := context.Background() 32 33 s := New(NewServiceInstance(SpoofContext(), esx.ServiceContent, esx.RootFolder)) 34 35 host := object.NewHostSystem(s.client, esx.HostSystem.Reference()) 36 37 ns, err := host.ConfigManager().NetworkSystem(ctx) 38 if err != nil { 39 t.Fatal(err) 40 } 41 42 finder := find.NewFinder(s.client, false) 43 finder.SetDatacenter(object.NewDatacenter(s.client, esx.Datacenter.Reference())) 44 45 // created by default 46 _, err = finder.Network(ctx, "VM Network") 47 if err != nil { 48 t.Fatal(err) 49 } 50 var mns mo.HostNetworkSystem 51 err = ns.Properties(ctx, ns.Reference(), []string{"networkInfo.portgroup"}, &mns) 52 if err != nil { 53 t.Fatal(err) 54 } 55 if len(mns.NetworkInfo.Portgroup) != 2 { 56 t.Fatal("expected networkInfo.portgroup to have length of 2") 57 } 58 if mns.NetworkInfo.Portgroup[0].Key != "key-vim.host.PortGroup-VM Network" { 59 t.Fatal("expected networkInfo.portgroup[0] to be VM Network") 60 } 61 if mns.NetworkInfo.Portgroup[1].Key != "key-vim.host.PortGroup-Management Network" { 62 t.Fatal("expected networkInfo.portgroup[1] to be Management Network") 63 } 64 65 // not created yet 66 _, err = finder.Network(ctx, "bridge") 67 if err == nil { 68 t.Fatal("expected error") 69 } 70 71 err = ns.AddVirtualSwitch(ctx, "vSwitch0", nil) 72 if err == nil { 73 t.Fatal("expected error") // DuplicateName 74 } 75 76 err = ns.AddVirtualSwitch(ctx, "vSwitch1", nil) 77 if err != nil { 78 t.Fatal(err) 79 } 80 81 spec := types.HostPortGroupSpec{} 82 err = ns.AddPortGroup(ctx, spec) 83 if err == nil { 84 t.Fatal("expected error") // InvalidArgument "name" 85 } 86 87 spec.Name = "bridge" 88 err = ns.AddPortGroup(ctx, spec) 89 if err == nil { 90 t.Fatal("expected error") // NotFound 91 } 92 93 spec.VswitchName = "vSwitch1" 94 err = ns.AddPortGroup(ctx, spec) 95 if err != nil { 96 t.Fatal(err) 97 } 98 99 _, err = finder.Network(ctx, "bridge") 100 if err != nil { 101 t.Fatal(err) 102 } 103 104 err = ns.Properties(ctx, ns.Reference(), []string{"networkInfo.portgroup"}, &mns) 105 if err != nil { 106 t.Fatal(err) 107 } 108 if len(mns.NetworkInfo.Portgroup) != 3 { 109 t.Fatal("expected networkInfo.portgroup to have length of 3") 110 } 111 if mns.NetworkInfo.Portgroup[2].Spec != spec { 112 t.Fatal("expected last networkInfo.portgroup to have an equal spec") 113 } 114 if mns.NetworkInfo.Portgroup[0].Key != "key-vim.host.PortGroup-VM Network" { 115 t.Fatal("expected networkInfo.portgroup[0] to be VM Network") 116 } 117 if mns.NetworkInfo.Portgroup[1].Key != "key-vim.host.PortGroup-Management Network" { 118 t.Fatal("expected networkInfo.portgroup[1] to be Management Network") 119 } 120 if mns.NetworkInfo.Portgroup[2].Key != "key-vim.host.PortGroup-bridge" { 121 t.Fatal("expected networkInfo.portgroup[2] to be bridge") 122 } 123 124 err = ns.AddPortGroup(ctx, spec) 125 if err == nil { 126 t.Error("expected error") // DuplicateName 127 } 128 129 err = ns.RemovePortGroup(ctx, "bridge") 130 if err != nil { 131 t.Fatal(err) 132 } 133 134 _, err = finder.Network(ctx, "bridge") 135 if err == nil { 136 t.Fatal("expected error") 137 } 138 139 err = ns.Properties(ctx, ns.Reference(), []string{"networkInfo.portgroup"}, &mns) 140 if err != nil { 141 t.Fatal(err) 142 } 143 if len(mns.NetworkInfo.Portgroup) != 2 { 144 t.Fatal("expected networkInfo.portgroup to have length of 2") 145 } 146 if mns.NetworkInfo.Portgroup[0].Key != "key-vim.host.PortGroup-VM Network" { 147 t.Fatal("expected networkInfo.portgroup[0] to be VM Network") 148 } 149 if mns.NetworkInfo.Portgroup[1].Key != "key-vim.host.PortGroup-Management Network" { 150 t.Fatal("expected networkInfo.portgroup[1] to be Management Network") 151 } 152 153 err = ns.RemovePortGroup(ctx, "bridge") 154 if err == nil { 155 t.Error("expected error") 156 } 157 158 err = ns.RemoveVirtualSwitch(ctx, "vSwitch1") 159 if err != nil { 160 t.Fatal(err) 161 } 162 163 err = ns.RemoveVirtualSwitch(ctx, "vSwitch1") 164 if err == nil { 165 t.Error("expected error") 166 } 167 168 info, err := ns.QueryNetworkHint(ctx, nil) 169 if err != nil { 170 t.Fatal(err) 171 } 172 173 if len(info) != 0 { // TODO: data is only returned when Model.Load is used 174 t.Errorf("len=%d", len(info)) 175 } 176 }