github.com/vmware/govmomi@v0.37.2/simulator/license_manager_test.go (about)

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