3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertFalse;
5 import static org.junit.Assert.assertTrue;
7 import java.util.concurrent.ExecutionException;
9 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
10 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
11 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
12 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker;
13 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
14 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
15 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
16 import org.opendaylight.controller.md.statistics.manager.StatisticsManagerActivator;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowFeatureCapabilityGroupStats;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.NodeGroupDescStats;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.NodeGroupFeatures;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.NodeGroupStatistics;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.group.features.GroupFeatures;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.Group;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
26 import org.opendaylight.yangtools.yang.binding.DataObject;
27 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
29 import test.mock.util.StatisticsManagerTest;
31 import com.google.common.base.Optional;
33 public class GroupStatisticsTest extends StatisticsManagerTest {
34 private final Object waitObject = new Object();
36 // @Test(timeout = 5000)
37 public void addedGroupOnDemandStatsTest() throws ExecutionException, InterruptedException, ReadFailedException {
38 final StatisticsManagerActivator activator = new StatisticsManagerActivator();
39 activator.onSessionInitiated(providerContext);
41 addFlowCapableNode(s1Key);
43 final Group group = getGroup();
45 final InstanceIdentifier<Group> groupII = InstanceIdentifier.create(Nodes.class).child(Node.class, s1Key)
46 .augmentation(FlowCapableNode.class).child(Group.class, group.getKey());
48 final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
49 writeTx.put(LogicalDatastoreType.CONFIGURATION, groupII, group);
50 writeTx.put(LogicalDatastoreType.OPERATIONAL, groupII, group);
51 assertCommit(writeTx.submit());
53 getDataBroker().registerDataChangeListener(LogicalDatastoreType.OPERATIONAL,
54 groupII.augmentation(NodeGroupStatistics.class), new ChangeListener(), AsyncDataBroker.DataChangeScope.BASE);
56 synchronized (waitObject) {
60 final ReadOnlyTransaction readTx = getDataBroker().newReadOnlyTransaction();
61 final Optional<NodeGroupStatistics> groupOptional = readTx.read(LogicalDatastoreType.OPERATIONAL, groupII.augmentation(NodeGroupStatistics.class)).checkedGet();
62 assertTrue(groupOptional.isPresent());
63 assertEquals(COUNTER_64_TEST_VALUE, groupOptional.get().getGroupStatistics().getByteCount());
66 // @Test(timeout = 5000)
67 public void deletedGroupStasRemovalTest() throws ExecutionException, InterruptedException, ReadFailedException {
68 final StatisticsManagerActivator activator = new StatisticsManagerActivator();
69 activator.onSessionInitiated(providerContext);
71 addFlowCapableNode(s1Key);
73 final Group group = getGroup();
74 final InstanceIdentifier<Group> groupII = InstanceIdentifier.create(Nodes.class).child(Node.class, s1Key)
75 .augmentation(FlowCapableNode.class).child(Group.class, group.getKey());
77 WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
78 writeTx.put(LogicalDatastoreType.CONFIGURATION, groupII, group);
79 writeTx.put(LogicalDatastoreType.OPERATIONAL, groupII, group);
80 assertCommit(writeTx.submit());
82 getDataBroker().registerDataChangeListener(LogicalDatastoreType.OPERATIONAL,
83 groupII.augmentation(NodeGroupStatistics.class), new ChangeListener(), AsyncDataBroker.DataChangeScope.BASE);
85 synchronized (waitObject) {
89 ReadOnlyTransaction readTx = getDataBroker().newReadOnlyTransaction();
90 Optional<NodeGroupStatistics> groupOptional = readTx.read(LogicalDatastoreType.OPERATIONAL,
91 groupII.augmentation(NodeGroupStatistics.class)).checkedGet();
92 assertTrue(groupOptional.isPresent());
93 assertEquals(COUNTER_64_TEST_VALUE, groupOptional.get().getGroupStatistics().getByteCount());
95 writeTx = getDataBroker().newWriteOnlyTransaction();
96 writeTx.delete(LogicalDatastoreType.CONFIGURATION, groupII);
97 assertCommit(writeTx.submit());
99 readTx = getDataBroker().newReadOnlyTransaction();
100 groupOptional = readTx.read(LogicalDatastoreType.OPERATIONAL,
101 groupII.augmentation(NodeGroupStatistics.class)).checkedGet();
102 assertFalse(groupOptional.isPresent());
106 // @Test(timeout = 23000)
107 public void getAllStatsFromConnectedNodeTest() throws ExecutionException, InterruptedException {
108 final StatisticsManagerActivator activator = new StatisticsManagerActivator();
109 activator.onSessionInitiated(providerContext);
111 addFlowCapableNodeWithFeatures(s1Key, false, FlowFeatureCapabilityGroupStats.class);
113 final InstanceIdentifier<Group> groupII = InstanceIdentifier.create(Nodes.class).child(Node.class, s1Key)
114 .augmentation(FlowCapableNode.class).child(Group.class, getGroup().getKey());
115 getDataBroker().registerDataChangeListener(LogicalDatastoreType.OPERATIONAL,
116 groupII.augmentation(NodeGroupStatistics.class), new ChangeListener(), AsyncDataBroker.DataChangeScope.BASE);
118 synchronized (waitObject) {
122 ReadOnlyTransaction readTx = getDataBroker().newReadOnlyTransaction();
123 final Optional<Group> optionalGroup = readTx.read(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(Nodes.class)
124 .child(Node.class, s1Key).augmentation(FlowCapableNode.class)
125 .child(Group.class, getGroup().getKey())).get();
127 assertTrue(optionalGroup.isPresent());
128 assertTrue(optionalGroup.get().getAugmentation(NodeGroupDescStats.class) != null);
129 final NodeGroupStatistics groupStats = optionalGroup.get().getAugmentation(NodeGroupStatistics.class);
130 assertTrue(groupStats != null);
131 assertEquals(COUNTER_64_TEST_VALUE, groupStats.getGroupStatistics().getByteCount());
133 readTx = getDataBroker().newReadOnlyTransaction();
134 final Optional<GroupFeatures> optionalGroupFeatures = readTx.read(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(Nodes.class)
135 .child(Node.class, s1Key).augmentation(NodeGroupFeatures.class).child(GroupFeatures.class)).get();
136 assertTrue(optionalGroupFeatures.isPresent());
137 assertEquals(1, optionalGroupFeatures.get().getMaxGroups().size());
138 assertEquals(MAX_GROUPS_TEST_VALUE, optionalGroupFeatures.get().getMaxGroups().get(0));
141 private class ChangeListener implements DataChangeListener {
144 public void onDataChanged(final AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> change) {
145 synchronized (waitObject) {