github.com/vmware/govmomi@v0.37.2/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 _, fail := range []bool{false, true} {
    90  		id, err := dm.QueryVirtualDiskUuid(ctx, qname, nil)
    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  			_, err = uuid.Parse(id)
   101  			if err != nil {
   102  				t.Error(err)
   103  			}
   104  		}
   105  		qname += "-enoent"
   106  	}
   107  
   108  	old := name
   109  	name = strings.Replace(old, "disk1", "disk2", 1)
   110  
   111  	for _, fail := range []bool{false, true} {
   112  		task, err := dm.MoveVirtualDisk(ctx, old, nil, name, nil, false)
   113  		if err != nil {
   114  			t.Fatal(err)
   115  		}
   116  
   117  		err = task.Wait(ctx)
   118  		if fail {
   119  			if err == nil {
   120  				t.Error("expected error") // disk1 no longer exists
   121  			}
   122  		} else {
   123  			if err != nil {
   124  				t.Error(err)
   125  			}
   126  		}
   127  	}
   128  
   129  	for _, fail := range []bool{false, true} {
   130  		task, err := dm.CopyVirtualDisk(ctx, name, nil, old, nil, &types.VirtualDiskSpec{}, false)
   131  		if err != nil {
   132  			t.Fatal(err)
   133  		}
   134  
   135  		err = task.Wait(ctx)
   136  		if fail {
   137  			if err == nil {
   138  				t.Error("expected error") // disk1 exists again
   139  			}
   140  		} else {
   141  			if err != nil {
   142  				t.Error(err)
   143  			}
   144  		}
   145  	}
   146  
   147  	for _, fail := range []bool{false, true} {
   148  		task, err := dm.DeleteVirtualDisk(ctx, name, nil)
   149  		if err != nil {
   150  			t.Fatal(err)
   151  		}
   152  
   153  		err = task.Wait(ctx)
   154  		if fail {
   155  			if err == nil {
   156  				t.Error("expected error") // disk2 no longer exists
   157  			}
   158  		} else {
   159  			if err != nil {
   160  				t.Error(err)
   161  			}
   162  		}
   163  	}
   164  }