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
9 package org.opendaylight.protocol.pcep.pcc.mock;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertTrue;
14 import com.google.common.collect.Lists;
15 import java.net.InetAddress;
16 import java.net.UnknownHostException;
17 import java.util.List;
18 import org.junit.After;
19 import org.junit.Before;
20 import org.junit.Test;
21 import org.mockito.Mock;
22 import org.mockito.Mockito;
23 import org.mockito.MockitoAnnotations;
24 import org.mockito.invocation.InvocationOnMock;
25 import org.mockito.stubbing.Answer;
26 import org.opendaylight.protocol.pcep.PCEPSession;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Pcrpt;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Pcupd;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.PcupdBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.PlspId;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.SrpIdNumber;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.LspBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcupd.message.PcupdMessageBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcupd.message.pcupd.message.UpdatesBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcupd.message.pcupd.message.updates.PathBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.SrpBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.Pcerr;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.EroBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.SubobjectBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.subobject.type.IpPrefixCaseBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.subobject.type.ip.prefix._case.IpPrefixBuilder;
46 public class SimpleSessionListenerTest {
48 private static final String IP_ADDRESS = "127.0.0.1";
51 private PCEPSession mockedSession;
53 private final List<Message> sendMessages = Lists.newArrayList();
57 MockitoAnnotations.initMocks(this);
58 Mockito.doAnswer(new Answer<Void>() {
60 public Void answer(InvocationOnMock invocation) throws Throwable {
61 SimpleSessionListenerTest.this.sendMessages.add((Message) invocation.getArguments()[0]);
64 }).when(mockedSession).sendMessage(Mockito.any(Message.class));
68 public void cleanup() {
69 this.sendMessages.clear();
73 public void testSessionListenerPcRpt() throws UnknownHostException {
74 final SimpleSessionListener sessionListser = new SimpleSessionListener(1, false, 1,
75 InetAddress.getByName(IP_ADDRESS));
77 sessionListser.onSessionUp(this.mockedSession);
78 // one lsp + end-of-sync marker
79 Mockito.verify(this.mockedSession, Mockito.times(2)).sendMessage(Mockito.any(Message.class));
80 assertEquals(2, this.sendMessages.size());
81 assertTrue(this.sendMessages.get(0) instanceof Pcrpt);
82 assertTrue(this.sendMessages.get(1) instanceof Pcrpt);
84 sessionListser.onMessage(this.mockedSession, createUpdMsg());
85 // send PcRpt as a response to PcUpd
86 Mockito.verify(this.mockedSession, Mockito.times(3)).sendMessage(Mockito.any(Message.class));
87 assertEquals(3, this.sendMessages.size());
88 assertTrue(this.sendMessages.get(2) instanceof Pcrpt);
90 sessionListser.onSessionDown(mockedSession, new Exception());
91 Mockito.verify(this.mockedSession, Mockito.times(1)).close();
95 public void testSessionListenerPcErr() throws UnknownHostException {
96 final SimpleSessionListener sessionListser = new SimpleSessionListener(1, true, 1,
97 InetAddress.getByName(IP_ADDRESS));
99 sessionListser.onMessage(this.mockedSession, createUpdMsg());
100 // send PcErr as a response to PcUpd
101 Mockito.verify(this.mockedSession, Mockito.times(1)).sendMessage(Mockito.any(Message.class));
102 assertEquals(1, this.sendMessages.size());
103 assertTrue(this.sendMessages.get(0) instanceof Pcerr);
106 private Pcupd createUpdMsg() {
107 final PcupdMessageBuilder msgBuilder = new PcupdMessageBuilder();
108 final UpdatesBuilder updsBuilder = new UpdatesBuilder();
109 updsBuilder.setLsp(new LspBuilder().setPlspId(new PlspId(1L)).build());
110 final PathBuilder pathBuilder = new PathBuilder();
113 .setSubobject(Lists.newArrayList(new SubobjectBuilder().setSubobjectType(new IpPrefixCaseBuilder().setIpPrefix(
114 new IpPrefixBuilder().setIpPrefix(new IpPrefix(new Ipv4Prefix("127.0.0.2/32"))).build()).build()).build())).build());
115 updsBuilder.setPath(pathBuilder.build());
116 updsBuilder.setSrp(new SrpBuilder().setOperationId(new SrpIdNumber(0L)).build());
117 msgBuilder.setUpdates(Lists.newArrayList(updsBuilder.build()));
118 return new PcupdBuilder().setPcupdMessage(msgBuilder.build()).build();