github.com/vmware/govmomi@v0.51.0/simulator/license_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/find" 14 "github.com/vmware/govmomi/license" 15 ) 16 17 func TestLicenseManagerVPX(t *testing.T) { 18 ctx := context.Background() 19 m := VPX() 20 21 defer m.Remove() 22 23 err := m.Create() 24 if err != nil { 25 t.Fatal(err) 26 } 27 28 s := m.Service.NewServer() 29 defer s.Close() 30 31 c, err := govmomi.NewClient(ctx, s.URL, true) 32 if err != nil { 33 t.Fatal(err) 34 } 35 36 lm := license.NewManager(c.Client) 37 am, err := lm.AssignmentManager(ctx) 38 if err != nil { 39 t.Fatal(err) 40 } 41 42 la, err := am.QueryAssigned(ctx, "enoent") 43 if err != nil { 44 t.Fatal(err) 45 } 46 47 if len(la) != 0 { 48 t.Errorf("unexpected license") 49 } 50 51 finder := find.NewFinder(c.Client, false) 52 hosts, err := finder.HostSystemList(ctx, "/...") 53 if err != nil { 54 t.Fatal(err) 55 } 56 57 host := hosts[0].Reference().Value 58 vcid := c.Client.ServiceContent.About.InstanceUuid 59 60 for _, name := range []string{"", host, vcid} { 61 la, err = am.QueryAssigned(ctx, name) 62 if err != nil { 63 t.Fatal(err) 64 } 65 66 expect := 1 67 if name == "" { 68 count := m.Count() 69 expect = count.Host + count.ClusterHost + count.Cluster + 1 // (1 == vCenter) 70 } 71 if len(la) != expect { 72 t.Fatalf("%d licenses", len(la)) 73 } 74 75 if !reflect.DeepEqual(la[0].AssignedLicense, EvalLicense) { 76 t.Fatal("invalid license") 77 } 78 } 79 } 80 81 func TestLicenseManagerESX(t *testing.T) { 82 ctx := context.Background() 83 m := ESX() 84 85 defer m.Remove() 86 87 err := m.Create() 88 if err != nil { 89 t.Fatal(err) 90 } 91 92 s := m.Service.NewServer() 93 defer s.Close() 94 95 c, err := govmomi.NewClient(ctx, s.URL, true) 96 if err != nil { 97 t.Fatal(err) 98 } 99 100 lm := license.NewManager(c.Client) 101 _, err = lm.AssignmentManager(ctx) 102 if err == nil { 103 t.Fatal("expected error") 104 } 105 106 la, err := lm.List(ctx) 107 if err != nil { 108 t.Fatal(err) 109 } 110 111 if len(la) != 1 { 112 t.Fatal("no licenses") 113 } 114 115 if !reflect.DeepEqual(la[0], EvalLicense) { 116 t.Fatal("invalid license") 117 } 118 } 119 120 func TestAddRemoveLicense(t *testing.T) { 121 ctx := context.Background() 122 m := ESX() 123 124 defer m.Remove() 125 126 err := m.Create() 127 if err != nil { 128 t.Fatal(err) 129 } 130 131 s := m.Service.NewServer() 132 defer s.Close() 133 134 c, err := govmomi.NewClient(ctx, s.URL, true) 135 if err != nil { 136 t.Fatal(err) 137 } 138 139 lm := license.NewManager(c.Client) 140 key := "00000-00000-00000-00000-11111" 141 labels := map[string]string{"key": "value"} 142 143 info, err := lm.Add(ctx, key, labels) 144 if err != nil { 145 t.Fatal(err) 146 } 147 148 if info.LicenseKey != key { 149 t.Fatalf("expect info.LicenseKey equal to %q; got %q", key, info.LicenseKey) 150 } 151 152 if len(info.Labels) != len(labels) { 153 t.Fatalf("expect len(info.Labels) equal to %d; got %d", 154 len(labels), len(info.Labels)) 155 } 156 157 if info.Labels[0].Key != "key" || info.Labels[0].Value != "value" { 158 t.Fatalf("expect label to be {key:value}; got {%s:%s}", 159 info.Labels[0].Key, info.Labels[0].Value) 160 } 161 162 la, err := lm.List(ctx) 163 if err != nil { 164 t.Fatal(err) 165 } 166 167 if len(la) != 2 { 168 t.Fatal("no licenses") 169 } 170 171 if la[1].LicenseKey != key { 172 t.Fatalf("expect info.LicenseKey equal to %q; got %q", 173 key, la[1].LicenseKey) 174 } 175 176 if len(la[1].Labels) != len(labels) { 177 t.Fatalf("expect len(info.Labels) equal to %d; got %d", 178 len(labels), len(la[1].Labels)) 179 } 180 181 if la[1].Labels[0].Key != "key" || la[1].Labels[0].Value != "value" { 182 t.Fatalf("expect label to be {key:value}; got {%s:%s}", 183 la[1].Labels[0].Key, la[1].Labels[0].Value) 184 } 185 186 err = lm.Remove(ctx, key) 187 if err != nil { 188 t.Fatal(err) 189 } 190 191 la, err = lm.List(ctx) 192 if err != nil { 193 t.Fatal(err) 194 } 195 196 if len(la) != 1 { 197 t.Fatal("no licenses") 198 } 199 }