Move pcep base parser Activator to its own bundle
[bgpcep.git] / pcep / impl / src / test / java / org / opendaylight / protocol / pcep / impl / FiniteStateMachineTest.java
index 55a37946632721c4f872020ea4cb0de283440ad5..778b4d0dde81e0a42eb3d92930553846f58bc8da 100644 (file)
@@ -16,30 +16,38 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Test;
+import org.opendaylight.controller.config.yang.pcep.impl.Tls;
+import org.opendaylight.protocol.pcep.impl.spi.Util;
 import org.opendaylight.protocol.pcep.spi.PCEPErrors;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.Keepalive;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.Open;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.Pcerr;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.Starttls;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.OpenMessage;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.Errors;
 import org.opendaylight.yangtools.yang.binding.Notification;
 
 public class FiniteStateMachineTest extends AbstractPCEPSessionTest {
 
     private DefaultPCEPSessionNegotiator serverSession;
+    private DefaultPCEPSessionNegotiator tlsSessionNegotiator;
 
     @Before
     public void setup() {
-        final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.Open localPrefs = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder().setKeepalive(
+        final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.Open localPrefs = new OpenBuilder().setKeepalive(
                 (short) 1).build();
-        this.serverSession = new DefaultPCEPSessionNegotiator(new DefaultPromise<PCEPSessionImpl>(GlobalEventExecutor.INSTANCE), this.channel, this.listener, (short) 1, 20, localPrefs);
+        this.serverSession = new DefaultPCEPSessionNegotiator(new DefaultPromise<PCEPSessionImpl>(GlobalEventExecutor.INSTANCE),
+                this.channel, this.listener, (short) 1, 20, localPrefs);
+        this.tlsSessionNegotiator = new DefaultPCEPSessionNegotiator(new DefaultPromise<PCEPSessionImpl>(GlobalEventExecutor.INSTANCE),
+                this.channel, this.listener, (short) 1, 20, localPrefs, new Tls());
     }
 
     /**
      * Both PCEs accept session characteristics. Also tests KeepAliveTimer and error message and when pce attempts to
      * establish pce session for the 2nd time.
      *
-     * @throws Exception
+     * @throws Exception exception
      */
     @Test
     public void testSessionCharsAccBoth() throws Exception {
@@ -53,10 +61,68 @@ public class FiniteStateMachineTest extends AbstractPCEPSessionTest {
         assertEquals(this.serverSession.getState(), DefaultPCEPSessionNegotiator.State.FINISHED);
     }
 
+    /**
+     * Establish PCEPS TLS connection with peer
+     */
+    @Test
+    public void testEstablishTLS() {
+        final DefaultPCEPSessionNegotiator negotiator = new DefaultPCEPSessionNegotiator(new DefaultPromise<PCEPSessionImpl>(GlobalEventExecutor.INSTANCE),
+                this.channel, this.listener, (short) 1, 20, new OpenBuilder().setKeepalive((short) 1).build(),
+                SslContextFactoryTest.createTlsConfig());
+        negotiator.channelActive(null);
+        assertEquals(1, this.msgsSend.size());
+        assertTrue(this.msgsSend.get(0) instanceof Starttls);
+        assertEquals(DefaultPCEPSessionNegotiator.State.START_TLS_WAIT, negotiator.getState());
+        negotiator.handleMessage(this.startTlsMsg);
+        assertEquals(DefaultPCEPSessionNegotiator.State.OPEN_WAIT, negotiator.getState());
+        assertEquals(2, this.msgsSend.size());
+        assertTrue(this.msgsSend.get(1) instanceof Open);
+        negotiator.handleMessage(this.openMsg);
+        assertEquals(DefaultPCEPSessionNegotiator.State.KEEP_WAIT, negotiator.getState());
+    }
+
+    /**
+     * As Tls is not configured properly, PCE will send error PCEPErrors.NOT_POSSIBLE_WITHOUT_TLS
+     *
+     * @throws Exception exception
+     */
+    @Test
+    public void testFailedToEstablishTLS() throws Exception {
+        this.tlsSessionNegotiator.channelActive(null);
+        assertEquals(1, this.msgsSend.size());
+        assertTrue(this.msgsSend.get(0) instanceof Starttls);
+        assertEquals(DefaultPCEPSessionNegotiator.State.START_TLS_WAIT, this.tlsSessionNegotiator.getState());
+        this.tlsSessionNegotiator.handleMessage(this.startTlsMsg);
+        assertEquals(2, this.msgsSend.size());
+        assertTrue(this.msgsSend.get(1) instanceof Pcerr);
+        final Errors obj = ((Pcerr) this.msgsSend.get(1)).getPcerrMessage().getErrors().get(0);
+        assertEquals(PCEPErrors.NOT_POSSIBLE_WITHOUT_TLS.getErrorType(), obj.getErrorObject().getType().shortValue());
+        assertEquals(PCEPErrors.NOT_POSSIBLE_WITHOUT_TLS.getErrorValue(), obj.getErrorObject().getValue().shortValue());
+        assertEquals(DefaultPCEPSessionNegotiator.State.FINISHED, this.tlsSessionNegotiator.getState());
+    }
+
+    /**
+     * As PCE does not receive expected message (StartTLS), error PCEPErrors.NON_STARTTLS_MSG_RCVD is send
+     */
+    @Test
+    public void testTLSUnexpectedMessage() {
+        this.tlsSessionNegotiator.channelActive(null);
+        assertEquals(1, this.msgsSend.size());
+        assertTrue(this.msgsSend.get(0) instanceof Starttls);
+        assertEquals(DefaultPCEPSessionNegotiator.State.START_TLS_WAIT, this.tlsSessionNegotiator.getState());
+        this.tlsSessionNegotiator.handleMessage(this.openMsg);
+        assertEquals(2, this.msgsSend.size());
+        assertTrue(this.msgsSend.get(1) instanceof Pcerr);
+        final Errors obj = ((Pcerr) this.msgsSend.get(1)).getPcerrMessage().getErrors().get(0);
+        assertEquals(PCEPErrors.NON_STARTTLS_MSG_RCVD.getErrorType(), obj.getErrorObject().getType().shortValue());
+        assertEquals(PCEPErrors.NON_STARTTLS_MSG_RCVD.getErrorValue(), obj.getErrorObject().getValue().shortValue());
+        assertEquals(this.tlsSessionNegotiator.getState(), DefaultPCEPSessionNegotiator.State.FINISHED);
+    }
+
     /**
      * Mock PCE does not accept session characteristics the first time.
      *
-     * @throws Exception
+     * @throws Exception exception
      */
     @Test
     public void testSessionCharsAccMe() throws Exception {
@@ -77,7 +143,7 @@ public class FiniteStateMachineTest extends AbstractPCEPSessionTest {
     /**
      * Sending different PCEP Message than Open in session establishment phase.
      *
-     * @throws Exception
+     * @throws Exception exception
      */
     @Test
     public void testErrorOneOne() throws Exception {
@@ -97,7 +163,7 @@ public class FiniteStateMachineTest extends AbstractPCEPSessionTest {
     /**
      * KeepWaitTimer expired.
      *
-     * @throws Exception
+     * @throws Exception exception
      */
     @Test
     public void testErrorOneSeven() throws Exception {
@@ -120,7 +186,7 @@ public class FiniteStateMachineTest extends AbstractPCEPSessionTest {
     /**
      * OpenWait timer expired.
      *
-     * @throws InterruptedException
+     * @throws InterruptedException exception
      */
     @Test
     @Ignore