Bug 6714 - Use singleton service in clustered netconf topology
[netconf.git] / netconf / netconf-topology / src / test / java / org / opendaylight / netconf / topology / impl / NetconfNodeOperationalDataAggregatorTest.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.netconf.topology.impl;
10
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;
15
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;
33
34 public class NetconfNodeOperationalDataAggregatorTest {
35
36     private List<ListenableFuture<Node>> stateFutures;
37
38     private NetconfNodeOperationalDataAggregator aggregator;
39
40     @Before
41     public void setUp() {
42         aggregator = new NetconfNodeOperationalDataAggregator();
43         stateFutures = Lists.newArrayList();
44     }
45
46     @Test
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()));
54
55         ListenableFuture<Node> aggregatedCreateFuture = aggregator.combineCreateAttempts(stateFutures);
56         assertTrue(aggregatedCreateFuture.isDone());
57
58         NetconfNode aggregatedNode = aggregatedCreateFuture.get().getAugmentation(NetconfNode.class);
59         assertEquals(aggregatedNode.getClusteredConnectionStatus().getNodeStatus().get(0).getStatus(),
60                 NodeStatus.Status.Connected);
61     }
62
63     @Test
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()));
71
72         ListenableFuture<Node> aggregatedUpdateFuture = aggregator.combineUpdateAttempts(stateFutures);
73         assertTrue(aggregatedUpdateFuture.isDone());
74
75         NetconfNode aggregatedNode = aggregatedUpdateFuture.get().getAugmentation(NetconfNode.class);
76         assertEquals(aggregatedNode.getClusteredConnectionStatus().getNodeStatus().get(0).getStatus(),
77                 NodeStatus.Status.Connected);
78     }
79
80     @Test
81     public void testSuccessfulCombineDeleteAttempts() throws ExecutionException, InterruptedException {
82         List deleteStateFutures = Lists.newArrayList(Futures.immediateFuture(null), Futures.immediateFuture(null));
83
84         ListenableFuture<Void> deleteFuture = aggregator.combineDeleteAttempts(deleteStateFutures);
85         assertTrue(deleteFuture.isDone());
86         assertEquals(deleteFuture.get(), null);
87     }
88
89     @Test
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));
94
95         ListenableFuture<Void> deleteFuture = aggregator.combineDeleteAttempts(deleteStateFutures);
96         assertTrue(deleteFuture.isDone());
97
98         try {
99             deleteFuture.get();
100             fail("Exception expected");
101         } catch(Exception e) {
102             assertSame(e.getCause(), cause);
103         }
104     }
105 }