556afe8efdf019d3382c78d66d6a761eba24be2d
[openflowplugin.git] / openflowplugin-impl / src / test / java / org / opendaylight / openflowplugin / impl / device / DeviceContextImplTest.java
1 package org.opendaylight.openflowplugin.impl.device;
2
3 import static org.mockito.Matchers.any;
4 import com.google.common.util.concurrent.SettableFuture;
5 import io.netty.util.HashedWheelTimer;
6 import java.util.ArrayList;
7 import java.util.Collections;
8 import java.util.List;
9 import java.util.concurrent.atomic.AtomicLong;
10 import org.junit.Assert;
11 import org.junit.Before;
12 import org.junit.Test;
13 import org.junit.runner.RunWith;
14 import org.mockito.Mock;
15 import org.mockito.Mockito;
16 import org.mockito.invocation.InvocationOnMock;
17 import org.mockito.runners.MockitoJUnitRunner;
18 import org.mockito.stubbing.Answer;
19 import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain;
20 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
21 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
22 import org.opendaylight.controller.md.sal.binding.api.ReadTransaction;
23 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
24 import org.opendaylight.openflowplugin.api.OFConstants;
25 import org.opendaylight.openflowplugin.api.openflow.connection.ConnectionContext;
26 import org.opendaylight.openflowplugin.api.openflow.connection.OutboundQueueProvider;
27 import org.opendaylight.openflowplugin.api.openflow.device.DeviceState;
28 import org.opendaylight.openflowplugin.api.openflow.device.RequestContext;
29 import org.opendaylight.openflowplugin.api.openflow.device.Xid;
30 import org.opendaylight.openflowplugin.api.openflow.statistics.ofpspecific.MessageIntelligenceAgency;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartRequestFlags;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.Error;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ErrorMessageBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetAsyncOutput;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetAsyncOutputBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetAsyncReply;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReply;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessageBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.async.body.grouping.FlowRemovedMask;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.async.body.grouping.PacketInMask;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.async.body.grouping.PortStatusMask;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyDescCase;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyDescCaseBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.desc._case.MultipartReplyDesc;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.desc._case.MultipartReplyDescBuilder;
46 import org.opendaylight.yangtools.yang.common.RpcResult;
47 import org.slf4j.Logger;
48 import org.slf4j.LoggerFactory;
49
50 @RunWith(MockitoJUnitRunner.class)
51 public class DeviceContextImplTest {
52     private static final Logger LOG = LoggerFactory
53             .getLogger(DeviceContextImplTest.class);
54     Xid xid;
55     Xid xidMulti;
56     DeviceContextImpl deviceContext;
57     TransactionChainManager txChainManager;
58     @Mock
59     RequestContext<GetAsyncReply> requestContext;
60     @Mock
61     RequestContext<MultipartReply> requestContextMultiReply;
62
63     @Mock
64     ConnectionContext connectionContext;
65     @Mock
66     DeviceState deviceState;
67     @Mock
68     DataBroker dataBroker;
69     @Mock
70     WriteTransaction wTx;
71     @Mock
72     ReadOnlyTransaction rTx;
73     @Mock
74     BindingTransactionChain txChainFactory;
75     @Mock
76     HashedWheelTimer timer;
77     @Mock
78     MessageIntelligenceAgency messageIntelligenceAgency;
79     @Mock
80     OutboundQueueProvider outboundQueueProvider;
81
82     private final AtomicLong atomicLong = new AtomicLong(0);
83
84     @Before
85     public void setUp() {
86         Mockito.when(dataBroker.createTransactionChain(Mockito.any(TransactionChainManager.class))).thenReturn(txChainFactory);
87         txChainManager = new TransactionChainManager(dataBroker, deviceState);
88         final SettableFuture<RpcResult<GetAsyncReply>> settableFuture = SettableFuture.create();
89         final SettableFuture<RpcResult<MultipartReply>> settableFutureMultiReply = SettableFuture.create();
90         Mockito.when(requestContext.getFuture()).thenReturn(settableFuture);
91         Mockito.doAnswer(new Answer<Object>() {
92             @SuppressWarnings("unchecked")
93             @Override
94             public Object answer(final InvocationOnMock invocation) {
95                 settableFuture.set((RpcResult<GetAsyncReply>) invocation.getArguments()[0]);
96                 return null;
97             }
98         }).when(requestContext).setResult(any(RpcResult.class));
99
100         Mockito.when(requestContextMultiReply.getFuture()).thenReturn(settableFutureMultiReply);
101         Mockito.doAnswer(new Answer<Object>() {
102             @SuppressWarnings("unchecked")
103             @Override
104             public Object answer(final InvocationOnMock invocation) {
105                 settableFutureMultiReply.set((RpcResult<MultipartReply>) invocation.getArguments()[0]);
106                 return null;
107             }
108         }).when(requestContextMultiReply).setResult(any(RpcResult.class));
109         Mockito.when(txChainFactory.newWriteOnlyTransaction()).thenReturn(wTx);
110         Mockito.when(dataBroker.newReadOnlyTransaction()).thenReturn(rTx);
111         Mockito.when(connectionContext.getOutboundQueueProvider()).thenReturn(outboundQueueProvider);
112         deviceContext = new DeviceContextImpl(connectionContext, deviceState, dataBroker, timer, messageIntelligenceAgency);
113
114         xid = new Xid(atomicLong.incrementAndGet());
115         xidMulti = new Xid(atomicLong.incrementAndGet());
116     }
117
118     @Test(expected = NullPointerException.class)
119     public void testDeviceContextImplConstructorNullConnectionContext() throws Exception {
120         new DeviceContextImpl(null, deviceState, dataBroker, timer, messageIntelligenceAgency).close();
121     }
122
123     @Test(expected = NullPointerException.class)
124     public void testDeviceContextImplConstructorNullDataBroker() throws Exception {
125         new DeviceContextImpl(connectionContext, deviceState, null, timer, messageIntelligenceAgency).close();
126     }
127
128     @Test(expected = NullPointerException.class)
129     public void testDeviceContextImplConstructorNullDeviceState() throws Exception {
130         new DeviceContextImpl(connectionContext, null, dataBroker, timer, messageIntelligenceAgency).close();
131     }
132
133     @Test(expected = NullPointerException.class)
134     public void testDeviceContextImplConstructorNullTimer() throws Exception {
135         new DeviceContextImpl(null, deviceState, dataBroker, null, messageIntelligenceAgency).close();
136     }
137
138     @Test
139     public void testGetDeviceState() {
140         final DeviceState deviceSt = deviceContext.getDeviceState();
141         Assert.assertNotNull(deviceSt);
142         Assert.assertEquals(deviceState, deviceSt);
143     }
144
145     @Test
146     public void testGetReadTransaction() {
147         final ReadTransaction readTx = deviceContext.getReadTransaction();
148         Assert.assertNotNull(readTx);
149         Assert.assertEquals(rTx, readTx);
150     }
151
152
153 }