You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by da...@apache.org on 2013/12/12 15:10:43 UTC
git commit: updated refs/heads/master to 7833dd5
Updated Branches:
refs/heads/master fa38a7a40 -> 7833dd592
JUnit test for NetworkACLManagerImpl#applyNetworkACL
Signed-off-by: Daan Hoogland <dh...@schubergphilis.com>
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/7833dd59
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/7833dd59
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/7833dd59
Branch: refs/heads/master
Commit: 7833dd592c0b42a01a93a3340fafae9aabb1c161
Parents: fa38a7a
Author: Antonio Fornie <af...@schubergphilis.com>
Authored: Thu Dec 12 14:38:28 2013 +0100
Committer: Daan Hoogland <dh...@schubergphilis.com>
Committed: Thu Dec 12 15:01:51 2013 +0100
----------------------------------------------------------------------
.../com/cloud/vpc/NetworkACLManagerTest.java | 98 +++++++++++++++++++-
1 file changed, 93 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7833dd59/server/test/com/cloud/vpc/NetworkACLManagerTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/vpc/NetworkACLManagerTest.java b/server/test/com/cloud/vpc/NetworkACLManagerTest.java
index 303da59..54f5f78 100644
--- a/server/test/com/cloud/vpc/NetworkACLManagerTest.java
+++ b/server/test/com/cloud/vpc/NetworkACLManagerTest.java
@@ -22,10 +22,8 @@ import java.util.UUID;
import javax.inject.Inject;
-import com.cloud.network.vpc.*;
import junit.framework.TestCase;
-import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -63,6 +61,17 @@ import com.cloud.user.UserVO;
import com.cloud.utils.component.ComponentContext;
import com.cloud.utils.db.EntityManager;
import com.cloud.utils.exception.CloudRuntimeException;
+import com.cloud.network.vpc.NetworkACLManager;
+import com.cloud.network.vpc.VpcManager;
+import com.cloud.network.vpc.VpcService;
+import com.cloud.network.vpc.NetworkACLVO;
+import com.cloud.network.vpc.NetworkACLItemVO;
+import com.cloud.network.vpc.VpcGatewayVO;
+import com.cloud.network.vpc.PrivateGateway;
+import com.cloud.network.vpc.NetworkACLManagerImpl;
+import com.cloud.network.vpc.NetworkACLItemDao;
+import com.cloud.network.vpc.NetworkACLItem;
+import com.cloud.network.vpc.VpcGateway;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = AnnotationConfigContextLoader.class)
@@ -89,13 +98,13 @@ public class NetworkACLManagerTest extends TestCase {
@Inject
List<NetworkACLServiceProvider> _networkAclElements;
@Inject
- VpcService _vpcSrv;
+ VpcService _vpcSvc;
+ @Inject
+ VpcGatewayDao _vpcGatewayDao;
private NetworkACLVO acl;
private NetworkACLItemVO aclItem;
- private static final Logger s_logger = Logger.getLogger(NetworkACLManagerTest.class);
-
@Override
@Before
public void setUp() {
@@ -121,6 +130,7 @@ public class NetworkACLManagerTest extends TestCase {
}
@Test
+ @SuppressWarnings("unchecked")
public void testApplyACL() throws Exception {
NetworkVO network = Mockito.mock(NetworkVO.class);
Mockito.when(_networkDao.findById(Matchers.anyLong())).thenReturn(network);
@@ -131,6 +141,84 @@ public class NetworkACLManagerTest extends TestCase {
}
@Test
+ public void testApplyNetworkACL() throws Exception {
+ driveTestApplyNetworkACL(true, true, true);
+ driveTestApplyNetworkACL(false, false, true);
+ driveTestApplyNetworkACL(false, true, false);
+ }
+
+ @SuppressWarnings("unchecked")
+ public void driveTestApplyNetworkACL(boolean result, boolean applyNetworkACLs, boolean applyACLToPrivateGw) throws Exception {
+ // In order to test ONLY our scope method, we mock the others
+ NetworkACLManager aclManager = Mockito.spy(_aclMgr);
+
+ // Prepare
+ // Reset mocked objects to reuse
+ Mockito.reset(_networkACLItemDao);
+
+ // Make sure it is handled
+ long aclId = 1L;
+ NetworkVO network = Mockito.mock(NetworkVO.class);
+ List<NetworkVO> networks = new ArrayList<NetworkVO>();
+ networks.add(network);
+ Mockito.when(_networkDao.listByAclId(Matchers.anyLong()))
+ .thenReturn(networks);
+ Mockito.when(_networkDao.findById(Matchers.anyLong())).thenReturn(network);
+ Mockito.when(_networkModel.isProviderSupportServiceInNetwork(Matchers.anyLong(),
+ Matchers.any(Network.Service.class), Matchers.any(Network.Provider.class)))
+ .thenReturn(true);
+ Mockito.when(_networkAclElements.get(0).applyNetworkACLs(Matchers.any(Network.class),
+ Matchers.anyList())).thenReturn(applyNetworkACLs);
+
+ // Make sure it applies ACL to private gateway
+ List<VpcGatewayVO> vpcGateways = new ArrayList<VpcGatewayVO>();
+ VpcGatewayVO vpcGateway = Mockito.mock(VpcGatewayVO.class);
+ PrivateGateway privateGateway = Mockito.mock(PrivateGateway.class);
+ Mockito.when(_vpcSvc.getVpcPrivateGateway(Mockito.anyLong())).thenReturn(privateGateway);
+ vpcGateways.add(vpcGateway);
+ Mockito.when(_vpcGatewayDao.listByAclIdAndType(aclId, VpcGateway.Type.Private))
+ .thenReturn(vpcGateways);
+
+ // Create 4 rules to test all 4 scenarios: only revoke should
+ // be deleted, only add should update
+ List<NetworkACLItemVO> rules = new ArrayList<NetworkACLItemVO>();
+ NetworkACLItemVO ruleActive = Mockito.mock(NetworkACLItemVO.class);
+ NetworkACLItemVO ruleStaged = Mockito.mock(NetworkACLItemVO.class);
+ NetworkACLItemVO rule2Revoke = Mockito.mock(NetworkACLItemVO.class);
+ NetworkACLItemVO rule2Add = Mockito.mock(NetworkACLItemVO.class);
+ Mockito.when(ruleActive.getState()).thenReturn(NetworkACLItem.State.Active);
+ Mockito.when(ruleStaged.getState()).thenReturn(NetworkACLItem.State.Staged);
+ Mockito.when(rule2Add.getState()).thenReturn(NetworkACLItem.State.Add);
+ Mockito.when(rule2Revoke.getState()).thenReturn(NetworkACLItem.State.Revoke);
+ rules.add(ruleActive);
+ rules.add(ruleStaged);
+ rules.add(rule2Add);
+ rules.add(rule2Revoke);
+
+ long revokeId = 8;
+ Mockito.when(rule2Revoke.getId()).thenReturn(revokeId);
+
+ long addId = 9;
+ Mockito.when(rule2Add.getId()).thenReturn(addId);
+ Mockito.when(_networkACLItemDao.findById(addId)).thenReturn(rule2Add);
+
+ Mockito.when(_networkACLItemDao.listByACL(aclId))
+ .thenReturn(rules);
+ // Mock methods to avoid
+ Mockito.doReturn(applyACLToPrivateGw).when(aclManager).applyACLToPrivateGw(privateGateway);
+
+ // Execute
+ assertEquals("Result was not congruent with applyNetworkACLs and applyACLToPrivateGw", result, aclManager.applyNetworkACL(aclId));
+
+ // Assert if conditions met, network ACL was applied
+ int timesProcessingDone = (applyNetworkACLs && applyACLToPrivateGw) ? 1 : 0;
+ Mockito.verify(_networkACLItemDao, Mockito.times(timesProcessingDone)).remove(revokeId);
+ Mockito.verify(rule2Add, Mockito.times(timesProcessingDone)).setState(NetworkACLItem.State.Active);
+ Mockito.verify(_networkACLItemDao, Mockito.times(timesProcessingDone)).update(addId, rule2Add);
+ }
+
+
+ @Test
public void testRevokeACLItem() throws Exception {
Mockito.when(_networkACLItemDao.findById(Matchers.anyLong())).thenReturn(aclItem);
assertTrue(_aclMgr.revokeNetworkACLItem(1L));