1 /* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */
2 package org.opendaylight.openflowjava.protocol.impl.clients;
4 import io.netty.channel.ChannelHandlerContext;
6 import java.util.Stack;
7 import java.util.concurrent.BlockingQueue;
8 import java.util.concurrent.LinkedBlockingQueue;
9 import java.util.concurrent.TimeUnit;
11 import org.slf4j.Logger;
12 import org.slf4j.LoggerFactory;
16 * @author michal.polkorab
19 public class ScenarioHandler extends Thread {
21 private static final Logger LOGGER = LoggerFactory.getLogger(ScenarioHandler.class);
22 private Stack<ClientEvent> scenario;
23 private BlockingQueue<byte[]> ofMsg;
24 private ChannelHandlerContext ctx;
25 private int eventNumber;
31 public ScenarioHandler(Stack<ClientEvent> scenario) {
32 this.scenario = scenario;
33 ofMsg = new LinkedBlockingQueue<>();
38 int freezeCounter = 0;
39 while (!scenario.isEmpty()) {
40 LOGGER.debug("Running event #" + eventNumber);
41 ClientEvent peek = scenario.peek();
42 if (peek instanceof WaitForMessageEvent) {
43 LOGGER.debug("WaitForMessageEvent");
45 WaitForMessageEvent event = (WaitForMessageEvent) peek;
46 event.setHeaderReceived(ofMsg.poll(2000, TimeUnit.MILLISECONDS));
47 } catch (InterruptedException e) {
48 LOGGER.error(e.getMessage(), e);
51 } else if (peek instanceof SendEvent) {
52 LOGGER.debug("Proceed - sendevent");
53 SendEvent event = (SendEvent) peek;
56 if (peek.eventExecuted()) {
63 if (freezeCounter > 2) {
64 LOGGER.warn("Scenario freezed: " + freezeCounter);
69 } catch (InterruptedException e) {
70 LOGGER.error(e.getMessage(), e);
73 LOGGER.info("Scenario finished");
80 * @return true if scenario is done / empty
82 public boolean isEmpty() {
83 return scenario.isEmpty();
89 public Stack<ClientEvent> getScenario() {
94 * @param scenario scenario filled with desired events
96 public void setScenario(Stack<ClientEvent> scenario) {
97 this.scenario = scenario;
101 * @param ctx context which will be used for sending messages (SendEvents)
103 public void setCtx(ChannelHandlerContext ctx) {
108 * @param message received message that is compared to expected message
110 public void addOfMsg(byte[] message) {