Bump versions to 0.21.8-SNAPSHOT
[bgpcep.git] / pcep / topology / topology-provider / src / test / java / org / opendaylight / bgpcep / pcep / topology / provider / TopologyProgrammingTest.java
1 /*
2  * Copyright (c) 2014 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 package org.opendaylight.bgpcep.pcep.topology.provider;
9
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;
16
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;
43
44 public class TopologyProgrammingTest extends AbstractPCEPSessionTest {
45     private static final String NAME = "test-tunnel";
46
47     @Mock
48     private InstructionScheduler scheduler;
49     @Mock
50     private Instruction instruction;
51
52     private TopologyProgramming topologyProgramming;
53     private PCEPTopologySessionListener listener;
54
55     @Override
56     @Before
57     public void setUp() throws Exception {
58         super.setUp();
59
60         doNothing().when(listener).close();
61
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));
65
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);
71     }
72
73     @Test
74     public void testSubmitAddLsp() {
75         final var captor = ArgumentCaptor.forClass(AddLspArgs.class);
76         doReturn(Futures.immediateFuture(OperationResults.SUCCESS)).when(listener).addLsp(captor.capture());
77
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())
82             .build());
83
84         final var addLspArgs = captor.getValue();
85         assertNotNull(addLspArgs);
86         assertEquals(NAME, addLspArgs.getName());
87         assertEquals(nodeId, addLspArgs.getNode());
88     }
89
90     @Test
91     public void testSubmitUpdateLsp() {
92         final var captor = ArgumentCaptor.forClass(UpdateLspArgs.class);
93         doReturn(Futures.immediateFuture(OperationResults.SUCCESS)).when(listener).updateLsp(captor.capture());
94
95         topologyProgramming.submitUpdateLsp(new SubmitUpdateLspInputBuilder().setName(NAME).setNode(nodeId).build());
96
97         final var updateLspArgs = captor.getValue();
98         assertNotNull(updateLspArgs);
99         assertEquals(NAME, updateLspArgs.getName());
100         assertEquals(nodeId, updateLspArgs.getNode());
101     }
102
103     @Test
104     public void testSubmitEnsureLsp() {
105         final var captor = ArgumentCaptor.forClass(EnsureLspOperationalInput.class);
106         doReturn(Futures.immediateFuture(OperationResults.SUCCESS)).when(listener)
107             .ensureLspOperational(captor.capture());
108
109         topologyProgramming.submitEnsureLspOperational(new SubmitEnsureLspOperationalInputBuilder()
110             .setName(NAME)
111             .setNode(nodeId)
112             .setArguments(new ArgumentsBuilder().build())
113             .build());
114
115         final var ensureLspInput = captor.getValue();
116         assertNotNull(ensureLspInput);
117         assertEquals(NAME, ensureLspInput.getName());
118         assertEquals(nodeId, ensureLspInput.getNode());
119     }
120
121     @Test
122     public void testSubmitRemoveLsp() {
123         final var captor = ArgumentCaptor.forClass(RemoveLspArgs.class);
124         doReturn(Futures.immediateFuture(OperationResults.SUCCESS)).when(listener).removeLsp(captor.capture());
125
126         topologyProgramming.submitRemoveLsp(new SubmitRemoveLspInputBuilder().setName(NAME).setNode(nodeId).build());
127
128         final var removeLspArgs = captor.getValue();
129         assertNotNull(removeLspArgs);
130         assertEquals(NAME, removeLspArgs.getName());
131         assertEquals(nodeId, removeLspArgs.getNode());
132     }
133
134     @Test
135     public void testSubmitTriggerSync() {
136         final var captor = ArgumentCaptor.forClass(TriggerSyncArgs.class);
137         doReturn(Futures.immediateFuture(OperationResults.SUCCESS)).when(listener).triggerSync(captor.capture());
138
139         topologyProgramming.submitTriggerSync(new SubmitTriggerSyncInputBuilder()
140             .setName(NAME)
141             .setNode(nodeId)
142             .build());
143
144         final var triggerSyncArgs = captor.getValue();
145         assertNotNull(triggerSyncArgs);
146         assertEquals(NAME, triggerSyncArgs.getName());
147         assertEquals(nodeId, triggerSyncArgs.getNode());
148     }
149
150     @Override
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();
155     }
156
157     @Override
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();
164         return customized;
165     }
166 }