Add missing license headers
[groupbasedpolicy.git] / groupbasedpolicy / src / test / java / org / opendaylight / groupbasedpolicy / endpoint / EndpointRpcRegistryTest.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. 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.groupbasedpolicy.endpoint;
9
10 import static org.mockito.Matchers.any;
11 import static org.mockito.Matchers.eq;
12 import static org.mockito.Mockito.mock;
13 import static org.mockito.Mockito.never;
14 import static org.mockito.Mockito.times;
15 import static org.mockito.Mockito.verify;
16 import static org.mockito.Mockito.when;
17
18 import java.util.ArrayList;
19 import java.util.List;
20
21 import com.google.common.util.concurrent.CheckedFuture;
22 import org.junit.Assert;
23 import org.junit.Before;
24 import org.junit.Test;
25 import org.mockito.Mockito;
26 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
27 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
28 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
29 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
30 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
31 import org.opendaylight.groupbasedpolicy.api.EpRendererAugmentation;
32 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
33 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
35 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
36 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ConditionName;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2BridgeDomainId;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L3ContextId;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInput;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInputBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterL3PrefixEndpointInput;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterL3PrefixEndpointInputBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.SetEndpointGroupConditionsInput;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.SetEndpointGroupConditionsInputBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.UnregisterEndpointInput;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.UnregisterEndpointInputBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.UnsetEndpointGroupConditionsInput;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.UnsetEndpointGroupConditionsInputBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3Address;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3AddressBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3Prefix;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.has.endpoint.group.conditions.EndpointGroupCondition;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.has.endpoint.group.conditions.EndpointGroupConditionBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.unregister.endpoint.input.L2;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.unregister.endpoint.input.L2Builder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.unregister.endpoint.input.L3;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.unregister.endpoint.input.L3Builder;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.unregister.endpoint.input.L3Prefix;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.unregister.endpoint.input.L3PrefixBuilder;
63 import org.opendaylight.yangtools.yang.binding.DataObject;
64 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
65
66 public class EndpointRpcRegistryTest {
67
68     private static final String L2_BD_ID = "l2bdId";
69     private static final String MAC_ADDRESS = "5E:83:39:98:4F:1B";
70     private static final String L3_CX_ID = "l3c";
71     private static final String IPv4_ADDRESS = "1.1.1.1";
72     private static final String IPv4_PREFIX = "1.1.1.0/24";
73     private static final String TENANT_ID = "t1";
74     private static final String EPG_ID = "epg_1";
75     private static final String CONDITION_NAME = "condition_1";
76
77     private DataBroker dataProvider;
78     private EpRendererAugmentation epRendererAugmentation;
79     private EndpointRpcRegistry endpointRpcRegistry;
80
81     @Before
82     public void init() {
83         dataProvider = mock(DataBroker.class);
84         epRendererAugmentation = mock(EpRendererAugmentation.class);
85         WriteTransaction wt = newWriteTransactionMock();
86         RpcProviderRegistry rpcRegistry = mock(RpcProviderRegistry.class);
87
88         endpointRpcRegistry = new EndpointRpcRegistry(dataProvider, rpcRegistry);
89     }
90
91     @Test
92     public void testConstructor() throws Exception {
93         RpcProviderRegistry rpcRegistry = mock(RpcProviderRegistry.class);
94         EndpointRpcRegistry other = new EndpointRpcRegistry(dataProvider, rpcRegistry);
95         other.close();
96     }
97
98     @Test
99     public void testRegister() throws Exception {
100         WriteTransaction wt = newWriteTransactionMock();
101
102         endpointRpcRegistry.register(epRendererAugmentation);
103         Assert.assertEquals(1, EndpointRpcRegistry.registeredRenderers.size());
104
105         endpointRpcRegistry.unregister(epRendererAugmentation);
106         Assert.assertEquals(0, EndpointRpcRegistry.registeredRenderers.size());
107     }
108
109     @Test
110     public void testRegister_SafelyFail() {
111         endpointRpcRegistry.register(epRendererAugmentation);
112         endpointRpcRegistry.register(null);
113
114         Assert.assertEquals(1, EndpointRpcRegistry.registeredRenderers.size());
115     }
116
117     @Test
118     public void testRegisterEndpoint() throws Exception {
119         WriteTransaction wt = newWriteTransactionMock();
120
121         endpointRpcRegistry.registerEndpoint(setRegisterEndpointVariablesForTest());
122
123         verify(wt, times(1)).put(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class),
124                 any(DataObject.class), eq(true));
125
126         endpointRpcRegistry.registerEndpoint(setL3AddressVariableForTest());
127
128         verify(wt, times(2)).put(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class),
129                 any(DataObject.class), eq(true));
130     }
131
132     private RegisterEndpointInput setRegisterEndpointVariablesForTest() throws Exception {
133         RegisterEndpointInputBuilder registerEndpointInputBuilder = new RegisterEndpointInputBuilder();
134         registerEndpointInputBuilder.setL2Context(new L2BridgeDomainId(L2_BD_ID));
135         registerEndpointInputBuilder.setMacAddress(new MacAddress(MAC_ADDRESS));
136         return registerEndpointInputBuilder.build();
137     }
138
139     private RegisterEndpointInput setL3AddressVariableForTest() {
140         RegisterEndpointInputBuilder registerEndpointInputBuilder = new RegisterEndpointInputBuilder();
141         List<L3Address> l3AddressList = new ArrayList<>();
142         l3AddressList.add(new L3AddressBuilder().setL3Context(new L3ContextId(L3_CX_ID))
143             .setIpAddress(new IpAddress(new Ipv4Address(IPv4_ADDRESS)))
144             .build());
145         registerEndpointInputBuilder.setL3Address(l3AddressList);
146         return registerEndpointInputBuilder.build();
147     }
148
149     @Test
150     public void testRegisterL3PrefixEndpoint() throws Exception {
151         WriteTransaction wt = newWriteTransactionMock();
152
153         endpointRpcRegistry.registerL3PrefixEndpoint(setL3PrefixTestVariables());
154
155         verify(wt, times(1)).put(eq(LogicalDatastoreType.OPERATIONAL),
156                 Mockito.<InstanceIdentifier<EndpointL3Prefix>>any(), any(EndpointL3Prefix.class));
157     }
158
159     @Test
160     public void testRegisterL3PrefixEndpoint_BadData() {
161         WriteTransaction wt = newWriteTransactionMock();
162
163         endpointRpcRegistry.registerL3PrefixEndpoint(setL3PrefixTestVariables_NoIpPrefix());
164         endpointRpcRegistry.registerL3PrefixEndpoint(setL3PrefixTestVariables_NoL3Context());
165         endpointRpcRegistry.registerL3PrefixEndpoint(setL3PrefixTestVariables_NoTenant());
166
167         verify(wt, never()).put(eq(LogicalDatastoreType.OPERATIONAL),
168                 Mockito.<InstanceIdentifier<EndpointL3Prefix>>any(), any(EndpointL3Prefix.class));
169     }
170
171     private RegisterL3PrefixEndpointInput setL3PrefixTestVariables() {
172         RegisterL3PrefixEndpointInputBuilder registerL3PrefixEndpointInputBuilder =
173                 new RegisterL3PrefixEndpointInputBuilder();
174         registerL3PrefixEndpointInputBuilder.setL3Context(new L3ContextId(L3_CX_ID));
175         registerL3PrefixEndpointInputBuilder.setIpPrefix(new IpPrefix(new Ipv4Prefix(IPv4_PREFIX)));
176         registerL3PrefixEndpointInputBuilder.setTenant(new TenantId(TENANT_ID));
177         return registerL3PrefixEndpointInputBuilder.build();
178     }
179
180     private RegisterL3PrefixEndpointInput setL3PrefixTestVariables_NoL3Context() {
181         RegisterL3PrefixEndpointInputBuilder registerL3PrefixEndpointInputBuilder =
182                 new RegisterL3PrefixEndpointInputBuilder();
183         registerL3PrefixEndpointInputBuilder.setIpPrefix(new IpPrefix(new Ipv4Prefix(IPv4_PREFIX)));
184         registerL3PrefixEndpointInputBuilder.setTenant(new TenantId(TENANT_ID));
185         return registerL3PrefixEndpointInputBuilder.build();
186     }
187
188     private RegisterL3PrefixEndpointInput setL3PrefixTestVariables_NoIpPrefix() {
189         RegisterL3PrefixEndpointInputBuilder registerL3PrefixEndpointInputBuilder =
190                 new RegisterL3PrefixEndpointInputBuilder();
191         registerL3PrefixEndpointInputBuilder.setL3Context(new L3ContextId(L3_CX_ID));
192         registerL3PrefixEndpointInputBuilder.setTenant(new TenantId(TENANT_ID));
193         return registerL3PrefixEndpointInputBuilder.build();
194     }
195
196     private RegisterL3PrefixEndpointInput setL3PrefixTestVariables_NoTenant() {
197         RegisterL3PrefixEndpointInputBuilder registerL3PrefixEndpointInputBuilder =
198                 new RegisterL3PrefixEndpointInputBuilder();
199         registerL3PrefixEndpointInputBuilder.setL3Context(new L3ContextId(L3_CX_ID));
200         registerL3PrefixEndpointInputBuilder.setIpPrefix(new IpPrefix(new Ipv4Prefix(IPv4_PREFIX)));
201         return registerL3PrefixEndpointInputBuilder.build();
202     }
203
204     @Test
205     public void testUnregisterEndpoint() throws Exception {
206         WriteTransaction wt = newWriteTransactionMock();
207
208         UnregisterEndpointInput unregisterEndpointInput = unregisterEndpointInput();
209
210         endpointRpcRegistry.unregisterEndpoint(unregisterEndpointInput);
211
212         verify(wt, times(2)).delete(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class));
213     }
214
215     private UnregisterEndpointInput unregisterEndpointInput() {
216         L2 l2 = new L2Builder().setL2Context(new L2BridgeDomainId(L2_BD_ID))
217             .setMacAddress(new MacAddress(MAC_ADDRESS))
218             .build();
219         List<L2> l2List = new ArrayList<>();
220         l2List.add(l2);
221         L3 l3 = new L3Builder().setL3Context(new L3ContextId(L3_CX_ID))
222             .setIpAddress(new IpAddress(new Ipv4Address(IPv4_ADDRESS)))
223             .build();
224         List<L3> l3List = new ArrayList<>();
225         l3List.add(l3);
226         List<L3Prefix> l3PrefixList = new ArrayList<>();
227         l3PrefixList.add(new L3PrefixBuilder().setIpPrefix(new IpPrefix(new Ipv4Prefix(IPv4_PREFIX))).build());
228         return new UnregisterEndpointInputBuilder().setL2(l2List).setL3(l3List).setL3Prefix(l3PrefixList).build();
229     }
230
231     @Test
232     public void testSetEndpointGroupConditions() throws Exception {
233         WriteTransaction wt = newWriteTransactionMock();
234
235         EndpointGroupId endpointGroupId = new EndpointGroupId(EPG_ID);
236         EndpointGroupCondition endpointGroupCondition =
237                 new EndpointGroupConditionBuilder().setCondition(new ConditionName(CONDITION_NAME)).build();
238         List<EndpointGroupCondition> endpointGroupConditionList = new ArrayList<>();
239         endpointGroupConditionList.add(endpointGroupCondition);
240
241         SetEndpointGroupConditionsInput setEndpointGroupConditionsInput = new SetEndpointGroupConditionsInputBuilder()
242             .setEndpointGroup(endpointGroupId).setEndpointGroupCondition(endpointGroupConditionList).build();
243
244         endpointRpcRegistry.setEndpointGroupConditions(setEndpointGroupConditionsInput);
245
246         verify(wt, times(1)).put(eq(LogicalDatastoreType.OPERATIONAL),
247                 Mockito.<InstanceIdentifier<EndpointGroupCondition>>any(), any(EndpointGroupCondition.class));
248     }
249
250     @Test
251     public void testUnsetEndpointGroupConditions() throws Exception {
252         WriteTransaction wt = newWriteTransactionMock();
253
254         EndpointGroupId endpointGroupId = new EndpointGroupId(EPG_ID);
255         EndpointGroupCondition endpointGroupCondition =
256                 new EndpointGroupConditionBuilder().setCondition(new ConditionName(CONDITION_NAME)).build();
257         List<EndpointGroupCondition> endpointGroupConditionList = new ArrayList<>();
258         endpointGroupConditionList.add(endpointGroupCondition);
259
260         UnsetEndpointGroupConditionsInput unsetEndpointGroupConditionsInput =
261                 new UnsetEndpointGroupConditionsInputBuilder().setEndpointGroup(endpointGroupId)
262                     .setEndpointGroupCondition(endpointGroupConditionList)
263                     .build();
264
265         endpointRpcRegistry.unsetEndpointGroupConditions(unsetEndpointGroupConditionsInput);
266
267         verify(wt, times(1)).delete(eq(LogicalDatastoreType.OPERATIONAL),
268                 Mockito.<InstanceIdentifier<EndpointGroupCondition>>any());
269     }
270
271     private WriteTransaction newWriteTransactionMock() {
272         WriteTransaction wt = mock(WriteTransaction.class);
273         CheckedFuture<Void, TransactionCommitFailedException> f = mock(CheckedFuture.class);
274
275         when(dataProvider.newWriteOnlyTransaction()).thenReturn(wt);
276         when(wt.submit()).thenReturn(f);
277         return wt;
278     }
279 }