Skip to content

Commit bdb7f4c

Browse files
committed
Add floating ip integration tests
1 parent c57db8b commit bdb7f4c

3 files changed

Lines changed: 112 additions & 16 deletions

File tree

Lines changed: 76 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,84 @@
11
using System;
2-
using System.Collections.Generic;
3-
using System.Linq;
4-
using System.Text;
2+
using System.Diagnostics;
53
using System.Threading.Tasks;
4+
using OpenStack.Compute.v2_1;
5+
using Xunit;
6+
using Xunit.Abstractions;
67

78
namespace OpenStack.Networking.v2.Layer3
89
{
9-
public class Layer3ExtensionTests
10+
public class Layer3ExtensionTests : IDisposable
1011
{
11-
/*
12-
1. Make an internal network and subnet.
13-
2. Make an external network and submit.
14-
3. Make a router on the external network.
15-
4. Attach the router to the internal network.
16-
5. Make a floating ip on the external network.
17-
6. Make a server on the internal network.
18-
7. Associate the floating ip to the server.
19-
*/
12+
private readonly NetworkingService _networkingService;
13+
private readonly NetworkingTestDataManager _testData;
14+
private readonly ComputeTestDataManager _computeTestData;
15+
16+
public Layer3ExtensionTests(ITestOutputHelper testLog)
17+
{
18+
var testOutput = new XunitTraceListener(testLog);
19+
Trace.Listeners.Add(testOutput);
20+
OpenStackNet.Tracing.Http.Listeners.Add(testOutput);
21+
22+
// The operator identity is necessary to create external networks
23+
var authenticationProvider = TestIdentityProvider.GetOperatorIdentity();
24+
_networkingService = new NetworkingService(authenticationProvider, "RegionOne");
25+
26+
_testData = new NetworkingTestDataManager(_networkingService);
27+
var compute = new ComputeService(authenticationProvider, "RegionOne");
28+
_computeTestData = new ComputeTestDataManager(compute);
29+
}
30+
31+
public void Dispose()
32+
{
33+
_computeTestData.Dispose();
34+
_testData.Dispose();
35+
36+
Trace.Listeners.Clear();
37+
OpenStackNet.Tracing.Http.Listeners.Clear();
38+
}
39+
40+
[Fact]
41+
public async Task AssignFloatingIP()
42+
{
43+
// 1. Make an internal network and subnet.
44+
var internalNetwork = await _testData.CreateNetwork();
45+
var internalSubnet = await _testData.CreateSubnet(internalNetwork);
46+
47+
// 2. Make an external network and subnet.
48+
Operator.NetworkDefinition externalNetworkDefinition = _testData.BuildNetwork();
49+
externalNetworkDefinition.IsExternal = true;
50+
var externalNetwork = await _testData.CreateNetwork(externalNetworkDefinition);
51+
var externalSubnet = await _testData.CreateSubnet(externalNetwork);
52+
53+
// 3. Make a router on the external network.
54+
var routerDefinition = new RouterCreateDefinition
55+
{
56+
Name = TestData.GenerateName(),
57+
ExternalGateway = new ExternalGatewayDefinition(externalNetwork.Id)
58+
};
59+
var router = await _networkingService.CreateRouterAsync(routerDefinition);
60+
_testData.Register(router);
61+
62+
// 4. Attach the router to the internal network.
63+
var internalPortId = await router.AttachSubnetAsync(internalSubnet.Id);
64+
_testData.Register(new Port {Id = internalPortId});
65+
66+
// 5. Make a floating ip on the external network.
67+
var floatingIPDefinition = new FloatingIPCreateDefinition(externalNetwork.Id);
68+
var floatingIP = await _networkingService.CreateFloatingIPAsync(floatingIPDefinition);
69+
_testData.Register(floatingIP);
70+
71+
// 6. Make a server on the internal network.
72+
var serverDefinition = _computeTestData.BuildServer();
73+
serverDefinition.Networks.Add(new ServerNetworkDefinition {NetworkId = internalNetwork.Id });
74+
var server = await _computeTestData.CreateServer(serverDefinition);
75+
await server.WaitUntilActiveAsync();
76+
77+
// 7.Associate the floating ip to the server.
78+
await server.AssociateFloatingIPAsync(new AssociateFloatingIPRequest(floatingIP.FloatingIPAddress));
79+
80+
// 8. Disassociate the floating ip from the server
81+
await server.DisassociateFloatingIPAsync(floatingIP.FloatingIPAddress);
82+
}
2083
}
2184
}

src/testing/integration/Networking/v2/NetworkingTestDataManager.cs

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using System.Linq;
44
using System.Threading.Tasks;
5+
using OpenStack.Networking.v2.Layer3;
56

67
namespace OpenStack.Networking.v2
78
{
@@ -32,6 +33,19 @@ public void Register(object testItem)
3233
public void Dispose()
3334
{
3435
var errors = new List<Exception>();
36+
37+
try
38+
{
39+
DeleteFloatingIPs(_testData.OfType<FloatingIP>());
40+
}
41+
catch (AggregateException ex) { errors.AddRange(ex.InnerExceptions); }
42+
43+
try
44+
{
45+
DeleteRouters(_testData.OfType<Router>());
46+
}
47+
catch (AggregateException ex) { errors.AddRange(ex.InnerExceptions); }
48+
3549
try
3650
{
3751
DeletePorts(_testData.OfType<Port>());
@@ -55,9 +69,9 @@ public void Dispose()
5569
}
5670

5771
#region Networks
58-
public NetworkDefinition BuildNetwork()
72+
public Operator.NetworkDefinition BuildNetwork()
5973
{
60-
return new NetworkDefinition
74+
return new Operator.NetworkDefinition
6175
{
6276
Name = TestData.GenerateName()
6377
};
@@ -101,7 +115,7 @@ public void DeleteNetworks(IEnumerable<Network> networks)
101115

102116
public SubnetCreateDefinition BuildSubnet(Network network)
103117
{
104-
var cidr = string.Format("192.168.{0}.0/24", _subnetCounter++);
118+
var cidr = $"192.168.{_subnetCounter++}.0/24";
105119
return new SubnetCreateDefinition(network.Id, IPVersion.IPv4, cidr)
106120
{
107121
Name = TestData.GenerateName()
@@ -182,5 +196,23 @@ public void DeletePorts(IEnumerable<Port> ports)
182196
Task.WaitAll(deletes);
183197
}
184198
#endregion
199+
200+
#region Routers
201+
202+
public void DeleteRouters(IEnumerable<Router> routers)
203+
{
204+
Task[] deletes = routers.Select(x => _networkingService.DeleteRouterAsync(x.Id)).ToArray();
205+
Task.WaitAll(deletes);
206+
}
207+
#endregion
208+
209+
#region Floating IPs
210+
211+
public void DeleteFloatingIPs(IEnumerable<FloatingIP> floatingIPs)
212+
{
213+
Task[] deletes = floatingIPs.Select(x => _networkingService.DeleteFloatingIPAsync(x.Id)).ToArray();
214+
Task.WaitAll(deletes);
215+
}
216+
#endregion
185217
}
186218
}

src/testing/integration/OpenStack.IntegrationTests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@
121121
<Compile Include="ContentDeliveryNetworks\v1\ContentDeliveryNetworkServiceTests.cs" />
122122
<Compile Include="ContentDeliveryNetworks\v1\ServiceTests.cs" />
123123
<Compile Include="Identity\v2\IdentityTests.cs" />
124+
<Compile Include="Networking\v2\Layer3\Layer3ExtensionTests.cs" />
124125
<Compile Include="Networking\v2\NetworkingTestDataManager.cs" />
125126
<Compile Include="Networking\v2\NetworkingServiceTests.cs" />
126127
<Compile Include="Properties\AssemblyInfo.cs" />

0 commit comments

Comments
 (0)