Merge "Cleanup IpConversionUtil"
[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.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;
50
51 @RunWith(MockitoJUnitRunner.class)
52 public class DeviceContextImplTest {
53     private static final Logger LOG = LoggerFactory
54             .getLogger(DeviceContextImplTest.class);
55     Xid xid;
56     Xid xidMulti;
57     DeviceContextImpl deviceContext;
58     TransactionChainManager txChainManager;
59     @Mock
60     RequestContext<GetAsyncReply> requestContext;
61     @Mock
62     RequestContext<MultipartReply> requestContextMultiReply;
63
64     @Mock
65     ConnectionContext connectionContext;
66     @Mock
67     DeviceState deviceState;
68     @Mock
69     DataBroker dataBroker;
70     @Mock
71     WriteTransaction wTx;
72     @Mock
73     ReadOnlyTransaction rTx;
74     @Mock
75     BindingTransactionChain txChainFactory;
76     @Mock
77     HashedWheelTimer timer;
78     @Mock
79     MessageIntelligenceAgency messageIntelligenceAgency;
80     @Mock
81     OutboundQueueProvider outboundQueueProvider;
82     @Mock
83     ConnectionAdapter connectionAdapter;
84
85     private final AtomicLong atomicLong = new AtomicLong(0);
86
87     @Before
88     public void setUp() {
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")
96             @Override
97             public Object answer(final InvocationOnMock invocation) {
98                 settableFuture.set((RpcResult<GetAsyncReply>) invocation.getArguments()[0]);
99                 return null;
100             }
101         }).when(requestContext).setResult(any(RpcResult.class));
102
103         Mockito.when(requestContextMultiReply.getFuture()).thenReturn(settableFutureMultiReply);
104         Mockito.doAnswer(new Answer<Object>() {
105             @SuppressWarnings("unchecked")
106             @Override
107             public Object answer(final InvocationOnMock invocation) {
108                 settableFutureMultiReply.set((RpcResult<MultipartReply>) invocation.getArguments()[0]);
109                 return null;
110             }
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);
117
118         xid = new Xid(atomicLong.incrementAndGet());
119         xidMulti = new Xid(atomicLong.incrementAndGet());
120     }
121
122     @Test(expected = NullPointerException.class)
123     public void testDeviceContextImplConstructorNullConnectionContext() throws Exception {
124         new DeviceContextImpl(null, deviceState, dataBroker, timer, messageIntelligenceAgency, outboundQueueProvider).close();
125     }
126
127     @Test(expected = NullPointerException.class)
128     public void testDeviceContextImplConstructorNullDataBroker() throws Exception {
129         new DeviceContextImpl(connectionContext, deviceState, null, timer, messageIntelligenceAgency, outboundQueueProvider).close();
130     }
131
132     @Test(expected = NullPointerException.class)
133     public void testDeviceContextImplConstructorNullDeviceState() throws Exception {
134         new DeviceContextImpl(connectionContext, null, dataBroker, timer, messageIntelligenceAgency, outboundQueueProvider).close();
135     }
136
137     @Test(expected = NullPointerException.class)
138     public void testDeviceContextImplConstructorNullTimer() throws Exception {
139         new DeviceContextImpl(null, deviceState, dataBroker, null, messageIntelligenceAgency, outboundQueueProvider).close();
140     }
141
142     @Test
143     public void testGetDeviceState() {
144         final DeviceState deviceSt = deviceContext.getDeviceState();
145         Assert.assertNotNull(deviceSt);
146         Assert.assertEquals(deviceState, deviceSt);
147     }
148
149     @Test
150     public void testGetReadTransaction() {
151         final ReadTransaction readTx = deviceContext.getReadTransaction();
152         Assert.assertNotNull(readTx);
153         Assert.assertEquals(rTx, readTx);
154     }
155
156
157 }