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