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