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  }