Update .gitreview for new repo
[netvirt.git] / openstack / net-virt / src / test / java / org / opendaylight / netvirt / openstack / netvirt / impl / SecurityGroupCacheManagerImplTest.java
1 /*
2  * Copyright (c) 2015, 2016 Hewlett-Packard Enterprise and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.netvirt.openstack.netvirt.impl;
9
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;
16
17 import java.util.ArrayList;
18 import java.util.List;
19
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;
33
34 /**
35  * Unit test fort {@link SecurityGroupCacheManagerImpl}
36  */
37 @RunWith(MockitoJUnitRunner.class)
38 public class SecurityGroupCacheManagerImplTest {
39
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;
60
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<>();
74
75     @Before
76     public void setUp() throws Exception {
77
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);
90
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);
96
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);
121     }
122
123     /**
124      * Remote Cache is empty a new port is added.
125      */
126     @Test
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());
130     }
131
132     /**
133      * Remote Cache is empty a new port is removed.
134      */
135     @Test
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());
140     }
141
142     /**
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.
145      */
146     @Test
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));
153     }
154
155     /**
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.
158      */
159     @Test
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));
165     }
166
167     /**
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.
171      */
172     @Test
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));
177     }
178
179     /**
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..
183      */
184     @Test
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));
189     }
190
191     /**
192      *  A port is removed from the cache.
193      */
194     @Test
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());
200     }
201 }