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

     1  //go:build network || nsxt || functional || openapi || ALL
     2  
     3  package govcd
     4  
     5  import (
     6  	"fmt"
     7  
     8  	"github.com/vmware/go-vcloud-director/v2/types/v56"
     9  	. "gopkg.in/check.v1"
    10  )
    11  
    12  func (vcd *TestVCD) Test_IpSpacePublic(check *C) {
    13  	if vcd.skipAdminTests {
    14  		check.Skip(fmt.Sprintf(TestRequiresSysAdminPrivileges, check.TestName()))
    15  	}
    16  	skipNoNsxtConfiguration(vcd, check)
    17  	skipOpenApiEndpointTest(vcd, check, types.OpenApiPathVersion1_0_0+types.OpenApiEndpointIpSpaces)
    18  
    19  	ipSpaceConfig := &types.IpSpace{
    20  		Name:                      check.TestName(),
    21  		IPSpaceInternalScope:      []string{"22.0.0.0/24"},
    22  		IPSpaceExternalScope:      "200.0.0.1/24",
    23  		Type:                      types.IpSpacePublic,
    24  		RouteAdvertisementEnabled: false,
    25  		IPSpacePrefixes: []types.IPSpacePrefixes{
    26  			{
    27  				DefaultQuotaForPrefixLength: -1,
    28  				IPPrefixSequence: []types.IPPrefixSequence{
    29  					{
    30  						StartingPrefixIPAddress: "22.0.0.200",
    31  						PrefixLength:            31,
    32  						TotalPrefixCount:        3,
    33  					},
    34  				},
    35  			},
    36  			{
    37  				DefaultQuotaForPrefixLength: 2,
    38  				IPPrefixSequence: []types.IPPrefixSequence{
    39  					{
    40  						StartingPrefixIPAddress: "22.0.0.100",
    41  						PrefixLength:            30,
    42  						TotalPrefixCount:        3,
    43  					},
    44  				},
    45  			},
    46  		},
    47  		IPSpaceRanges: types.IPSpaceRanges{
    48  			DefaultFloatingIPQuota: 3,
    49  			IPRanges: []types.IpSpaceRangeValues{
    50  				{
    51  					StartIPAddress: "22.0.0.10",
    52  					EndIPAddress:   "22.0.0.30",
    53  				},
    54  				{
    55  					StartIPAddress: "22.0.0.32",
    56  					EndIPAddress:   "22.0.0.34",
    57  				},
    58  			},
    59  		},
    60  	}
    61  
    62  	ipSpaceChecks(vcd, check, ipSpaceConfig)
    63  }
    64  
    65  func (vcd *TestVCD) Test_IpSpaceShared(check *C) {
    66  	if vcd.skipAdminTests {
    67  		check.Skip(fmt.Sprintf(TestRequiresSysAdminPrivileges, check.TestName()))
    68  	}
    69  	skipNoNsxtConfiguration(vcd, check)
    70  	skipOpenApiEndpointTest(vcd, check, types.OpenApiPathVersion1_0_0+types.OpenApiEndpointIpSpaces)
    71  
    72  	ipSpaceConfig := &types.IpSpace{
    73  		Name:                      check.TestName(),
    74  		IPSpaceInternalScope:      []string{"22.0.0.1/24"},
    75  		IPSpaceExternalScope:      "200.0.0.1/24",
    76  		Type:                      types.IpSpaceShared,
    77  		RouteAdvertisementEnabled: false,
    78  		IPSpacePrefixes: []types.IPSpacePrefixes{
    79  			{
    80  				DefaultQuotaForPrefixLength: -1,
    81  				IPPrefixSequence: []types.IPPrefixSequence{
    82  					{
    83  						StartingPrefixIPAddress: "22.0.0.200",
    84  						PrefixLength:            31,
    85  						TotalPrefixCount:        3,
    86  					},
    87  				},
    88  			},
    89  			{
    90  				DefaultQuotaForPrefixLength: 2,
    91  				IPPrefixSequence: []types.IPPrefixSequence{
    92  					{
    93  						StartingPrefixIPAddress: "22.0.0.100",
    94  						PrefixLength:            30,
    95  						TotalPrefixCount:        3,
    96  					},
    97  				},
    98  			},
    99  		},
   100  		IPSpaceRanges: types.IPSpaceRanges{
   101  			DefaultFloatingIPQuota: 3,
   102  			IPRanges: []types.IpSpaceRangeValues{
   103  				{
   104  					StartIPAddress: "22.0.0.10",
   105  					EndIPAddress:   "22.0.0.30",
   106  				},
   107  				{
   108  					StartIPAddress: "22.0.0.32",
   109  					EndIPAddress:   "22.0.0.34",
   110  				},
   111  			},
   112  		},
   113  	}
   114  	ipSpaceChecks(vcd, check, ipSpaceConfig)
   115  }
   116  
   117  func (vcd *TestVCD) Test_IpSpacePrivate(check *C) {
   118  	skipNoNsxtConfiguration(vcd, check)
   119  	skipOpenApiEndpointTest(vcd, check, types.OpenApiPathVersion1_0_0+types.OpenApiEndpointIpSpaces)
   120  
   121  	ipSpaceConfig := &types.IpSpace{
   122  		OrgRef: &types.OpenApiReference{
   123  			ID: vcd.org.Org.ID, // Private IP Space requires Org
   124  		},
   125  		Name:                      check.TestName(),
   126  		IPSpaceInternalScope:      []string{"22.0.0.1/24"},
   127  		IPSpaceExternalScope:      "200.0.0.1/24",
   128  		Type:                      types.IpSpacePrivate,
   129  		RouteAdvertisementEnabled: false,
   130  		IPSpacePrefixes: []types.IPSpacePrefixes{
   131  			{
   132  				DefaultQuotaForPrefixLength: -1,
   133  				IPPrefixSequence: []types.IPPrefixSequence{
   134  					{
   135  						StartingPrefixIPAddress: "22.0.0.200",
   136  						PrefixLength:            31,
   137  						TotalPrefixCount:        3,
   138  					},
   139  				},
   140  			},
   141  			{
   142  				DefaultQuotaForPrefixLength: 2,
   143  				IPPrefixSequence: []types.IPPrefixSequence{
   144  					{
   145  						StartingPrefixIPAddress: "22.0.0.100",
   146  						PrefixLength:            30,
   147  						TotalPrefixCount:        3,
   148  					},
   149  				},
   150  			},
   151  		},
   152  		IPSpaceRanges: types.IPSpaceRanges{
   153  			DefaultFloatingIPQuota: 3,
   154  			IPRanges: []types.IpSpaceRangeValues{
   155  				{
   156  					StartIPAddress: "22.0.0.10",
   157  					EndIPAddress:   "22.0.0.30",
   158  				},
   159  				{
   160  					StartIPAddress: "22.0.0.32",
   161  					EndIPAddress:   "22.0.0.34",
   162  				},
   163  			},
   164  		},
   165  	}
   166  
   167  	ipSpaceChecks(vcd, check, ipSpaceConfig)
   168  }
   169  
   170  func ipSpaceChecks(vcd *TestVCD, check *C, ipSpaceConfig *types.IpSpace) {
   171  	createdIpSpace, err := vcd.client.CreateIpSpace(ipSpaceConfig)
   172  	check.Assert(err, IsNil)
   173  	check.Assert(createdIpSpace, NotNil)
   174  
   175  	openApiEndpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointIpSpaces + createdIpSpace.IpSpace.ID
   176  	AddToCleanupListOpenApi(createdIpSpace.IpSpace.Name, check.TestName(), openApiEndpoint)
   177  
   178  	// Get by ID
   179  	byId, err := vcd.client.GetIpSpaceById(createdIpSpace.IpSpace.ID)
   180  	check.Assert(err, IsNil)
   181  	check.Assert(byId.IpSpace, DeepEquals, createdIpSpace.IpSpace)
   182  
   183  	// Get by Name
   184  	byName, err := vcd.client.GetIpSpaceByName(createdIpSpace.IpSpace.Name)
   185  	check.Assert(err, IsNil)
   186  	check.Assert(byName.IpSpace, DeepEquals, createdIpSpace.IpSpace)
   187  
   188  	// Get all and make sure it is found
   189  	allIpSpaces, err := vcd.client.GetAllIpSpaceSummaries(nil)
   190  	check.Assert(err, IsNil)
   191  	check.Assert(len(allIpSpaces) > 0, Equals, true)
   192  	var found bool
   193  	for i := range allIpSpaces {
   194  		if allIpSpaces[i].IpSpace.ID == byId.IpSpace.ID {
   195  			found = true
   196  			break
   197  		}
   198  	}
   199  	check.Assert(found, Equals, true)
   200  
   201  	// If an Org is assigned - attempt to lookup by name and Org ID
   202  	if byId.IpSpace.OrgRef != nil && byId.IpSpace.OrgRef.ID != "" {
   203  		byNameAndOrgId, err := vcd.client.GetIpSpaceByNameAndOrgId(byId.IpSpace.Name, byId.IpSpace.OrgRef.ID)
   204  		check.Assert(err, IsNil)
   205  		check.Assert(byNameAndOrgId, NotNil)
   206  		check.Assert(byNameAndOrgId.IpSpace, DeepEquals, createdIpSpace.IpSpace)
   207  
   208  	}
   209  
   210  	// Check an update
   211  	ipSpaceConfig.RouteAdvertisementEnabled = true
   212  	ipSpaceConfig.IPSpaceInternalScope = append(ipSpaceConfig.IPSpaceInternalScope, "32.0.0.0/24")
   213  
   214  	updatedIpSpace, err := createdIpSpace.Update(ipSpaceConfig)
   215  	check.Assert(err, IsNil)
   216  	check.Assert(updatedIpSpace, NotNil)
   217  	check.Assert(len(ipSpaceConfig.IPSpaceInternalScope), Equals, len(updatedIpSpace.IpSpace.IPSpaceInternalScope))
   218  
   219  	if vcd.client.Client.APIVCDMaxVersionIs(">= 38.0") {
   220  		fmt.Println("# Testing NAT and Firewall rule autocreation flags for VCD 10.5.0+")
   221  		ipSpaceConfig.Name = check.TestName() + "-GatewayServiceConfig"
   222  		ipSpaceConfig.DefaultGatewayServiceConfig = &types.IpSpaceDefaultGatewayServiceConfig{
   223  			EnableDefaultFirewallRuleCreation: true,
   224  			EnableDefaultNoSnatRuleCreation:   true,
   225  			EnableDefaultSnatRuleCreation:     true,
   226  		}
   227  
   228  		updatedIpSpace, err = updatedIpSpace.Update(ipSpaceConfig)
   229  		check.Assert(err, IsNil)
   230  		check.Assert(updatedIpSpace.IpSpace.DefaultGatewayServiceConfig, DeepEquals, ipSpaceConfig.DefaultGatewayServiceConfig)
   231  	}
   232  
   233  	err = createdIpSpace.Delete()
   234  	check.Assert(err, IsNil)
   235  
   236  	// Check that the entity is not found
   237  	notFoundById, err := vcd.client.GetIpSpaceById(byId.IpSpace.ID)
   238  	check.Assert(ContainsNotFound(err), Equals, true)
   239  	check.Assert(notFoundById, IsNil)
   240  }