BUG-9079 Make PCEP session recoverable from exception
[bgpcep.git] / pcep / topology-provider / src / test / java / org / opendaylight / bgpcep / pcep / topology / provider / PCEPStatefulPeerProposalTest.java
1 /*
2  * Copyright (c) 2015 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.bgpcep.pcep.topology.provider;
10
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertNull;
13 import static org.mockito.Mockito.*;
14
15 import com.google.common.base.Optional;
16 import com.google.common.util.concurrent.CheckedFuture;
17 import java.math.BigInteger;
18 import java.util.concurrent.ExecutionException;
19 import java.util.concurrent.Executor;
20 import org.junit.Before;
21 import org.junit.Test;
22 import org.mockito.Mock;
23 import org.mockito.MockitoAnnotations;
24 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
25 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
26 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
27 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.Stateful1;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.Stateful1Builder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.Tlvs3;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.lsp.db.version.tlv.LspDbVersion;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.lsp.db.version.tlv.LspDbVersionBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Tlvs1;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Tlvs1Builder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.stateful.capability.tlv.StatefulBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder;
37 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
38 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
39 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
40 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
41 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
42 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
43
44 public class PCEPStatefulPeerProposalTest {
45
46     private static final InstanceIdentifier<Topology> TOPOLOGY_IID = InstanceIdentifier.create(NetworkTopology.class)
47             .child(Topology.class, new TopologyKey(new TopologyId("topology")));
48     private static final NodeId NODE_ID = new NodeId("node");
49     private static final LspDbVersion LSP_DB_VERSION = new LspDbVersionBuilder().setLspDbVersionValue(
50             BigInteger.ONE).build();
51
52     @Mock
53     private DataBroker dataBroker;
54     @Mock
55     private CheckedFuture<Optional<LspDbVersion>, ReadFailedException> listenableFutureMock;
56     @Mock
57     private ReadOnlyTransaction rTxMock;
58     private TlvsBuilder tlvsBuilder;
59
60     @SuppressWarnings("unchecked")
61     @Before
62     public void setUp() throws InterruptedException, ExecutionException {
63         MockitoAnnotations.initMocks(this);
64         this.tlvsBuilder = new TlvsBuilder().addAugmentation(
65                 Tlvs1.class,
66                 new Tlvs1Builder().setStateful(
67                         new StatefulBuilder().addAugmentation(Stateful1.class, new Stateful1Builder().build()).build())
68                         .build());
69         doReturn(this.rTxMock).when(this.dataBroker).newReadOnlyTransaction();
70         doNothing().when(this.rTxMock).close();
71         doReturn(this.listenableFutureMock).when(this.rTxMock)
72                 .read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class));
73         doReturn(true).when(this.listenableFutureMock).isDone();
74         doAnswer(invocation -> {
75             final Runnable runnable = (Runnable) invocation.getArguments()[0];
76             runnable.run();
77             return null;
78         }).when(this.listenableFutureMock).addListener(any(Runnable.class), any(Executor.class));
79     }
80
81     @Test
82     public void testSetPeerProposalSuccess() throws InterruptedException, ExecutionException {
83         doReturn(Optional.of(LSP_DB_VERSION)).when(this.listenableFutureMock).get();
84         final PCEPStatefulPeerProposal peerProposal = PCEPStatefulPeerProposal.createStatefulPeerProposal(this.dataBroker,
85                 TOPOLOGY_IID);
86         peerProposal.setPeerProposal(NODE_ID, this.tlvsBuilder);
87         assertEquals(LSP_DB_VERSION, this.tlvsBuilder.getAugmentation(Tlvs3.class).getLspDbVersion());
88     }
89
90     @Test
91     public void testSetPeerProposalAbsent() throws InterruptedException, ExecutionException {
92         doReturn(Optional.absent()).when(this.listenableFutureMock).get();
93         final PCEPStatefulPeerProposal peerProposal = PCEPStatefulPeerProposal.createStatefulPeerProposal(this.dataBroker,
94                 TOPOLOGY_IID);
95         peerProposal.setPeerProposal(NODE_ID, this.tlvsBuilder);
96         assertNull(this.tlvsBuilder.getAugmentation(Tlvs3.class));
97     }
98
99     @Test
100     public void testSetPeerProposalFailure() throws InterruptedException, ExecutionException {
101         doThrow(new RuntimeException()).when(this.listenableFutureMock).get();
102         final PCEPStatefulPeerProposal peerProposal = PCEPStatefulPeerProposal.createStatefulPeerProposal(this.dataBroker,
103                 TOPOLOGY_IID);
104         peerProposal.setPeerProposal(NODE_ID, this.tlvsBuilder);
105         assertNull(this.tlvsBuilder.getAugmentation(Tlvs3.class));
106     }
107
108 }