github.com/vmware/go-vcloud-director/v2@v2.24.0/govcd/nsxt_l2_vpn_tunnel_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 // Test_NsxtL2VpnTunnel tests NSX-T Edge Gateway L2 VPN Tunnels. 13 // 1. It creates/gets/updates/deletes a SERVER type Tunnel, also the peer code (encoded configuration of the tunnel) 14 // is saved for creation of CLIENT type tunnel. 15 // 2. Creates/gets/updates/deletes a CLIENT type Tunnel 16 func (vcd *TestVCD) Test_NsxtL2VpnTunnel(check *C) { 17 skipNoNsxtConfiguration(vcd, check) 18 skipOpenApiEndpointTest(vcd, check, types.OpenApiPathVersion1_0_0+types.OpenApiEndpointEdgeGatewayL2VpnTunnel) 19 vcd.skipIfNotSysAdmin(check) 20 21 org, err := vcd.client.GetOrgByName(vcd.config.VCD.Org) 22 check.Assert(err, IsNil) 23 24 nsxtVdc, err := org.GetVDCByName(vcd.config.VCD.Nsxt.Vdc, false) 25 check.Assert(err, IsNil) 26 27 edge, err := nsxtVdc.GetNsxtEdgeGatewayByName(vcd.config.VCD.Nsxt.EdgeGateway) 28 check.Assert(err, IsNil) 29 30 network, err := nsxtVdc.GetOrgVdcNetworkByName(vcd.config.VCD.Nsxt.RoutedNetwork, false) 31 check.Assert(err, IsNil) 32 33 // Get the auto-allocated IP of the Edge Gateway 34 localEndpointIp, err := edge.GetUsedIpAddresses(nil) 35 check.Assert(err, IsNil) 36 37 // SERVER Tunnel part 38 serverTunnelParams := &types.NsxtL2VpnTunnel{ 39 Name: check.TestName(), 40 Description: check.TestName(), 41 SessionMode: "SERVER", 42 Enabled: true, 43 LocalEndpointIp: localEndpointIp[0].IPAddress, 44 RemoteEndpointIp: "1.1.1.1", 45 TunnelInterface: "", 46 ConnectorInitiationMode: "ON_DEMAND", 47 PreSharedKey: check.TestName(), 48 StretchedNetworks: []types.EdgeL2VpnStretchedNetwork{ 49 { 50 NetworkRef: types.OpenApiReference{ 51 Name: network.OrgVDCNetwork.Name, 52 ID: network.OrgVDCNetwork.ID, 53 }, 54 }, 55 }, 56 Logging: false, 57 } 58 59 serverTunnel, err := edge.CreateL2VpnTunnel(serverTunnelParams) 60 check.Assert(err, IsNil) 61 check.Assert(serverTunnel, NotNil) 62 AddToCleanupListOpenApi(serverTunnel.NsxtL2VpnTunnel.ID, check.TestName(), 63 fmt.Sprintf(types.OpenApiPathVersion1_0_0+ 64 types.OpenApiEndpointEdgeGatewayL2VpnTunnel+ 65 serverTunnel.NsxtL2VpnTunnel.ID, edge.EdgeGateway.ID)) 66 67 // Save the peer code to create a Client tunnel for testing 68 peerCode := serverTunnel.NsxtL2VpnTunnel.PeerCode 69 70 check.Assert(serverTunnel.NsxtL2VpnTunnel.Name, Equals, check.TestName()) 71 check.Assert(serverTunnel.NsxtL2VpnTunnel.Description, Equals, check.TestName()) 72 check.Assert(serverTunnel.NsxtL2VpnTunnel.SessionMode, Equals, "SERVER") 73 check.Assert(serverTunnel.NsxtL2VpnTunnel.Enabled, Equals, true) 74 check.Assert(serverTunnel.NsxtL2VpnTunnel.LocalEndpointIp, Equals, localEndpointIp[0].IPAddress) 75 check.Assert(serverTunnel.NsxtL2VpnTunnel.RemoteEndpointIp, Equals, "1.1.1.1") 76 check.Assert(serverTunnel.NsxtL2VpnTunnel.ConnectorInitiationMode, Equals, "ON_DEMAND") 77 check.Assert(serverTunnel.NsxtL2VpnTunnel.PreSharedKey, Equals, check.TestName()) 78 79 fetchedServerTunnel, err := edge.GetL2VpnTunnelById(serverTunnel.NsxtL2VpnTunnel.ID) 80 check.Assert(err, IsNil) 81 check.Assert(fetchedServerTunnel, DeepEquals, serverTunnel) 82 83 updatedServerTunnelParams := serverTunnelParams 84 updatedServerTunnelParams.ConnectorInitiationMode = "INITIATOR" 85 updatedServerTunnelParams.RemoteEndpointIp = "2.2.2.2" 86 updatedServerTunnelParams.TunnelInterface = "192.168.0.1/24" 87 88 updatedServerTunnel, err := serverTunnel.Update(updatedServerTunnelParams) 89 check.Assert(err, IsNil) 90 check.Assert(updatedServerTunnel, NotNil) 91 92 check.Assert(updatedServerTunnel.NsxtL2VpnTunnel.Name, Equals, check.TestName()) 93 check.Assert(updatedServerTunnel.NsxtL2VpnTunnel.Description, Equals, check.TestName()) 94 check.Assert(updatedServerTunnel.NsxtL2VpnTunnel.SessionMode, Equals, "SERVER") 95 check.Assert(updatedServerTunnel.NsxtL2VpnTunnel.Enabled, Equals, true) 96 check.Assert(updatedServerTunnel.NsxtL2VpnTunnel.LocalEndpointIp, Equals, localEndpointIp[0].IPAddress) 97 check.Assert(updatedServerTunnel.NsxtL2VpnTunnel.RemoteEndpointIp, Equals, "2.2.2.2") 98 check.Assert(updatedServerTunnel.NsxtL2VpnTunnel.TunnelInterface, Equals, "192.168.0.1/24") 99 check.Assert(updatedServerTunnel.NsxtL2VpnTunnel.ConnectorInitiationMode, Equals, "INITIATOR") 100 check.Assert(updatedServerTunnel.NsxtL2VpnTunnel.PreSharedKey, Equals, check.TestName()) 101 102 tunnelByName, err := edge.GetL2VpnTunnelByName(serverTunnel.NsxtL2VpnTunnel.Name) 103 check.Assert(err, IsNil) 104 check.Assert(tunnelByName.NsxtL2VpnTunnel.ID, Equals, serverTunnel.NsxtL2VpnTunnel.ID) 105 106 nonexistentTunnel, err := edge.GetL2VpnTunnelByName("nonexistent-tunnel") 107 check.Assert(err, NotNil) 108 check.Assert(nonexistentTunnel, IsNil) 109 110 err = updatedServerTunnel.Delete() 111 check.Assert(err, IsNil) 112 113 deletedServerTunnel, err := edge.GetL2VpnTunnelById(serverTunnel.NsxtL2VpnTunnel.ID) 114 check.Assert(err, NotNil) 115 check.Assert(deletedServerTunnel, IsNil) 116 117 // CLIENT Tunnel part 118 clientTunnelParams := &types.NsxtL2VpnTunnel{ 119 Name: check.TestName(), 120 Description: check.TestName(), 121 SessionMode: "CLIENT", 122 Enabled: true, 123 LocalEndpointIp: localEndpointIp[0].IPAddress, 124 RemoteEndpointIp: "1.1.1.1", 125 PreSharedKey: check.TestName(), 126 PeerCode: peerCode, 127 StretchedNetworks: []types.EdgeL2VpnStretchedNetwork{ 128 { 129 NetworkRef: types.OpenApiReference{ 130 Name: network.OrgVDCNetwork.Name, 131 ID: network.OrgVDCNetwork.ID, 132 }, 133 TunnelID: 1, 134 }, 135 }, 136 Logging: false, 137 } 138 139 clientTunnel, err := edge.CreateL2VpnTunnel(clientTunnelParams) 140 check.Assert(err, IsNil) 141 check.Assert(clientTunnel, NotNil) 142 AddToCleanupListOpenApi(clientTunnel.NsxtL2VpnTunnel.ID, check.TestName(), 143 fmt.Sprintf(types.OpenApiPathVersion1_0_0+ 144 types.OpenApiEndpointEdgeGatewayL2VpnTunnel+ 145 clientTunnel.NsxtL2VpnTunnel.ID, edge.EdgeGateway.ID)) 146 147 check.Assert(clientTunnel.NsxtL2VpnTunnel.Name, Equals, check.TestName()) 148 check.Assert(clientTunnel.NsxtL2VpnTunnel.Description, Equals, check.TestName()) 149 check.Assert(clientTunnel.NsxtL2VpnTunnel.SessionMode, Equals, "CLIENT") 150 check.Assert(clientTunnel.NsxtL2VpnTunnel.Enabled, Equals, true) 151 check.Assert(clientTunnel.NsxtL2VpnTunnel.LocalEndpointIp, Equals, localEndpointIp[0].IPAddress) 152 check.Assert(clientTunnel.NsxtL2VpnTunnel.RemoteEndpointIp, Equals, "1.1.1.1") 153 check.Assert(clientTunnel.NsxtL2VpnTunnel.PreSharedKey, Equals, check.TestName()) 154 155 fetchedClientTunnel, err := edge.GetL2VpnTunnelById(clientTunnel.NsxtL2VpnTunnel.ID) 156 check.Assert(err, IsNil) 157 check.Assert(fetchedClientTunnel, DeepEquals, clientTunnel) 158 159 updatedClientTunnelParams := clientTunnelParams 160 updatedClientTunnelParams.RemoteEndpointIp = "2.2.2.2" 161 162 updatedClientTunnel, err := clientTunnel.Update(updatedClientTunnelParams) 163 check.Assert(err, IsNil) 164 check.Assert(updatedClientTunnel, NotNil) 165 166 check.Assert(updatedClientTunnel.NsxtL2VpnTunnel.Name, Equals, check.TestName()) 167 check.Assert(updatedClientTunnel.NsxtL2VpnTunnel.Description, Equals, check.TestName()) 168 check.Assert(updatedClientTunnel.NsxtL2VpnTunnel.SessionMode, Equals, "CLIENT") 169 check.Assert(updatedClientTunnel.NsxtL2VpnTunnel.Enabled, Equals, true) 170 check.Assert(updatedClientTunnel.NsxtL2VpnTunnel.LocalEndpointIp, Equals, localEndpointIp[0].IPAddress) 171 check.Assert(updatedClientTunnel.NsxtL2VpnTunnel.RemoteEndpointIp, Equals, "2.2.2.2") 172 173 // Check if the bug exists in versions above 38.0, so the testsuite would let us adjust the 174 // version constraint in Update() 175 if vcd.client.Client.APIVCDMaxVersionIs("> 38.0") { 176 disabledClientTunnelParams := updatedClientTunnelParams 177 disabledClientTunnelParams.Enabled = false 178 disabledClientTunnel, err := updatedClientTunnel.Update(disabledClientTunnelParams) 179 check.Assert(err, IsNil) 180 check.Assert(disabledClientTunnel.NsxtL2VpnTunnel.Enabled, Equals, false) 181 } 182 183 // There is a bug in all versions up to 10.5.0, it happens 184 // when a L2 VPN Tunnel is created in CLIENT mode, has at least one Org VDC 185 // network attached, and is updated in any way. After that, to delete the tunnel 186 // one needs to de-attach all the networks 187 // or call Delete() the amount of times the object was updated 188 if vcd.client.Client.APIVCDMaxVersionIs("<= 38.0") { 189 updatedClientTunnelParams.StretchedNetworks = nil 190 updatedClientTunnel, err = updatedClientTunnel.Update(updatedClientTunnelParams) 191 check.Assert(err, IsNil) 192 } 193 194 err = updatedClientTunnel.Delete() 195 check.Assert(err, IsNil) 196 197 deletedClientTunnel, err := edge.GetL2VpnTunnelById(clientTunnel.NsxtL2VpnTunnel.ID) 198 check.Assert(err, NotNil) 199 check.Assert(deletedClientTunnel, IsNil) 200 }