Skip to content

Commit dbe3fe2

Browse files
committed
Network-refactor: interaction between firewall manager and network manager changed, verify this works as expected
Signed-off-by: Chiradeep Vittal <chiradeep@apache.org>
1 parent 728db6c commit dbe3fe2

2 files changed

Lines changed: 90 additions & 3 deletions

File tree

server/test/com/cloud/network/NetworkManagerTest.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,6 @@
2525

2626
import com.cloud.network.element.DhcpServiceProvider;
2727
import com.cloud.network.element.IpDeployer;
28-
import com.cloud.network.firewall.FirewallManagerImpl;
29-
import com.cloud.network.firewall.FirewallManagerTest;
30-
import com.cloud.network.rules.FirewallManager;
3128
import com.cloud.utils.component.ComponentLocator;
3229
import com.cloud.utils.testcase.ComponentSetup;
3330
import com.cloud.utils.testcase.ComponentTestCase;

server/test/com/cloud/network/firewall/FirewallManagerTest.java

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,38 @@
1818
package com.cloud.network.firewall;
1919

2020

21+
import static org.mockito.Matchers.any;
22+
import static org.mockito.Matchers.anyBoolean;
23+
import static org.mockito.Mockito.mock;
24+
import static org.mockito.Mockito.verify;
25+
import static org.mockito.Mockito.when;
26+
27+
import java.util.ArrayList;
28+
import java.util.List;
29+
2130
import junit.framework.Assert;
2231

2332
import org.apache.log4j.Logger;
2433
import org.junit.Test;
2534

35+
import com.cloud.exception.ResourceUnavailableException;
36+
import com.cloud.network.Network;
37+
import com.cloud.network.NetworkManager;
38+
import com.cloud.network.NetworkRuleApplier;
2639
import com.cloud.network.element.FirewallServiceProvider;
2740
import com.cloud.network.element.NetworkACLServiceProvider;
2841
import com.cloud.network.element.PortForwardingServiceProvider;
2942
import com.cloud.network.element.StaticNatServiceProvider;
43+
import com.cloud.network.element.VirtualRouterElement;
44+
import com.cloud.network.element.VpcVirtualRouterElement;
3045
import com.cloud.network.rules.FirewallManager;
46+
import com.cloud.network.rules.FirewallRule;
47+
import com.cloud.network.rules.FirewallRule.Purpose;
48+
import com.cloud.network.rules.FirewallRuleVO;
49+
import com.cloud.utils.component.Adapter;
50+
import com.cloud.utils.component.Adapters;
3151
import com.cloud.utils.component.ComponentLocator;
52+
import com.cloud.utils.component.ComponentLocator.ComponentInfo;
3253
import com.cloud.utils.testcase.ComponentSetup;
3354
import com.cloud.utils.testcase.ComponentTestCase;
3455

@@ -63,5 +84,74 @@ public void testInjected() {
6384
s_logger.info("Done testing injection of service elements into firewall manager");
6485

6586
}
87+
88+
@Test
89+
public void testApplyRules() {
90+
List<FirewallRuleVO> ruleList = new ArrayList<FirewallRuleVO>();
91+
FirewallRuleVO rule =
92+
new FirewallRuleVO("rule1", 1, 80, "TCP", 1, 2, 1,
93+
FirewallRule.Purpose.Firewall, null, null, null, null);
94+
ruleList.add(rule);
95+
FirewallManagerImpl firewallMgr = (FirewallManagerImpl)ComponentLocator.getCurrentLocator().getManager(FirewallManager.class);
96+
97+
NetworkManager netMgr = mock(NetworkManager.class);
98+
firewallMgr._networkMgr = netMgr;
99+
100+
try {
101+
firewallMgr.applyRules(ruleList, false, false);
102+
verify(netMgr)
103+
.applyRules(any(List.class),
104+
any(FirewallRule.Purpose.class),
105+
any(NetworkRuleApplier.class),
106+
anyBoolean());
107+
108+
} catch (ResourceUnavailableException e) {
109+
Assert.fail("Unreachable code");
110+
}
111+
}
112+
113+
@Test
114+
public void testApplyFWRules() {
115+
List<FirewallRuleVO> ruleList = new ArrayList<FirewallRuleVO>();
116+
FirewallRuleVO rule =
117+
new FirewallRuleVO("rule1", 1, 80, "TCP", 1, 2, 1,
118+
FirewallRule.Purpose.Firewall, null, null, null, null);
119+
ruleList.add(rule);
120+
FirewallManagerImpl firewallMgr = (FirewallManagerImpl)ComponentLocator.getCurrentLocator().getManager(FirewallManager.class);
121+
VirtualRouterElement virtualRouter =
122+
mock(VirtualRouterElement.class);
123+
VpcVirtualRouterElement vpcVirtualRouter =
124+
mock(VpcVirtualRouterElement.class);
125+
ComponentInfo<Adapter> c1 =
126+
new ComponentInfo<Adapter>("VirtualRouter",
127+
VirtualRouterElement.class, virtualRouter);
128+
ComponentInfo<Adapter> c2 =
129+
new ComponentInfo<Adapter>("VpcVirtualRouter",
130+
VpcVirtualRouterElement.class, vpcVirtualRouter);
131+
List<ComponentInfo<Adapter>> adapters =
132+
new ArrayList<ComponentLocator.ComponentInfo<Adapter>>();
133+
adapters.add(c1);
134+
adapters.add(c2);
135+
Adapters<FirewallServiceProvider> fwElements =
136+
new Adapters<FirewallServiceProvider>("firewalElements", adapters);
137+
firewallMgr._firewallElements = fwElements;
138+
139+
try {
140+
when(
141+
virtualRouter.applyFWRules(any(Network.class), any(List.class))
142+
).thenReturn(false);
143+
when(
144+
vpcVirtualRouter.applyFWRules(any(Network.class), any(List.class))
145+
).thenReturn(true);
146+
//Network network, Purpose purpose, List<? extends FirewallRule> rules
147+
firewallMgr.applyRules(mock(Network.class), Purpose.Firewall, ruleList);
148+
verify(vpcVirtualRouter).applyFWRules(any(Network.class), any(List.class));
149+
verify(virtualRouter).applyFWRules(any(Network.class), any(List.class));
150+
151+
152+
} catch (ResourceUnavailableException e) {
153+
Assert.fail("Unreachable code");
154+
}
155+
}
66156

67157
}

0 commit comments

Comments
 (0)