Package com.esotericsoftware.kryonet

Source Code of com.esotericsoftware.kryonet.KryoNetTestCase

package com.esotericsoftware.kryonet;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Timer;
import java.util.TimerTask;

import junit.framework.TestCase;

import com.esotericsoftware.minlog.Log;
import com.esotericsoftware.minlog.Log.Logger;

abstract public class KryoNetTestCase extends TestCase {
  static public String host = "localhost";
  static public int tcpPort = 54555, udpPort = 54777;

  private ArrayList<Thread> threads = new ArrayList();
  ArrayList<EndPoint> endPoints = new ArrayList();
  private Timer timer;
  boolean fail;

  public KryoNetTestCase () {
    // Log.TRACE();
    // Log.DEBUG();
    Log.setLogger(new Logger() {
      public void log (int level, String category, String message, Throwable ex) {
        // if (category == null || category.equals("kryonet")) //
        super.log(level, category, message, ex);
      }
    });
  }

  protected void setUp () throws Exception {
    System.out.println("---- " + getClass().getSimpleName());
    timer = new Timer();
  }

  protected void tearDown () throws Exception {
    timer.cancel();
  }

  public void startEndPoint (EndPoint endPoint) {
    endPoints.add(endPoint);
    Thread thread = new Thread(endPoint, endPoint.getClass().getSimpleName());
    threads.add(thread);
    thread.start();
  }

  public void stopEndPoints () {
    stopEndPoints(0);
  }

  public void stopEndPoints (int stopAfterMillis) {
    timer.schedule(new TimerTask() {
      public void run () {
        for (EndPoint endPoint : endPoints)
          endPoint.stop();
        endPoints.clear();
      }
    }, stopAfterMillis);
  }

  public void waitForThreads (int stopAfterMillis) {
    if (stopAfterMillis > 10000) throw new IllegalArgumentException("stopAfterMillis must be < 10000");
    stopEndPoints(stopAfterMillis);
    waitForThreads();
  }

  public void waitForThreads () {
    fail = false;
    TimerTask failTask = new TimerTask() {
      public void run () {
        stopEndPoints();
        fail = true;
      }
    };
    timer.schedule(failTask, 11000);
    while (true) {
      for (Iterator iter = threads.iterator(); iter.hasNext();) {
        Thread thread = (Thread)iter.next();
        if (!thread.isAlive()) iter.remove();
      }
      if (threads.isEmpty()) break;
      try {
        Thread.sleep(100);
      } catch (InterruptedException ignored) {
      }
    }
    failTask.cancel();
    if (fail) fail("Test did not complete in a timely manner.");
    // Give sockets a chance to close before starting the next test.
    try {
      Thread.sleep(1000);
    } catch (InterruptedException ignored) {
    }
  }
}
TOP

Related Classes of com.esotericsoftware.kryonet.KryoNetTestCase

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.