2 * Copyright (c) 2014 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.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12 import static org.mockito.ArgumentMatchers.any;
13 import static org.mockito.Mockito.doNothing;
14 import static org.mockito.Mockito.doReturn;
15 import static org.mockito.Mockito.spy;
17 import com.google.common.util.concurrent.Futures;
18 import org.junit.Before;
19 import org.junit.Test;
20 import org.mockito.ArgumentCaptor;
21 import org.mockito.Mock;
22 import org.opendaylight.bgpcep.programming.spi.Instruction;
23 import org.opendaylight.bgpcep.programming.spi.InstructionScheduler;
24 import org.opendaylight.protocol.pcep.PCEPSession;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.Tlvs1Builder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.stateful.capability.tlv.StatefulBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object.Open;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object.OpenBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.programming.rev150720.InstructionStatus;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.programming.rev150720.SubmitInstructionInput;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.programming.rev150720.instruction.status.changed.Details;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.programming.rev181109.SubmitAddLspInputBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.programming.rev181109.SubmitEnsureLspOperationalInputBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.programming.rev181109.SubmitRemoveLspInputBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.programming.rev181109.SubmitTriggerSyncInputBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.programming.rev181109.SubmitUpdateLspInputBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev220730.AddLspArgs;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev220730.EnsureLspOperationalInput;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev220730.RemoveLspArgs;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev220730.TriggerSyncArgs;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev220730.UpdateLspArgs;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev220730.ensure.lsp.operational.args.ArgumentsBuilder;
44 public class TopologyProgrammingTest extends AbstractPCEPSessionTest {
45 private static final String NAME = "test-tunnel";
48 private InstructionScheduler scheduler;
50 private Instruction instruction;
52 private TopologyProgramming topologyProgramming;
53 private PCEPTopologySessionListener listener;
57 public void setUp() throws Exception {
60 doNothing().when(listener).close();
62 doReturn(true).when(instruction).checkedExecutionStart();
63 doNothing().when(instruction).executionCompleted(InstructionStatus.Failed, null);
64 doNothing().when(instruction).executionCompleted(any(InstructionStatus.class), any(Details.class));
66 doReturn(Futures.immediateFuture(instruction)).when(scheduler)
67 .scheduleInstruction(any(SubmitInstructionInput.class));
68 topologyProgramming = new TopologyProgramming(scheduler, manager);
69 final PCEPSession session = getPCEPSession(getLocalPref(), getRemotePref());
70 listener.onSessionUp(session);
74 public void testSubmitAddLsp() {
75 final var captor = ArgumentCaptor.forClass(AddLspArgs.class);
76 doReturn(Futures.immediateFuture(OperationResults.SUCCESS)).when(listener).addLsp(captor.capture());
78 topologyProgramming.submitAddLsp(new SubmitAddLspInputBuilder()
79 .setName(NAME).setNode(nodeId)
80 .setArguments(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev220730
81 .add.lsp.args.ArgumentsBuilder().build())
84 final var addLspArgs = captor.getValue();
85 assertNotNull(addLspArgs);
86 assertEquals(NAME, addLspArgs.getName());
87 assertEquals(nodeId, addLspArgs.getNode());
91 public void testSubmitUpdateLsp() {
92 final var captor = ArgumentCaptor.forClass(UpdateLspArgs.class);
93 doReturn(Futures.immediateFuture(OperationResults.SUCCESS)).when(listener).updateLsp(captor.capture());
95 topologyProgramming.submitUpdateLsp(new SubmitUpdateLspInputBuilder().setName(NAME).setNode(nodeId).build());
97 final var updateLspArgs = captor.getValue();
98 assertNotNull(updateLspArgs);
99 assertEquals(NAME, updateLspArgs.getName());
100 assertEquals(nodeId, updateLspArgs.getNode());
104 public void testSubmitEnsureLsp() {
105 final var captor = ArgumentCaptor.forClass(EnsureLspOperationalInput.class);
106 doReturn(Futures.immediateFuture(OperationResults.SUCCESS)).when(listener)
107 .ensureLspOperational(captor.capture());
109 topologyProgramming.submitEnsureLspOperational(new SubmitEnsureLspOperationalInputBuilder()
112 .setArguments(new ArgumentsBuilder().build())
115 final var ensureLspInput = captor.getValue();
116 assertNotNull(ensureLspInput);
117 assertEquals(NAME, ensureLspInput.getName());
118 assertEquals(nodeId, ensureLspInput.getNode());
122 public void testSubmitRemoveLsp() {
123 final var captor = ArgumentCaptor.forClass(RemoveLspArgs.class);
124 doReturn(Futures.immediateFuture(OperationResults.SUCCESS)).when(listener).removeLsp(captor.capture());
126 topologyProgramming.submitRemoveLsp(new SubmitRemoveLspInputBuilder().setName(NAME).setNode(nodeId).build());
128 final var removeLspArgs = captor.getValue();
129 assertNotNull(removeLspArgs);
130 assertEquals(NAME, removeLspArgs.getName());
131 assertEquals(nodeId, removeLspArgs.getNode());
135 public void testSubmitTriggerSync() {
136 final var captor = ArgumentCaptor.forClass(TriggerSyncArgs.class);
137 doReturn(Futures.immediateFuture(OperationResults.SUCCESS)).when(listener).triggerSync(captor.capture());
139 topologyProgramming.submitTriggerSync(new SubmitTriggerSyncInputBuilder()
144 final var triggerSyncArgs = captor.getValue();
145 assertNotNull(triggerSyncArgs);
146 assertEquals(NAME, triggerSyncArgs.getName());
147 assertEquals(nodeId, triggerSyncArgs.getNode());
151 protected Open getLocalPref() {
152 return new OpenBuilder(super.getLocalPref()).setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params
153 .xml.ns.yang.pcep.types.rev181109.open.object.open.TlvsBuilder().addAugmentation(
154 new Tlvs1Builder().setStateful(new StatefulBuilder().build()).build()).build()).build();
158 ServerSessionManager customizeSessionManager(final ServerSessionManager original) {
159 final var customized = spy(original);
160 final var deps = original.getPCEPTopologyProviderDependencies();
161 listener = spy(new PCEPTopologySessionListener(deps.getStateRegistry(), original,
162 deps.getPceServerProvider()));
163 doReturn(listener).when(customized).getSessionListener();