github.com/vmware/govmomi@v0.37.2/vim25/mo/retrieve_test.go (about)

     1  /*
     2  Copyright (c) 2014-2015 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 mo
    18  
    19  import (
    20  	"os"
    21  	"testing"
    22  	"time"
    23  
    24  	"github.com/vmware/govmomi/vim25/soap"
    25  	"github.com/vmware/govmomi/vim25/types"
    26  	"github.com/vmware/govmomi/vim25/xml"
    27  )
    28  
    29  func load(name string) []types.ObjectContent {
    30  	f, err := os.Open(name)
    31  	if err != nil {
    32  		panic(err)
    33  	}
    34  
    35  	defer f.Close()
    36  
    37  	var b types.RetrievePropertiesResponse
    38  
    39  	dec := xml.NewDecoder(f)
    40  	dec.TypeFunc = types.TypeFunc()
    41  	if err := dec.Decode(&b); err != nil {
    42  		panic(err)
    43  	}
    44  
    45  	return b.Returnval
    46  }
    47  
    48  func TestNotAuthenticatedFault(t *testing.T) {
    49  	var s SessionManager
    50  
    51  	err := LoadObjectContent(load("fixtures/not_authenticated_fault.xml"), &s)
    52  	if !soap.IsVimFault(err) {
    53  		t.Errorf("Expected IsVimFault")
    54  	}
    55  
    56  	fault := soap.ToVimFault(err).(*types.NotAuthenticated)
    57  	if fault.PrivilegeId != "System.View" {
    58  		t.Errorf("Expected first fault to be returned")
    59  	}
    60  }
    61  
    62  func TestNestedProperty(t *testing.T) {
    63  	var vm VirtualMachine
    64  
    65  	err := LoadObjectContent(load("fixtures/nested_property.xml"), &vm)
    66  	if err != nil {
    67  		t.Fatalf("Expected no error, got: %s", err)
    68  	}
    69  
    70  	self := types.ManagedObjectReference{
    71  		Type:  "VirtualMachine",
    72  		Value: "vm-411",
    73  	}
    74  
    75  	if vm.Self != self {
    76  		t.Fatalf("Expected vm.Self to be set")
    77  	}
    78  
    79  	if vm.Config == nil {
    80  		t.Fatalf("Expected vm.Config to be set")
    81  	}
    82  
    83  	if vm.Config.Name != "kubernetes-master" {
    84  		t.Errorf("Got: %s", vm.Config.Name)
    85  	}
    86  
    87  	if vm.Config.Uuid != "422ec880-ab06-06b4-23f3-beb7a052a4c9" {
    88  		t.Errorf("Got: %s", vm.Config.Uuid)
    89  	}
    90  }
    91  
    92  func TestPointerProperty(t *testing.T) {
    93  	var vm VirtualMachine
    94  
    95  	err := LoadObjectContent(load("fixtures/pointer_property.xml"), &vm)
    96  	if err != nil {
    97  		t.Fatalf("Expected no error, got: %s", err)
    98  	}
    99  
   100  	if vm.Config == nil {
   101  		t.Fatalf("Expected vm.Config to be set")
   102  	}
   103  
   104  	if vm.Config.BootOptions == nil {
   105  		t.Fatalf("Expected vm.Config.BootOptions to be set")
   106  	}
   107  }
   108  
   109  func TestEmbeddedTypeProperty(t *testing.T) {
   110  	// Test that we avoid in this case:
   111  	// panic: reflect.Set: value of type mo.ClusterComputeResource is not assignable to type mo.ComputeResource
   112  	var cr ComputeResource
   113  
   114  	err := LoadObjectContent(load("fixtures/cluster_host_property.xml"), &cr)
   115  	if err != nil {
   116  		t.Fatalf("Expected no error, got: %s", err)
   117  	}
   118  
   119  	if len(cr.Host) != 4 {
   120  		t.Fatalf("Expected cr.Host to be set")
   121  	}
   122  }
   123  
   124  func TestEmbeddedTypePropertySlice(t *testing.T) {
   125  	var me []ManagedEntity
   126  
   127  	err := LoadObjectContent(load("fixtures/hostsystem_list_name_property.xml"), &me)
   128  	if err != nil {
   129  		t.Fatalf("Expected no error, got: %s", err)
   130  	}
   131  
   132  	if len(me) != 2 {
   133  		t.Fatalf("Expected 2 elements")
   134  	}
   135  
   136  	for _, m := range me {
   137  		if m.Name == "" {
   138  			t.Fatal("Expected Name field to be set")
   139  		}
   140  	}
   141  
   142  	if me[0].Name == me[1].Name {
   143  		t.Fatal("Name fields should not be the same")
   144  	}
   145  }
   146  
   147  func TestReferences(t *testing.T) {
   148  	var cr ComputeResource
   149  
   150  	err := LoadObjectContent(load("fixtures/cluster_host_property.xml"), &cr)
   151  	if err != nil {
   152  		t.Fatalf("Expected no error, got: %s", err)
   153  	}
   154  
   155  	refs := References(cr)
   156  	n := len(refs)
   157  	if n != 5 {
   158  		t.Errorf("%d refs", n)
   159  	}
   160  }
   161  
   162  func TestEventReferences(t *testing.T) {
   163  	event := &types.VmPoweredOnEvent{
   164  		VmEvent: types.VmEvent{
   165  			Event: types.Event{
   166  				Key:         0,
   167  				ChainId:     0,
   168  				CreatedTime: time.Now(),
   169  				UserName:    "",
   170  				Datacenter: &types.DatacenterEventArgument{
   171  					EntityEventArgument: types.EntityEventArgument{
   172  						EventArgument: types.EventArgument{},
   173  						Name:          "DC0",
   174  					},
   175  					Datacenter: types.ManagedObjectReference{Type: "Datacenter", Value: "datacenter-2"},
   176  				},
   177  				ComputeResource: &types.ComputeResourceEventArgument{
   178  					EntityEventArgument: types.EntityEventArgument{
   179  						EventArgument: types.EventArgument{},
   180  						Name:          "DC0_C0",
   181  					},
   182  					ComputeResource: types.ManagedObjectReference{Type: "ClusterComputeResource", Value: "clustercomputeresource-26"},
   183  				},
   184  				Host: &types.HostEventArgument{
   185  					EntityEventArgument: types.EntityEventArgument{
   186  						EventArgument: types.EventArgument{},
   187  						Name:          "DC0_C0_H0",
   188  					},
   189  					Host: types.ManagedObjectReference{Type: "HostSystem", Value: "host-32"},
   190  				},
   191  				Vm: &types.VmEventArgument{
   192  					EntityEventArgument: types.EntityEventArgument{
   193  						EventArgument: types.EventArgument{},
   194  						Name:          "DC0_C0_RP0_VM1",
   195  					},
   196  					Vm: types.ManagedObjectReference{Type: "VirtualMachine", Value: "vm-62"},
   197  				},
   198  				Ds:                   (*types.DatastoreEventArgument)(nil),
   199  				Net:                  (*types.NetworkEventArgument)(nil),
   200  				Dvs:                  (*types.DvsEventArgument)(nil),
   201  				FullFormattedMessage: "",
   202  				ChangeTag:            "",
   203  			},
   204  			Template: false,
   205  		},
   206  	}
   207  
   208  	refs := References(event, true)
   209  	n := len(refs)
   210  	if n != 4 {
   211  		t.Errorf("%d refs", n)
   212  	}
   213  }