929701860778ba7fdfa1d42c3f474674f740c263
[netvirt.git] / openstack / net-virt / src / test / java / org / opendaylight / ovsdb / openstack / netvirt / impl / EventDispatcherImplTest.java
1 /*
2  * Copyright (c) 2015 Inocybe and others.  All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.ovsdb.openstack.netvirt.impl;
10
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;
16
17 import java.lang.reflect.Field;
18 import java.util.Random;
19 import java.util.concurrent.BlockingQueue;
20
21 import org.junit.Before;
22 import org.junit.Ignore;
23 import org.junit.Test;
24 import org.junit.runner.RunWith;
25 import org.mockito.InjectMocks;
26 import org.mockito.Mock;
27 import org.mockito.runners.MockitoJUnitRunner;
28 import org.opendaylight.ovsdb.openstack.netvirt.AbstractEvent;
29 import org.opendaylight.ovsdb.openstack.netvirt.AbstractHandler;
30 import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
31 import org.osgi.framework.ServiceReference;
32
33 /**
34  * Unit test for {@link EventDispatcherImpl}
35  */
36 /* TODO SB_MIGRATION */ @Ignore
37 @RunWith(MockitoJUnitRunner.class)
38 public class EventDispatcherImplTest {
39
40     @Mock AbstractHandler handler;
41     @InjectMocks EventDispatcherImpl eventDispatcherImpl;
42
43     private AbstractEvent.HandlerType handlerTypeObject = AbstractEvent.HandlerType.NEUTRON_FLOATING_IP;
44     private ServiceReference ref = mock(ServiceReference.class);
45
46     @Before
47     public void setUp() {
48         Random r = new Random();
49
50         /* TODO SB_MIGRATION */
51         //eventDispatcherImpl.init();
52         eventDispatcherImpl.start();
53
54         when(ref.getProperty(org.osgi.framework.Constants.SERVICE_ID)).thenReturn(r.nextLong());
55         when(ref.getProperty(Constants.EVENT_HANDLER_TYPE_PROPERTY)).thenReturn(handlerTypeObject);
56     }
57
58     /**
59      * Test methods {@link EventDispatcherImpl#eventHandlerRemoved(ServiceReference)}
60      * and {@link EventDispatcherImpl#eventHandlerAdded(ServiceReference, AbstractHandler)}
61      */
62     @Test
63     public void testHandlerAddedAndRemoved() throws Exception{
64         AbstractHandler[] handlers = ( AbstractHandler[]) getClassField("handlers");
65
66         assertNotEquals("Error, handler should be null", handlers[handlerTypeObject.ordinal()], handler);
67
68         eventDispatcherImpl.eventHandlerAdded(ref, handler);
69
70         assertEquals("Error, did not return the added handler", handlers[handlerTypeObject.ordinal()], handler);
71
72         eventDispatcherImpl.eventHandlerRemoved(ref);
73
74         assertNull("Error, handler should be null as it has just been removed", handlers[handlerTypeObject.ordinal()]);
75     }
76
77     /**
78      * Test method {@link EventDispatcherImpl#enqueueEvent(AbstractEvent)}
79      */
80     @Test
81     public void testEnqueueEvent() throws Exception{
82         BlockingQueue<AbstractEvent> events = (BlockingQueue<AbstractEvent>) getClassField("events");
83
84         assertEquals("Error, did not return the expected size, nothing has been added yet", 0, events.size());
85
86         eventDispatcherImpl.enqueueEvent(mock(AbstractEvent.class));
87
88         assertEquals("Error, did not return the expected size", 1, events.size());
89     }
90
91     /**
92      * Get the specified field from EventDispatcherImpl using reflection
93      * @param fieldName - the field to retrieve
94      * @return the desired field
95      */
96     private Object getClassField(String fieldName) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{
97         Field field = EventDispatcherImpl.class.getDeclaredField(fieldName);
98         field.setAccessible(true);
99         return field.get(eventDispatcherImpl);
100     }
101 }