github.com/vmware/govmomi@v0.51.0/vapi/cluster/cluster_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 cluster_test 6 7 import ( 8 "context" 9 "testing" 10 11 "github.com/vmware/govmomi/simulator" 12 "github.com/vmware/govmomi/vapi/rest" 13 "github.com/vmware/govmomi/vim25" 14 "github.com/vmware/govmomi/vim25/mo" 15 "github.com/vmware/govmomi/vim25/types" 16 17 "github.com/vmware/govmomi/vapi/cluster" 18 "github.com/vmware/govmomi/vapi/cluster/internal" 19 20 _ "github.com/vmware/govmomi/vapi/cluster/simulator" 21 _ "github.com/vmware/govmomi/vapi/simulator" 22 ) 23 24 var enoent = types.ManagedObjectReference{Value: "enoent"} 25 26 func TestClusterModules(t *testing.T) { 27 simulator.Test(func(ctx context.Context, vc *vim25.Client) { 28 c := rest.NewClient(vc) 29 30 err := c.Login(ctx, simulator.DefaultLogin) 31 if err != nil { 32 t.Fatal(err) 33 } 34 35 m := cluster.NewManager(c) 36 modules, err := m.ListModules(ctx) 37 if err != nil { 38 t.Fatal(err) 39 } 40 41 if len(modules) != 0 { 42 t.Errorf("expected 0 modules") 43 } 44 45 ccr := simulator.Map(ctx).Any("ClusterComputeResource") 46 47 _, err = m.CreateModule(ctx, enoent) 48 if err == nil { 49 t.Fatal("expected error") 50 } 51 52 id, err := m.CreateModule(ctx, ccr) 53 if err != nil { 54 t.Fatal(err) 55 } 56 57 modules, err = m.ListModules(ctx) 58 if err != nil { 59 t.Fatal(err) 60 } 61 62 if len(modules) != 1 { 63 t.Errorf("expected 1 module") 64 } 65 66 err = m.DeleteModule(ctx, "enoent") 67 if err == nil { 68 t.Fatal("expected error") 69 } 70 71 err = m.DeleteModule(ctx, id) 72 if err != nil { 73 t.Fatal(err) 74 } 75 76 modules, err = m.ListModules(ctx) 77 if err != nil { 78 t.Fatal(err) 79 } 80 81 if len(modules) != 0 { 82 t.Errorf("expected 0 modules") 83 } 84 }) 85 } 86 87 func TestClusterModuleMembers(t *testing.T) { 88 simulator.Test(func(ctx context.Context, vc *vim25.Client) { 89 c := rest.NewClient(vc) 90 91 err := c.Login(ctx, simulator.DefaultLogin) 92 if err != nil { 93 t.Fatal(err) 94 } 95 96 m := cluster.NewManager(c) 97 98 _, err = m.ListModuleMembers(ctx, "enoent") 99 if err == nil { 100 t.Error("expected error") 101 } 102 103 ccr := simulator.Map(ctx).Any("ClusterComputeResource") 104 105 id, err := m.CreateModule(ctx, ccr) 106 if err != nil { 107 t.Fatal(err) 108 } 109 110 vms, err := internal.ClusterVM(vc, ccr) 111 if err != nil { 112 t.Fatal(err) 113 } 114 115 expect := []struct { 116 n int 117 success bool 118 action func(context.Context, string, ...mo.Reference) (bool, error) 119 ids []mo.Reference 120 }{ 121 {0, false, m.AddModuleMembers, []mo.Reference{enoent}}, 122 {0, false, m.RemoveModuleMembers, []mo.Reference{enoent}}, 123 {len(vms), true, m.AddModuleMembers, vms}, 124 {len(vms), false, m.AddModuleMembers, vms}, 125 {0, true, m.RemoveModuleMembers, vms}, 126 {len(vms), false, m.AddModuleMembers, append(vms, enoent)}, 127 {len(vms) - 1, false, m.RemoveModuleMembers, []mo.Reference{vms[0], enoent}}, 128 } 129 130 for i, test := range expect { 131 ok, err := test.action(ctx, id, test.ids...) 132 if err != nil { 133 t.Fatal(err) 134 } 135 if ok != test.success { 136 t.Errorf("%d: success=%t", i, ok) 137 } 138 139 members, err := m.ListModuleMembers(ctx, id) 140 if err != nil { 141 t.Fatal(err) 142 } 143 144 if len(members) != test.n { 145 t.Errorf("%d: members=%d", i, len(members)) 146 } 147 } 148 }) 149 }