github.com/vmware/govmomi@v0.37.2/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  }