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

     1  //go:build functional || openapi || certificate || ALL
     2  
     3  /*
     4   * Copyright 2021 VMware, Inc.  All rights reserved.  Licensed under the Apache v2 License.
     5   */
     6  
     7  package govcd
     8  
     9  import (
    10  	_ "embed"
    11  	"fmt"
    12  
    13  	"github.com/vmware/go-vcloud-director/v2/types/v56"
    14  
    15  	. "gopkg.in/check.v1"
    16  )
    17  
    18  func (vcd *TestVCD) Test_CertificateInLibrary(check *C) {
    19  	if vcd.skipAdminTests {
    20  		check.Skip(fmt.Sprintf(TestRequiresSysAdminPrivileges, check.TestName()))
    21  	}
    22  	skipOpenApiEndpointTest(vcd, check, types.OpenApiPathVersion1_0_0+types.OpenApiEndpointSSLCertificateLibrary)
    23  
    24  	alias := "Test_CertificateInLibrary"
    25  
    26  	certificateConfig := &types.CertificateLibraryItem{
    27  		Alias:       alias,
    28  		Certificate: certificate,
    29  	}
    30  	createdCertificate, err := vcd.client.Client.AddCertificateToLibrary(certificateConfig)
    31  	check.Assert(err, IsNil)
    32  	openApiEndpoint, err := getEndpointByVersion(&vcd.client.Client)
    33  	check.Assert(err, IsNil)
    34  	check.Assert(openApiEndpoint, NotNil)
    35  	PrependToCleanupListOpenApi(createdCertificate.CertificateLibrary.Alias, check.TestName(), openApiEndpoint+createdCertificate.CertificateLibrary.Id)
    36  
    37  	check.Assert(createdCertificate, NotNil)
    38  	check.Assert(createdCertificate.CertificateLibrary.Id, Not(Equals), "")
    39  	check.Assert(createdCertificate.CertificateLibrary.Alias, Equals, alias)
    40  	check.Assert(createdCertificate.CertificateLibrary.Certificate, Equals, certificate)
    41  
    42  	fetchedCertificate, err := vcd.client.Client.GetCertificateFromLibraryById(createdCertificate.CertificateLibrary.Id)
    43  	check.Assert(err, IsNil)
    44  	check.Assert(fetchedCertificate, NotNil)
    45  	check.Assert(fetchedCertificate.CertificateLibrary.Alias, Equals, alias)
    46  	check.Assert(fetchedCertificate.CertificateLibrary.Certificate, Equals, certificate)
    47  
    48  	//test with private key and upload to org context
    49  	adminOrg, err := vcd.client.GetAdminOrgByName(vcd.org.Org.Name)
    50  	check.Assert(err, IsNil)
    51  	check.Assert(adminOrg, NotNil)
    52  
    53  	aliasForPrivateKey := "Test_CertificateInLibrary_private_key_test"
    54  	description := "generated by test"
    55  
    56  	privateKeyPassphrase := "test"
    57  	certificateWithPrivateKeyConfig := &types.CertificateLibraryItem{
    58  		Alias:                aliasForPrivateKey,
    59  		Certificate:          certificate,
    60  		Description:          description,
    61  		PrivateKey:           privateKey,
    62  		PrivateKeyPassphrase: privateKeyPassphrase,
    63  	}
    64  	createdCertificateWithPrivateKeyConfig, err := adminOrg.AddCertificateToLibrary(certificateWithPrivateKeyConfig)
    65  	check.Assert(err, IsNil)
    66  	openApiEndpoint, err = getEndpointByVersion(&vcd.client.Client)
    67  	check.Assert(err, IsNil)
    68  	check.Assert(openApiEndpoint, NotNil)
    69  	PrependToCleanupListOpenApi(createdCertificateWithPrivateKeyConfig.CertificateLibrary.Alias, check.TestName(),
    70  		openApiEndpoint+createdCertificateWithPrivateKeyConfig.CertificateLibrary.Id)
    71  
    72  	check.Assert(createdCertificateWithPrivateKeyConfig, NotNil)
    73  	check.Assert(createdCertificateWithPrivateKeyConfig.CertificateLibrary.Id, Not(Equals), "")
    74  	check.Assert(createdCertificateWithPrivateKeyConfig.CertificateLibrary.Alias, Equals, aliasForPrivateKey)
    75  	check.Assert(createdCertificateWithPrivateKeyConfig.CertificateLibrary.Certificate, Equals, certificate)
    76  
    77  	fetchedCertificateWithPrivateKey, err := vcd.client.Client.GetCertificateFromLibraryById(createdCertificateWithPrivateKeyConfig.CertificateLibrary.Id)
    78  	check.Assert(err, IsNil)
    79  	check.Assert(fetchedCertificateWithPrivateKey, NotNil)
    80  	check.Assert(fetchedCertificateWithPrivateKey.CertificateLibrary.Alias, Equals, aliasForPrivateKey)
    81  	check.Assert(fetchedCertificateWithPrivateKey.CertificateLibrary.Certificate, Equals, certificate)
    82  
    83  	// check fetching all certificates
    84  	allOrgCertificates, err := adminOrg.GetAllCertificatesFromLibrary(nil)
    85  	check.Assert(err, IsNil)
    86  	check.Assert(allOrgCertificates, NotNil)
    87  
    88  	if testVerbose {
    89  		fmt.Printf("(org) how many certificates: %d\n", len(allOrgCertificates))
    90  		for i, oneCertificate := range allOrgCertificates {
    91  			fmt.Printf("%3d %-20s %-53s %s\n", i, oneCertificate.CertificateLibrary.Alias,
    92  				oneCertificate.CertificateLibrary.Id, oneCertificate.CertificateLibrary.Description)
    93  		}
    94  	}
    95  	allExistingCertificates, err := adminOrg.client.GetAllCertificatesFromLibrary(nil)
    96  	check.Assert(err, IsNil)
    97  	check.Assert(allExistingCertificates, NotNil)
    98  
    99  	if testVerbose {
   100  		fmt.Printf("(global) how many certificates: %d\n", len(allExistingCertificates))
   101  		for i, oneCertificate := range allExistingCertificates {
   102  			fmt.Printf("%3d %-20s %-53s %s\n", i, oneCertificate.CertificateLibrary.Alias,
   103  				oneCertificate.CertificateLibrary.Id, oneCertificate.CertificateLibrary.Description)
   104  		}
   105  	}
   106  
   107  	// check fetching certificate by Name
   108  	foundCertificate, err := vcd.client.Client.GetCertificateFromLibraryByName(alias)
   109  	check.Assert(err, IsNil)
   110  	check.Assert(foundCertificate, NotNil)
   111  	check.Assert(foundCertificate.CertificateLibrary.Alias, Equals, alias)
   112  
   113  	foundCertificateWithPrivateKey, err := adminOrg.GetCertificateFromLibraryByName(aliasForPrivateKey)
   114  	check.Assert(err, IsNil)
   115  	check.Assert(foundCertificateWithPrivateKey, NotNil)
   116  	check.Assert(foundCertificateWithPrivateKey.CertificateLibrary.Alias, Equals, aliasForPrivateKey)
   117  
   118  	// check update
   119  	newAlias := "newAlias"
   120  	newDescription := "newDescription"
   121  	foundCertificateWithPrivateKey.CertificateLibrary.Alias = newAlias
   122  	foundCertificateWithPrivateKey.CertificateLibrary.Description = newDescription
   123  	updateCertificateWithPrivateKey, err := foundCertificateWithPrivateKey.Update()
   124  	check.Assert(err, IsNil)
   125  	check.Assert(updateCertificateWithPrivateKey, NotNil)
   126  	check.Assert(updateCertificateWithPrivateKey.CertificateLibrary.Alias, Equals, newAlias)
   127  	check.Assert(updateCertificateWithPrivateKey.CertificateLibrary.Description, Equals, newDescription)
   128  	check.Assert(updateCertificateWithPrivateKey.CertificateLibrary.Id, Not(Equals), "")
   129  	check.Assert(updateCertificateWithPrivateKey.CertificateLibrary.Certificate, Equals, certificate)
   130  	check.Assert(updateCertificateWithPrivateKey.CertificateLibrary.PrivateKey, NotNil)           // isn't returned
   131  	check.Assert(updateCertificateWithPrivateKey.CertificateLibrary.PrivateKeyPassphrase, NotNil) // isn't returned
   132  
   133  	foundCertificate.CertificateLibrary.Alias = newAlias
   134  	foundCertificate.CertificateLibrary.Description = newDescription
   135  	updateCertificate, err := foundCertificate.Update()
   136  	check.Assert(err, IsNil)
   137  	check.Assert(updateCertificate, NotNil)
   138  	check.Assert(updateCertificate.CertificateLibrary.Alias, Equals, newAlias)
   139  	check.Assert(updateCertificate.CertificateLibrary.Description, Equals, newDescription)
   140  	check.Assert(updateCertificate.CertificateLibrary.Id, Not(Equals), "")
   141  	check.Assert(updateCertificate.CertificateLibrary.Certificate, Equals, certificate)
   142  	check.Assert(updateCertificate.CertificateLibrary.PrivateKey, NotNil)           // isn't returned
   143  	check.Assert(updateCertificate.CertificateLibrary.PrivateKeyPassphrase, NotNil) // isn't returned
   144  
   145  	//delete certificate
   146  	err = updateCertificateWithPrivateKey.Delete()
   147  	check.Assert(err, IsNil)
   148  	deletedCertificate, err := vcd.client.Client.GetCertificateFromLibraryById(updateCertificateWithPrivateKey.CertificateLibrary.Id)
   149  	check.Assert(ContainsNotFound(err), Equals, true)
   150  	check.Assert(deletedCertificate, IsNil)
   151  
   152  	err = updateCertificate.Delete()
   153  	check.Assert(err, IsNil)
   154  	deletedCertificate, err = adminOrg.client.GetCertificateFromLibraryById(updateCertificate.CertificateLibrary.Id)
   155  	check.Assert(ContainsNotFound(err), Equals, true)
   156  	check.Assert(deletedCertificate, IsNil)
   157  
   158  }
   159  
   160  func (vcd *TestVCD) Test_GetCertificateFromLibraryByName_ValidatesSymbolsInName(check *C) {
   161  	if vcd.skipAdminTests {
   162  		check.Skip(fmt.Sprintf(TestRequiresSysAdminPrivileges, check.TestName()))
   163  	}
   164  	skipOpenApiEndpointTest(vcd, check, types.OpenApiPathVersion1_0_0+types.OpenApiEndpointSSLCertificateLibrary)
   165  
   166  	// When alias contains commas, semicolons, stars, or plus signs, the encoding may reject by the API when we try to Query it
   167  	// Also, spaces present their own issues
   168  	for _, symbol := range []string{";", ",", "+", " ", "*", ":"} {
   169  
   170  		alias := fmt.Sprintf("Test%sCertificate%sIn%sLibrary", symbol, symbol, symbol)
   171  
   172  		certificateConfig := &types.CertificateLibraryItem{
   173  			Alias:       alias,
   174  			Certificate: certificate,
   175  		}
   176  		createdCertificate, err := vcd.client.Client.AddCertificateToLibrary(certificateConfig)
   177  		check.Assert(err, IsNil)
   178  		openApiEndpoint, err := getEndpointByVersion(&vcd.client.Client)
   179  		check.Assert(err, IsNil)
   180  		check.Assert(openApiEndpoint, NotNil)
   181  		PrependToCleanupListOpenApi(createdCertificate.CertificateLibrary.Alias, check.TestName(),
   182  			openApiEndpoint+createdCertificate.CertificateLibrary.Id)
   183  
   184  		check.Assert(createdCertificate, NotNil)
   185  		check.Assert(createdCertificate.CertificateLibrary.Id, Not(Equals), "")
   186  		check.Assert(createdCertificate.CertificateLibrary.Alias, Equals, alias)
   187  		check.Assert(createdCertificate.CertificateLibrary.Certificate, Equals, certificate)
   188  
   189  		foundCertificate, err := vcd.client.Client.GetCertificateFromLibraryByName(alias)
   190  		check.Assert(err, IsNil)
   191  		check.Assert(foundCertificate, NotNil)
   192  		check.Assert(foundCertificate.CertificateLibrary.Alias, Equals, alias)
   193  
   194  		err = foundCertificate.Delete()
   195  		check.Assert(err, IsNil)
   196  	}
   197  }