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.openflowjava.protocol.api.connection.ConnectionAdapter;
25 import org.opendaylight.openflowplugin.api.OFConstants;
26 import org.opendaylight.openflowplugin.api.openflow.connection.ConnectionContext;
27 import org.opendaylight.openflowplugin.api.openflow.connection.OutboundQueueProvider;
28 import org.opendaylight.openflowplugin.api.openflow.device.DeviceState;
29 import org.opendaylight.openflowplugin.api.openflow.device.RequestContext;
30 import org.opendaylight.openflowplugin.api.openflow.device.Xid;
31 import org.opendaylight.openflowplugin.api.openflow.statistics.ofpspecific.MessageIntelligenceAgency;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartRequestFlags;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.Error;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ErrorMessageBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetAsyncOutput;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetAsyncOutputBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetAsyncReply;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReply;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessageBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.async.body.grouping.FlowRemovedMask;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.async.body.grouping.PacketInMask;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.async.body.grouping.PortStatusMask;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyDescCase;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyDescCaseBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.desc._case.MultipartReplyDesc;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.desc._case.MultipartReplyDescBuilder;
47 import org.opendaylight.yangtools.yang.common.RpcResult;
48 import org.slf4j.Logger;
49 import org.slf4j.LoggerFactory;
51 @RunWith(MockitoJUnitRunner.class)
52 public class DeviceContextImplTest {
53 private static final Logger LOG = LoggerFactory
54 .getLogger(DeviceContextImplTest.class);
57 DeviceContextImpl deviceContext;
58 TransactionChainManager txChainManager;
60 RequestContext<GetAsyncReply> requestContext;
62 RequestContext<MultipartReply> requestContextMultiReply;
65 ConnectionContext connectionContext;
67 DeviceState deviceState;
69 DataBroker dataBroker;
73 ReadOnlyTransaction rTx;
75 BindingTransactionChain txChainFactory;
77 HashedWheelTimer timer;
79 MessageIntelligenceAgency messageIntelligenceAgency;
81 OutboundQueueProvider outboundQueueProvider;
83 ConnectionAdapter connectionAdapter;
85 private final AtomicLong atomicLong = new AtomicLong(0);
89 Mockito.when(dataBroker.createTransactionChain(Mockito.any(TransactionChainManager.class))).thenReturn(txChainFactory);
90 txChainManager = new TransactionChainManager(dataBroker, deviceState);
91 final SettableFuture<RpcResult<GetAsyncReply>> settableFuture = SettableFuture.create();
92 final SettableFuture<RpcResult<MultipartReply>> settableFutureMultiReply = SettableFuture.create();
93 Mockito.when(requestContext.getFuture()).thenReturn(settableFuture);
94 Mockito.doAnswer(new Answer<Object>() {
95 @SuppressWarnings("unchecked")
97 public Object answer(final InvocationOnMock invocation) {
98 settableFuture.set((RpcResult<GetAsyncReply>) invocation.getArguments()[0]);
101 }).when(requestContext).setResult(any(RpcResult.class));
103 Mockito.when(requestContextMultiReply.getFuture()).thenReturn(settableFutureMultiReply);
104 Mockito.doAnswer(new Answer<Object>() {
105 @SuppressWarnings("unchecked")
107 public Object answer(final InvocationOnMock invocation) {
108 settableFutureMultiReply.set((RpcResult<MultipartReply>) invocation.getArguments()[0]);
111 }).when(requestContextMultiReply).setResult(any(RpcResult.class));
112 Mockito.when(txChainFactory.newWriteOnlyTransaction()).thenReturn(wTx);
113 Mockito.when(dataBroker.newReadOnlyTransaction()).thenReturn(rTx);
114 Mockito.when(connectionContext.getOutboundQueueProvider()).thenReturn(outboundQueueProvider);
115 Mockito.when(connectionContext.getConnectionAdapter()).thenReturn(connectionAdapter);
116 deviceContext = new DeviceContextImpl(connectionContext, deviceState, dataBroker, timer, messageIntelligenceAgency, outboundQueueProvider);
118 xid = new Xid(atomicLong.incrementAndGet());
119 xidMulti = new Xid(atomicLong.incrementAndGet());
122 @Test(expected = NullPointerException.class)
123 public void testDeviceContextImplConstructorNullConnectionContext() throws Exception {
124 new DeviceContextImpl(null, deviceState, dataBroker, timer, messageIntelligenceAgency, outboundQueueProvider).close();
127 @Test(expected = NullPointerException.class)
128 public void testDeviceContextImplConstructorNullDataBroker() throws Exception {
129 new DeviceContextImpl(connectionContext, deviceState, null, timer, messageIntelligenceAgency, outboundQueueProvider).close();
132 @Test(expected = NullPointerException.class)
133 public void testDeviceContextImplConstructorNullDeviceState() throws Exception {
134 new DeviceContextImpl(connectionContext, null, dataBroker, timer, messageIntelligenceAgency, outboundQueueProvider).close();
137 @Test(expected = NullPointerException.class)
138 public void testDeviceContextImplConstructorNullTimer() throws Exception {
139 new DeviceContextImpl(null, deviceState, dataBroker, null, messageIntelligenceAgency, outboundQueueProvider).close();
143 public void testGetDeviceState() {
144 final DeviceState deviceSt = deviceContext.getDeviceState();
145 Assert.assertNotNull(deviceSt);
146 Assert.assertEquals(deviceState, deviceSt);
150 public void testGetReadTransaction() {
151 final ReadTransaction readTx = deviceContext.getReadTransaction();
152 Assert.assertNotNull(readTx);
153 Assert.assertEquals(rTx, readTx);