2 * Copyright (C) 2015 Juniper Networks, Inc.
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
9 package org.opendaylight.groupbasedpolicy.renderer.oc;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertNotNull;
13 import static org.mockito.Mockito.mock;
14 import static org.mockito.Mockito.when;
16 import java.io.IOException;
17 import java.net.HttpURLConnection;
18 import java.util.ArrayList;
19 import java.util.List;
22 import java.util.concurrent.ScheduledExecutorService;
24 import net.juniper.contrail.api.ApiConnector;
25 import net.juniper.contrail.api.types.FloatingIpPool;
26 import net.juniper.contrail.api.types.Project;
27 import net.juniper.contrail.api.types.VirtualNetwork;
29 import org.junit.After;
30 import org.junit.Before;
31 import org.junit.Test;
32 import org.mockito.Mock;
33 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
34 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
35 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
36 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
37 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
38 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
39 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
40 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
41 import org.opendaylight.groupbasedpolicy.jsonrpc.JsonRpcEndpoint;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2FloodDomainId;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.Name;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.L2FloodDomain;
45 import org.opendaylight.yangtools.concepts.ListenerRegistration;
46 import org.opendaylight.yangtools.yang.binding.DataObject;
47 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
48 import org.slf4j.Logger;
49 import org.slf4j.LoggerFactory;
51 import com.google.common.base.Optional;
52 import com.google.common.util.concurrent.CheckedFuture;
55 * Test Class for L2 Flood Domain.
58 public class TestL2DomainManager {
59 L2DomainManager domainmanager;
60 ApiConnector apiconnector;
61 ApiConnector mockedApiConnector = mock(ApiConnector.class);
62 VirtualNetwork mockedVirtualNetwork = mock(VirtualNetwork.class);
63 Project mockedProject = mock(Project.class);
64 FloatingIpPool mockedFloatingIpPool = mock(FloatingIpPool.class);
65 L2FloodDomain mockFd = mock(L2FloodDomain.class);
66 L2FloodDomain mockFdNew = mock(L2FloodDomain.class);
68 private DataBroker mockBroker;
70 private RpcProviderRegistry mockRpcRegistry;
72 private ScheduledExecutorService mockExecutor;
74 private ListenerRegistration<DataChangeListener> mockListener;
76 private ListenerRegistration<DataChangeListener> mockL3Listener;
78 private CheckedFuture<Optional<L2FloodDomain>,ReadFailedException> mockReadFuture;
80 private JsonRpcEndpoint mockAgent;
82 private OcRenderer mockOcRenderer;
84 private WriteTransaction mockWriteTransaction;
86 private ReadOnlyTransaction mockReadTransaction;
88 private CheckedFuture<Void, TransactionCommitFailedException> mockWriteFuture;
90 private AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> mockChange;
92 private Map<InstanceIdentifier<?>, DataObject> mockDaoMap;
94 private Set<InstanceIdentifier<?>> mockDaoSet;
96 private DataObject mockDao;
98 private InstanceIdentifier<?> mockIid;
99 protected static final Logger logger = LoggerFactory.getLogger(L2DomainManager.class);
100 private static final String TENANT_ID = "22282cca-9a13-4d0c-a67e-a933ebb0b0ae";
101 private static final String TENANT_ID_VALUE = "[_value=22282cca-9a13-4d0c-a67e-a933ebb0b0ae]";
102 private static final L2FloodDomainId FLOOD_DOMAIN_ID = new L2FloodDomainId("08e3904c-7850-41c0-959a-1a646a83598a");
103 private static final Name FLOOD_DOMAIN_NAME = new Name("MOCK_DOMAIN");
105 List<DataObject> daoList =
106 new ArrayList<DataObject>();
109 public void beforeTest() {
110 domainmanager = new L2DomainManager(mockBroker, mockRpcRegistry, mockExecutor);
111 assertNotNull(mockedApiConnector);
112 assertNotNull(mockedVirtualNetwork);
113 assertNotNull(mockedProject);
114 assertNotNull(mockedFloatingIpPool);
118 public void AfterTest() {
119 domainmanager = null;
123 /* Test method to check if flood domain id is null*/
125 public void testCanCreateFloodDomainIDNull() {
126 OcRenderer.apiConnector = mockedApiConnector;
127 when(mockFd.getId()).thenReturn(null);
128 assertEquals(HttpURLConnection.HTTP_BAD_REQUEST,domainmanager.canCreateFloodDomain(mockFd, TENANT_ID));
131 /* Test method to check if flood domain name is null*/
133 public void testCanCreateFloodDomainNameNull() {
134 OcRenderer.apiConnector = mockedApiConnector;
135 when(mockFd.getName()).thenReturn(null);
136 assertEquals(HttpURLConnection.HTTP_BAD_REQUEST,domainmanager.canCreateFloodDomain(mockFd, TENANT_ID));
139 /*Test method to check if FloodDomain ProjctUUID is not found */
141 public void testCanCreateFloodDomainProjctUUIDNotFound() throws IOException {
142 OcRenderer.apiConnector = mockedApiConnector;
143 when(mockFd.getId()).thenReturn(FLOOD_DOMAIN_ID);
144 when(mockFd.getName()).thenReturn(FLOOD_DOMAIN_NAME);
145 when(mockedApiConnector.findById(Project.class, TENANT_ID)).thenReturn(null);
146 assertEquals(HttpURLConnection.HTTP_NOT_FOUND,domainmanager.canCreateFloodDomain(mockFd ,TENANT_ID_VALUE));
149 /*Test method to check if FloodDomain ProjctUUID is forbidden */
151 public void testCanCreateFloodDomainForbidden() throws IOException {
152 OcRenderer.apiConnector = mockedApiConnector;
153 when(mockFd.getId()).thenReturn(FLOOD_DOMAIN_ID);
154 when(mockFd.getName()).thenReturn(FLOOD_DOMAIN_NAME);
155 String mockL2FloodDomainUUID = "08e3904c-7850-41c0-959a-1a646a83598a";
156 when(mockedApiConnector.findById(Project.class, TENANT_ID)).thenReturn(mockedProject);
157 when(mockedApiConnector.findById(VirtualNetwork.class, mockL2FloodDomainUUID)).thenReturn(mockedVirtualNetwork);
158 assertEquals(HttpURLConnection.HTTP_FORBIDDEN,domainmanager.canCreateFloodDomain(mockFd ,TENANT_ID_VALUE));
161 /*Test method to check if FloodDomain is created ok. */
163 public void testCanCreateFloodDomainOk() throws IOException {
164 OcRenderer.apiConnector = mockedApiConnector;
165 when(mockFd.getId()).thenReturn(FLOOD_DOMAIN_ID);
166 when(mockFd.getName()).thenReturn(FLOOD_DOMAIN_NAME);
167 String mockL2FloodDomainUUID = "08e3904c-7850-41c0-959a-1a646a83598a";
168 when(mockedApiConnector.findById(Project.class, TENANT_ID)).thenReturn(mockedProject);
169 when(mockedApiConnector.findById(VirtualNetwork.class, mockL2FloodDomainUUID)).thenReturn(null);
170 assertEquals(HttpURLConnection.HTTP_OK,domainmanager.canCreateFloodDomain(mockFd ,TENANT_ID_VALUE));
173 /*Test method to check if FloodDomain Name is null */
175 public void testCanUpdateFloodDomainNameisNull(){
176 OcRenderer.apiConnector = mockedApiConnector;
177 when(mockFd.getId()).thenReturn(FLOOD_DOMAIN_ID);
178 when(mockFdNew.getName()).thenReturn(null);
179 assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, domainmanager.canUpdateFloodDomain(mockFdNew, mockFd, TENANT_ID_VALUE));
182 /*Test method to check if FloodDomainName already exists */
184 public void testCanUpdateFloodDomainNameALreadyExist() throws IOException{
185 OcRenderer.apiConnector = mockedApiConnector;
186 String mockL2FloodDomainUUID = "08e3904c-7850-41c0-959a-1a646a83598a";
187 String name = "MOCK_DOMAIN";
188 when(mockFd.getId()).thenReturn(FLOOD_DOMAIN_ID);
189 when(mockFdNew.getName()).thenReturn(FLOOD_DOMAIN_NAME);
190 when(mockedApiConnector.findById(Project.class, TENANT_ID)).thenReturn(mockedProject);
191 when(mockedApiConnector.findById(VirtualNetwork.class, mockL2FloodDomainUUID)).thenReturn(mockedVirtualNetwork);
192 when(mockedApiConnector.findByName(VirtualNetwork.class, mockedProject, mockFdNew.getName().toString())).thenReturn(name);
193 assertEquals(HttpURLConnection.HTTP_FORBIDDEN, domainmanager.canUpdateFloodDomain(mockFdNew, mockFd, TENANT_ID_VALUE));
196 /*Test method to check if FloodDomain ID is null */
198 public void testCanUpdateFloodDomainIDisNull() throws IOException{
199 OcRenderer.apiConnector = mockedApiConnector;
200 String mockL2FloodDomainUUID = "08e3904c-7850-41c0-959a-1a646a83598a";
201 when(mockFd.getId()).thenReturn(FLOOD_DOMAIN_ID);
202 when(mockFdNew.getName()).thenReturn(FLOOD_DOMAIN_NAME);
203 when(mockedApiConnector.findById(Project.class, TENANT_ID)).thenReturn(mockedProject);
204 when(mockedApiConnector.findById(VirtualNetwork.class, mockL2FloodDomainUUID)).thenReturn(null);
205 when(mockedApiConnector.findByName(VirtualNetwork.class, mockedProject, mockFdNew.getName().toString())).thenReturn(null);
206 assertEquals(HttpURLConnection.HTTP_FORBIDDEN, domainmanager.canUpdateFloodDomain(mockFdNew, mockFd, TENANT_ID_VALUE));
209 /*Test method to check if FloodDomain Name can be updated */
211 public void testCanUpdateFloodDomainOK() throws IOException{
212 OcRenderer.apiConnector = mockedApiConnector;
213 String mockL2FloodDomainUUID = "08e3904c-7850-41c0-959a-1a646a83598a";
214 when(mockFd.getId()).thenReturn(FLOOD_DOMAIN_ID);
215 when(mockFdNew.getName()).thenReturn(FLOOD_DOMAIN_NAME);
216 when(mockedApiConnector.findById(Project.class, TENANT_ID)).thenReturn(mockedProject);
217 when(mockedApiConnector.findById(VirtualNetwork.class, mockL2FloodDomainUUID)).thenReturn(mockedVirtualNetwork);
218 when(mockedApiConnector.findByName(VirtualNetwork.class, mockedProject, mockFdNew.getName().toString())).thenReturn(null);
219 assertEquals(HttpURLConnection.HTTP_OK, domainmanager.canUpdateFloodDomain(mockFdNew, mockFd, TENANT_ID_VALUE));