2 * Copyright (c) 2013 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.protocol.pcep.impl;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertTrue;
13 import java.util.ArrayList;
15 import org.junit.After;
16 import org.junit.Before;
17 import org.junit.Ignore;
18 import org.junit.Test;
19 import org.opendaylight.protocol.pcep.PCEPErrors;
20 import org.opendaylight.protocol.pcep.message.PCEPErrorMessage;
21 import org.opendaylight.protocol.pcep.message.PCEPNotificationMessage;
22 import org.opendaylight.protocol.pcep.message.PCEPOpenMessage;
23 import org.opendaylight.protocol.pcep.object.CompositeNotifyObject;
24 import org.opendaylight.protocol.pcep.object.PCEPErrorObject;
25 import org.opendaylight.protocol.pcep.object.PCEPNotificationObject;
26 import org.opendaylight.protocol.pcep.object.PCEPOpenObject;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.KeepaliveMessage;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.keepalive.message.KeepaliveMessageBuilder;
31 public class FiniteStateMachineTest {
33 private ServerSessionMock serverSession;
35 private final SimpleSessionListener serverListener = new SimpleSessionListener();
37 private MockPCE client;
41 this.client = new MockPCE();
42 this.serverSession = new ServerSessionMock(this.serverListener, this.client);
43 this.client.addSession(this.serverSession);
47 * Both PCEs accept session characteristics. Also tests KeepAliveTimer and error message and when pce attempts to
48 * establish pce session for the 2nd time.
50 * @throws InterruptedException
54 public void testSessionCharsAccBoth() throws InterruptedException {
55 // this.serverSession.startSession();
56 assertEquals(1, this.client.getListMsg().size());
57 assertTrue(this.client.getListMsg().get(0) instanceof PCEPOpenMessage);
58 this.client.sendMessage(new PCEPOpenMessage(new PCEPOpenObject(3, 9, 2)));
59 assertEquals(2, this.client.getListMsg().size());
60 assertTrue(this.client.getListMsg().get(1) instanceof KeepaliveMessage);
61 this.client.sendMessage((Message) new KeepaliveMessageBuilder().build());
62 synchronized (this.serverListener) {
63 while (!this.serverListener.up) {
65 this.serverListener.wait();
66 } catch (final InterruptedException e) {
71 assertTrue(this.serverListener.up);
72 // Thread.sleep(PCEPSessionImpl.KEEP_ALIVE_TIMER_VALUE * 1000);
73 // assertEquals(3, this.client.getListMsg().size());
74 // assertTrue(this.client.getListMsg().get(2) instanceof PCEPKeepAliveMessage); // test of keepalive timer
75 this.client.sendMessage(new PCEPOpenMessage(new PCEPOpenObject(1, 1, 1)));
76 assertEquals(3, this.client.getListMsg().size());
77 assertTrue(this.client.getListMsg().get(2) instanceof PCEPErrorMessage);
78 for (final Message m : this.client.getListMsg()) {
79 if (m instanceof PCEPErrorMessage) {
80 final PCEPErrorObject obj = ((PCEPErrorMessage) m).getErrorObjects().get(0);
81 assertEquals(PCEPErrors.ATTEMPT_2ND_SESSION, obj.getError()); // test of error type 9
87 * Mock PCE does not accept session characteristics the first time.
89 * @throws InterruptedException
93 public void testSessionCharsAccMe() throws InterruptedException {
94 // this.serverSession.startSession();
95 this.client.sendMessage(new PCEPOpenMessage(new PCEPOpenObject(4, 9, 2)));
96 assertEquals(2, this.client.getListMsg().size());
97 assertTrue(this.client.getListMsg().get(0) instanceof PCEPOpenMessage);
98 assertTrue(this.client.getListMsg().get(1) instanceof KeepaliveMessage);
99 this.client.sendErrorMessage(PCEPErrors.NON_ACC_NEG_SESSION_CHAR, new PCEPOpenObject(3, 7, 2, null));
100 assertEquals(3, this.client.getListMsg().size());
101 assertTrue(this.client.getListMsg().get(2) instanceof PCEPOpenMessage);
102 this.client.sendMessage((Message) new KeepaliveMessageBuilder().build());
103 synchronized (this.serverListener) {
104 while (!this.serverListener.up) {
106 this.serverListener.wait();
107 } catch (final InterruptedException e) {
112 assertTrue(this.serverListener.up);
116 * Sending different PCEP Message than Open in session establishment phase.
118 * @throws InterruptedException
122 public void testErrorOneOne() throws InterruptedException {
123 // this.serverSession.startSession();
124 assertEquals(1, this.client.getListMsg().size());
125 assertTrue(this.client.getListMsg().get(0) instanceof PCEPOpenMessage);
126 this.client.sendMessage(new PCEPNotificationMessage(new ArrayList<CompositeNotifyObject>() {
127 private static final long serialVersionUID = 1L;
130 this.add(new CompositeNotifyObject(new ArrayList<PCEPNotificationObject>() {
131 private static final long serialVersionUID = 1L;
134 this.add(new PCEPNotificationObject((short) 1, (short) 1));
139 for (final Message m : this.client.getListMsg()) {
140 if (m instanceof PCEPErrorMessage) {
141 final PCEPErrorObject obj = ((PCEPErrorMessage) m).getErrorObjects().get(0);
142 assertEquals(PCEPErrors.NON_OR_INVALID_OPEN_MSG, obj.getError());
147 /************* Tests commented because of their long duration (tested timers) **************/
150 * OpenWait timer expired.
152 * @throws InterruptedException
156 public void testErrorOneTwo() throws InterruptedException {
157 // this.serverSession.startSession();
158 assertEquals(1, this.client.getListMsg().size());
159 assertTrue(this.client.getListMsg().get(0) instanceof PCEPOpenMessage);
160 Thread.sleep(60 * 1000);
161 for (final Message m : this.client.getListMsg()) {
162 if (m instanceof PCEPErrorMessage) {
163 final PCEPErrorObject obj = ((PCEPErrorMessage) m).getErrorObjects().get(0);
164 assertEquals(PCEPErrors.NO_OPEN_BEFORE_EXP_OPENWAIT, obj.getError());
170 * KeepWaitTimer expired.
172 * @throws InterruptedException
176 public void testErrorOneSeven() throws InterruptedException {
177 // this.serverSession.startSession();
178 assertEquals(1, this.client.getListMsg().size());
179 assertTrue(this.client.getListMsg().get(0) instanceof PCEPOpenMessage);
180 this.client.sendMessage(new PCEPOpenMessage(new PCEPOpenObject(3, 9, 2)));
181 Thread.sleep(this.serverSession.getKeepAliveTimerValue() * 1000);
182 for (final Message m : this.client.getListMsg()) {
183 if (m instanceof PCEPErrorMessage) {
184 final PCEPErrorObject obj = ((PCEPErrorMessage) m).getErrorObjects().get(0);
185 assertEquals(PCEPErrors.NO_MSG_BEFORE_EXP_KEEPWAIT, obj.getError());
192 public void testUnknownMessage() throws InterruptedException {
193 this.serverSession.handleMalformedMessage(PCEPErrors.CAPABILITY_NOT_SUPPORTED);
194 assertEquals(1, this.serverSession.unknownMessagesTimes.size());
196 this.serverSession.handleMalformedMessage(PCEPErrors.CAPABILITY_NOT_SUPPORTED);
197 assertEquals(2, this.serverSession.unknownMessagesTimes.size());
199 this.serverSession.handleMalformedMessage(PCEPErrors.CAPABILITY_NOT_SUPPORTED);
200 assertEquals(3, this.serverSession.unknownMessagesTimes.size());
202 this.serverSession.handleMalformedMessage(PCEPErrors.CAPABILITY_NOT_SUPPORTED);
203 assertEquals(4, this.serverSession.unknownMessagesTimes.size());
205 this.serverSession.handleMalformedMessage(PCEPErrors.CAPABILITY_NOT_SUPPORTED);
206 assertEquals(3, this.serverSession.unknownMessagesTimes.size());
208 this.serverSession.handleMalformedMessage(PCEPErrors.CAPABILITY_NOT_SUPPORTED);
209 assertEquals(3, this.serverSession.unknownMessagesTimes.size());
211 this.serverSession.handleMalformedMessage(PCEPErrors.CAPABILITY_NOT_SUPPORTED);
212 assertEquals(4, this.serverSession.unknownMessagesTimes.size());
214 this.serverSession.handleMalformedMessage(PCEPErrors.CAPABILITY_NOT_SUPPORTED);
215 assertEquals(5, this.serverSession.unknownMessagesTimes.size());
217 this.serverSession.handleMalformedMessage(PCEPErrors.CAPABILITY_NOT_SUPPORTED);
218 synchronized (this.client) {
219 while (!this.client.down) {
222 } catch (final InterruptedException e) {
227 assertTrue(this.client.down);
231 public void tearDown() {
232 this.serverSession.close();