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

     1  //go:build extnetwork || network || 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  	"sort"
    12  
    13  	. "gopkg.in/check.v1"
    14  
    15  	"github.com/vmware/go-vcloud-director/v2/types/v56"
    16  )
    17  
    18  // Retrieves an external network and checks that its contents are filled as expected
    19  func (vcd *TestVCD) Test_ExternalNetworkGetByName(check *C) {
    20  	fmt.Printf("Running: %s\n", check.TestName())
    21  	if vcd.skipAdminTests {
    22  		check.Skip(fmt.Sprintf(TestRequiresSysAdminPrivileges, check.TestName()))
    23  	}
    24  
    25  	externalNetwork, err := vcd.client.GetExternalNetworkByName(vcd.config.VCD.ExternalNetwork)
    26  	check.Assert(err, IsNil)
    27  	check.Assert(externalNetwork, NotNil)
    28  
    29  	check.Assert(externalNetwork.ExternalNetwork.Name, Equals, vcd.config.VCD.ExternalNetwork)
    30  }
    31  
    32  // Tests System function Delete by creating external network and
    33  // deleting it after.
    34  func (vcd *TestVCD) Test_ExternalNetworkDelete(check *C) {
    35  	fmt.Printf("Running: %s\n", check.TestName())
    36  
    37  	skippingReason, externalNetwork, task, err := vcd.testCreateExternalNetwork(check.TestName(), TestDeleteExternalNetwork, "")
    38  	if skippingReason != "" {
    39  		check.Skip(skippingReason)
    40  	}
    41  
    42  	check.Assert(err, IsNil)
    43  	AddToCleanupList(externalNetwork.Name, "externalNetwork", "", "Test_ExternalNetworkDelete")
    44  	check.Assert(task.Task, Not(Equals), types.Task{})
    45  
    46  	err = task.WaitTaskCompletion()
    47  	check.Assert(err, IsNil)
    48  
    49  	createdExternalNetwork, err := vcd.client.GetExternalNetworkByName(externalNetwork.Name)
    50  	check.Assert(err, IsNil)
    51  	check.Assert(createdExternalNetwork, NotNil)
    52  
    53  	err = createdExternalNetwork.DeleteWait()
    54  	check.Assert(err, IsNil)
    55  
    56  	// check through existing external networks
    57  	_, err = vcd.client.GetExternalNetworkByName(externalNetwork.Name)
    58  	check.Assert(err, NotNil)
    59  }
    60  
    61  // Retrieves an external network and checks that its contents are filled as expected
    62  func (vcd *TestVCD) Test_GetExternalNetwork(check *C) {
    63  	fmt.Printf("Running: %s\n", check.TestName())
    64  	if vcd.skipAdminTests {
    65  		check.Skip(fmt.Sprintf(TestRequiresSysAdminPrivileges, check.TestName()))
    66  	}
    67  	networkName := vcd.config.VCD.ExternalNetwork
    68  	if networkName == "" {
    69  		check.Skip("No external network provided")
    70  	}
    71  	externalNetwork, err := vcd.client.GetExternalNetworkByName(networkName)
    72  	check.Assert(err, IsNil)
    73  	check.Assert(externalNetwork, NotNil)
    74  	LogExternalNetwork(*externalNetwork.ExternalNetwork)
    75  	check.Assert(externalNetwork.ExternalNetwork.HREF, Not(Equals), "")
    76  	check.Assert(externalNetwork.ExternalNetwork.Name, Equals, networkName)
    77  	check.Assert(externalNetwork.ExternalNetwork.Type, Equals, types.MimeExternalNetwork)
    78  }
    79  
    80  func (vcd *TestVCD) Test_CreateExternalNetwork(check *C) {
    81  	fmt.Printf("Running: %s\n", check.TestName())
    82  
    83  	dnsSuffix := "some.net"
    84  	skippingReason, externalNetwork, task, err := vcd.testCreateExternalNetwork(check.TestName(), TestCreateExternalNetwork, dnsSuffix)
    85  	if skippingReason != "" {
    86  		check.Skip(skippingReason)
    87  	}
    88  
    89  	check.Assert(err, IsNil)
    90  	check.Assert(task.Task, Not(Equals), types.Task{})
    91  
    92  	AddToCleanupList(externalNetwork.Name, "externalNetwork", "", "Test_CreateExternalNetwork")
    93  	err = task.WaitTaskCompletion()
    94  	check.Assert(err, IsNil)
    95  
    96  	newExternalNetwork, err := vcd.client.GetExternalNetworkByName(TestCreateExternalNetwork)
    97  	check.Assert(err, IsNil)
    98  	check.Assert(newExternalNetwork, NotNil)
    99  	check.Assert(newExternalNetwork.ExternalNetwork.Name, Equals, TestCreateExternalNetwork)
   100  
   101  	ipScope := newExternalNetwork.ExternalNetwork.Configuration.IPScopes.IPScope
   102  
   103  	// Sort returned IP scopes by gateway because API is not guaranteed to return it in the same
   104  	// order
   105  	sort.SliceStable(ipScope, func(i, j int) bool {
   106  		return ipScope[i].Gateway < ipScope[j].Gateway
   107  	})
   108  
   109  	check.Assert(len(ipScope), Equals, 2)
   110  	// Check IPScope 1
   111  	check.Assert(ipScope[0].Gateway, Equals, "192.168.201.1")
   112  	check.Assert(ipScope[0].Netmask, Equals, "255.255.255.0")
   113  	check.Assert(ipScope[0].DNS1, Equals, "192.168.202.253")
   114  	check.Assert(ipScope[0].DNS2, Equals, "192.168.202.254")
   115  	check.Assert(ipScope[0].DNSSuffix, Equals, dnsSuffix)
   116  	// Check IPScope 2
   117  	check.Assert(ipScope[1].Gateway, Equals, "192.168.231.1")
   118  	check.Assert(ipScope[1].Netmask, Equals, "255.255.255.0")
   119  	check.Assert(ipScope[1].DNS1, Equals, "192.168.232.253")
   120  	check.Assert(ipScope[1].DNS2, Equals, "192.168.232.254")
   121  	check.Assert(ipScope[1].DNSSuffix, Equals, dnsSuffix)
   122  
   123  	// Sort IP ranges and check them on IPScope 0
   124  	sort.SliceStable(ipScope[0].IPRanges.IPRange, func(i, j int) bool {
   125  		return ipScope[0].IPRanges.IPRange[i].StartAddress < ipScope[0].IPRanges.IPRange[j].StartAddress
   126  	})
   127  
   128  	check.Assert(len(ipScope[0].IPRanges.IPRange), Equals, 2)
   129  	ipRange1 := ipScope[0].IPRanges.IPRange[1]
   130  	check.Assert(ipRange1.StartAddress, Equals, "192.168.201.3")
   131  	check.Assert(ipRange1.EndAddress, Equals, "192.168.201.100")
   132  
   133  	ipRange2 := ipScope[0].IPRanges.IPRange[0]
   134  	check.Assert(ipRange2.StartAddress, Equals, "192.168.201.105")
   135  	check.Assert(ipRange2.EndAddress, Equals, "192.168.201.140")
   136  
   137  	// Sort IP ranges and check them on IPScope 1
   138  	sort.SliceStable(ipScope[1].IPRanges.IPRange, func(i, j int) bool {
   139  		return ipScope[1].IPRanges.IPRange[i].StartAddress < ipScope[1].IPRanges.IPRange[j].StartAddress
   140  	})
   141  	ipRange1 = ipScope[1].IPRanges.IPRange[2]
   142  	check.Assert(ipRange1.StartAddress, Equals, "192.168.231.3")
   143  	check.Assert(ipRange1.EndAddress, Equals, "192.168.231.100")
   144  
   145  	ipRange2 = ipScope[1].IPRanges.IPRange[0]
   146  	check.Assert(ipRange2.StartAddress, Equals, "192.168.231.105")
   147  	check.Assert(ipRange2.EndAddress, Equals, "192.168.231.140")
   148  
   149  	ipRange3 := ipScope[1].IPRanges.IPRange[1]
   150  	check.Assert(ipRange3.StartAddress, Equals, "192.168.231.145")
   151  	check.Assert(ipRange3.EndAddress, Equals, "192.168.231.150")
   152  
   153  	check.Assert(newExternalNetwork.ExternalNetwork.Configuration.FenceMode, Equals, "isolated")
   154  	check.Assert(newExternalNetwork.ExternalNetwork.Description, Equals, "Test Create External Network")
   155  	check.Assert(newExternalNetwork.ExternalNetwork.VimPortGroupRef, NotNil)
   156  	check.Assert(newExternalNetwork.ExternalNetwork.VimPortGroupRef.VimObjectType, Equals, externalNetwork.VimPortGroupRefs.VimObjectRef[0].VimObjectType)
   157  	check.Assert(newExternalNetwork.ExternalNetwork.VimPortGroupRef.MoRef, Equals, externalNetwork.VimPortGroupRefs.VimObjectRef[0].MoRef)
   158  	check.Assert(newExternalNetwork.ExternalNetwork.VimPortGroupRef.VimServerRef.HREF, Equals, externalNetwork.VimPortGroupRefs.VimObjectRef[0].VimServerRef.HREF)
   159  
   160  	err = newExternalNetwork.DeleteWait()
   161  	check.Assert(err, IsNil)
   162  }
   163  
   164  func init() {
   165  	testingTags["extnetwork"] = "externalnetwork_test.go"
   166  }
   167  
   168  // Tests ExternalNetwork retrieval by name, by ID, and by a combination of name and ID
   169  func (vcd *TestVCD) Test_SystemGetExternalNetwork(check *C) {
   170  
   171  	getByName := func(name string, refresh bool) (genericEntity, error) {
   172  		return vcd.client.GetExternalNetworkByName(name)
   173  	}
   174  	getById := func(id string, refresh bool) (genericEntity, error) { return vcd.client.GetExternalNetworkById(id) }
   175  	getByNameOrId := func(id string, refresh bool) (genericEntity, error) {
   176  		return vcd.client.GetExternalNetworkByNameOrId(id)
   177  	}
   178  
   179  	var def = getterTestDefinition{
   180  		parentType:    "VDCClient",
   181  		parentName:    "System",
   182  		entityType:    "ExternalNetwork",
   183  		entityName:    vcd.config.VCD.ExternalNetwork,
   184  		getByName:     getByName,
   185  		getById:       getById,
   186  		getByNameOrId: getByNameOrId,
   187  	}
   188  	vcd.testFinderGetGenericEntity(def, check)
   189  }