Bug 5749 - cannot resolve L2 ep for ext GW
[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.atLeast;
6 import static org.mockito.Mockito.doReturn;
7 import static org.mockito.Mockito.mock;
8 import static org.mockito.Mockito.times;
9 import static org.mockito.Mockito.verify;
10 import static org.mockito.Mockito.when;
11
12 import java.util.ArrayList;
13 import java.util.List;
14
15 import org.junit.Assert;
16 import org.junit.Before;
17 import org.junit.Test;
18 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
19 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
20 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
21 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
22 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RpcRegistration;
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.EndpointGroupId;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2BridgeDomainId;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L3ContextId;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.EndpointService;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.Endpoints;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInput;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInputBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterL3PrefixEndpointInput;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterL3PrefixEndpointInputBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.SetEndpointGroupConditionsInput;
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.UnsetEndpointGroupConditionsInput;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3Address;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3AddressBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.has.endpoint.group.conditions.EndpointGroupCondition;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.unregister.endpoint.input.L2;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.unregister.endpoint.input.L3;
48 import org.opendaylight.yangtools.yang.binding.DataObject;
49 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
50 import org.opendaylight.yangtools.yang.binding.RpcService;
51
52 import com.google.common.util.concurrent.CheckedFuture;
53
54 public class EndPointRpcRegistryTest {
55
56     private DataBroker dataProvider;
57     private RpcProviderRegistry rpcRegistry;
58     private RpcRegistration<EndpointService> rpcRegistration;
59     private WriteTransaction t;
60     private EpRendererAugmentation epRendererAugmentation;
61
62     private EndpointRpcRegistry endpointRpcRegistry;
63
64     @SuppressWarnings("unchecked")
65     @Before
66     public void initialisation() {
67         dataProvider = mock(DataBroker.class);
68         rpcRegistry = mock(RpcProviderRegistry.class);
69         epRendererAugmentation = mock(EpRendererAugmentation.class);
70
71         t = mock(WriteTransaction.class);
72         when(dataProvider.newWriteOnlyTransaction()).thenReturn(t);
73         CheckedFuture<Void, TransactionCommitFailedException> f = mock(CheckedFuture.class);
74         when(t.submit()).thenReturn(f);
75
76         rpcRegistration = mock(RpcRegistration.class);
77         when(rpcRegistry.addRpcImplementation(any(Class.class), any(RpcService.class))).thenReturn(rpcRegistration);
78
79         endpointRpcRegistry = new EndpointRpcRegistry(dataProvider, rpcRegistry);
80     }
81
82     @SuppressWarnings("unchecked")
83     @Test
84     public void registerTest() throws Exception {
85         verify(rpcRegistry).addRpcImplementation(any(Class.class), any(RpcService.class));
86         verify(t).put(any(LogicalDatastoreType.class), any(InstanceIdentifier.class), any(Endpoints.class));
87         endpointRpcRegistry.register(epRendererAugmentation);
88         Assert.assertEquals(1, EndpointRpcRegistry.registeredRenderers.size());
89
90         endpointRpcRegistry.unregister(epRendererAugmentation);
91         Assert.assertEquals(0, EndpointRpcRegistry.registeredRenderers.size());
92     }
93
94     @Test
95     public void registerTestSafelyFail() {
96         endpointRpcRegistry.register(epRendererAugmentation);
97         endpointRpcRegistry.register(null);
98         Assert.assertEquals(1, EndpointRpcRegistry.registeredRenderers.size());
99     }
100
101     @Test
102     public void registerEndpointTest()throws Exception{
103         endpointRpcRegistry.registerEndpoint(setRegisterEndpointVariablesForTest());
104         verify(t, times(1)).put(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class), any(DataObject.class), eq(true));
105
106         endpointRpcRegistry.registerEndpoint(setL3AddressVariableForTest());
107         verify(t, times(2)).put(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class), any(DataObject.class), eq(true));
108     }
109
110     private RegisterEndpointInput setRegisterEndpointVariablesForTest() throws Exception{
111         RegisterEndpointInputBuilder registerEndpointInputBuilder = new RegisterEndpointInputBuilder();
112         registerEndpointInputBuilder.setL2Context(new L2BridgeDomainId("l2bdId"));
113         registerEndpointInputBuilder.setMacAddress(new MacAddress("5E:83:39:98:4F:1B"));
114         return registerEndpointInputBuilder.build();
115     }
116
117     private RegisterEndpointInput setL3AddressVariableForTest() {
118         RegisterEndpointInputBuilder registerEndpointInputBuilder = new RegisterEndpointInputBuilder();
119         List<L3Address> l3AddressList = new ArrayList<>();
120         l3AddressList.add(new L3AddressBuilder().setL3Context(new L3ContextId("l3c"))
121             .setIpAddress(new IpAddress(new Ipv4Address("1.1.1.1")))
122             .build());
123         registerEndpointInputBuilder.setL3Address(l3AddressList);
124         return registerEndpointInputBuilder.build();
125     }
126
127     @Test
128     public void registerL3PrefixEndpointTest()throws Exception{
129         endpointRpcRegistry.registerL3PrefixEndpoint(setL3PrefixTestVariables());
130         verify(t, atLeast(1)).put(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class), any(DataObject.class));
131     }
132
133     private RegisterL3PrefixEndpointInput setL3PrefixTestVariables(){
134         RegisterL3PrefixEndpointInputBuilder registerL3PrefixEndpointInputBuilder = new RegisterL3PrefixEndpointInputBuilder();
135         registerL3PrefixEndpointInputBuilder.setL3Context(new L3ContextId("l3c"));
136         registerL3PrefixEndpointInputBuilder.setIpPrefix(new IpPrefix(new Ipv4Prefix("1.1.1.0/24")));
137         registerL3PrefixEndpointInputBuilder.setTenant(new TenantId("t1"));
138         return registerL3PrefixEndpointInputBuilder.build();
139     }
140
141     @Test
142     public void unregisterEndpointTest() throws Exception{
143         L2 l2Mock = mock(L2.class);
144         List<L2> l2List = new ArrayList<>();
145         l2List.add(l2Mock);
146         L3 l3Mock = mock(L3.class);
147         List<L3> l3List = new ArrayList<>();
148         l3List.add(l3Mock);
149         UnregisterEndpointInput unregisterEndpointInputMock = mock(UnregisterEndpointInput.class);
150         doReturn(l2List).when(unregisterEndpointInputMock).getL2();
151         doReturn(l3List).when(unregisterEndpointInputMock).getL3();
152         endpointRpcRegistry.unregisterEndpoint(unregisterEndpointInputMock);
153         verify(t, times(2)).delete(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class));
154     }
155
156     @Test
157     public void setEndpointGroupConditionsTest()throws Exception{
158         EndpointGroupId endpointGroupIdMock = mock(EndpointGroupId.class);
159
160         EndpointGroupCondition endpointGroupConditionMock = mock(EndpointGroupCondition.class);
161         List<EndpointGroupCondition> endpointGroupConditionList = new ArrayList();
162         endpointGroupConditionList.add(endpointGroupConditionMock);
163         SetEndpointGroupConditionsInput setEndpointGroupConditionsInputMock = mock(SetEndpointGroupConditionsInput.class);
164         doReturn(endpointGroupIdMock).when(setEndpointGroupConditionsInputMock).getEndpointGroup();
165         doReturn(endpointGroupConditionList).when(setEndpointGroupConditionsInputMock).getEndpointGroupCondition();
166         endpointRpcRegistry.setEndpointGroupConditions(setEndpointGroupConditionsInputMock);
167         verify(t, atLeast(1)).put(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class), any(EndpointGroupCondition.class));
168     }
169
170     @Test
171     public void unsetEndpointGroupConditionsTest()throws Exception{
172         UnsetEndpointGroupConditionsInput unsetEndpointGroupConditionsInputMock = mock(UnsetEndpointGroupConditionsInput.class);
173         EndpointGroupCondition endpointGroupConditionMock = mock(EndpointGroupCondition.class);
174         List<EndpointGroupCondition> endpointGroupConditionList = new ArrayList();
175         endpointGroupConditionList.add(endpointGroupConditionMock);
176         doReturn(mock(EndpointGroupId.class)).when(unsetEndpointGroupConditionsInputMock).getEndpointGroup();
177         doReturn(endpointGroupConditionList).when(unsetEndpointGroupConditionsInputMock).getEndpointGroupCondition();
178         endpointRpcRegistry.unsetEndpointGroupConditions(unsetEndpointGroupConditionsInputMock);
179         verify(t, times(1)).delete(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class));
180     }
181 }