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