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

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