github.com/vmware/govmomi@v0.51.0/simulator/custom_fields_manager_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  	"context"
     9  	"reflect"
    10  	"testing"
    11  
    12  	"github.com/vmware/govmomi"
    13  	"github.com/vmware/govmomi/object"
    14  	"github.com/vmware/govmomi/vim25/types"
    15  )
    16  
    17  func TestCustomFieldsManager(t *testing.T) {
    18  	ctx := context.Background()
    19  
    20  	m := VPX()
    21  	defer m.Remove()
    22  	err := m.Create()
    23  	if err != nil {
    24  		t.Fatal(err)
    25  	}
    26  
    27  	ts := m.Service.NewServer()
    28  	defer ts.Close()
    29  
    30  	c, err := govmomi.NewClient(ctx, ts.URL, true)
    31  	if err != nil {
    32  		t.Fatal(err)
    33  	}
    34  
    35  	fieldsManager, err := object.GetCustomFieldsManager(c.Client)
    36  	if err != nil {
    37  		t.Fatal(err)
    38  	}
    39  
    40  	field, err := fieldsManager.Add(ctx, "field_name", "VirtualMachine", nil, nil)
    41  	if err != nil {
    42  		t.Fatal(err)
    43  	}
    44  	if field.Name != "field_name" && field.Type != "VirtualMachine" {
    45  		t.Fatal("field add result mismatched with the inserted")
    46  	}
    47  
    48  	fields, err := fieldsManager.Field(ctx)
    49  	if err != nil {
    50  		t.Fatal(err)
    51  	}
    52  	if len(fields) != 1 {
    53  		t.Fatalf("expect len(fields)=1; got %d", len(fields))
    54  	}
    55  	if !reflect.DeepEqual(&fields[0], field) {
    56  		t.Fatalf("expect fields[0]==field; got %+v,%+v", fields[0], field)
    57  	}
    58  
    59  	key, err := fieldsManager.FindKey(ctx, field.Name)
    60  	if err != nil {
    61  		t.Fatal(err)
    62  	}
    63  	if key != field.Key {
    64  		t.Fatalf("expect key == field.Key; got %d != %d", key, field.Key)
    65  	}
    66  
    67  	err = fieldsManager.Rename(ctx, key, "new_field_name")
    68  	if err != nil {
    69  		t.Fatal(err)
    70  	}
    71  
    72  	fields, err = fieldsManager.Field(ctx)
    73  	if err != nil {
    74  		t.Fatal(err)
    75  	}
    76  	if len(fields) != 1 {
    77  		t.Fatalf("expect len(fields)=1; got %d", len(fields))
    78  	}
    79  	if fields[0].Name != "new_field_name" {
    80  		t.Fatalf("expect field.name to be %s; got %s", "new_field_name", fields[0].Name)
    81  	}
    82  
    83  	vm := m.Map().Any("VirtualMachine").(*VirtualMachine)
    84  	err = fieldsManager.Set(ctx, vm.Reference(), field.Key, "value")
    85  	if err != nil {
    86  		t.Fatal(err)
    87  	}
    88  
    89  	values := vm.Entity().CustomValue
    90  	if len(values) != 1 {
    91  		t.Fatalf("expect CustomValue has 1 item; got %d", len(values))
    92  	}
    93  	fkey := values[0].GetCustomFieldValue().Key
    94  	if fkey != field.Key {
    95  		t.Fatalf("expect value.Key == field.Key; got %d != %d", fkey, field.Key)
    96  	}
    97  	value := values[0].(*types.CustomFieldStringValue).Value
    98  	if value != "value" {
    99  		t.Fatalf("expect value.Value to be %q; got %q", "value", value)
   100  	}
   101  
   102  	err = fieldsManager.Remove(ctx, field.Key)
   103  	if err != nil {
   104  		t.Fatal(err)
   105  	}
   106  
   107  	fields, err = fieldsManager.Field(ctx)
   108  	if err != nil {
   109  		t.Fatal(err)
   110  	}
   111  	if len(fields) != 0 {
   112  		t.Fatalf("expect fields to be empty; got %+v", fields)
   113  	}
   114  }