2 * Copyright (c) 2016 Cisco Systems, Inc. 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.groupbasedpolicy.endpoint;
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;
18 import java.util.ArrayList;
19 import java.util.List;
21 import org.junit.Assert;
22 import org.junit.Before;
23 import org.junit.Test;
24 import org.mockito.Mockito;
25 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
26 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
27 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
28 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
29 import org.opendaylight.groupbasedpolicy.api.EpRendererAugmentation;
30 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
31 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
32 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
33 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ConditionName;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2BridgeDomainId;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L3ContextId;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInput;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInputBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterL3PrefixEndpointInput;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterL3PrefixEndpointInputBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.SetEndpointGroupConditionsInput;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.SetEndpointGroupConditionsInputBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.UnregisterEndpointInput;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.UnregisterEndpointInputBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.UnsetEndpointGroupConditionsInput;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.UnsetEndpointGroupConditionsInputBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3Address;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3AddressBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3Prefix;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.has.endpoint.group.conditions.EndpointGroupCondition;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.has.endpoint.group.conditions.EndpointGroupConditionBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.unregister.endpoint.input.L2;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.unregister.endpoint.input.L2Builder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.unregister.endpoint.input.L3;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.unregister.endpoint.input.L3Builder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.unregister.endpoint.input.L3Prefix;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.unregister.endpoint.input.L3PrefixBuilder;
61 import org.opendaylight.yangtools.yang.binding.DataObject;
62 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
64 import com.google.common.util.concurrent.CheckedFuture;
66 public class EndpointRpcRegistryTest {
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";
77 private DataBroker dataProvider;
78 private EpRendererAugmentation epRendererAugmentation;
79 private EndpointRpcRegistry endpointRpcRegistry;
83 dataProvider = mock(DataBroker.class);
84 epRendererAugmentation = mock(EpRendererAugmentation.class);
85 WriteTransaction wt = newWriteTransactionMock();
87 endpointRpcRegistry = new EndpointRpcRegistry(dataProvider);
91 public void testConstructor() throws Exception {
92 EndpointRpcRegistry other = new EndpointRpcRegistry(dataProvider);
97 public void testRegister() throws Exception {
98 WriteTransaction wt = newWriteTransactionMock();
100 endpointRpcRegistry.register(epRendererAugmentation);
101 Assert.assertEquals(1, EndpointRpcRegistry.registeredRenderers.size());
103 endpointRpcRegistry.unregister(epRendererAugmentation);
104 Assert.assertEquals(0, EndpointRpcRegistry.registeredRenderers.size());
108 public void testRegister_SafelyFail() {
109 endpointRpcRegistry.register(epRendererAugmentation);
110 endpointRpcRegistry.register(null);
112 Assert.assertEquals(1, EndpointRpcRegistry.registeredRenderers.size());
116 public void testRegisterEndpoint() throws Exception {
117 WriteTransaction wt = newWriteTransactionMock();
119 endpointRpcRegistry.registerEndpoint(setRegisterEndpointVariablesForTest());
121 verify(wt, times(1)).put(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class),
122 any(DataObject.class), eq(true));
124 endpointRpcRegistry.registerEndpoint(setL3AddressVariableForTest());
126 verify(wt, times(2)).put(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class),
127 any(DataObject.class), eq(true));
130 private RegisterEndpointInput setRegisterEndpointVariablesForTest() throws Exception {
131 RegisterEndpointInputBuilder registerEndpointInputBuilder = new RegisterEndpointInputBuilder();
132 registerEndpointInputBuilder.setL2Context(new L2BridgeDomainId(L2_BD_ID));
133 registerEndpointInputBuilder.setMacAddress(new MacAddress(MAC_ADDRESS));
134 return registerEndpointInputBuilder.build();
137 private RegisterEndpointInput setL3AddressVariableForTest() {
138 RegisterEndpointInputBuilder registerEndpointInputBuilder = new RegisterEndpointInputBuilder();
139 List<L3Address> l3AddressList = new ArrayList<>();
140 l3AddressList.add(new L3AddressBuilder().setL3Context(new L3ContextId(L3_CX_ID))
141 .setIpAddress(new IpAddress(new Ipv4Address(IPv4_ADDRESS)))
143 registerEndpointInputBuilder.setL3Address(l3AddressList);
144 return registerEndpointInputBuilder.build();
148 public void testRegisterL3PrefixEndpoint() throws Exception {
149 WriteTransaction wt = newWriteTransactionMock();
151 endpointRpcRegistry.registerL3PrefixEndpoint(setL3PrefixTestVariables());
153 verify(wt, times(1)).put(eq(LogicalDatastoreType.OPERATIONAL),
154 Mockito.<InstanceIdentifier<EndpointL3Prefix>>any(), any(EndpointL3Prefix.class));
158 public void testRegisterL3PrefixEndpoint_BadData() {
159 WriteTransaction wt = newWriteTransactionMock();
161 endpointRpcRegistry.registerL3PrefixEndpoint(setL3PrefixTestVariables_NoIpPrefix());
162 endpointRpcRegistry.registerL3PrefixEndpoint(setL3PrefixTestVariables_NoL3Context());
163 endpointRpcRegistry.registerL3PrefixEndpoint(setL3PrefixTestVariables_NoTenant());
165 verify(wt, never()).put(eq(LogicalDatastoreType.OPERATIONAL),
166 Mockito.<InstanceIdentifier<EndpointL3Prefix>>any(), any(EndpointL3Prefix.class));
169 private RegisterL3PrefixEndpointInput setL3PrefixTestVariables() {
170 RegisterL3PrefixEndpointInputBuilder registerL3PrefixEndpointInputBuilder =
171 new RegisterL3PrefixEndpointInputBuilder();
172 registerL3PrefixEndpointInputBuilder.setL3Context(new L3ContextId(L3_CX_ID));
173 registerL3PrefixEndpointInputBuilder.setIpPrefix(new IpPrefix(new Ipv4Prefix(IPv4_PREFIX)));
174 registerL3PrefixEndpointInputBuilder.setTenant(new TenantId(TENANT_ID));
175 return registerL3PrefixEndpointInputBuilder.build();
178 private RegisterL3PrefixEndpointInput setL3PrefixTestVariables_NoL3Context() {
179 RegisterL3PrefixEndpointInputBuilder registerL3PrefixEndpointInputBuilder =
180 new RegisterL3PrefixEndpointInputBuilder();
181 registerL3PrefixEndpointInputBuilder.setIpPrefix(new IpPrefix(new Ipv4Prefix(IPv4_PREFIX)));
182 registerL3PrefixEndpointInputBuilder.setTenant(new TenantId(TENANT_ID));
183 return registerL3PrefixEndpointInputBuilder.build();
186 private RegisterL3PrefixEndpointInput setL3PrefixTestVariables_NoIpPrefix() {
187 RegisterL3PrefixEndpointInputBuilder registerL3PrefixEndpointInputBuilder =
188 new RegisterL3PrefixEndpointInputBuilder();
189 registerL3PrefixEndpointInputBuilder.setL3Context(new L3ContextId(L3_CX_ID));
190 registerL3PrefixEndpointInputBuilder.setTenant(new TenantId(TENANT_ID));
191 return registerL3PrefixEndpointInputBuilder.build();
194 private RegisterL3PrefixEndpointInput setL3PrefixTestVariables_NoTenant() {
195 RegisterL3PrefixEndpointInputBuilder registerL3PrefixEndpointInputBuilder =
196 new RegisterL3PrefixEndpointInputBuilder();
197 registerL3PrefixEndpointInputBuilder.setL3Context(new L3ContextId(L3_CX_ID));
198 registerL3PrefixEndpointInputBuilder.setIpPrefix(new IpPrefix(new Ipv4Prefix(IPv4_PREFIX)));
199 return registerL3PrefixEndpointInputBuilder.build();
203 public void testUnregisterEndpoint() throws Exception {
204 WriteTransaction wt = newWriteTransactionMock();
206 UnregisterEndpointInput unregisterEndpointInput = unregisterEndpointInput();
208 endpointRpcRegistry.unregisterEndpoint(unregisterEndpointInput);
210 verify(wt, times(2)).delete(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class));
213 private UnregisterEndpointInput unregisterEndpointInput() {
214 L2 l2 = new L2Builder().setL2Context(new L2BridgeDomainId(L2_BD_ID))
215 .setMacAddress(new MacAddress(MAC_ADDRESS))
217 List<L2> l2List = new ArrayList<>();
219 L3 l3 = new L3Builder().setL3Context(new L3ContextId(L3_CX_ID))
220 .setIpAddress(new IpAddress(new Ipv4Address(IPv4_ADDRESS)))
222 List<L3> l3List = new ArrayList<>();
224 List<L3Prefix> l3PrefixList = new ArrayList<>();
225 l3PrefixList.add(new L3PrefixBuilder().setIpPrefix(new IpPrefix(new Ipv4Prefix(IPv4_PREFIX))).build());
226 return new UnregisterEndpointInputBuilder().setL2(l2List).setL3(l3List).setL3Prefix(l3PrefixList).build();
230 public void testSetEndpointGroupConditions() throws Exception {
231 WriteTransaction wt = newWriteTransactionMock();
233 EndpointGroupId endpointGroupId = new EndpointGroupId(EPG_ID);
234 EndpointGroupCondition endpointGroupCondition =
235 new EndpointGroupConditionBuilder().setCondition(new ConditionName(CONDITION_NAME)).build();
236 List<EndpointGroupCondition> endpointGroupConditionList = new ArrayList<>();
237 endpointGroupConditionList.add(endpointGroupCondition);
239 SetEndpointGroupConditionsInput setEndpointGroupConditionsInput = new SetEndpointGroupConditionsInputBuilder()
240 .setEndpointGroup(endpointGroupId).setEndpointGroupCondition(endpointGroupConditionList).build();
242 endpointRpcRegistry.setEndpointGroupConditions(setEndpointGroupConditionsInput);
244 verify(wt, times(1)).put(eq(LogicalDatastoreType.OPERATIONAL),
245 Mockito.<InstanceIdentifier<EndpointGroupCondition>>any(), any(EndpointGroupCondition.class));
249 public void testUnsetEndpointGroupConditions() throws Exception {
250 WriteTransaction wt = newWriteTransactionMock();
252 EndpointGroupId endpointGroupId = new EndpointGroupId(EPG_ID);
253 EndpointGroupCondition endpointGroupCondition =
254 new EndpointGroupConditionBuilder().setCondition(new ConditionName(CONDITION_NAME)).build();
255 List<EndpointGroupCondition> endpointGroupConditionList = new ArrayList<>();
256 endpointGroupConditionList.add(endpointGroupCondition);
258 UnsetEndpointGroupConditionsInput unsetEndpointGroupConditionsInput =
259 new UnsetEndpointGroupConditionsInputBuilder().setEndpointGroup(endpointGroupId)
260 .setEndpointGroupCondition(endpointGroupConditionList)
263 endpointRpcRegistry.unsetEndpointGroupConditions(unsetEndpointGroupConditionsInput);
265 verify(wt, times(1)).delete(eq(LogicalDatastoreType.OPERATIONAL),
266 Mockito.<InstanceIdentifier<EndpointGroupCondition>>any());
269 private WriteTransaction newWriteTransactionMock() {
270 WriteTransaction wt = mock(WriteTransaction.class);
271 CheckedFuture<Void, TransactionCommitFailedException> f = mock(CheckedFuture.class);
273 when(dataProvider.newWriteOnlyTransaction()).thenReturn(wt);
274 when(wt.submit()).thenReturn(f);