2 * Copyright (c) 2015 Brocade Communications Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.openflowplugin.applications.statistics.manager.impl;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertSame;
12 import static org.mockito.Mockito.doAnswer;
13 import static org.mockito.Mockito.doReturn;
14 import static org.mockito.Mockito.mock;
15 import static org.mockito.Mockito.never;
16 import static org.mockito.Mockito.times;
17 import static org.mockito.Mockito.verify;
18 import com.google.common.base.Optional;
19 import com.google.common.util.concurrent.CheckedFuture;
20 import com.google.common.util.concurrent.Futures;
21 import org.junit.Before;
22 import org.junit.Test;
23 import org.mockito.Mock;
24 import org.mockito.MockitoAnnotations;
25 import org.mockito.invocation.InvocationOnMock;
26 import org.mockito.stubbing.Answer;
27 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
28 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
29 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
30 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
31 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
32 import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
33 import org.opendaylight.openflowplugin.applications.statistics.manager.StatisticsManager;
34 import org.opendaylight.yangtools.yang.binding.DataObject;
35 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
36 import org.opendaylight.yangtools.yang.binding.NotificationListener;
39 * Unit tests for StatAbstractListenCommit.
41 * @author Thomas Pantelis
43 public class StatAbstractListenCommitTest {
46 private NotificationProviderService mockNotificationProviderService;
49 private StatisticsManager mockStatisticsManager;
52 private DataBroker mockDataBroker;
55 private NotificationListener mockNotificationListener;
57 @SuppressWarnings("rawtypes")
58 private StatAbstractListenCommit statCommit;
60 @SuppressWarnings({ "rawtypes", "unchecked" })
63 MockitoAnnotations.initMocks(this);
65 statCommit = new StatAbstractListenCommit(mockStatisticsManager, mockDataBroker,
66 mockNotificationProviderService, DataObject.class) {
68 protected InstanceIdentifier getWildCardedRegistrationPath() {
69 return InstanceIdentifier.create(DataObject.class);
73 protected NotificationListener getStatNotificationListener() {
74 return mockNotificationListener;
80 @SuppressWarnings("unchecked")
82 public void testReadLatestConfiguration() {
84 InstanceIdentifier<DataObject> path = InstanceIdentifier.create(DataObject.class);
86 ReadOnlyTransaction mockReadTx = mock(ReadOnlyTransaction.class);
87 doReturn(mockReadTx).when(mockDataBroker).newReadOnlyTransaction();
89 Optional<DataObject> expected = Optional.of(mock(DataObject.class));
90 doReturn(Futures.immediateCheckedFuture(expected)).when(mockReadTx).read(
91 LogicalDatastoreType.CONFIGURATION, path);
93 Optional<DataObject> actual = statCommit.readLatestConfiguration(path);
95 assertSame("Optional instance", expected, actual);
97 actual = statCommit.readLatestConfiguration(path);
99 assertSame("Optional instance", expected, actual);
101 verify(mockReadTx, never()).close();
102 verify(mockDataBroker).newReadOnlyTransaction();
105 @SuppressWarnings("unchecked")
107 public void testReadLatestConfigurationWithReadFailure() {
109 InstanceIdentifier<DataObject> path = InstanceIdentifier.create(DataObject.class);
111 ReadOnlyTransaction mockReadTx1 = mock(ReadOnlyTransaction.class);
112 ReadOnlyTransaction mockReadTx2 = mock(ReadOnlyTransaction.class);
113 ReadOnlyTransaction mockReadTx3 = mock(ReadOnlyTransaction.class);
114 doReturn(mockReadTx1).doReturn(mockReadTx2).doReturn(mockReadTx3).when(mockDataBroker).newReadOnlyTransaction();
116 doReturn(Futures.immediateFailedCheckedFuture(new ReadFailedException("mock"))).when(mockReadTx1).read(
117 LogicalDatastoreType.CONFIGURATION, path);
119 doReturn(Futures.immediateFailedCheckedFuture(new ReadFailedException("mock"))).when(mockReadTx2).read(
120 LogicalDatastoreType.CONFIGURATION, path);
122 Optional<DataObject> expected = Optional.of(mock(DataObject.class));
123 doReturn(Futures.immediateCheckedFuture(expected)).when(mockReadTx3).read(
124 LogicalDatastoreType.CONFIGURATION, path);
126 Optional<DataObject> actual = statCommit.readLatestConfiguration(path);
128 assertEquals("Optional isPresent", false, actual.isPresent());
130 actual = statCommit.readLatestConfiguration(path);
132 assertSame("Optional instance", expected, actual);
135 @SuppressWarnings("unchecked")
137 public void testReadLatestConfigurationWithInterveningOnDataChanged() {
139 InstanceIdentifier<DataObject> path = InstanceIdentifier.create(DataObject.class);
141 ReadOnlyTransaction mockReadTx1 = mock(ReadOnlyTransaction.class);
142 ReadOnlyTransaction mockReadTx2 = mock(ReadOnlyTransaction.class);
143 doReturn(mockReadTx1).doReturn(mockReadTx2).when(mockDataBroker).newReadOnlyTransaction();
145 final Optional<DataObject> expected1 = Optional.of(mock(DataObject.class));
146 Answer<CheckedFuture<Optional<DataObject>, ReadFailedException>> answer =
147 new Answer<CheckedFuture<Optional<DataObject>, ReadFailedException>>() {
149 public CheckedFuture<Optional<DataObject>, ReadFailedException> answer(
150 InvocationOnMock unused) {
151 statCommit.onDataChanged(mock(AsyncDataChangeEvent.class));
152 return Futures.immediateCheckedFuture(expected1);
156 doAnswer(answer).when(mockReadTx1).read(LogicalDatastoreType.CONFIGURATION, path);
158 Optional<DataObject> expected2 = Optional.of(mock(DataObject.class));
159 doReturn(Futures.immediateCheckedFuture(expected2)).when(mockReadTx2).read(
160 LogicalDatastoreType.CONFIGURATION, path);
162 Optional<DataObject> actual = statCommit.readLatestConfiguration(path);
164 assertSame("Optional instance", expected1, actual);
166 actual = statCommit.readLatestConfiguration(path);
168 assertSame("Optional instance", expected2, actual);
170 actual = statCommit.readLatestConfiguration(path);
172 assertSame("Optional instance", expected2, actual);
174 verify(mockReadTx1).close();
175 verify(mockReadTx2, never()).close();
176 verify(mockDataBroker, times(2)).newReadOnlyTransaction();