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 }