Replaced reference from deprecated junit.framework.Assert to org.junit.Assert
[bgpcep.git] / pcep / topology-provider / src / test / java / org / opendaylight / bgpcep / pcep / topology / provider / Stateful02TopologySessionListenerTest.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
9 package org.opendaylight.bgpcep.pcep.topology.provider;
10
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertNull;
14 import static org.junit.Assert.assertTrue;
15
16 import com.google.common.base.Optional;
17 import com.google.common.collect.Lists;
18 import io.netty.buffer.Unpooled;
19 import io.netty.util.CharsetUtil;
20 import org.junit.Before;
21 import org.junit.Test;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.network.topology.rev140113.NetworkTopologyRef;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated._00.rev140113.Pcinitiate;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.Arguments1;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.Arguments1Builder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.Arguments2;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.Arguments2Builder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.Pcrpt;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.PcrptBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.Pcupd;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.PlspId;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.SymbolicPathName;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.Tlvs2;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.Tlvs2Builder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.lsp.object.LspBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.lsp.object.lsp.TlvsBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.pcrpt.message.PcrptMessageBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.pcrpt.message.pcrpt.message.ReportsBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.pcrpt.message.pcrpt.message.reports.PathBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.pcupd.message.pcupd.message.Updates;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.stateful.capability.tlv.StatefulBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.symbolic.path.name.tlv.SymbolicPathNameBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.address.family.Ipv4CaseBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.address.family.ipv4._case.Ipv4Builder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.object.EndpointsObjBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.Ero;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.Open;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.AddLspInput;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.AddLspInputBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.EnsureLspOperationalInput;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.EnsureLspOperationalInputBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.Node1;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.OperationResult;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.RemoveLspInput;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.RemoveLspInputBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.UpdateLspInput;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.UpdateLspInputBuilder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.add.lsp.args.ArgumentsBuilder;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.pcep.client.attributes.PathComputationClient;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.pcep.client.attributes.path.computation.client.ReportedLsp;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.pcep.client.attributes.path.computation.client.reported.lsp.Path;
64 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
65
66 public class Stateful02TopologySessionListenerTest extends AbstractPCEPSessionTest<Stateful02TopologySessionListenerFactory> {
67
68     private Stateful02TopologySessionListener listener;
69
70     @Before
71     public void setUp() throws Exception {
72         super.setUp();
73         listener = (Stateful02TopologySessionListener) this.manager.getSessionListener();
74     }
75
76     @Test
77     public void testStateful02TopologySessionListener() throws Exception {
78         this.listener.onSessionUp(this.session);
79
80         // add-lsp
81         final ArgumentsBuilder argsBuilder = new ArgumentsBuilder();
82         final Ipv4CaseBuilder ipv4Builder = new Ipv4CaseBuilder();
83         ipv4Builder.setIpv4(new Ipv4Builder().setSourceIpv4Address(new Ipv4Address(TEST_ADDRESS)).setDestinationIpv4Address(new Ipv4Address(TEST_ADDRESS)).build());
84         argsBuilder.setEndpointsObj(new EndpointsObjBuilder().setAddressFamily(ipv4Builder.build()).build());
85         final AddLspInput input = new AddLspInputBuilder().setName(TEST_LSP_NAME).setArguments(argsBuilder.build()).setNetworkTopologyRef(new NetworkTopologyRef(TOPO_IID)).setNode(NODE_ID).build();
86         this.topologyRpcs.addLsp(input);
87         assertEquals(1, this.receivedMsgs.size());
88         assertTrue(this.receivedMsgs.get(0) instanceof Pcinitiate);
89         final Pcrpt pcRpt = createPcrpt02(0L, false, null, Optional.of(TEST_LSP_NAME));
90
91         final Optional<Topology> topoOptional = getTopology();
92         assertTrue(topoOptional.isPresent());
93         Topology topology = topoOptional.get();
94         assertEquals(1, topology.getNode().size());
95         final Node1 node = topology.getNode().get(0).getAugmentation(Node1.class);
96         assertNotNull(node);
97         PathComputationClient pcc = node.getPathComputationClient();
98         assertEquals(TEST_ADDRESS, pcc.getIpAddress().getIpv4Address().getValue());
99         // reported lsp so far empty, has not received response (PcRpt) yet
100         assertTrue(pcc.getReportedLsp().isEmpty());
101         this.listener.onMessage(this.session, pcRpt);
102         // check created lsp
103         topology = getTopology().get();
104         pcc = topology.getNode().get(0).getAugmentation(Node1.class).getPathComputationClient();
105         assertEquals(1, pcc.getReportedLsp().size());
106         ReportedLsp reportedLsp = pcc.getReportedLsp().get(0);
107         assertEquals(TEST_LSP_NAME, reportedLsp.getName());
108         assertEquals(1, reportedLsp.getPath().size());
109
110         // update-lsp
111         org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.update.lsp.args.ArgumentsBuilder updArgsBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.update.lsp.args.ArgumentsBuilder();
112         updArgsBuilder.setEro(createEroWithIpPrefixes(Lists.newArrayList(ERO_IP_PREFIX, DST_IP_PREFIX)));
113         updArgsBuilder.addAugmentation(Arguments2.class, new Arguments2Builder().setOperational(true).build());
114         final UpdateLspInput update = new UpdateLspInputBuilder().setArguments(updArgsBuilder.build()).setName(TEST_LSP_NAME).setNetworkTopologyRef(new NetworkTopologyRef(TOPO_IID)).setNode(NODE_ID).build();
115         this.topologyRpcs.updateLsp(update);
116         assertEquals(2, this.receivedMsgs.size());
117         assertTrue(this.receivedMsgs.get(1) instanceof Pcupd);
118         final Pcupd updateMsg = (Pcupd) this.receivedMsgs.get(1);
119         final Updates upd = updateMsg.getPcupdMessage().getUpdates().get(0);
120         final Pcrpt pcRpt2 = createPcrpt02(upd.getLsp().getPlspId().getValue(), false, upd.getPath().getEro(), Optional.<String>absent());
121         this.listener.onMessage(this.session, pcRpt2);
122         //check updated lsp
123         topology = getTopology().get();
124         pcc = topology.getNode().get(0).getAugmentation(Node1.class).getPathComputationClient();
125         assertEquals(1, pcc.getReportedLsp().size());
126         reportedLsp = pcc.getReportedLsp().get(0);
127         assertEquals(TEST_LSP_NAME, reportedLsp.getName());
128         assertEquals(1, reportedLsp.getPath().size());
129         Path path = reportedLsp.getPath().get(0);
130         assertEquals(2, path.getEro().getSubobject().size());
131         assertEquals(DST_IP_PREFIX, getLastEroIpPrefix(path.getEro()));
132
133         // ensure-operational
134         final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.ensure.lsp.operational.args.ArgumentsBuilder ensureArgs = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.ensure.lsp.operational.args.ArgumentsBuilder();
135         ensureArgs.addAugmentation(Arguments1.class, new Arguments1Builder().setOperational(true).build());
136         final EnsureLspOperationalInput ensure = new EnsureLspOperationalInputBuilder().setArguments(ensureArgs.build()).setName(TEST_LSP_NAME).setNetworkTopologyRef(new NetworkTopologyRef(TOPO_IID)).setNode(NODE_ID).build();
137         final OperationResult result = this.topologyRpcs.ensureLspOperational(ensure).get().getResult();
138         //check result
139         assertNull(result.getFailure());
140
141         // remove-lsp
142         final RemoveLspInput remove = new RemoveLspInputBuilder().setName(TEST_LSP_NAME).setNetworkTopologyRef(new NetworkTopologyRef(TOPO_IID)).setNode(NODE_ID).build();
143         this.topologyRpcs.removeLsp(remove);
144         assertEquals(3, this.receivedMsgs.size());
145         assertTrue(this.receivedMsgs.get(2) instanceof Pcupd);
146         final Pcupd pcUpd2 = (Pcupd) this.receivedMsgs.get(2);
147         final Updates upd2 = pcUpd2.getPcupdMessage().getUpdates().get(0);
148         final Pcrpt pcRpt3 = createPcrpt02(upd2.getLsp().getPlspId().getValue(), true, null, Optional.<String>absent());
149         this.listener.onMessage(this.session, pcRpt3);
150         // check if lsp was removed
151         topology = getTopology().get();
152         pcc = topology.getNode().get(0).getAugmentation(Node1.class).getPathComputationClient();
153         assertEquals(0, pcc.getReportedLsp().size());
154     }
155
156     private Pcrpt createPcrpt02(final long plspId, final boolean remove, final Ero ero, final Optional<String> spn) {
157         final ReportsBuilder rptBuilder = new ReportsBuilder();
158         final TlvsBuilder tlvsBuilder = new TlvsBuilder();
159         if (spn.isPresent()) {
160             tlvsBuilder.setSymbolicPathName(new SymbolicPathNameBuilder().setPathName(new SymbolicPathName(Unpooled.wrappedBuffer(CharsetUtil.UTF_8.encode(spn.get())).array())).build());
161         }
162         rptBuilder.setLsp(new LspBuilder().setDelegate(true).setOperational(true).setPlspId(new PlspId(plspId)).setRemove(remove).setSync(true).setTlvs(tlvsBuilder.build()).build());
163         rptBuilder.setPath(new PathBuilder().setEro(ero).build());
164         return new PcrptBuilder().setPcrptMessage(new PcrptMessageBuilder().setReports(Lists.newArrayList(rptBuilder.build())).build()).build();
165     }
166
167     @Override
168     protected Open getLocalPref() {
169         return new OpenBuilder(super.getLocalPref()).setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder().addAugmentation(Tlvs2.class, new Tlvs2Builder().setStateful(new StatefulBuilder().build()).build()).build()).build();
170     }
171
172 }