|
18 | 18 | package com.cloud.network.firewall; |
19 | 19 |
|
20 | 20 |
|
| 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 | + |
21 | 30 | import junit.framework.Assert; |
22 | 31 |
|
23 | 32 | import org.apache.log4j.Logger; |
24 | 33 | import org.junit.Test; |
25 | 34 |
|
| 35 | +import com.cloud.exception.ResourceUnavailableException; |
| 36 | +import com.cloud.network.Network; |
| 37 | +import com.cloud.network.NetworkManager; |
| 38 | +import com.cloud.network.NetworkRuleApplier; |
26 | 39 | import com.cloud.network.element.FirewallServiceProvider; |
27 | 40 | import com.cloud.network.element.NetworkACLServiceProvider; |
28 | 41 | import com.cloud.network.element.PortForwardingServiceProvider; |
29 | 42 | import com.cloud.network.element.StaticNatServiceProvider; |
| 43 | +import com.cloud.network.element.VirtualRouterElement; |
| 44 | +import com.cloud.network.element.VpcVirtualRouterElement; |
30 | 45 | 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; |
31 | 51 | import com.cloud.utils.component.ComponentLocator; |
| 52 | +import com.cloud.utils.component.ComponentLocator.ComponentInfo; |
32 | 53 | import com.cloud.utils.testcase.ComponentSetup; |
33 | 54 | import com.cloud.utils.testcase.ComponentTestCase; |
34 | 55 |
|
@@ -63,5 +84,74 @@ public void testInjected() { |
63 | 84 | s_logger.info("Done testing injection of service elements into firewall manager"); |
64 | 85 |
|
65 | 86 | } |
| 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 | + } |
66 | 156 |
|
67 | 157 | } |
0 commit comments