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 org.junit.After;
14 import org.junit.Before;
15 import org.junit.Ignore;
16 import org.junit.Test;
17 import org.opendaylight.protocol.pcep.PCEPErrors;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.KeepaliveMessage;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.OpenMessage;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.keepalive.message.KeepaliveMessageBuilder;
23 public class FiniteStateMachineTest {
25 private ServerSessionMock serverSession;
27 private final SimpleSessionListener serverListener = new SimpleSessionListener();
29 private MockPCE client;
33 this.client = new MockPCE();
34 this.serverSession = new ServerSessionMock(this.serverListener, this.client);
35 this.client.addSession(this.serverSession);
39 * Both PCEs accept session characteristics. Also tests KeepAliveTimer and error message and when pce attempts to
40 * establish pce session for the 2nd time.
42 * @throws InterruptedException
46 public void testSessionCharsAccBoth() throws InterruptedException {
47 // this.serverSession.startSession();
48 assertEquals(1, this.client.getListMsg().size());
49 assertTrue(this.client.getListMsg().get(0) instanceof OpenMessage);
50 // this.client.sendMessage(new PCEPOpenMessage(new PCEPOpenObject(3, 9, 2)));
51 assertEquals(2, this.client.getListMsg().size());
52 assertTrue(this.client.getListMsg().get(1) instanceof KeepaliveMessage);
53 this.client.sendMessage((Message) new KeepaliveMessageBuilder().build());
54 synchronized (this.serverListener) {
55 while (!this.serverListener.up) {
57 this.serverListener.wait();
58 } catch (final InterruptedException e) {
63 assertTrue(this.serverListener.up);
64 // Thread.sleep(PCEPSessionImpl.KEEP_ALIVE_TIMER_VALUE * 1000);
65 // assertEquals(3, this.client.getListMsg().size());
66 // assertTrue(this.client.getListMsg().get(2) instanceof PCEPKeepAliveMessage); // test of keepalive timer
67 // this.client.sendMessage(new PCEPOpenMessage(new PCEPOpenObject(1, 1, 1)));
68 // assertEquals(3, this.client.getListMsg().size());
69 // assertTrue(this.client.getListMsg().get(2) instanceof PCEPErrorMessage);
70 // for (final Message m : this.client.getListMsg()) {
71 // if (m instanceof PCEPErrorMessage) {
72 // final PCEPErrorObject obj = ((PCEPErrorMessage) m).getErrorObjects().get(0);
73 // assertEquals(PCEPErrors.ATTEMPT_2ND_SESSION, obj.getError()); // test of error type 9
79 * Mock PCE does not accept session characteristics the first time.
81 * @throws InterruptedException
85 public void testSessionCharsAccMe() throws InterruptedException {
86 // this.serverSession.startSession();
87 // this.client.sendMessage(new PCEPOpenMessage(new PCEPOpenObject(4, 9, 2)));
88 assertEquals(2, this.client.getListMsg().size());
89 assertTrue(this.client.getListMsg().get(0) instanceof OpenMessage);
90 assertTrue(this.client.getListMsg().get(1) instanceof KeepaliveMessage);
91 // this.client.sendErrorMessage(PCEPErrors.NON_ACC_NEG_SESSION_CHAR, new PCEPOpenObject(3, 7, 2, null));
92 assertEquals(3, this.client.getListMsg().size());
93 assertTrue(this.client.getListMsg().get(2) instanceof OpenMessage);
94 this.client.sendMessage((Message) new KeepaliveMessageBuilder().build());
95 synchronized (this.serverListener) {
96 while (!this.serverListener.up) {
98 this.serverListener.wait();
99 } catch (final InterruptedException e) {
104 assertTrue(this.serverListener.up);
108 * Sending different PCEP Message than Open in session establishment phase.
110 * @throws InterruptedException
114 public void testErrorOneOne() throws InterruptedException {
115 // this.serverSession.startSession();
116 assertEquals(1, this.client.getListMsg().size());
117 // assertTrue(this.client.getListMsg().get(0) instanceof OpenMessage);
118 // this.client.sendMessage(new PCEPNotificationMessage(new ArrayList<CompositeNotifyObject>() {
119 // private static final long serialVersionUID = 1L;
122 // this.add(new CompositeNotifyObject(new ArrayList<PCEPNotificationObject>() {
123 // private static final long serialVersionUID = 1L;
126 // this.add(new PCEPNotificationObject((short) 1, (short) 1));
131 // for (final Message m : this.client.getListMsg()) {
132 // if (m instanceof PCEPErrorMessage) {
133 // final PCEPErrorObject obj = ((PCEPErrorMessage) m).getErrorObjects().get(0);
134 // assertEquals(PCEPErrors.NON_OR_INVALID_OPEN_MSG, obj.getError());
139 /************* Tests commented because of their long duration (tested timers) **************/
142 * OpenWait timer expired.
144 * @throws InterruptedException
148 public void testErrorOneTwo() throws InterruptedException {
149 // this.serverSession.startSession();
150 assertEquals(1, this.client.getListMsg().size());
151 assertTrue(this.client.getListMsg().get(0) instanceof OpenMessage);
152 // Thread.sleep(60 * 1000);
153 // for (final Message m : this.client.getListMsg()) {
154 // if (m instanceof PcerrMessage) {
155 // final PCEPErrorObject obj = ((PCEPErrorMessage) m).getErrorObjects().get(0);
156 // assertEquals(PCEPErrors.NO_OPEN_BEFORE_EXP_OPENWAIT, obj.getError());
162 * KeepWaitTimer expired.
164 * @throws InterruptedException
168 public void testErrorOneSeven() throws InterruptedException {
169 // // this.serverSession.startSession();
170 // assertEquals(1, this.client.getListMsg().size());
171 // assertTrue(this.client.getListMsg().get(0) instanceof OpenMessage);
172 // this.client.sendMessage(new PCEPOpenMessage(new OpenObject(3, 9, 2)));
173 // Thread.sleep(this.serverSession.getKeepAliveTimerValue() * 1000);
174 // for (final Message m : this.client.getListMsg()) {
175 // if (m instanceof PcerrMessage) {
176 // final PCEPErrorObject obj = ((PCEPErrorMessage) m).getErrorObjects().get(0);
177 // assertEquals(PCEPErrors.NO_MSG_BEFORE_EXP_KEEPWAIT, obj.getError());
184 public void testUnknownMessage() throws InterruptedException {
185 this.serverSession.handleMalformedMessage(PCEPErrors.CAPABILITY_NOT_SUPPORTED);
186 assertEquals(1, this.serverSession.unknownMessagesTimes.size());
188 this.serverSession.handleMalformedMessage(PCEPErrors.CAPABILITY_NOT_SUPPORTED);
189 assertEquals(2, this.serverSession.unknownMessagesTimes.size());
191 this.serverSession.handleMalformedMessage(PCEPErrors.CAPABILITY_NOT_SUPPORTED);
192 assertEquals(3, this.serverSession.unknownMessagesTimes.size());
194 this.serverSession.handleMalformedMessage(PCEPErrors.CAPABILITY_NOT_SUPPORTED);
195 assertEquals(4, this.serverSession.unknownMessagesTimes.size());
197 this.serverSession.handleMalformedMessage(PCEPErrors.CAPABILITY_NOT_SUPPORTED);
198 assertEquals(3, this.serverSession.unknownMessagesTimes.size());
200 this.serverSession.handleMalformedMessage(PCEPErrors.CAPABILITY_NOT_SUPPORTED);
201 assertEquals(3, this.serverSession.unknownMessagesTimes.size());
203 this.serverSession.handleMalformedMessage(PCEPErrors.CAPABILITY_NOT_SUPPORTED);
204 assertEquals(4, this.serverSession.unknownMessagesTimes.size());
206 this.serverSession.handleMalformedMessage(PCEPErrors.CAPABILITY_NOT_SUPPORTED);
207 assertEquals(5, this.serverSession.unknownMessagesTimes.size());
209 this.serverSession.handleMalformedMessage(PCEPErrors.CAPABILITY_NOT_SUPPORTED);
210 synchronized (this.client) {
211 while (!this.client.down) {
214 } catch (final InterruptedException e) {
219 assertTrue(this.client.down);
223 public void tearDown() {
224 this.serverSession.close();