github.com/vmware/govmomi@v0.51.0/simulator/virtual_disk_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 "path" 10 "strings" 11 "testing" 12 13 "github.com/google/uuid" 14 15 "github.com/vmware/govmomi" 16 "github.com/vmware/govmomi/object" 17 "github.com/vmware/govmomi/vim25/types" 18 ) 19 20 func TestVirtualDiskManager(t *testing.T) { 21 ctx := context.Background() 22 23 m := ESX() 24 defer m.Remove() 25 err := m.Create() 26 if err != nil { 27 t.Fatal(err) 28 } 29 30 s := m.Service.NewServer() 31 defer s.Close() 32 33 c, err := govmomi.NewClient(ctx, s.URL, true) 34 if err != nil { 35 t.Fatal(err) 36 } 37 38 dm := object.NewVirtualDiskManager(c.Client) 39 fm := object.NewFileManager(c.Client) 40 41 spec := &types.FileBackedVirtualDiskSpec{ 42 VirtualDiskSpec: types.VirtualDiskSpec{ 43 AdapterType: string(types.VirtualDiskAdapterTypeLsiLogic), 44 DiskType: string(types.VirtualDiskTypeThin), 45 }, 46 CapacityKb: 1024 * 1024, 47 } 48 49 name := "[LocalDS_0] disks/disk1.vmdk" 50 51 for i, fail := range []bool{true, false, true} { 52 task, err := dm.CreateVirtualDisk(ctx, name, nil, spec) 53 if err != nil { 54 t.Fatal(err) 55 } 56 57 err = task.Wait(ctx) 58 if fail { 59 if err == nil { 60 t.Error("expected error") // disk1 already exists 61 } 62 } else { 63 if err != nil { 64 t.Error(err) 65 } 66 } 67 68 if i == 0 { 69 err = fm.MakeDirectory(ctx, path.Dir(name), nil, true) 70 if err != nil { 71 t.Fatal(err) 72 } 73 } 74 } 75 76 qname := name 77 for i, fail := range []bool{false, true, true} { 78 if i == 1 { 79 spec.CapacityKb = 0 80 } 81 82 if i == 2 { 83 qname += "_missing_file" 84 } 85 task, err := dm.ExtendVirtualDisk(ctx, qname, nil, spec.CapacityKb*2, nil) 86 if err != nil { 87 t.Fatal(err) 88 } 89 90 err = task.Wait(ctx) 91 if fail { 92 if err == nil { 93 t.Error("expected error") 94 } 95 } else { 96 if err != nil { 97 t.Error(err) 98 } 99 } 100 } 101 102 qname = name 103 for _, fail := range []bool{false, true} { 104 id, err := dm.QueryVirtualDiskUuid(ctx, qname, nil) 105 if fail { 106 if err == nil { 107 t.Error("expected error") 108 } 109 } else { 110 if err != nil { 111 t.Error(err) 112 } 113 114 _, err = uuid.Parse(id) 115 if err != nil { 116 t.Error(err) 117 } 118 } 119 qname += "-enoent" 120 } 121 122 old := name 123 name = strings.Replace(old, "disk1", "disk2", 1) 124 125 for _, fail := range []bool{false, true} { 126 task, err := dm.MoveVirtualDisk(ctx, old, nil, name, nil, false) 127 if err != nil { 128 t.Fatal(err) 129 } 130 131 err = task.Wait(ctx) 132 if fail { 133 if err == nil { 134 t.Error("expected error") // disk1 no longer exists 135 } 136 } else { 137 if err != nil { 138 t.Error(err) 139 } 140 } 141 } 142 143 for _, fail := range []bool{false, true} { 144 task, err := dm.CopyVirtualDisk(ctx, name, nil, old, nil, &types.VirtualDiskSpec{}, false) 145 if err != nil { 146 t.Fatal(err) 147 } 148 149 err = task.Wait(ctx) 150 if fail { 151 if err == nil { 152 t.Error("expected error") // disk1 exists again 153 } 154 } else { 155 if err != nil { 156 t.Error(err) 157 } 158 } 159 } 160 161 for _, fail := range []bool{false, true} { 162 task, err := dm.DeleteVirtualDisk(ctx, name, nil) 163 if err != nil { 164 t.Fatal(err) 165 } 166 167 err = task.Wait(ctx) 168 if fail { 169 if err == nil { 170 t.Error("expected error") // disk2 no longer exists 171 } 172 } else { 173 if err != nil { 174 t.Error(err) 175 } 176 } 177 } 178 }