Add new revision for pcep types model
[bgpcep.git] / pcep / topology / 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.assertArrayEquals;
12 import static org.junit.Assert.assertEquals;
13 import static org.junit.Assert.assertNull;
14 import static org.mockito.ArgumentMatchers.any;
15 import static org.mockito.Mockito.doAnswer;
16 import static org.mockito.Mockito.doNothing;
17 import static org.mockito.Mockito.doReturn;
18 import static org.mockito.Mockito.doThrow;
19
20 import com.google.common.util.concurrent.FluentFuture;
21 import java.math.BigInteger;
22 import java.util.Optional;
23 import java.util.concurrent.ExecutionException;
24 import java.util.concurrent.Executor;
25 import org.junit.Before;
26 import org.junit.Test;
27 import org.mockito.Mock;
28 import org.mockito.MockitoAnnotations;
29 import org.opendaylight.mdsal.binding.api.DataBroker;
30 import org.opendaylight.mdsal.binding.api.ReadTransaction;
31 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev181109.Stateful1;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev181109.Stateful1Builder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev181109.Tlvs3;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev181109.lsp.db.version.tlv.LspDbVersion;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev181109.lsp.db.version.tlv.LspDbVersionBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.Tlvs1;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.Tlvs1Builder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.stateful.capability.tlv.StatefulBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.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;
47
48 public class PCEPStatefulPeerProposalTest {
49
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();
55     private static final byte[] SPEAKER_ID = {0x01, 0x02, 0x03, 0x04};
56
57     @Mock
58     private DataBroker dataBroker;
59     @Mock
60     private FluentFuture<Optional<LspDbVersion>> listenableFutureMock;
61     @Mock
62     private ReadTransaction rt;
63     private TlvsBuilder tlvsBuilder;
64
65     @SuppressWarnings("unchecked")
66     @Before
67     public void setUp() {
68         MockitoAnnotations.initMocks(this);
69         this.tlvsBuilder = new TlvsBuilder().addAugmentation(
70                 Tlvs1.class,
71                 new Tlvs1Builder().setStateful(
72                         new StatefulBuilder().addAugmentation(Stateful1.class, new Stateful1Builder().build()).build())
73                         .build());
74         doReturn(this.rt).when(this.dataBroker).newReadOnlyTransaction();
75         doNothing().when(this.rt).close();
76         doReturn(this.listenableFutureMock).when(this.rt)
77                 .read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class));
78         doReturn(true).when(this.listenableFutureMock).isDone();
79         doAnswer(invocation -> {
80             final Runnable runnable = (Runnable) invocation.getArguments()[0];
81             runnable.run();
82             return null;
83         }).when(this.listenableFutureMock).addListener(any(Runnable.class), any(Executor.class));
84     }
85
86     @Test
87     public void testSetPeerProposalSuccess() throws InterruptedException, ExecutionException {
88         doReturn(Optional.of(LSP_DB_VERSION)).when(this.listenableFutureMock).get();
89         final PCEPStatefulPeerProposal peerProposal = PCEPStatefulPeerProposal
90                 .createStatefulPeerProposal(this.dataBroker, TOPOLOGY_IID);
91         peerProposal.setPeerProposal(NODE_ID, this.tlvsBuilder, null);
92         assertEquals(LSP_DB_VERSION, this.tlvsBuilder.augmentation(Tlvs3.class).getLspDbVersion());
93     }
94
95     @Test
96     public void testSetPeerProposalWithEntityIdSuccess() throws InterruptedException, ExecutionException {
97         doReturn(Optional.of(LSP_DB_VERSION)).when(this.listenableFutureMock).get();
98         final PCEPStatefulPeerProposal peerProposal = PCEPStatefulPeerProposal
99                 .createStatefulPeerProposal(this.dataBroker, TOPOLOGY_IID);
100         peerProposal.setPeerProposal(NODE_ID, this.tlvsBuilder, SPEAKER_ID);
101         final Tlvs3 aug = this.tlvsBuilder.augmentation(Tlvs3.class);
102         assertEquals(LSP_DB_VERSION, aug.getLspDbVersion());
103         assertArrayEquals(SPEAKER_ID, aug.getSpeakerEntityId().getSpeakerEntityIdValue());
104     }
105
106     @Test
107     public void testSetPeerProposalAbsent() throws InterruptedException, ExecutionException {
108         doReturn(Optional.empty()).when(this.listenableFutureMock).get();
109         final PCEPStatefulPeerProposal peerProposal = PCEPStatefulPeerProposal
110                 .createStatefulPeerProposal(this.dataBroker, TOPOLOGY_IID);
111         peerProposal.setPeerProposal(NODE_ID, this.tlvsBuilder, null);
112         assertNull(this.tlvsBuilder.augmentation(Tlvs3.class));
113     }
114
115     @Test
116     public void testSetPeerProposalFailure() throws InterruptedException, ExecutionException {
117         doThrow(new InterruptedException()).when(this.listenableFutureMock).get();
118         final PCEPStatefulPeerProposal peerProposal = PCEPStatefulPeerProposal
119                 .createStatefulPeerProposal(this.dataBroker, TOPOLOGY_IID);
120         peerProposal.setPeerProposal(NODE_ID, this.tlvsBuilder, null);
121         assertNull(this.tlvsBuilder.augmentation(Tlvs3.class));
122     }
123
124 }