Package org.menacheri.jetclient.event.impl

Source Code of org.menacheri.jetclient.event.impl.EventDispatcherTest

package org.menacheri.jetclient.event.impl;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

import org.junit.Test;
import org.menacheri.jetclient.event.Events;
import org.menacheri.jetclient.event.Event;
import org.menacheri.jetclient.event.EventDispatcher;
import org.menacheri.jetclient.event.EventHandler;

public class EventDispatcherTest
{
  @Test
  public void specificEventReceiptOnSpecificEventHandler()
      throws InterruptedException
  {
    EventDispatcher dispatcher = new DefaultEventDispatcher();
    final CountDownLatch latch = new CountDownLatch(1);
    dispatcher.addHandler(new EventHandler()
    {

      @Override
      public void onEvent(Event event)
      {
        latch.countDown();
      }

      @Override
      public int getEventType()
      {
        return Events.SESSION_MESSAGE;
      }
    });

    Event event = Events.event(null, Events.SESSION_MESSAGE);
    dispatcher.fireEvent(event);
    assertTrue(latch.await(1, TimeUnit.SECONDS));
  }

  @Test
  public void eventReceiptOnANYTypeEventHandler() throws InterruptedException
  {
    EventDispatcher dispatcher = new DefaultEventDispatcher();
    final CountDownLatch latch = new CountDownLatch(5);
    dispatcher.addHandler(new EventHandler()
    {

      @Override
      public void onEvent(Event event)
      {
        latch.countDown();
      }

      @Override
      public int getEventType()
      {
        return Events.ANY;
      }
    });

    Event event = Events.event(null, Events.SESSION_MESSAGE);
    dispatcher.fireEvent(event);
    event = Events.event(null, Events.NETWORK_MESSAGE);
    dispatcher.fireEvent(event);
    event = Events.event(null, Events.EXCEPTION);
    dispatcher.fireEvent(event);
    event = Events.event(null, Events.LOG_IN);
    dispatcher.fireEvent(event);
    event = Events.event(null, Events.CONNECT);
    dispatcher.fireEvent(event);

    assertTrue(latch.await(1, TimeUnit.SECONDS));
  }

  @Test
  public void nonReceiptOfWrongEventOnSpecificEventHandler()
      throws InterruptedException
  {
    EventDispatcher dispatcher = new DefaultEventDispatcher();
    final CountDownLatch latch = new CountDownLatch(1);
    dispatcher.addHandler(new EventHandler()
    {

      @Override
      public void onEvent(Event event)
      {
        latch.countDown();
      }

      @Override
      public int getEventType()
      {
        return Events.SESSION_MESSAGE;
      }
    });

    Event event = Events.event(null, Events.NETWORK_MESSAGE);
    dispatcher.fireEvent(event);
    assertFalse(latch.await(1, TimeUnit.SECONDS));
  }

  @Test
  public void eventPublishingPerformance() throws InterruptedException
  {
    EventDispatcher dispatcher = new DefaultEventDispatcher();
    int countOfEvents = 5000000;
    final CountDownLatch latch = new CountDownLatch(countOfEvents);
    dispatcher.addHandler(new EventHandler()
    {

      @Override
      public void onEvent(Event event)
      {
        latch.countDown();
      }

      @Override
      public int getEventType()
      {
        return 0;
      }
    });
    long startTime = System.nanoTime();
    for (int i = 1; i <= countOfEvents; i++)
    {
      Event event = Events.event(null, Events.SESSION_MESSAGE);
      dispatcher.fireEvent(event);
    }
    long time = System.nanoTime() - startTime;
    latch.await(10, TimeUnit.SECONDS);
    System.out.printf("Took  %.3f seconds to send %d int events",
        time / 1e9, countOfEvents);
  }
}
TOP

Related Classes of org.menacheri.jetclient.event.impl.EventDispatcherTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.