1 package org.opendaylight.openflowplugin.impl.device;
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;
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;
50 @RunWith(MockitoJUnitRunner.class)
51 public class DeviceContextImplTest {
52 private static final Logger LOG = LoggerFactory
53 .getLogger(DeviceContextImplTest.class);
56 DeviceContextImpl deviceContext;
57 TransactionChainManager txChainManager;
59 RequestContext<GetAsyncReply> requestContext;
61 RequestContext<MultipartReply> requestContextMultiReply;
64 ConnectionContext connectionContext;
66 DeviceState deviceState;
68 DataBroker dataBroker;
72 ReadOnlyTransaction rTx;
74 BindingTransactionChain txChainFactory;
76 HashedWheelTimer timer;
78 MessageIntelligenceAgency messageIntelligenceAgency;
80 OutboundQueueProvider outboundQueueProvider;
82 private final AtomicLong atomicLong = new AtomicLong(0);
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")
94 public Object answer(final InvocationOnMock invocation) {
95 settableFuture.set((RpcResult<GetAsyncReply>) invocation.getArguments()[0]);
98 }).when(requestContext).setResult(any(RpcResult.class));
100 Mockito.when(requestContextMultiReply.getFuture()).thenReturn(settableFutureMultiReply);
101 Mockito.doAnswer(new Answer<Object>() {
102 @SuppressWarnings("unchecked")
104 public Object answer(final InvocationOnMock invocation) {
105 settableFutureMultiReply.set((RpcResult<MultipartReply>) invocation.getArguments()[0]);
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);
114 xid = new Xid(atomicLong.incrementAndGet());
115 xidMulti = new Xid(atomicLong.incrementAndGet());
118 @Test(expected = NullPointerException.class)
119 public void testDeviceContextImplConstructorNullConnectionContext() throws Exception {
120 new DeviceContextImpl(null, deviceState, dataBroker, timer, messageIntelligenceAgency).close();
123 @Test(expected = NullPointerException.class)
124 public void testDeviceContextImplConstructorNullDataBroker() throws Exception {
125 new DeviceContextImpl(connectionContext, deviceState, null, timer, messageIntelligenceAgency).close();
128 @Test(expected = NullPointerException.class)
129 public void testDeviceContextImplConstructorNullDeviceState() throws Exception {
130 new DeviceContextImpl(connectionContext, null, dataBroker, timer, messageIntelligenceAgency).close();
133 @Test(expected = NullPointerException.class)
134 public void testDeviceContextImplConstructorNullTimer() throws Exception {
135 new DeviceContextImpl(null, deviceState, dataBroker, null, messageIntelligenceAgency).close();
139 public void testGetDeviceState() {
140 final DeviceState deviceSt = deviceContext.getDeviceState();
141 Assert.assertNotNull(deviceSt);
142 Assert.assertEquals(deviceState, deviceSt);
146 public void testGetReadTransaction() {
147 final ReadTransaction readTx = deviceContext.getReadTransaction();
148 Assert.assertNotNull(readTx);
149 Assert.assertEquals(rTx, readTx);