11using System ;
2- using System . Collections . Generic ;
3- using System . Linq ;
4- using System . Text ;
2+ using System . Diagnostics ;
53using System . Threading . Tasks ;
4+ using OpenStack . Compute . v2_1 ;
5+ using Xunit ;
6+ using Xunit . Abstractions ;
67
78namespace 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}
0 commit comments