Copyright update
[openflowjava.git] / openflow-protocol-it / src / test / java / org / opendaylight / openflowjava / protocol / impl / integration / MockPlugin.java
index 7ca6ddd8b7589e311f52f3d17cdc4b3feb98ca89..f31ed029e40ba3d3416eec9bca03ee1333fb64b3 100644 (file)
-/* 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.Arrays;\r
-import java.util.concurrent.ExecutionException;\r
-import java.util.concurrent.Future;\r
-import java.util.concurrent.TimeUnit;\r
-import java.util.concurrent.TimeoutException;\r
-\r
-import org.opendaylight.openflowjava.protocol.api.connection.ConnectionAdapter;\r
-import org.opendaylight.openflowjava.protocol.api.connection.ConnectionReadyListener;\r
-import org.opendaylight.openflowjava.protocol.api.connection.SwitchConnectionHandler;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.EchoReplyInput;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.EchoReplyInputBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.EchoRequestMessage;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ErrorMessage;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterMessage;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowRemovedMessage;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesInput;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesInputBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesOutput;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.HelloInput;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.HelloInputBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.HelloMessage;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessage;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OpenflowProtocolListener;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PacketInMessage;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortStatusMessage;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.system.rev130927.DisconnectEvent;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.system.rev130927.SwitchIdleEvent;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.system.rev130927.SystemNotificationsListener;\r
-import org.opendaylight.yangtools.yang.common.RpcError;\r
-import org.opendaylight.yangtools.yang.common.RpcResult;\r
-import org.slf4j.Logger;\r
-import org.slf4j.LoggerFactory;\r
-\r
-import com.google.common.util.concurrent.SettableFuture;\r
-\r
-/**\r
- * @author michal.polkorab\r
- *\r
- */\r
-public class MockPlugin implements OpenflowProtocolListener, SwitchConnectionHandler, \r
-        SystemNotificationsListener, ConnectionReadyListener {\r
-\r
-    protected static final Logger LOGGER = LoggerFactory.getLogger(MockPlugin.class);\r
-    protected ConnectionAdapter adapter;\r
-    private SettableFuture<Void> finishedFuture;\r
-    private int idleCounter = 0;\r
-\r
-    /** Creates MockPlugin */\r
-    public MockPlugin() {\r
-        LOGGER.info("Creating MockPlugin");\r
-        finishedFuture = SettableFuture.create();\r
-        LOGGER.info("mockPlugin: "+System.identityHashCode(this));\r
-    }\r
-    \r
-    @Override\r
-    public void onSwitchConnected(ConnectionAdapter connection) {\r
-        LOGGER.info("onSwitchConnected: " + connection);\r
-        this.adapter = connection;\r
-        connection.setMessageListener(this);\r
-        connection.setSystemListener(this);\r
-        connection.setConnectionReadyListener(this);\r
-    }\r
-\r
-    @Override\r
-    public boolean accept(InetAddress switchAddress) {\r
-        return true;\r
-    }\r
-\r
-    @Override\r
-    public void onEchoRequestMessage(final EchoRequestMessage notification) {\r
-        new Thread(new Runnable() {\r
-            @Override\r
-            public void run() {\r
-                LOGGER.debug("EchoRequest message received");\r
-                EchoReplyInputBuilder replyBuilder = new EchoReplyInputBuilder();\r
-                replyBuilder.setVersion((short) 4);\r
-                replyBuilder.setXid(notification.getXid());\r
-                EchoReplyInput echoReplyInput = replyBuilder.build();\r
-                adapter.echoReply(echoReplyInput);\r
-                LOGGER.debug("EchoReplyInput sent");\r
-                LOGGER.debug("adapter: "+adapter);\r
-            }\r
-        }).start();\r
-    }\r
-\r
-    @Override\r
-    public void onErrorMessage(ErrorMessage notification) {\r
-        LOGGER.debug("Error message received");\r
-        \r
-    }\r
-\r
-    @Override\r
-    public void onExperimenterMessage(ExperimenterMessage notification) {\r
-        LOGGER.debug("Experimenter message received");\r
-        \r
-    }\r
-\r
-    @Override\r
-    public void onFlowRemovedMessage(FlowRemovedMessage notification) {\r
-        LOGGER.debug("FlowRemoved message received");\r
-        \r
-    }\r
-\r
-    @Override\r
-    public void onHelloMessage(HelloMessage notification) {\r
-        new Thread(new Runnable() {\r
-            @Override\r
-            public void run() {\r
-                LOGGER.debug("Hello message received");\r
-                HelloInputBuilder hib = new HelloInputBuilder();\r
-                hib.setVersion((short) 4);\r
-                hib.setXid(2L);\r
-                HelloInput hi = hib.build();\r
-                adapter.hello(hi);\r
-                LOGGER.debug("hello msg sent");\r
-                new Thread(new Runnable() {\r
-                    @Override\r
-                    public void run() {\r
-                        sendFeaturesReply();\r
-                    }\r
-                }).start();\r
-                LOGGER.debug("adapter: "+adapter);\r
-            }\r
-        }).start();\r
-    }\r
-    \r
-    protected void sendFeaturesReply() {\r
-        GetFeaturesInputBuilder featuresBuilder = new GetFeaturesInputBuilder();\r
-        featuresBuilder.setVersion((short) 4);\r
-        featuresBuilder.setXid(3L);\r
-        GetFeaturesInput featuresInput = featuresBuilder.build();\r
-        try {\r
-            LOGGER.debug("Going to send featuresRequest");\r
-            RpcResult<GetFeaturesOutput> rpcResult = adapter.getFeatures(\r
-                    featuresInput).get(2500, TimeUnit.MILLISECONDS);\r
-            if (rpcResult.isSuccessful()) {\r
-                byte[] byteArray = rpcResult.getResult().getDatapathId()\r
-                        .toByteArray();\r
-                LOGGER.info("DatapathId: " + Arrays.toString(byteArray));\r
-            } else {\r
-                RpcError rpcError = rpcResult.getErrors().iterator().next();\r
-                LOGGER.warn("rpcResult failed: "\r
-                        + rpcError.getCause().getMessage(), rpcError.getCause());\r
-            }\r
-        } catch (InterruptedException | ExecutionException | TimeoutException e) {\r
-            LOGGER.error(e.getMessage(), e);\r
-        }\r
-        LOGGER.info("After FeaturesReply message");\r
-    }\r
-\r
-    protected void shutdown() {\r
-        LOGGER.debug("adapter: "+adapter);\r
-        try {\r
-            LOGGER.info("mockPlugin: "+System.identityHashCode(this));\r
-            Thread.sleep(500);\r
-            if (adapter != null) {\r
-                Future<Boolean> disconnect = adapter.disconnect();\r
-                disconnect.get();\r
-                LOGGER.info("Disconnected");\r
-            } \r
-        } catch (Exception e) {\r
-            LOGGER.error(e.getMessage(), e);\r
-        }\r
-        finishedFuture.set(null);\r
-    }\r
-\r
-    @Override\r
-    public void onMultipartReplyMessage(MultipartReplyMessage notification) {\r
-        LOGGER.debug("MultipartReply message received");\r
-        \r
-    }\r
-\r
-    @Override\r
-    public void onPacketInMessage(PacketInMessage notification) {\r
-        LOGGER.debug("PacketIn message received");\r
-        LOGGER.debug("BufferId: " + notification.getBufferId());\r
-        LOGGER.debug("TotalLength: " + notification.getTotalLen());\r
-        LOGGER.debug("Reason: " + notification.getReason());\r
-        LOGGER.debug("TableId: " + notification.getTableId());\r
-        LOGGER.debug("Cookie: " + notification.getCookie());\r
-        LOGGER.debug("Class: " + notification.getMatch().getMatchEntries().get(0).getOxmClass());\r
-        LOGGER.debug("Field: " + notification.getMatch().getMatchEntries().get(0).getOxmMatchField());\r
-        LOGGER.debug("Datasize: " + notification.getData().length);\r
-    }\r
-\r
-    @Override\r
-    public void onPortStatusMessage(PortStatusMessage notification) {\r
-        LOGGER.debug("PortStatus message received");\r
-        \r
-    }\r
-\r
-    @Override\r
-    public void onDisconnectEvent(DisconnectEvent notification) {\r
-        LOGGER.debug("disconnection ocured: "+notification.getInfo());\r
-        LOGGER.debug("adapter: "+adapter);\r
-    }\r
-\r
-    /**\r
-     * @return finishedFuture object\r
-     */\r
-    public SettableFuture<Void> getFinishedFuture() {\r
-        return finishedFuture;\r
-    }\r
-\r
-    @Override\r
-    public void onSwitchIdleEvent(SwitchIdleEvent notification) {\r
-        LOGGER.debug("switch status: "+notification.getInfo());\r
-        idleCounter ++;\r
-    }\r
-\r
-    /**\r
-     * @return number of occured idleEvents\r
-     */\r
-    public int getIdleCounter() {\r
-        return idleCounter;\r
-    }\r
-    \r
-    @Override\r
-    public void onConnectionReady() {\r
-        LOGGER.debug("connection ready notification arrived");\r
-    }\r
-\r
-\r
-}\r
+/*
+ * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.openflowjava.protocol.impl.integration;
+
+import java.net.InetAddress;
+import java.util.Arrays;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+import org.opendaylight.openflowjava.protocol.api.connection.ConnectionAdapter;
+import org.opendaylight.openflowjava.protocol.api.connection.ConnectionReadyListener;
+import org.opendaylight.openflowjava.protocol.api.connection.SwitchConnectionHandler;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.EchoReplyInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.EchoReplyInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.EchoRequestMessage;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ErrorMessage;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterMessage;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowRemovedMessage;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.HelloInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.HelloInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.HelloMessage;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessage;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OpenflowProtocolListener;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PacketInMessage;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortStatusMessage;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.system.rev130927.DisconnectEvent;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.system.rev130927.SwitchIdleEvent;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.system.rev130927.SystemNotificationsListener;
+import org.opendaylight.yangtools.yang.common.RpcError;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.util.concurrent.SettableFuture;
+
+/**
+ * @author michal.polkorab
+ *
+ */
+public class MockPlugin implements OpenflowProtocolListener, SwitchConnectionHandler, 
+        SystemNotificationsListener, ConnectionReadyListener {
+
+    protected static final Logger LOGGER = LoggerFactory.getLogger(MockPlugin.class);
+    protected ConnectionAdapter adapter;
+    private SettableFuture<Void> finishedFuture;
+    private int idleCounter = 0;
+
+    /** Creates MockPlugin */
+    public MockPlugin() {
+        LOGGER.info("Creating MockPlugin");
+        finishedFuture = SettableFuture.create();
+        LOGGER.info("mockPlugin: "+System.identityHashCode(this));
+    }
+    
+    @Override
+    public void onSwitchConnected(ConnectionAdapter connection) {
+        LOGGER.info("onSwitchConnected: " + connection);
+        this.adapter = connection;
+        connection.setMessageListener(this);
+        connection.setSystemListener(this);
+        connection.setConnectionReadyListener(this);
+    }
+
+    @Override
+    public boolean accept(InetAddress switchAddress) {
+        return true;
+    }
+
+    @Override
+    public void onEchoRequestMessage(final EchoRequestMessage notification) {
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                LOGGER.debug("EchoRequest message received");
+                EchoReplyInputBuilder replyBuilder = new EchoReplyInputBuilder();
+                replyBuilder.setVersion((short) 4);
+                replyBuilder.setXid(notification.getXid());
+                EchoReplyInput echoReplyInput = replyBuilder.build();
+                adapter.echoReply(echoReplyInput);
+                LOGGER.debug("EchoReplyInput sent");
+                LOGGER.debug("adapter: "+adapter);
+            }
+        }).start();
+    }
+
+    @Override
+    public void onErrorMessage(ErrorMessage notification) {
+        LOGGER.debug("Error message received");
+        
+    }
+
+    @Override
+    public void onExperimenterMessage(ExperimenterMessage notification) {
+        LOGGER.debug("Experimenter message received");
+        
+    }
+
+    @Override
+    public void onFlowRemovedMessage(FlowRemovedMessage notification) {
+        LOGGER.debug("FlowRemoved message received");
+        
+    }
+
+    @Override
+    public void onHelloMessage(HelloMessage notification) {
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                LOGGER.debug("Hello message received");
+                HelloInputBuilder hib = new HelloInputBuilder();
+                hib.setVersion((short) 4);
+                hib.setXid(2L);
+                HelloInput hi = hib.build();
+                adapter.hello(hi);
+                LOGGER.debug("hello msg sent");
+                new Thread(new Runnable() {
+                    @Override
+                    public void run() {
+                        sendFeaturesReply();
+                    }
+                }).start();
+                LOGGER.debug("adapter: "+adapter);
+            }
+        }).start();
+    }
+    
+    protected void sendFeaturesReply() {
+        GetFeaturesInputBuilder featuresBuilder = new GetFeaturesInputBuilder();
+        featuresBuilder.setVersion((short) 4);
+        featuresBuilder.setXid(3L);
+        GetFeaturesInput featuresInput = featuresBuilder.build();
+        try {
+            LOGGER.debug("Going to send featuresRequest");
+            RpcResult<GetFeaturesOutput> rpcResult = adapter.getFeatures(
+                    featuresInput).get(2500, TimeUnit.MILLISECONDS);
+            if (rpcResult.isSuccessful()) {
+                byte[] byteArray = rpcResult.getResult().getDatapathId()
+                        .toByteArray();
+                LOGGER.info("DatapathId: " + Arrays.toString(byteArray));
+            } else {
+                RpcError rpcError = rpcResult.getErrors().iterator().next();
+                LOGGER.warn("rpcResult failed: "
+                        + rpcError.getCause().getMessage(), rpcError.getCause());
+            }
+        } catch (InterruptedException | ExecutionException | TimeoutException e) {
+            LOGGER.error(e.getMessage(), e);
+        }
+        LOGGER.info("After FeaturesReply message");
+    }
+
+    protected void shutdown() {
+        LOGGER.debug("adapter: "+adapter);
+        try {
+            LOGGER.info("mockPlugin: "+System.identityHashCode(this));
+            Thread.sleep(500);
+            if (adapter != null) {
+                Future<Boolean> disconnect = adapter.disconnect();
+                disconnect.get();
+                LOGGER.info("Disconnected");
+            } 
+        } catch (Exception e) {
+            LOGGER.error(e.getMessage(), e);
+        }
+        finishedFuture.set(null);
+    }
+
+    @Override
+    public void onMultipartReplyMessage(MultipartReplyMessage notification) {
+        LOGGER.debug("MultipartReply message received");
+        
+    }
+
+    @Override
+    public void onPacketInMessage(PacketInMessage notification) {
+        LOGGER.debug("PacketIn message received");
+        LOGGER.debug("BufferId: " + notification.getBufferId());
+        LOGGER.debug("TotalLength: " + notification.getTotalLen());
+        LOGGER.debug("Reason: " + notification.getReason());
+        LOGGER.debug("TableId: " + notification.getTableId());
+        LOGGER.debug("Cookie: " + notification.getCookie());
+        LOGGER.debug("Class: " + notification.getMatch().getMatchEntries().get(0).getOxmClass());
+        LOGGER.debug("Field: " + notification.getMatch().getMatchEntries().get(0).getOxmMatchField());
+        LOGGER.debug("Datasize: " + notification.getData().length);
+    }
+
+    @Override
+    public void onPortStatusMessage(PortStatusMessage notification) {
+        LOGGER.debug("PortStatus message received");
+        
+    }
+
+    @Override
+    public void onDisconnectEvent(DisconnectEvent notification) {
+        LOGGER.debug("disconnection ocured: "+notification.getInfo());
+        LOGGER.debug("adapter: "+adapter);
+    }
+
+    /**
+     * @return finishedFuture object
+     */
+    public SettableFuture<Void> getFinishedFuture() {
+        return finishedFuture;
+    }
+
+    @Override
+    public void onSwitchIdleEvent(SwitchIdleEvent notification) {
+        LOGGER.debug("switch status: "+notification.getInfo());
+        idleCounter ++;
+    }
+
+    /**
+     * @return number of occured idleEvents
+     */
+    public int getIdleCounter() {
+        return idleCounter;
+    }
+    
+    @Override
+    public void onConnectionReady() {
+        LOGGER.debug("connection ready notification arrived");
+    }
+
+
+}