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  }