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.mockito.runners.MockitoJUnitRunner;
27 import org.opendaylight.ovsdb.openstack.netvirt.AbstractEvent;
28 import org.opendaylight.ovsdb.openstack.netvirt.AbstractHandler;
29 import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
30 import org.osgi.framework.ServiceReference;
33 * Unit test for class EventDispatcherImpl
35 @RunWith(MockitoJUnitRunner.class)
36 public class EventDispatcherImplTest {
38 @Mock AbstractHandler handler;
39 @InjectMocks EventDispatcherImpl eventDispatcherImpl;
41 private AbstractEvent.HandlerType handlerTypeObject = AbstractEvent.HandlerType.NEUTRON_FLOATING_IP;
42 public ServiceReference ref = mock(ServiceReference.class);
46 Random r = new Random();
48 eventDispatcherImpl.init();
49 eventDispatcherImpl.start();
51 // configure serviceReference
52 when(ref.getProperty(org.osgi.framework.Constants.SERVICE_ID)).thenReturn(r.nextLong());
53 when(ref.getProperty(Constants.EVENT_HANDLER_TYPE_PROPERTY)).thenReturn(handlerTypeObject);
57 * Test method {@link EventDispatcherImpl#eventHandlerAdded(ServiceReference, AbstractHandler)}
60 public void testeventHandlerAdded() throws Exception{
61 // get handlers from EventDispatcherImpl for test purposes
62 AbstractHandler[] handlers = ( AbstractHandler[]) getClassField("handlers");
64 // test when should be null
65 assertNotEquals(handlers[handlerTypeObject.ordinal()], handler);
68 eventDispatcherImpl.eventHandlerAdded(ref, handler);
70 // test when handler added
71 assertEquals(handlers[handlerTypeObject.ordinal()], handler);
75 * Test method {@link EventDispatcherImpl#eventHandlerRemoved(ServiceReference)}
78 public void testHandlerRemoved() throws Exception{
79 // get handlers from EventDispatcherImpl for test purposes
80 AbstractHandler[] handlers = ( AbstractHandler[]) getClassField("handlers");
83 eventDispatcherImpl.eventHandlerAdded(ref, handler);
85 // test when handler added
86 assertEquals(handlers[handlerTypeObject.ordinal()], handler);
89 eventDispatcherImpl.eventHandlerRemoved(ref);
91 // test once handler removed
92 assertNull(handlers[handlerTypeObject.ordinal()]);
96 * Test method {@link EventDispatcherImpl#enqueueEvent(AbstractEvent)}
99 public void testEnqueueEvent() throws Exception{
100 // get events from EventDispatcherImpl for test purposes
101 BlockingQueue<AbstractEvent> events = (BlockingQueue<AbstractEvent>) getClassField("events");
103 // test before enqueue event
104 assertEquals("Error, did not return the expected size, nothing has been added yet", 0, events.size());
107 eventDispatcherImpl.enqueueEvent(mock(AbstractEvent.class));
109 // test after enqueue event
110 assertEquals("Error, did not return the expected size", 1, events.size());
114 * Get the specified field from EventDispatcherImpl using reflection
115 * @param fieldName - the field to retrieve
116 * @return the desired field
118 private Object getClassField(String fieldName) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{
119 Field field = EventDispatcherImpl.class.getDeclaredField(fieldName);
120 field.setAccessible(true);
121 return field.get(eventDispatcherImpl);