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
8 package org.opendaylight.bgpcep.pcep.topology.provider;
10 import static org.junit.Assert.assertArrayEquals;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertNull;
13 import static org.mockito.ArgumentMatchers.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.util.concurrent.FluentFuture;
20 import java.util.Optional;
21 import java.util.concurrent.ExecutionException;
22 import java.util.concurrent.Executor;
23 import org.junit.Before;
24 import org.junit.Test;
25 import org.mockito.Mock;
26 import org.mockito.MockitoAnnotations;
27 import org.opendaylight.mdsal.binding.api.DataBroker;
28 import org.opendaylight.mdsal.binding.api.ReadTransaction;
29 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev181109.Stateful1Builder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev181109.Tlvs3;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev181109.lsp.db.version.tlv.LspDbVersion;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev181109.lsp.db.version.tlv.LspDbVersionBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.Tlvs1Builder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.stateful.capability.tlv.StatefulBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.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 import org.opendaylight.yangtools.yang.common.Uint64;
45 public class PCEPStatefulPeerProposalTest {
47 private static final InstanceIdentifier<Topology> TOPOLOGY_IID = InstanceIdentifier.create(NetworkTopology.class)
48 .child(Topology.class, new TopologyKey(new TopologyId("topology")));
49 private static final NodeId NODE_ID = new NodeId("node");
50 private static final LspDbVersion LSP_DB_VERSION = new LspDbVersionBuilder().setLspDbVersionValue(Uint64.ONE)
52 private static final byte[] SPEAKER_ID = {0x01, 0x02, 0x03, 0x04};
55 private DataBroker dataBroker;
57 private FluentFuture<Optional<LspDbVersion>> listenableFutureMock;
59 private ReadTransaction rt;
60 private TlvsBuilder tlvsBuilder;
62 @SuppressWarnings("unchecked")
65 MockitoAnnotations.initMocks(this);
66 this.tlvsBuilder = new TlvsBuilder().addAugmentation(new Tlvs1Builder()
67 .setStateful(new StatefulBuilder().addAugmentation(new Stateful1Builder().build()).build())
69 doReturn(this.rt).when(this.dataBroker).newReadOnlyTransaction();
70 doNothing().when(this.rt).close();
71 doReturn(this.listenableFutureMock).when(this.rt)
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];
78 }).when(this.listenableFutureMock).addListener(any(Runnable.class), any(Executor.class));
82 public void testSetPeerProposalSuccess() throws InterruptedException, ExecutionException {
83 doReturn(Optional.of(LSP_DB_VERSION)).when(this.listenableFutureMock).get();
84 final PCEPStatefulPeerProposal peerProposal = PCEPStatefulPeerProposal
85 .createStatefulPeerProposal(this.dataBroker, TOPOLOGY_IID);
86 peerProposal.setPeerProposal(NODE_ID, this.tlvsBuilder, null);
87 assertEquals(LSP_DB_VERSION, this.tlvsBuilder.augmentation(Tlvs3.class).getLspDbVersion());
91 public void testSetPeerProposalWithEntityIdSuccess() throws InterruptedException, ExecutionException {
92 doReturn(Optional.of(LSP_DB_VERSION)).when(this.listenableFutureMock).get();
93 final PCEPStatefulPeerProposal peerProposal = PCEPStatefulPeerProposal
94 .createStatefulPeerProposal(this.dataBroker, TOPOLOGY_IID);
95 peerProposal.setPeerProposal(NODE_ID, this.tlvsBuilder, SPEAKER_ID);
96 final Tlvs3 aug = this.tlvsBuilder.augmentation(Tlvs3.class);
97 assertEquals(LSP_DB_VERSION, aug.getLspDbVersion());
98 assertArrayEquals(SPEAKER_ID, aug.getSpeakerEntityId().getSpeakerEntityIdValue());
102 public void testSetPeerProposalAbsent() throws InterruptedException, ExecutionException {
103 doReturn(Optional.empty()).when(this.listenableFutureMock).get();
104 final PCEPStatefulPeerProposal peerProposal = PCEPStatefulPeerProposal
105 .createStatefulPeerProposal(this.dataBroker, TOPOLOGY_IID);
106 peerProposal.setPeerProposal(NODE_ID, this.tlvsBuilder, null);
107 assertNull(this.tlvsBuilder.augmentation(Tlvs3.class));
111 public void testSetPeerProposalFailure() throws InterruptedException, ExecutionException {
112 doThrow(new InterruptedException()).when(this.listenableFutureMock).get();
113 final PCEPStatefulPeerProposal peerProposal = PCEPStatefulPeerProposal
114 .createStatefulPeerProposal(this.dataBroker, TOPOLOGY_IID);
115 peerProposal.setPeerProposal(NODE_ID, this.tlvsBuilder, null);
116 assertNull(this.tlvsBuilder.augmentation(Tlvs3.class));