github.com/vmware/go-vcloud-director/v2@v2.24.0/govcd/media_test.go (about) 1 //go:build catalog || functional || ALL 2 3 /* 4 * Copyright 2019 VMware, Inc. All rights reserved. Licensed under the Apache v2 License. 5 */ 6 7 package govcd 8 9 import ( 10 "fmt" 11 . "gopkg.in/check.v1" 12 "os" 13 "path" 14 "runtime" 15 ) 16 17 // Tests System function Delete by creating media item and 18 // deleting it after. 19 func (vcd *TestVCD) Test_DeleteMedia(check *C) { 20 fmt.Printf("Running: %s\n", check.TestName()) 21 22 skipWhenMediaPathMissing(vcd, check) 23 if vcd.config.VCD.Org == "" { 24 check.Skip("Test_DeleteMedia: Org name not given") 25 return 26 } 27 if vcd.config.VCD.Catalog.Name == "" { 28 check.Skip("Test_DeleteMedia: Catalog name not given") 29 return 30 } 31 org, err := vcd.client.GetOrgByName(vcd.config.VCD.Org) 32 check.Assert(err, IsNil) 33 check.Assert(org, NotNil) 34 35 catalog, err := org.GetCatalogByName(vcd.config.VCD.Catalog.Name, false) 36 check.Assert(err, IsNil) 37 check.Assert(catalog, NotNil) 38 39 itemName := "TestDeleteMedia" 40 uploadTask, err := catalog.UploadMediaImage(itemName, "upload from test", vcd.config.Media.MediaPath, 1024) 41 check.Assert(err, IsNil) 42 err = uploadTask.WaitTaskCompletion() 43 check.Assert(err, IsNil) 44 45 AddToCleanupList(itemName, "mediaCatalogImage", vcd.org.Org.Name+"|"+vcd.config.VCD.Catalog.Name, check.TestName()) 46 47 media, err := catalog.GetMediaByName(itemName, true) 48 check.Assert(err, IsNil) 49 check.Assert(media, NotNil) 50 check.Assert(media.Media.Name, Equals, itemName) 51 52 task, err := media.Delete() 53 check.Assert(err, IsNil) 54 err = task.WaitTaskCompletion() 55 check.Assert(err, IsNil) 56 57 _, err = catalog.GetMediaByName(itemName, true) 58 check.Assert(err, NotNil) 59 check.Assert(IsNotFound(err), Equals, true) 60 } 61 62 func (vcd *TestVCD) Test_UploadAnyMediaFile(check *C) { 63 fmt.Printf("Running: %s\n", check.TestName()) 64 65 if vcd.config.VCD.Org == "" { 66 check.Skip("Test_UploadAnyMediaFile: Org name not given") 67 return 68 } 69 if vcd.config.VCD.Catalog.Name == "" { 70 check.Skip("Test_UploadAnyMediaFile: Catalog name not given") 71 return 72 } 73 org, err := vcd.client.GetOrgByName(vcd.config.VCD.Org) 74 check.Assert(err, IsNil) 75 check.Assert(org, NotNil) 76 77 catalog, err := org.GetCatalogByName(vcd.config.VCD.Catalog.Name, false) 78 check.Assert(err, IsNil) 79 check.Assert(catalog, NotNil) 80 81 _, sourceFile, _, _ := runtime.Caller(0) 82 sourceFile = path.Clean(sourceFile) 83 itemName := check.TestName() 84 itemPath := sourceFile 85 86 // Upload the source file of the current test as a media item 87 uploadTask, err := catalog.UploadMediaFile(itemName, "Text file uploaded from test", itemPath, 1024, false) 88 check.Assert(err, IsNil) 89 err = uploadTask.WaitTaskCompletion() 90 check.Assert(err, IsNil) 91 92 AddToCleanupList(itemName, "mediaCatalogImage", vcd.org.Org.Name+"|"+vcd.config.VCD.Catalog.Name, check.TestName()) 93 94 // Retrieve the media item 95 media, err := catalog.GetMediaByName(itemName, true) 96 check.Assert(err, IsNil) 97 check.Assert(media, NotNil) 98 check.Assert(media.Media.Name, Equals, itemName) 99 100 // Repeat the download a few times. Make sure that a repeated download works as well as the first one 101 for i := 0; i < 2; i++ { 102 // Download the media item from VCD as a byte slice 103 contents, err := media.Download() 104 check.Assert(err, IsNil) 105 check.Assert(len(contents), Not(Equals), 0) 106 check.Assert(media.Media.Files, NotNil) 107 check.Assert(media.Media.Files.File, NotNil) 108 check.Assert(media.Media.Files.File[0].Name, Not(Equals), "") 109 check.Assert(len(media.Media.Files.File[0].Link), Not(Equals), 0) 110 111 // Read the source file from disk 112 fromFile, err := os.ReadFile(path.Clean(sourceFile)) 113 check.Assert(err, IsNil) 114 // Make sure that what we downloaded from VCD corresponds to the file contents. 115 check.Assert(len(fromFile), Equals, len(contents)) 116 check.Assert(fromFile, DeepEquals, contents) 117 } 118 119 task, err := media.Delete() 120 check.Assert(err, IsNil) 121 err = task.WaitTaskCompletion() 122 check.Assert(err, IsNil) 123 124 _, err = catalog.GetMediaByName(itemName, true) 125 check.Assert(err, NotNil) 126 check.Assert(IsNotFound(err), Equals, true) 127 } 128 129 // Tests System function Refresh 130 func (vcd *TestVCD) Test_RefreshMedia(check *C) { 131 fmt.Printf("Running: %s\n", check.TestName()) 132 133 skipWhenMediaPathMissing(vcd, check) 134 if vcd.config.VCD.Org == "" { 135 check.Skip("Test_RefreshMedia: Org name not given") 136 return 137 } 138 if vcd.config.VCD.Catalog.Name == "" { 139 check.Skip("Test_RefreshMedia: Catalog name not given") 140 return 141 } 142 if vcd.config.Media.Media == "" { 143 check.Skip("Test_RefreshMediaRecord: Media name not given") 144 return 145 } 146 org, err := vcd.client.GetOrgByName(vcd.config.VCD.Org) 147 check.Assert(err, IsNil) 148 check.Assert(org, NotNil) 149 150 catalog, err := org.GetCatalogByName(vcd.config.VCD.Catalog.Name, false) 151 check.Assert(err, IsNil) 152 check.Assert(catalog, NotNil) 153 154 itemName := vcd.config.Media.Media 155 156 media, err := catalog.GetMediaByName(itemName, true) 157 check.Assert(err, IsNil) 158 check.Assert(media, NotNil) 159 check.Assert(media.Media.Name, Equals, itemName) 160 161 oldMedia := media 162 err = media.Refresh() 163 check.Assert(err, IsNil) 164 165 check.Assert(media, NotNil) 166 check.Assert(oldMedia.Media.ID, Equals, media.Media.ID) 167 check.Assert(oldMedia.Media.Name, Equals, media.Media.Name) 168 check.Assert(oldMedia.Media.HREF, Equals, media.Media.HREF) 169 } 170 171 // Tests Media retrieval by name, by ID, and by a combination of name and ID 172 func (vcd *TestVCD) Test_GetMedia(check *C) { 173 fmt.Printf("Running: %s\n", check.TestName()) 174 175 if vcd.config.VCD.Org == "" { 176 check.Skip("Test_GetMedia: Org name not given") 177 return 178 } 179 if vcd.config.VCD.Catalog.Name == "" { 180 check.Skip("Test_GetMedia: Catalog name not given") 181 return 182 } 183 org, err := vcd.client.GetOrgByName(vcd.config.VCD.Org) 184 check.Assert(err, IsNil) 185 check.Assert(org, NotNil) 186 187 catalog, err := org.GetCatalogByName(vcd.config.VCD.Catalog.Name, false) 188 check.Assert(err, IsNil) 189 check.Assert(catalog, NotNil) 190 191 getByName := func(name string, refresh bool) (genericEntity, error) { 192 err = catalog.Refresh() 193 check.Assert(err, IsNil) 194 return catalog.GetMediaByName(name, refresh) 195 } 196 getById := func(id string, refresh bool) (genericEntity, error) { 197 return catalog.GetMediaById(id) 198 } 199 getByNameOrId := func(id string, refresh bool) (genericEntity, error) { 200 return catalog.GetMediaByNameOrId(id, refresh) 201 } 202 203 var def = getterTestDefinition{ 204 parentType: "Catalog", 205 parentName: vcd.config.VCD.Catalog.Name, 206 entityType: "Media", 207 entityName: vcd.config.Media.Media, 208 getByName: getByName, 209 getById: getById, 210 getByNameOrId: getByNameOrId, 211 } 212 vcd.testFinderGetGenericEntity(def, check) 213 } 214 215 func (vcd *TestVCD) Test_QueryMedia(check *C) { 216 fmt.Printf("Running: %s\n", check.TestName()) 217 218 skipWhenMediaPathMissing(vcd, check) 219 220 if vcd.config.VCD.Org == "" { 221 check.Skip("Test_QueryMedia: Org name not given") 222 return 223 } 224 if vcd.config.VCD.Catalog.Name == "" { 225 check.Skip("Test_QueryMedia: Catalog name not given") 226 return 227 } 228 if vcd.config.Media.Media == "" { 229 check.Skip("Test_RefreshMediaRecord: Media name not given") 230 return 231 } 232 // Fetching organization 233 org, err := vcd.client.GetAdminOrgByName(vcd.org.Org.Name) 234 check.Assert(err, IsNil) 235 check.Assert(org, NotNil) 236 237 catalog, err := org.GetCatalogByName(vcd.config.VCD.Catalog.Name, false) 238 check.Assert(err, IsNil) 239 240 testQueryMediaName := vcd.config.Media.Media 241 242 media, err := catalog.QueryMedia(testQueryMediaName) 243 check.Assert(err, IsNil) 244 check.Assert(media, Not(Equals), nil) 245 246 check.Assert(media.MediaRecord.Name, Equals, testQueryMediaName) 247 check.Assert(media.MediaRecord.HREF, Not(Equals), "") 248 249 // find Invalid media 250 media, err = catalog.QueryMedia("INVALID") 251 check.Assert(IsNotFound(err), Equals, true) 252 check.Assert(media, IsNil) 253 } 254 255 // Tests System function Refresh 256 func (vcd *TestVCD) Test_RefreshMediaRecord(check *C) { 257 fmt.Printf("Running: %s\n", check.TestName()) 258 259 skipWhenMediaPathMissing(vcd, check) 260 if vcd.config.VCD.Org == "" { 261 check.Skip("Test_RefreshMediaRecord: Org name not given") 262 return 263 } 264 if vcd.config.VCD.Catalog.Name == "" { 265 check.Skip("Test_RefreshMediaRecord: Catalog name not given") 266 return 267 } 268 269 if vcd.config.Media.Media == "" { 270 check.Skip("Test_RefreshMediaRecord: Media name not given") 271 return 272 } 273 274 org, err := vcd.client.GetOrgByName(vcd.config.VCD.Org) 275 check.Assert(err, IsNil) 276 check.Assert(org, NotNil) 277 278 catalog, err := org.GetCatalogByName(vcd.config.VCD.Catalog.Name, false) 279 check.Assert(err, IsNil) 280 check.Assert(catalog, NotNil) 281 282 itemName := vcd.config.Media.Media 283 284 mediaRecord, err := catalog.QueryMedia(itemName) 285 check.Assert(err, IsNil) 286 check.Assert(mediaRecord, NotNil) 287 check.Assert(mediaRecord.MediaRecord.Name, Equals, itemName) 288 289 oldMediaRecord := mediaRecord 290 err = mediaRecord.Refresh() 291 check.Assert(err, IsNil) 292 293 check.Assert(mediaRecord, NotNil) 294 check.Assert(oldMediaRecord.MediaRecord.ID, Equals, mediaRecord.MediaRecord.ID) 295 check.Assert(oldMediaRecord.MediaRecord.Name, Equals, mediaRecord.MediaRecord.Name) 296 check.Assert(oldMediaRecord.MediaRecord.HREF, Equals, mediaRecord.MediaRecord.HREF) 297 } 298 299 func (vcd *TestVCD) Test_QueryAllMedia(check *C) { 300 fmt.Printf("Running: %s\n", check.TestName()) 301 302 skipWhenMediaPathMissing(vcd, check) 303 304 if vcd.config.VCD.Org == "" { 305 check.Skip("Test_QueryMedia: Org name not given") 306 return 307 } 308 309 if vcd.config.Media.Media == "" { 310 check.Skip("Test_RefreshMediaRecord: Media name not given") 311 return 312 } 313 // Fetching organization 314 org, err := vcd.client.GetAdminOrgByName(vcd.org.Org.Name) 315 check.Assert(err, IsNil) 316 check.Assert(org, NotNil) 317 318 testQueryMediaName := vcd.config.Media.Media 319 320 mediaList, err := vcd.vdc.QueryAllMedia(testQueryMediaName) 321 check.Assert(err, IsNil) 322 check.Assert(mediaList, Not(Equals), nil) 323 324 check.Assert(mediaList[0].MediaRecord.Name, Equals, testQueryMediaName) 325 check.Assert(mediaList[0].MediaRecord.HREF, Not(Equals), "") 326 327 // find Invalid media 328 mediaList, err = vcd.vdc.QueryAllMedia("INVALID") 329 check.Assert(IsNotFound(err), Equals, true) 330 check.Assert(mediaList, IsNil) 331 }