2 * Copyright (c) 2015 Inocybe 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
9 package org.opendaylight.ovsdb.openstack.netvirt.impl;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertNotEquals;
13 import static org.junit.Assert.assertNull;
14 import static org.mockito.Mockito.mock;
15 import static org.mockito.Mockito.when;
17 import java.lang.reflect.Field;
18 import java.util.Random;
19 import java.util.concurrent.BlockingQueue;
21 import org.junit.Before;
22 import org.junit.Test;
23 import org.junit.runner.RunWith;
24 import org.mockito.InjectMocks;
25 import org.mockito.Mock;
26 import org.opendaylight.ovsdb.openstack.netvirt.AbstractEvent;
27 import org.opendaylight.ovsdb.openstack.netvirt.AbstractHandler;
28 import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
29 import org.opendaylight.ovsdb.utils.servicehelper.ServiceHelper;
30 import org.osgi.framework.ServiceReference;
31 import org.powermock.core.classloader.annotations.PrepareForTest;
32 import org.powermock.modules.junit4.PowerMockRunner;
35 * Unit test for {@link EventDispatcherImpl}
37 @RunWith(PowerMockRunner.class)
38 @PrepareForTest(ServiceHelper.class)
39 public class EventDispatcherImplTest {
41 @InjectMocks private EventDispatcherImpl eventDispatcherImpl;
43 @Mock private AbstractHandler handler;
44 @Mock private ServiceReference<?> ref;
46 private AbstractEvent.HandlerType handlerTypeObject = AbstractEvent.HandlerType.NEUTRON_FLOATING_IP;
50 Random r = new Random();
52 eventDispatcherImpl.start();
54 when(ref.getProperty(org.osgi.framework.Constants.SERVICE_ID)).thenReturn(r.nextLong());
55 when(ref.getProperty(Constants.EVENT_HANDLER_TYPE_PROPERTY)).thenReturn(handlerTypeObject);
59 * Test methods {@link EventDispatcherImpl#eventHandlerRemoved(ServiceReference)}
60 * and {@link EventDispatcherImpl#eventHandlerAdded(ServiceReference, AbstractHandler)}
63 public void testHandlerAddedAndRemoved() throws Exception{
64 AbstractHandler[] handlers = ( AbstractHandler[]) getField("handlers");
66 assertNotEquals("Error, handler should be null", handlers[handlerTypeObject.ordinal()], handler);
68 eventDispatcherImpl.eventHandlerAdded(ref, handler);
70 assertEquals("Error, did not return the added handler", handlers[handlerTypeObject.ordinal()], handler);
72 eventDispatcherImpl.eventHandlerRemoved(ref);
74 assertNull("Error, handler should be null as it has just been removed", handlers[handlerTypeObject.ordinal()]);
78 * Test method {@link EventDispatcherImpl#enqueueEvent(AbstractEvent)}
80 @SuppressWarnings("unchecked")
82 public void testEnqueueEvent() throws Exception{
83 BlockingQueue<AbstractEvent> events = (BlockingQueue<AbstractEvent>) getField("events");
85 assertEquals("Error, did not return the expected size, nothing has been added yet", 0, events.size());
87 eventDispatcherImpl.enqueueEvent(mock(AbstractEvent.class));
88 eventDispatcherImpl.enqueueEvent(mock(AbstractEvent.class));
89 eventDispatcherImpl.enqueueEvent(mock(AbstractEvent.class));
90 eventDispatcherImpl.enqueueEvent(mock(AbstractEvent.class));
92 assertEquals("Error, did not return the expected size", 3, events.size());
95 private Object getField(String fieldName) throws Exception {
96 Field field = EventDispatcherImpl.class.getDeclaredField(fieldName);
97 field.setAccessible(true);
98 return field.get(eventDispatcherImpl);