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 }