github.com/vmware/go-vcloud-director/v2@v2.24.0/govcd/vapptemplate_test.go (about)

     1  //go:build vapp || functional || ALL
     2  
     3  /*
     4   * Copyright 2018 VMware, Inc.  All rights reserved.  Licensed under the Apache v2 License.
     5   */
     6  
     7  package govcd
     8  
     9  import (
    10  	"fmt"
    11  
    12  	. "gopkg.in/check.v1"
    13  )
    14  
    15  // TODO: Write test for InstantiateVAppTemplate
    16  
    17  func (vcd *TestVCD) Test_RefreshVAppTemplate(check *C) {
    18  
    19  	fmt.Printf("Running: %s\n", check.TestName())
    20  	cat, err := vcd.org.GetCatalogByName(vcd.config.VCD.Catalog.Name, false)
    21  	if err != nil {
    22  		check.Skip("Test_GetVAppTemplate: Catalog not found. Test can't proceed")
    23  		return
    24  	}
    25  	check.Assert(cat, NotNil)
    26  
    27  	if vcd.config.VCD.Catalog.CatalogItem == "" {
    28  		check.Skip("Test_GetVAppTemplate: Catalog Item not given. Test can't proceed")
    29  	}
    30  
    31  	catItem, err := cat.GetCatalogItemByName(vcd.config.VCD.Catalog.CatalogItem, false)
    32  	check.Assert(err, IsNil)
    33  	check.Assert(catItem, NotNil)
    34  	check.Assert(catItem.CatalogItem.Name, Equals, vcd.config.VCD.Catalog.CatalogItem)
    35  
    36  	// Get VAppTemplate
    37  	vAppTemplate, err := catItem.GetVAppTemplate()
    38  	check.Assert(err, IsNil)
    39  	check.Assert(vAppTemplate, NotNil)
    40  	check.Assert(vAppTemplate.VAppTemplate.Name, Equals, vcd.config.VCD.Catalog.CatalogItem)
    41  
    42  	oldVAppTemplate := vAppTemplate
    43  
    44  	err = vAppTemplate.Refresh()
    45  	check.Assert(err, IsNil)
    46  	check.Assert(oldVAppTemplate.VAppTemplate.ID, Equals, vAppTemplate.VAppTemplate.ID)
    47  	check.Assert(oldVAppTemplate.VAppTemplate.Name, Equals, vAppTemplate.VAppTemplate.Name)
    48  	check.Assert(oldVAppTemplate.VAppTemplate.HREF, Equals, vAppTemplate.VAppTemplate.HREF)
    49  
    50  	catalogItemHref, err := vAppTemplate.GetCatalogItemHref()
    51  	check.Assert(err, IsNil)
    52  	check.Assert(catalogItemHref, Not(Equals), "")
    53  
    54  	catalogItemId, err := vAppTemplate.GetCatalogItemId()
    55  	check.Assert(err, IsNil)
    56  	check.Assert(catalogItemId, Not(Equals), "")
    57  }
    58  
    59  func (vcd *TestVCD) Test_UpdateAndDeleteVAppTemplateFromOvaFile(check *C) {
    60  	testUploadAndDeleteVAppTemplate(vcd, check, false)
    61  }
    62  
    63  func (vcd *TestVCD) Test_UpdateAndDeleteVAppTemplateFromUrl(check *C) {
    64  	testUploadAndDeleteVAppTemplate(vcd, check, true)
    65  }
    66  
    67  func (vcd *TestVCD) Test_GetInformationFromVAppTemplate(check *C) {
    68  	fmt.Printf("Running: %s\n", check.TestName())
    69  	if vcd.config.VCD.Catalog.Name == "" {
    70  		check.Skip(check.TestName() + ": Catalog not given in testing configuration. Test can't proceed")
    71  	}
    72  
    73  	if vcd.config.VCD.Catalog.CatalogItem == "" {
    74  		check.Skip(check.TestName() + ": Catalog Item not given in testing configuration. Test can't proceed")
    75  	}
    76  
    77  	catalog, err := vcd.org.GetCatalogByName(vcd.config.VCD.Catalog.Name, false)
    78  	check.Assert(err, IsNil)
    79  	check.Assert(catalog, NotNil)
    80  	vAppTemplate, err := catalog.GetVAppTemplateByName(vcd.config.VCD.Catalog.CatalogItem)
    81  	check.Assert(err, IsNil)
    82  	check.Assert(vAppTemplate, NotNil)
    83  
    84  	catalogName, err := vAppTemplate.GetCatalogName()
    85  	check.Assert(err, IsNil)
    86  	check.Assert(catalogName, Equals, catalog.Catalog.Name)
    87  
    88  	vdcId, err := vAppTemplate.GetVdcName()
    89  	check.Assert(err, IsNil)
    90  	check.Assert(vdcId, Equals, vcd.vdc.Vdc.Name)
    91  }
    92  
    93  func testUploadAndDeleteVAppTemplate(vcd *TestVCD, check *C, isOvfLink bool) {
    94  	fmt.Printf("Running: %s\n", check.TestName())
    95  	catalog, err := vcd.org.GetCatalogByName(vcd.config.VCD.Catalog.Name, false)
    96  	if err != nil {
    97  		check.Skip(check.TestName() + ": Catalog not found. Test can't proceed")
    98  		return
    99  	}
   100  	check.Assert(catalog, NotNil)
   101  
   102  	itemName := check.TestName()
   103  
   104  	description := "upload from test"
   105  
   106  	if isOvfLink {
   107  		uploadTask, err := catalog.UploadOvfByLink(vcd.config.OVA.OvfUrl, itemName, description)
   108  		check.Assert(err, IsNil)
   109  		err = uploadTask.WaitTaskCompletion()
   110  		check.Assert(err, IsNil)
   111  	} else {
   112  		task, err := catalog.UploadOvf(vcd.config.OVA.OvaPath, itemName, description, 1024)
   113  		check.Assert(err, IsNil)
   114  		err = task.WaitTaskCompletion()
   115  		check.Assert(err, IsNil)
   116  	}
   117  
   118  	AddToCleanupList(itemName, "catalogItem", vcd.org.Org.Name+"|"+vcd.config.VCD.Catalog.Name, check.TestName())
   119  
   120  	vAppTemplate, err := catalog.GetVAppTemplateByName(itemName)
   121  	check.Assert(err, IsNil)
   122  	check.Assert(vAppTemplate, NotNil)
   123  	check.Assert(vAppTemplate.VAppTemplate.Name, Equals, itemName)
   124  
   125  	// FIXME: Due to bug in OVF Link upload in VCD, this assert is skipped
   126  	if !isOvfLink {
   127  		check.Assert(vAppTemplate.VAppTemplate.Description, Equals, description)
   128  	}
   129  
   130  	nameForUpdate := itemName + "updated"
   131  	descriptionForUpdate := description + "updated"
   132  
   133  	AddToCleanupList(nameForUpdate, "catalogItem", vcd.org.Org.Name+"|"+vcd.config.VCD.Catalog.Name, check.TestName())
   134  
   135  	vAppTemplate.VAppTemplate.Name = nameForUpdate
   136  	vAppTemplate.VAppTemplate.Description = descriptionForUpdate
   137  	vAppTemplate.VAppTemplate.GoldMaster = true
   138  
   139  	_, err = vAppTemplate.Update()
   140  	check.Assert(err, IsNil)
   141  	err = vAppTemplate.Refresh()
   142  	check.Assert(err, IsNil)
   143  	check.Assert(vAppTemplate.VAppTemplate.Name, Equals, nameForUpdate)
   144  	check.Assert(vAppTemplate.VAppTemplate.Description, Equals, descriptionForUpdate)
   145  	check.Assert(vAppTemplate.VAppTemplate.GoldMaster, Equals, true)
   146  
   147  	err = vAppTemplate.Delete()
   148  	check.Assert(err, IsNil)
   149  	vAppTemplate, err = catalog.GetVAppTemplateByName(itemName)
   150  	check.Assert(err, NotNil)
   151  	check.Assert(vAppTemplate, IsNil)
   152  }
   153  
   154  func (vcd *TestVCD) Test_VappTemplateLeaseUpdate(check *C) {
   155  	fmt.Printf("Running: %s\n", check.TestName())
   156  
   157  	if vcd.config.VCD.Org == "" {
   158  		check.Skip("Organization not set in configuration")
   159  	}
   160  	org, err := vcd.client.GetAdminOrgByName(vcd.config.VCD.Org)
   161  	check.Assert(err, IsNil)
   162  	orgVappTemplateLease := org.AdminOrg.OrgSettings.OrgVAppTemplateSettings
   163  
   164  	catalog, err := vcd.org.GetCatalogByName(vcd.config.VCD.Catalog.NsxtBackedCatalogName, false)
   165  	if err != nil {
   166  		check.Skip("Test_GetVAppTemplate: Catalog not found. Test can't proceed")
   167  		return
   168  	}
   169  	check.Assert(catalog, NotNil)
   170  
   171  	itemName := check.TestName()
   172  	description := "upload from test"
   173  
   174  	task, err := catalog.UploadOvf(vcd.config.OVA.OvaPath, itemName, description, 1024)
   175  	check.Assert(err, IsNil)
   176  	err = task.WaitTaskCompletion()
   177  	check.Assert(err, IsNil)
   178  
   179  	AddToCleanupList(itemName, "catalogItem", vcd.org.Org.Name+"|"+vcd.config.VCD.Catalog.NsxtBackedCatalogName, check.TestName())
   180  
   181  	vAppTemplate, err := catalog.GetVAppTemplateByName(itemName)
   182  	check.Assert(err, IsNil)
   183  	check.Assert(vAppTemplate, NotNil)
   184  	check.Assert(vAppTemplate.VAppTemplate.Name, Equals, itemName)
   185  
   186  	lease, err := vAppTemplate.GetLease()
   187  	check.Assert(err, IsNil)
   188  	check.Assert(lease, NotNil)
   189  
   190  	// Check that lease in vAppTemplate is the same as the default lease in the organization
   191  	check.Assert(lease.StorageLeaseInSeconds, Equals, *orgVappTemplateLease.StorageLeaseSeconds)
   192  	printVerbose("lease storage at Org level: %6d\n", *orgVappTemplateLease.StorageLeaseSeconds)
   193  	printVerbose("lease storage in vApp Template before: %6d\n", lease.StorageLeaseInSeconds)
   194  	secondsInDay := 60 * 60 * 24
   195  
   196  	// Set lease to 7 days storage
   197  	err = vAppTemplate.RenewLease(secondsInDay * 7)
   198  	check.Assert(err, IsNil)
   199  
   200  	// Make sure the vAppTemplate internal values were updated
   201  	check.Assert(vAppTemplate.VAppTemplate.LeaseSettingsSection.StorageLeaseInSeconds, Equals, secondsInDay*7)
   202  
   203  	newLease, err := vAppTemplate.GetLease()
   204  	check.Assert(err, IsNil)
   205  	check.Assert(newLease, NotNil)
   206  	check.Assert(newLease.StorageLeaseInSeconds, Equals, secondsInDay*7)
   207  
   208  	printVerbose("lease storage in vAppTemplate after: %6d\n", newLease.StorageLeaseInSeconds)
   209  
   210  	// Set lease to "never expires", which defaults to the Org maximum lease if the Org itself has lower limits
   211  	err = vAppTemplate.RenewLease(0)
   212  	check.Assert(err, IsNil)
   213  	check.Assert(vAppTemplate.VAppTemplate.LeaseSettingsSection.StorageLeaseInSeconds, Equals, *orgVappTemplateLease.StorageLeaseSeconds)
   214  
   215  	newLease, err = vAppTemplate.GetLease()
   216  	check.Assert(err, IsNil)
   217  	check.Assert(newLease, NotNil)
   218  	printVerbose("lease storage in vAppTemplate (reset): %d\n", newLease.StorageLeaseInSeconds)
   219  
   220  	if *orgVappTemplateLease.StorageLeaseSeconds != 0 {
   221  		// Check that setting a lease higher than allowed by the Org settings results in an error
   222  		err = vAppTemplate.RenewLease(*orgVappTemplateLease.StorageLeaseSeconds + 3600)
   223  		check.Assert(err, NotNil)
   224  		// Note: the same operation in a vApp results with the lease settings silently going back to the Organization defaults
   225  	}
   226  
   227  	err = vAppTemplate.Delete()
   228  	check.Assert(err, IsNil)
   229  }