--- /dev/null
+/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
+package org.opendaylight.openflowjava.protocol.impl.integration;\r
+\r
+import java.net.InetAddress;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.Stack;\r
+import java.util.concurrent.ExecutionException;\r
+import java.util.concurrent.TimeUnit;\r
+\r
+import org.junit.After;\r
+import org.junit.Before;\r
+import org.junit.Test;\r
+import org.opendaylight.openflowjava.protocol.api.connection.ConnectionConfiguration;\r
+import org.opendaylight.openflowjava.protocol.api.connection.ConnectionConfiguration.FEATURE_SUPPORT;\r
+import org.opendaylight.openflowjava.protocol.impl.clients.ClientEvent;\r
+import org.opendaylight.openflowjava.protocol.impl.clients.ScenarioFactory;\r
+import org.opendaylight.openflowjava.protocol.impl.clients.ScenarioHandler;\r
+import org.opendaylight.openflowjava.protocol.impl.clients.SendEvent;\r
+import org.opendaylight.openflowjava.protocol.impl.clients.SimpleClient;\r
+import org.opendaylight.openflowjava.protocol.impl.clients.SleepEvent;\r
+import org.opendaylight.openflowjava.protocol.impl.clients.WaitForMessageEvent;\r
+import org.opendaylight.openflowjava.protocol.impl.connection.SwitchConnectionProviderImpl;\r
+import org.opendaylight.openflowjava.protocol.impl.core.TcpHandler;\r
+import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ *\r
+ */\r
+public class IntegrationTest {\r
+\r
+ /** Name of file in which OpenFLow protocol messages are stored in binary format */\r
+ private static int port;\r
+ private static final FEATURE_SUPPORT DEFAULT_TLS_SUPPORT = FEATURE_SUPPORT.NOT_SUPPORTED;\r
+ private static final int SWITCH_IDLE_TIMEOUT = 2000;\r
+\r
+ protected static final Logger LOGGER = LoggerFactory\r
+ .getLogger(IntegrationTest.class);\r
+\r
+ private static final long CONNECTION_TIMEOUT = 2000;\r
+ private InetAddress startupAddress;\r
+ private MockPlugin mockPlugin;\r
+ private SwitchConnectionProviderImpl scpimpl;\r
+ private List<ConnectionConfiguration> configs;\r
+\r
+ /**\r
+ * @throws Exception\r
+ */\r
+ @Before\r
+ public void setUp() throws Exception {\r
+ LOGGER.debug("\n\nstarting test -------------------------------");\r
+ startupAddress = InetAddress.getLocalHost();\r
+ mockPlugin = new MockPlugin();\r
+ scpimpl = new SwitchConnectionProviderImpl();\r
+ scpimpl.setSwitchConnectionHandler(mockPlugin);\r
+ configs = new ArrayList<>();\r
+ configs.add(new TestingConnConfigImpl(startupAddress, 0, DEFAULT_TLS_SUPPORT, SWITCH_IDLE_TIMEOUT));\r
+ scpimpl.configure(configs);\r
+ scpimpl.startup().get(CONNECTION_TIMEOUT, TimeUnit.MILLISECONDS);\r
+ TcpHandler server = (TcpHandler) scpimpl.getServerLot().iterator().next();\r
+ port = server.getPort();\r
+ }\r
+\r
+ @After\r
+ public void tearDown() throws Exception {\r
+ Thread.sleep(500);\r
+ }\r
+\r
+ /**\r
+ * Library integration and communication test\r
+ * @throws Exception \r
+ */\r
+ @Test\r
+ public void testHandshake() throws Exception {\r
+ int amountOfCLients = 1;\r
+ Stack<ClientEvent> scenario = ScenarioFactory.createHandshakeScenario();\r
+ ScenarioHandler handler = new ScenarioHandler(scenario);\r
+ List<SimpleClient> clients = createAndStartClient(amountOfCLients, handler);\r
+ SimpleClient firstClient = clients.get(0);\r
+ firstClient.getScenarioDone().get();\r
+ mockPlugin.shutdown();\r
+ mockPlugin.getFinishedFuture().get();\r
+ }\r
+\r
+ /**\r
+ * Library integration and communication test\r
+ * @throws Exception \r
+ */\r
+ @Test\r
+ public void testHandshakeAndEcho() throws Exception {\r
+ int amountOfCLients = 1;\r
+ Stack<ClientEvent> scenario = ScenarioFactory.createHandshakeScenario();\r
+ scenario.add(0, new SleepEvent(1500));\r
+ scenario.add(0, new SendEvent(ByteBufUtils.hexStringToBytes("04 02 00 08 00 00 00 04")));\r
+ scenario.add(0, new SleepEvent(1500));\r
+ scenario.add(0, new WaitForMessageEvent(ByteBufUtils.hexStringToBytes("04 03 00 08 00 00 00 04")));\r
+ ScenarioHandler handler = new ScenarioHandler(scenario);\r
+ List<SimpleClient> clients = createAndStartClient(amountOfCLients, handler);\r
+ SimpleClient firstClient = clients.get(0);\r
+ firstClient.getScenarioDone().get();\r
+ mockPlugin.shutdown();\r
+ mockPlugin.getFinishedFuture().get();\r
+ }\r
+\r
+ /**\r
+ * Library integration and communication test (with virtual machine)\r
+ * @throws Exception\r
+ */\r
+ //@Test\r
+ public void testCommunicationWithVM() throws Exception {\r
+ mockPlugin.getFinishedFuture().get();\r
+ }\r
+ \r
+ /**\r
+ * @param amountOfCLients \r
+ * @return new clients up and running\r
+ * @throws InterruptedException\r
+ * @throws ExecutionException\r
+ */\r
+ private List<SimpleClient> createAndStartClient(int amountOfCLients, ScenarioHandler scenarioHandler)\r
+ throws InterruptedException, ExecutionException {\r
+ List<SimpleClient> clientsHorde = new ArrayList<>();\r
+ for (int i = 0; i < amountOfCLients; i++) {\r
+ LOGGER.debug("startup address in createclient: " + startupAddress.getHostAddress());\r
+ SimpleClient sc = new SimpleClient(startupAddress.getHostAddress(), port);\r
+ sc.setSecuredClient(false);\r
+ sc.setScenarioHandler(scenarioHandler);\r
+ clientsHorde.add(sc);\r
+ sc.start();\r
+ }\r
+ for (SimpleClient sc : clientsHorde) {\r
+ try {\r
+ sc.getIsOnlineFuture().get(CONNECTION_TIMEOUT, TimeUnit.MILLISECONDS);\r
+ } catch (Exception e) {\r
+ LOGGER.error(e.getMessage(), e);\r
+ throw new ExecutionException(e);\r
+ }\r
+ }\r
+ return clientsHorde;\r
+ }\r
+\r
+}\r