Merge "Split resolved-policy to provided and consumed"
[groupbasedpolicy.git] / neutron-mapper / src / test / java / org / opendaylight / groupbasedpolicy / neutron / mapper / mapping / rule / SecRuleDaoTest.java
1 package org.opendaylight.groupbasedpolicy.neutron.mapper.mapping.rule;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertNotNull;
5 import static org.junit.Assert.assertTrue;
6
7 import java.util.Set;
8
9 import org.junit.Before;
10 import org.junit.Rule;
11 import org.junit.Test;
12 import org.junit.rules.ExpectedException;
13 import org.opendaylight.groupbasedpolicy.neutron.mapper.test.NeutronEntityFactory;
14 import org.opendaylight.neutron.spi.NeutronSecurityRule;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId;
16
17 public class SecRuleDaoTest {
18
19     @Rule
20     public ExpectedException thrown = ExpectedException.none();
21
22     private SecRuleDao secRuleDao;
23
24     @Before
25     public void setUp() throws Exception {
26         secRuleDao = new SecRuleDao();
27     }
28
29     @Test
30     public void testAddAndRemoveSecRule() {
31         final String xSecGrpId = "cccccccc-cccc-cccc-cccc-cccccccccccc";
32         final String ySecGrpId = "dddddddd-dddd-dddd-dddd-dddddddddddd";
33         final String nullSecGrpId = null;
34
35         EndpointGroupId xEpGrpId = new EndpointGroupId(xSecGrpId);
36         EndpointGroupId yEpGrpId = new EndpointGroupId(ySecGrpId);
37         EndpointGroupId nullEpGrpId = null;
38
39         NeutronSecurityRule secRule1 = NeutronEntityFactory.securityRuleWithGroupIds(
40                 "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1", "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", xSecGrpId, nullSecGrpId);
41
42         NeutronSecurityRule secRule2 = NeutronEntityFactory.securityRuleWithGroupIds(
43                 "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa2", "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", xSecGrpId, xSecGrpId);
44
45         NeutronSecurityRule secRule3 = NeutronEntityFactory.securityRuleWithGroupIds(
46                 "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa3", "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", xSecGrpId, ySecGrpId);
47
48         NeutronSecurityRule secRule4 = NeutronEntityFactory.securityRuleWithGroupIds(
49                 "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa4", "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", ySecGrpId, nullSecGrpId);
50
51         NeutronSecurityRule secRule5 = NeutronEntityFactory.securityRuleWithGroupIds(
52                 "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa5", "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", ySecGrpId, ySecGrpId);
53
54         NeutronSecurityRule secRule6 = NeutronEntityFactory.securityRuleWithGroupIds(
55                 "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa6", "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", ySecGrpId, xSecGrpId);
56
57         secRuleDao.addSecRule(secRule1);
58         assertSecRulesByOwnerSecGrpId(xEpGrpId, secRule1);
59         assertSecRulesWithoutRemoteSecGrpBySecGrpId(xEpGrpId, secRule1);
60         assertSecRulesBySecGrpIdAndRemoteSecGrpId(xEpGrpId, nullEpGrpId, secRule1);
61         assertAllOwnerSecGrps(xEpGrpId);
62
63         secRuleDao.addSecRule(secRule2);
64         assertSecRulesByOwnerSecGrpId(xEpGrpId, secRule1, secRule2);
65         assertSecRulesWithoutRemoteSecGrpBySecGrpId(xEpGrpId, secRule1);
66         assertSecRulesBySecGrpIdAndRemoteSecGrpId(xEpGrpId, nullEpGrpId, secRule1);
67         assertSecRulesBySecGrpIdAndRemoteSecGrpId(xEpGrpId, xEpGrpId, secRule2);
68         assertAllOwnerSecGrps(xEpGrpId);
69
70         secRuleDao.addSecRule(secRule3);
71         assertSecRulesByOwnerSecGrpId(xEpGrpId, secRule1, secRule2, secRule3);
72         assertSecRulesWithoutRemoteSecGrpBySecGrpId(xEpGrpId, secRule1);
73         assertSecRulesBySecGrpIdAndRemoteSecGrpId(xEpGrpId, nullEpGrpId, secRule1);
74         assertSecRulesBySecGrpIdAndRemoteSecGrpId(xEpGrpId, xEpGrpId, secRule2);
75         assertSecRulesBySecGrpIdAndRemoteSecGrpId(xEpGrpId, yEpGrpId, secRule3);
76         assertAllOwnerSecGrps(xEpGrpId);
77
78         secRuleDao.addSecRule(secRule4);
79         assertSecRulesByOwnerSecGrpId(yEpGrpId, secRule4);
80         assertSecRulesWithoutRemoteSecGrpBySecGrpId(yEpGrpId, secRule4);
81         assertSecRulesBySecGrpIdAndRemoteSecGrpId(yEpGrpId, nullEpGrpId, secRule4);
82         assertAllOwnerSecGrps(xEpGrpId, yEpGrpId);
83
84         secRuleDao.addSecRule(secRule5);
85         assertSecRulesByOwnerSecGrpId(yEpGrpId, secRule4, secRule5);
86         assertSecRulesWithoutRemoteSecGrpBySecGrpId(yEpGrpId, secRule4);
87         assertSecRulesBySecGrpIdAndRemoteSecGrpId(yEpGrpId, nullEpGrpId, secRule4);
88         assertSecRulesBySecGrpIdAndRemoteSecGrpId(yEpGrpId, yEpGrpId, secRule5);
89         assertAllOwnerSecGrps(xEpGrpId, yEpGrpId);
90
91         secRuleDao.addSecRule(secRule6);
92         assertSecRulesByOwnerSecGrpId(yEpGrpId, secRule4, secRule5, secRule6);
93         assertSecRulesWithoutRemoteSecGrpBySecGrpId(yEpGrpId, secRule4);
94         assertSecRulesBySecGrpIdAndRemoteSecGrpId(yEpGrpId, nullEpGrpId, secRule4);
95         assertSecRulesBySecGrpIdAndRemoteSecGrpId(yEpGrpId, yEpGrpId, secRule5);
96         assertSecRulesBySecGrpIdAndRemoteSecGrpId(yEpGrpId, xEpGrpId, secRule6);
97         assertAllOwnerSecGrps(xEpGrpId, yEpGrpId);
98
99         // check once more security rules with owner group id = xSecGrpId
100         assertSecRulesByOwnerSecGrpId(xEpGrpId, secRule1, secRule2, secRule3);
101         assertSecRulesWithoutRemoteSecGrpBySecGrpId(xEpGrpId, secRule1);
102         assertSecRulesBySecGrpIdAndRemoteSecGrpId(xEpGrpId, nullEpGrpId, secRule1);
103         assertSecRulesBySecGrpIdAndRemoteSecGrpId(xEpGrpId, xEpGrpId, secRule2);
104         assertSecRulesBySecGrpIdAndRemoteSecGrpId(xEpGrpId, yEpGrpId, secRule3);
105
106         secRuleDao.removeSecRule(secRule6);
107         assertSecRulesByOwnerSecGrpId(yEpGrpId, secRule4, secRule5);
108         assertSecRulesWithoutRemoteSecGrpBySecGrpId(yEpGrpId, secRule4);
109         assertSecRulesBySecGrpIdAndRemoteSecGrpId(yEpGrpId, nullEpGrpId, secRule4);
110         assertSecRulesBySecGrpIdAndRemoteSecGrpId(yEpGrpId, yEpGrpId, secRule5);
111         assertAllOwnerSecGrps(xEpGrpId, yEpGrpId);
112
113         secRuleDao.removeSecRule(secRule5);
114         assertSecRulesByOwnerSecGrpId(yEpGrpId, secRule4);
115         assertSecRulesWithoutRemoteSecGrpBySecGrpId(yEpGrpId, secRule4);
116         assertSecRulesBySecGrpIdAndRemoteSecGrpId(yEpGrpId, nullEpGrpId, secRule4);
117         assertAllOwnerSecGrps(xEpGrpId, yEpGrpId);
118
119         secRuleDao.removeSecRule(secRule4);
120
121         // check once more security rules with owner group id = xSecGrpId
122         assertSecRulesByOwnerSecGrpId(xEpGrpId, secRule1, secRule2, secRule3);
123         assertSecRulesWithoutRemoteSecGrpBySecGrpId(xEpGrpId, secRule1);
124         assertSecRulesBySecGrpIdAndRemoteSecGrpId(xEpGrpId, nullEpGrpId, secRule1);
125         assertSecRulesBySecGrpIdAndRemoteSecGrpId(xEpGrpId, xEpGrpId, secRule2);
126         assertSecRulesBySecGrpIdAndRemoteSecGrpId(xEpGrpId, yEpGrpId, secRule3);
127
128         secRuleDao.removeSecRule(secRule3);
129         assertSecRulesByOwnerSecGrpId(xEpGrpId, secRule1, secRule2);
130         assertSecRulesWithoutRemoteSecGrpBySecGrpId(xEpGrpId, secRule1);
131         assertSecRulesBySecGrpIdAndRemoteSecGrpId(xEpGrpId, nullEpGrpId, secRule1);
132         assertSecRulesBySecGrpIdAndRemoteSecGrpId(xEpGrpId, xEpGrpId, secRule2);
133         assertAllOwnerSecGrps(xEpGrpId);
134
135         secRuleDao.removeSecRule(secRule2);
136         assertSecRulesByOwnerSecGrpId(xEpGrpId, secRule1);
137         assertSecRulesWithoutRemoteSecGrpBySecGrpId(xEpGrpId, secRule1);
138         assertSecRulesBySecGrpIdAndRemoteSecGrpId(xEpGrpId, nullEpGrpId, secRule1);
139         assertAllOwnerSecGrps(xEpGrpId);
140
141         secRuleDao.removeSecRule(secRule1);
142         assertSecRulesByOwnerSecGrpId(xEpGrpId);
143         assertSecRulesWithoutRemoteSecGrpBySecGrpId(xEpGrpId);
144         assertSecRulesBySecGrpIdAndRemoteSecGrpId(xEpGrpId, nullEpGrpId);
145         assertSecRulesBySecGrpIdAndRemoteSecGrpId(xEpGrpId, xEpGrpId);
146         assertSecRulesBySecGrpIdAndRemoteSecGrpId(xEpGrpId, yEpGrpId);
147         assertSecRulesByOwnerSecGrpId(yEpGrpId);
148         assertSecRulesWithoutRemoteSecGrpBySecGrpId(yEpGrpId);
149         assertSecRulesBySecGrpIdAndRemoteSecGrpId(yEpGrpId, nullEpGrpId);
150         assertSecRulesBySecGrpIdAndRemoteSecGrpId(yEpGrpId, yEpGrpId);
151         assertSecRulesBySecGrpIdAndRemoteSecGrpId(yEpGrpId, xEpGrpId);
152         assertAllOwnerSecGrps();
153     }
154
155     @Test
156     public void testAddSecGroup_nullArgument() {
157         thrown.expect(NullPointerException.class);
158         secRuleDao.addSecRule(null);
159     }
160
161     @Test
162     public void testRemoveNonExistingSecRule() {
163         NeutronSecurityRule secRule = NeutronEntityFactory.securityRuleWithGroupIds(
164                 "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
165                 "cccccccc-cccc-cccc-cccc-cccccccccccc", "dddddddd-dddd-dddd-dddd-dddddddddddd");
166         secRuleDao.removeSecRule(secRule);
167     }
168
169     @Test
170     public void testRemoveNonExistingSecRule_remoteSecGroupIdIsNull() {
171         NeutronSecurityRule secRule = NeutronEntityFactory.securityRuleWithGroupIds(
172                 "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
173                 "cccccccc-cccc-cccc-cccc-cccccccccccc", null);
174         secRuleDao.removeSecRule(secRule);
175     }
176
177     private static void assertSecRules(Set<NeutronSecurityRule> secRules, NeutronSecurityRule... expectedSecRules) {
178         assertNotNull(secRules);
179         assertEquals(expectedSecRules.length, secRules.size());
180         for (int i = 0; i < expectedSecRules.length; ++i) {
181             assertTrue(secRules.contains(expectedSecRules[i]));
182         }
183     }
184
185     private void assertSecRulesByOwnerSecGrpId(EndpointGroupId ownerEpGrpId, NeutronSecurityRule... expectedSecRules) {
186         Set<NeutronSecurityRule> secRules = secRuleDao.getSecRulesByOwnerSecGrpId(ownerEpGrpId);
187         assertSecRules(secRules, expectedSecRules);
188     }
189
190     private void assertSecRulesBySecGrpIdAndRemoteSecGrpId(EndpointGroupId ownerEpGrpId, EndpointGroupId remoteEpGrpId,
191             NeutronSecurityRule... expectedSecRules) {
192         Set<NeutronSecurityRule> secRules = secRuleDao.getSecRulesBySecGrpIdAndRemoteSecGrpId(ownerEpGrpId,
193                 remoteEpGrpId);
194         assertSecRules(secRules, expectedSecRules);
195     }
196
197     private void assertSecRulesWithoutRemoteSecGrpBySecGrpId(EndpointGroupId ownerEpGrpId,
198             NeutronSecurityRule... expectedSecRules) {
199         Set<NeutronSecurityRule> secRules = secRuleDao.getSecRulesWithoutRemoteSecGrpBySecGrpId(ownerEpGrpId);
200         assertSecRules(secRules, expectedSecRules);
201     }
202
203     private void assertAllOwnerSecGrps(EndpointGroupId... expectedEndpointGropuIds) {
204         Set<EndpointGroupId> allOwnerSecGrps = secRuleDao.getAllOwnerSecGrps();
205         assertNotNull(allOwnerSecGrps);
206         assertEquals(expectedEndpointGropuIds.length, allOwnerSecGrps.size());
207         for (int i = 0; i < expectedEndpointGropuIds.length; ++i) {
208             assertTrue(allOwnerSecGrps.contains(expectedEndpointGropuIds[i]));
209         }
210     }
211 }