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 }