2 * Copyright (c) 2016 Cisco 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
9 package org.opendaylight.netconf.topology.impl;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertSame;
13 import static org.junit.Assert.assertTrue;
14 import static org.junit.Assert.fail;
16 import com.google.common.collect.Lists;
17 import com.google.common.util.concurrent.Futures;
18 import com.google.common.util.concurrent.ListenableFuture;
19 import java.util.List;
20 import java.util.concurrent.ExecutionException;
21 import org.junit.Before;
22 import org.junit.Test;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.AvailableCapabilitiesBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.ClusteredConnectionStatusBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.available.capabilities.AvailableCapability;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.clustered.connection.status.NodeStatus;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.clustered.connection.status.NodeStatusBuilder;
31 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
32 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
34 public class NetconfNodeOperationalDataAggregatorTest {
36 private List<ListenableFuture<Node>> stateFutures;
38 private NetconfNodeOperationalDataAggregator aggregator;
42 aggregator = new NetconfNodeOperationalDataAggregator();
43 stateFutures = Lists.newArrayList();
47 public void testCombineCreateAttempts() throws ExecutionException, InterruptedException {
48 NetconfNode testingNode = new NetconfNodeBuilder().setAvailableCapabilities(
49 new AvailableCapabilitiesBuilder().setAvailableCapability(Lists.<AvailableCapability>newArrayList()).build())
50 .setClusteredConnectionStatus(new ClusteredConnectionStatusBuilder().setNodeStatus(Lists.newArrayList(
51 new NodeStatusBuilder().setStatus(NodeStatus.Status.Connected).build())).build())
52 .setConnectionStatus(NetconfNodeConnectionStatus.ConnectionStatus.Connected).build();
53 stateFutures.add(Futures.immediateFuture(new NodeBuilder().addAugmentation(NetconfNode.class, testingNode).build()));
55 ListenableFuture<Node> aggregatedCreateFuture = aggregator.combineCreateAttempts(stateFutures);
56 assertTrue(aggregatedCreateFuture.isDone());
58 NetconfNode aggregatedNode = aggregatedCreateFuture.get().getAugmentation(NetconfNode.class);
59 assertEquals(aggregatedNode.getClusteredConnectionStatus().getNodeStatus().get(0).getStatus(),
60 NodeStatus.Status.Connected);
64 public void testSuccessfulCombineUpdateAttempts() throws ExecutionException, InterruptedException {
65 NetconfNode testingNode = new NetconfNodeBuilder().setAvailableCapabilities(
66 new AvailableCapabilitiesBuilder().setAvailableCapability(Lists.<AvailableCapability>newArrayList()).build())
67 .setClusteredConnectionStatus(new ClusteredConnectionStatusBuilder().setNodeStatus(Lists.newArrayList(
68 new NodeStatusBuilder().setStatus(NodeStatus.Status.Connected).build())).build())
69 .setConnectionStatus(NetconfNodeConnectionStatus.ConnectionStatus.Connected).build();
70 stateFutures.add(Futures.immediateFuture(new NodeBuilder().addAugmentation(NetconfNode.class, testingNode).build()));
72 ListenableFuture<Node> aggregatedUpdateFuture = aggregator.combineUpdateAttempts(stateFutures);
73 assertTrue(aggregatedUpdateFuture.isDone());
75 NetconfNode aggregatedNode = aggregatedUpdateFuture.get().getAugmentation(NetconfNode.class);
76 assertEquals(aggregatedNode.getClusteredConnectionStatus().getNodeStatus().get(0).getStatus(),
77 NodeStatus.Status.Connected);
81 public void testSuccessfulCombineDeleteAttempts() throws ExecutionException, InterruptedException {
82 List deleteStateFutures = Lists.newArrayList(Futures.immediateFuture(null), Futures.immediateFuture(null));
84 ListenableFuture<Void> deleteFuture = aggregator.combineDeleteAttempts(deleteStateFutures);
85 assertTrue(deleteFuture.isDone());
86 assertEquals(deleteFuture.get(), null);
90 public void testFailedCombineDeleteAttempts() {
91 Exception cause = new Exception("Fail");
92 List deleteStateFutures = Lists.newArrayList(Futures.immediateFuture(null), Futures.immediateFuture(null),
93 Futures.immediateFailedFuture(cause));
95 ListenableFuture<Void> deleteFuture = aggregator.combineDeleteAttempts(deleteStateFutures);
96 assertTrue(deleteFuture.isDone());
100 fail("Exception expected");
101 } catch(Exception e) {
102 assertSame(e.getCause(), cause);