github.com/vmware/govmomi@v0.51.0/client_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 govmomi
     6  
     7  import (
     8  	"context"
     9  	"errors"
    10  	"net/http"
    11  	"net/url"
    12  	"testing"
    13  
    14  	"github.com/vmware/govmomi/test"
    15  	"github.com/vmware/govmomi/vim25"
    16  	"github.com/vmware/govmomi/vim25/mo"
    17  	"github.com/vmware/govmomi/vim25/types"
    18  )
    19  
    20  func TestNewClient(t *testing.T) {
    21  	u := test.URL()
    22  	if u == nil {
    23  		t.SkipNow()
    24  	}
    25  
    26  	c, err := NewClient(context.Background(), u, true)
    27  	if err != nil {
    28  		t.Fatal(err)
    29  	}
    30  
    31  	f := func() error {
    32  		var x mo.Folder
    33  		err = mo.RetrieveProperties(context.Background(), c, c.ServiceContent.PropertyCollector, c.ServiceContent.RootFolder, &x)
    34  		if err != nil {
    35  			return err
    36  		}
    37  		if x.Name == "" {
    38  			return errors.New("empty response")
    39  		}
    40  		return nil
    41  	}
    42  
    43  	// check cookie is valid with an sdk request
    44  	if err := f(); err != nil {
    45  		t.Fatal(err)
    46  	}
    47  
    48  	// check cookie is valid with a non-sdk request
    49  	u.User = nil // turn off Basic auth
    50  	u.Path = "/folder"
    51  	r, err := c.Client.Get(u.String())
    52  	if err != nil {
    53  		t.Fatal(err)
    54  	}
    55  	if r.StatusCode != http.StatusOK {
    56  		t.Fatal(r)
    57  	}
    58  
    59  	// sdk request should fail w/o a valid cookie
    60  	c.Client.Jar = nil
    61  	if err := f(); err == nil {
    62  		t.Fatal("should fail")
    63  	}
    64  
    65  	// invalid login
    66  	u.Path = vim25.Path
    67  	u.User = url.UserPassword("ENOENT", "EINVAL")
    68  	_, err = NewClient(context.Background(), u, true)
    69  	if err == nil {
    70  		t.Fatal("should fail")
    71  	}
    72  }
    73  
    74  func TestInvalidSdk(t *testing.T) {
    75  	u := test.URL()
    76  	if u == nil {
    77  		t.SkipNow()
    78  	}
    79  
    80  	// a URL other than a valid /sdk should error, not panic
    81  	u.Path = "/mob"
    82  	_, err := NewClient(context.Background(), u, true)
    83  	if err == nil {
    84  		t.Fatal("should fail")
    85  	}
    86  }
    87  
    88  func TestPropertiesN(t *testing.T) {
    89  	u := test.URL()
    90  	if u == nil {
    91  		t.SkipNow()
    92  	}
    93  
    94  	c, err := NewClient(context.Background(), u, true)
    95  	if err != nil {
    96  		t.Fatal(err)
    97  	}
    98  
    99  	var f mo.Folder
   100  	err = c.RetrieveOne(context.Background(), c.ServiceContent.RootFolder, nil, &f)
   101  	if err != nil {
   102  		t.Fatal(err)
   103  	}
   104  
   105  	var dc mo.Datacenter
   106  	err = c.RetrieveOne(context.Background(), f.ChildEntity[0], nil, &dc)
   107  	if err != nil {
   108  		t.Fatal(err)
   109  	}
   110  
   111  	var folderReferences = []types.ManagedObjectReference{
   112  		dc.DatastoreFolder,
   113  		dc.HostFolder,
   114  		dc.NetworkFolder,
   115  		dc.VmFolder,
   116  	}
   117  
   118  	var folders []mo.Folder
   119  	err = c.Retrieve(context.Background(), folderReferences, []string{"name"}, &folders)
   120  	if err != nil {
   121  		t.Fatal(err)
   122  	}
   123  
   124  	if len(folders) != len(folderReferences) {
   125  		t.Fatalf("Expected %d, got %d", len(folderReferences), len(folders))
   126  	}
   127  }