2 * Copyright (c) 2015, 2016 Hewlett-Packard Enterprise and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.netvirt.openstack.netvirt.impl;
10 import static org.mockito.Matchers.eq;
11 import static org.mockito.Mockito.times;
12 import static org.mockito.Mockito.verify;
13 import static org.mockito.Mockito.when;
14 import static org.mockito.Matchers.any;
15 import static org.mockito.Matchers.anyBoolean;
17 import java.util.ArrayList;
18 import java.util.List;
20 import org.junit.Before;
21 import org.junit.Test;
22 import org.junit.runner.RunWith;
23 import org.mockito.InjectMocks;
24 import org.mockito.Mock;
25 import org.mockito.runners.MockitoJUnitRunner;
26 import org.opendaylight.netvirt.openstack.netvirt.api.SecurityServicesManager;
27 import org.opendaylight.netvirt.openstack.netvirt.translator.NeutronPort;
28 import org.opendaylight.netvirt.openstack.netvirt.translator.NeutronSecurityGroup;
29 import org.opendaylight.netvirt.openstack.netvirt.translator.NeutronSecurityRule;
30 import org.opendaylight.netvirt.openstack.netvirt.translator.Neutron_IPs;
31 import org.opendaylight.netvirt.openstack.netvirt.translator.crud.INeutronPortCRUD;
32 import org.opendaylight.netvirt.openstack.netvirt.translator.crud.INeutronSecurityGroupCRUD;
35 * Unit test fort {@link SecurityGroupCacheManagerImpl}
37 @RunWith(MockitoJUnitRunner.class)
38 public class SecurityGroupCacheManagerImplTest {
40 @InjectMocks private SecurityGroupCacheManagerImpl securityGroupCacheManagerImpl;
41 @Mock private INeutronPortCRUD neutronPortCache;
42 @Mock private INeutronSecurityGroupCRUD securityGroupCache;
43 @Mock NeutronPort neutronPort_Vm1;
44 @Mock NeutronPort neutronPort_Vm2;
45 @Mock NeutronPort neutronPort_Vm3;
46 @Mock NeutronPort neutronPort_Vm4;
47 @Mock NeutronPort neutronPort_Vm5;
48 @Mock SecurityServicesManager securityServicesManager;
49 @Mock NeutronSecurityGroup neutronSecurityGroup_1;
50 @Mock NeutronSecurityGroup neutronSecurityGroup_2;
51 @Mock NeutronSecurityGroup neutronSecurityGroup_3;
52 @Mock NeutronSecurityRule neutronSecurityRule_1;
53 @Mock NeutronSecurityRule neutronSecurityRule_2;
54 @Mock NeutronSecurityRule neutronSecurityRule_3;
55 @Mock Neutron_IPs neutron_ip_1;
56 @Mock Neutron_IPs neutron_ip_2;
57 @Mock Neutron_IPs neutron_ip_3;
58 @Mock Neutron_IPs neutron_ip_4;
59 @Mock Neutron_IPs neutron_ip_5;
61 private static final String NEUTRON_PORT_ID_VM_1 = "neutronID_VM_1";
62 private static final String NEUTRON_PORT_ID_VM_2 = "neutronID_VM_2";
63 private static final String NEUTRON_PORT_ID_VM_3 = "neutronID_VM_3";
64 private static final String NEUTRON_PORT_ID_VM_4 = "neutronID_VM_4";
65 private static final String NEUTRON_PORT_ID_VM_5 = "neutronID_VM_5";
66 private static final String SECURITY_GROUP_ID_1 = "securityGroupId_1";
67 private static final String SECURITY_GROUP_ID_2 = "securityGroupId_2";
68 private static final String SECURITY_GROUP_ID_3 = "securityGroupId_3";
69 private static final List<Neutron_IPs> neutron_IPs_1 = new ArrayList<>();
70 private static final List<Neutron_IPs> neutron_IPs_2 = new ArrayList<>();
71 private static final List<Neutron_IPs> neutron_IPs_3 = new ArrayList<>();
72 private static final List<Neutron_IPs> neutron_IPs_4 = new ArrayList<>();
73 private static final List<Neutron_IPs> neutron_IPs_5 = new ArrayList<>();
76 public void setUp() throws Exception {
78 List<NeutronSecurityGroup> securityGroups_Vm_1 = new ArrayList<>();
79 securityGroups_Vm_1.add(neutronSecurityGroup_1);
80 List<NeutronSecurityGroup> securityGroups_Vm_2 = new ArrayList<>();
81 securityGroups_Vm_2.add(neutronSecurityGroup_2);
82 List<NeutronSecurityGroup> securityGroups_Vm_3 = new ArrayList<>();
83 securityGroups_Vm_3.add(neutronSecurityGroup_3);
84 List<NeutronSecurityRule> securityRule_1 = new ArrayList<>();
85 securityRule_1.add(neutronSecurityRule_1);
86 List<NeutronSecurityRule> securityRule_2 = new ArrayList<>();
87 securityRule_2.add(neutronSecurityRule_2);
88 List<NeutronSecurityRule> securityRule_3 = new ArrayList<>();
89 securityRule_3.add(neutronSecurityRule_3);
91 neutron_IPs_1.add(neutron_ip_1);
92 neutron_IPs_2.add(neutron_ip_2);
93 neutron_IPs_3.add(neutron_ip_3);
94 neutron_IPs_4.add(neutron_ip_4);
95 neutron_IPs_5.add(neutron_ip_5);
97 when(neutronPort_Vm1.getID()).thenReturn(NEUTRON_PORT_ID_VM_1);
98 when(neutronPort_Vm2.getID()).thenReturn(NEUTRON_PORT_ID_VM_2);
99 when(neutronPort_Vm3.getID()).thenReturn(NEUTRON_PORT_ID_VM_3);
100 when(neutronPort_Vm4.getID()).thenReturn(NEUTRON_PORT_ID_VM_4);
101 when(neutronPort_Vm5.getID()).thenReturn(NEUTRON_PORT_ID_VM_5);
102 when(neutronPort_Vm1.getSecurityGroups()).thenReturn(securityGroups_Vm_1);
103 when(neutronPort_Vm2.getSecurityGroups()).thenReturn(securityGroups_Vm_1);
104 when(neutronPort_Vm3.getSecurityGroups()).thenReturn(securityGroups_Vm_3);
105 when(neutronPort_Vm4.getSecurityGroups()).thenReturn(securityGroups_Vm_1);
106 when(neutronPort_Vm5.getSecurityGroups()).thenReturn(securityGroups_Vm_3);
107 when(neutronSecurityGroup_1.getSecurityRules()).thenReturn(securityRule_1);
108 when(neutronSecurityGroup_2.getSecurityRules()).thenReturn(securityRule_2);
109 when(neutronSecurityGroup_3.getSecurityRules()).thenReturn(securityRule_3);
110 when(neutronSecurityGroup_1.getSecurityGroupUUID()).thenReturn(SECURITY_GROUP_ID_1);
111 when(neutronSecurityGroup_2.getSecurityGroupUUID()).thenReturn(SECURITY_GROUP_ID_2);
112 when(neutronSecurityGroup_3.getSecurityGroupUUID()).thenReturn(SECURITY_GROUP_ID_3);
113 when(neutronSecurityRule_1.getSecurityRemoteGroupID()).thenReturn(SECURITY_GROUP_ID_1);
114 when(neutronSecurityRule_3.getSecurityRemoteGroupID()).thenReturn(SECURITY_GROUP_ID_2);
115 when(neutronPort_Vm1.getFixedIPs()).thenReturn(neutron_IPs_1);
116 when(neutronPort_Vm2.getFixedIPs()).thenReturn(neutron_IPs_2);
117 when(neutronPort_Vm3.getFixedIPs()).thenReturn(neutron_IPs_3);
118 when(neutronPortCache.getPort(eq(NEUTRON_PORT_ID_VM_1))).thenReturn(neutronPort_Vm1);
119 when(neutronPortCache.getPort(eq(NEUTRON_PORT_ID_VM_2))).thenReturn(neutronPort_Vm2);
120 when(neutronPortCache.getPort(eq(NEUTRON_PORT_ID_VM_3))).thenReturn(neutronPort_Vm3);
124 * Remote Cache is empty a new port is added.
127 public void testPortAddedWithNoRemoteSGInCache() {
128 securityGroupCacheManagerImpl.portAdded(SECURITY_GROUP_ID_1, NEUTRON_PORT_ID_VM_1);
129 verify(securityServicesManager, times(0)).syncSecurityRule(any(NeutronPort.class), any(NeutronSecurityRule.class), any(Neutron_IPs.class),anyBoolean());
133 * Remote Cache is empty a new port is removed.
136 public void testPortRemovedWithNoRemoteSGInCache() {
137 securityGroupCacheManagerImpl.addToCache(SECURITY_GROUP_ID_1, NEUTRON_PORT_ID_VM_1);
138 securityGroupCacheManagerImpl.portRemoved(SECURITY_GROUP_ID_1, NEUTRON_PORT_ID_VM_1);
139 verify(securityServicesManager, times(0)).syncSecurityRule(any(NeutronPort.class), any(NeutronSecurityRule.class), any(Neutron_IPs.class),anyBoolean());
143 * neutronSecurityGroup_1 has a rule which has neutronSecurityGroup_1 as remote SG.
144 * A port with neutronSecurityGroup_1 is present in cache and new one is added.
147 public void testPortAddedWithSelfInCache() {
148 securityGroupCacheManagerImpl.addToCache(SECURITY_GROUP_ID_1, NEUTRON_PORT_ID_VM_1);
149 securityGroupCacheManagerImpl.portAdded(SECURITY_GROUP_ID_1, NEUTRON_PORT_ID_VM_1);
150 securityGroupCacheManagerImpl.addToCache(SECURITY_GROUP_ID_1, NEUTRON_PORT_ID_VM_2);
151 securityGroupCacheManagerImpl.portAdded(SECURITY_GROUP_ID_1, NEUTRON_PORT_ID_VM_2);
152 verify(securityServicesManager, times(1)).syncSecurityRule(eq(neutronPort_Vm1), eq(neutronSecurityRule_1), eq(neutron_ip_2),eq(true));
156 * neutronSecurityGroup_1 has a rule which has neutronSecurityGroup_1 as remote SG.
157 * Two port with neutronSecurityGroup_1 is present in cache and one of them is removed.
160 public void testPortRemovedWithSelfInCache() {
161 securityGroupCacheManagerImpl.addToCache(SECURITY_GROUP_ID_1, NEUTRON_PORT_ID_VM_1);
162 securityGroupCacheManagerImpl.addToCache(SECURITY_GROUP_ID_1, NEUTRON_PORT_ID_VM_2);
163 securityGroupCacheManagerImpl.portRemoved(SECURITY_GROUP_ID_1, NEUTRON_PORT_ID_VM_2);
164 verify(securityServicesManager, times(1)).syncSecurityRule(eq(neutronPort_Vm1), eq(neutronSecurityRule_1), eq(neutron_ip_2),eq(false));
168 * neutronSecurityGroup_3 has a rule which has neutronSecurityGroup_2 as remote SG.
169 * A port with neutronSecurityGroup_3 is present in cache. A new port is added with
170 * neutronSecurityGroup_2 as security group.
173 public void testPortAddedWithCidrInCache() {
174 securityGroupCacheManagerImpl.addToCache(SECURITY_GROUP_ID_2, NEUTRON_PORT_ID_VM_3);
175 securityGroupCacheManagerImpl.portAdded(SECURITY_GROUP_ID_2, NEUTRON_PORT_ID_VM_2);
176 verify(securityServicesManager, times(1)).syncSecurityRule(eq(neutronPort_Vm3), eq(neutronSecurityRule_3), eq(neutron_ip_2),eq(true));
180 * neutronSecurityGroup_3 has a rule which has neutronSecurityGroup_2 as remote SG.
181 * A port with neutronSecurityGroup_3 is present in cache. A port with
182 * neutronSecurityGroup_2 as security group is removed..
185 public void testPortRemovedWithCidrInCache() {
186 securityGroupCacheManagerImpl.addToCache(SECURITY_GROUP_ID_2, NEUTRON_PORT_ID_VM_3);
187 securityGroupCacheManagerImpl.portRemoved(SECURITY_GROUP_ID_2, NEUTRON_PORT_ID_VM_2);
188 verify(securityServicesManager, times(1)).syncSecurityRule(eq(neutronPort_Vm3), eq(neutronSecurityRule_3), eq(neutron_ip_2),eq(false));
192 * A port is removed from the cache.
195 public void testPortRemovedFromCache() {
196 securityGroupCacheManagerImpl.addToCache(SECURITY_GROUP_ID_2, NEUTRON_PORT_ID_VM_3);
197 securityGroupCacheManagerImpl.removeFromCache(SECURITY_GROUP_ID_2, NEUTRON_PORT_ID_VM_3);
198 securityGroupCacheManagerImpl.portRemoved(SECURITY_GROUP_ID_2, NEUTRON_PORT_ID_VM_2);
199 verify(securityServicesManager, times(0)).syncSecurityRule(any(NeutronPort.class), any(NeutronSecurityRule.class), any(Neutron_IPs.class),anyBoolean());