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  }