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