Merge "Coverage - AggregatedFlowStatisticsTranslator"
[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
5 import com.google.common.base.Optional;
6 import com.google.common.util.concurrent.CheckedFuture;
7 import com.google.common.util.concurrent.Futures;
8 import com.google.common.util.concurrent.SettableFuture;
9 import io.netty.util.HashedWheelTimer;
10 import java.util.concurrent.atomic.AtomicLong;
11 import org.junit.Assert;
12 import org.junit.Before;
13 import org.junit.Test;
14 import org.junit.runner.RunWith;
15 import org.mockito.Mock;
16 import org.mockito.Mockito;
17 import org.mockito.invocation.InvocationOnMock;
18 import org.mockito.runners.MockitoJUnitRunner;
19 import org.mockito.stubbing.Answer;
20 import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain;
21 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
22 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
23 import org.opendaylight.controller.md.sal.binding.api.ReadTransaction;
24 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
25 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
26 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
27 import org.opendaylight.openflowjava.protocol.api.connection.ConnectionAdapter;
28 import org.opendaylight.openflowplugin.api.openflow.connection.ConnectionContext;
29 import org.opendaylight.openflowplugin.api.openflow.connection.OutboundQueueProvider;
30 import org.opendaylight.openflowplugin.api.openflow.device.DeviceState;
31 import org.opendaylight.openflowplugin.api.openflow.device.RequestContext;
32 import org.opendaylight.openflowplugin.api.openflow.device.TranslatorLibrary;
33 import org.opendaylight.openflowplugin.api.openflow.device.Xid;
34 import org.opendaylight.openflowplugin.api.openflow.statistics.ofpspecific.MessageIntelligenceAgency;
35 import org.opendaylight.openflowplugin.impl.util.DeviceStateUtil;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetAsyncReply;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReply;
41 import org.opendaylight.yangtools.concepts.Registration;
42 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
43 import org.opendaylight.yangtools.yang.common.RpcResult;
44 import org.slf4j.Logger;
45 import org.slf4j.LoggerFactory;
46
47 @RunWith(MockitoJUnitRunner.class)
48 public class DeviceContextImplTest {
49     private static final Logger LOG = LoggerFactory
50             .getLogger(DeviceContextImplTest.class);
51     Xid xid;
52     Xid xidMulti;
53     DeviceContextImpl deviceContext;
54     TransactionChainManager txChainManager;
55     @Mock
56     RequestContext<GetAsyncReply> requestContext;
57     @Mock
58     RequestContext<MultipartReply> requestContextMultiReply;
59
60     @Mock
61     ConnectionContext connectionContext;
62     @Mock
63     DeviceState deviceState;
64     @Mock
65     DataBroker dataBroker;
66     @Mock
67     WriteTransaction wTx;
68     @Mock
69     ReadOnlyTransaction rTx;
70     @Mock
71     BindingTransactionChain txChainFactory;
72     @Mock
73     HashedWheelTimer timer;
74     @Mock
75     MessageIntelligenceAgency messageIntelligenceAgency;
76     @Mock
77     OutboundQueueProvider outboundQueueProvider;
78     @Mock
79     ConnectionAdapter connectionAdapter;
80     NodeId nodeId = new NodeId("h2g2:42");
81     KeyedInstanceIdentifier<Node, NodeKey> nodeKeyIdent = DeviceStateUtil.createNodeInstanceIdentifier(nodeId);
82     @Mock
83     TranslatorLibrary translatorLibrary;
84     @Mock
85     Registration registration;
86
87     private final AtomicLong atomicLong = new AtomicLong(0);
88
89     @Before
90     public void setUp() {
91         final CheckedFuture<Optional<Node>, ReadFailedException> noExistNodeFuture = Futures.immediateCheckedFuture(Optional.<Node>absent());
92         Mockito.when(rTx.read(LogicalDatastoreType.OPERATIONAL, nodeKeyIdent)).thenReturn(noExistNodeFuture);
93         Mockito.when(dataBroker.newReadOnlyTransaction()).thenReturn(rTx);
94         Mockito.when(dataBroker.createTransactionChain(Mockito.any(TransactionChainManager.class))).thenReturn(txChainFactory);
95         Mockito.when(deviceState.getNodeInstanceIdentifier()).thenReturn(nodeKeyIdent);
96         txChainManager = new TransactionChainManager(dataBroker, nodeKeyIdent, registration);
97         final SettableFuture<RpcResult<GetAsyncReply>> settableFuture = SettableFuture.create();
98         final SettableFuture<RpcResult<MultipartReply>> settableFutureMultiReply = SettableFuture.create();
99         Mockito.when(requestContext.getFuture()).thenReturn(settableFuture);
100         Mockito.doAnswer(new Answer<Object>() {
101             @SuppressWarnings("unchecked")
102             @Override
103             public Object answer(final InvocationOnMock invocation) {
104                 settableFuture.set((RpcResult<GetAsyncReply>) invocation.getArguments()[0]);
105                 return null;
106             }
107         }).when(requestContext).setResult(any(RpcResult.class));
108
109         Mockito.when(requestContextMultiReply.getFuture()).thenReturn(settableFutureMultiReply);
110         Mockito.doAnswer(new Answer<Object>() {
111             @SuppressWarnings("unchecked")
112             @Override
113             public Object answer(final InvocationOnMock invocation) {
114                 settableFutureMultiReply.set((RpcResult<MultipartReply>) invocation.getArguments()[0]);
115                 return null;
116             }
117         }).when(requestContextMultiReply).setResult(any(RpcResult.class));
118         Mockito.when(txChainFactory.newWriteOnlyTransaction()).thenReturn(wTx);
119         Mockito.when(dataBroker.newReadOnlyTransaction()).thenReturn(rTx);
120         Mockito.when(connectionContext.getOutboundQueueProvider()).thenReturn(outboundQueueProvider);
121         Mockito.when(connectionContext.getConnectionAdapter()).thenReturn(connectionAdapter);
122         deviceContext = new DeviceContextImpl(connectionContext, deviceState, dataBroker, timer, messageIntelligenceAgency, outboundQueueProvider, translatorLibrary, txChainManager);
123
124         xid = new Xid(atomicLong.incrementAndGet());
125         xidMulti = new Xid(atomicLong.incrementAndGet());
126     }
127
128     @Test(expected = NullPointerException.class)
129     public void testDeviceContextImplConstructorNullDataBroker() throws Exception {
130         new DeviceContextImpl(connectionContext, deviceState, null, timer, messageIntelligenceAgency, outboundQueueProvider, translatorLibrary, txChainManager).close();
131     }
132
133     @Test(expected = NullPointerException.class)
134     public void testDeviceContextImplConstructorNullDeviceState() throws Exception {
135         new DeviceContextImpl(connectionContext, null, dataBroker, timer, messageIntelligenceAgency, outboundQueueProvider, translatorLibrary, txChainManager).close();
136     }
137
138     @Test(expected = NullPointerException.class)
139     public void testDeviceContextImplConstructorNullTimer() throws Exception {
140         new DeviceContextImpl(null, deviceState, dataBroker, null, messageIntelligenceAgency, outboundQueueProvider, translatorLibrary, txChainManager).close();
141     }
142
143     @Test
144     public void testGetDeviceState() {
145         final DeviceState deviceSt = deviceContext.getDeviceState();
146         Assert.assertNotNull(deviceSt);
147         Assert.assertEquals(deviceState, deviceSt);
148     }
149
150     @Test
151     public void testGetReadTransaction() {
152         final ReadTransaction readTx = deviceContext.getReadTransaction();
153         Assert.assertNotNull(readTx);
154         Assert.assertEquals(rTx, readTx);
155     }
156
157
158 }