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

     1  //go:build network || nsxt || functional || openapi || ALL
     2  
     3  /*
     4   * Copyright 2022 VMware, Inc.  All rights reserved.  Licensed under the Apache v2 License.
     5   */
     6  
     7  package govcd
     8  
     9  import (
    10  	"fmt"
    11  	"github.com/vmware/go-vcloud-director/v2/types/v56"
    12  	. "gopkg.in/check.v1"
    13  )
    14  
    15  func (vcd *TestVCD) Test_NsxtEdgeRouteAdvertisement(check *C) {
    16  	skipNoNsxtConfiguration(vcd, check)
    17  	skipOpenApiEndpointTest(vcd, check, types.OpenApiPathVersion1_0_0+types.OpenApiEndpointNsxtRouteAdvertisement)
    18  	vcd.skipIfNotSysAdmin(check)
    19  
    20  	org, err := vcd.client.GetOrgByName(vcd.config.VCD.Org)
    21  	check.Assert(err, IsNil)
    22  	nsxtVdc, err := org.GetVDCByName(vcd.config.VCD.Nsxt.Vdc, false)
    23  	check.Assert(err, IsNil)
    24  	edge, err := nsxtVdc.GetNsxtEdgeGatewayByName(vcd.config.VCD.Nsxt.EdgeGateway)
    25  	check.Assert(err, IsNil)
    26  
    27  	// Make sure we are using a dedicated Tier-0 gateway (otherwise route advertisement won't be available)
    28  	edge, err = setDedicateTier0Gateway(edge, true)
    29  	check.Assert(err, IsNil)
    30  	check.Assert(edge, NotNil)
    31  
    32  	// Make sure that things get back to normal when the test is done
    33  	defer setDedicateTier0Gateway(edge, false)
    34  
    35  	network1 := "192.168.1.0/24"
    36  	network2 := "192.168.2.0/24"
    37  	networksToAdvertise := []string{network1, network2} // Sample networks to advertise
    38  
    39  	// Test UpdateNsxtRouteAdvertisement
    40  	nsxtEdgeRouteAdvertisement, err := edge.UpdateNsxtRouteAdvertisement(true, networksToAdvertise)
    41  	check.Assert(err, IsNil)
    42  	check.Assert(nsxtEdgeRouteAdvertisement, NotNil)
    43  	check.Assert(nsxtEdgeRouteAdvertisement.Enable, Equals, true)
    44  	check.Assert(len(nsxtEdgeRouteAdvertisement.Subnets), Equals, 2)
    45  	check.Assert(checkNetworkInSubnetsSlice(network1, networksToAdvertise), IsNil)
    46  	check.Assert(checkNetworkInSubnetsSlice(network2, networksToAdvertise), IsNil)
    47  
    48  	// Test DeleteNsxtRouteAdvertisement
    49  	err = edge.DeleteNsxtRouteAdvertisement()
    50  	check.Assert(err, IsNil)
    51  	nsxtEdgeRouteAdvertisement, err = edge.GetNsxtRouteAdvertisement()
    52  	check.Assert(err, IsNil)
    53  	check.Assert(nsxtEdgeRouteAdvertisement, NotNil)
    54  	check.Assert(nsxtEdgeRouteAdvertisement.Enable, Equals, false)
    55  	check.Assert(len(nsxtEdgeRouteAdvertisement.Subnets), Equals, 0)
    56  }
    57  
    58  func checkNetworkInSubnetsSlice(network string, subnets []string) error {
    59  	for _, subnet := range subnets {
    60  		if subnet == network {
    61  			return nil
    62  		}
    63  	}
    64  	return fmt.Errorf("network %s is not within the slice provided", network)
    65  }
    66  
    67  func setDedicateTier0Gateway(edgeGateway *NsxtEdgeGateway, dedicate bool) (*NsxtEdgeGateway, error) {
    68  	edgeGateway.EdgeGateway.EdgeGatewayUplinks[0].Dedicated = dedicate
    69  	edgeGateway, err := edgeGateway.Update(edgeGateway.EdgeGateway)
    70  	if err != nil {
    71  		return nil, err
    72  	}
    73  
    74  	return edgeGateway, nil
    75  }