package edu.harvard.econcs.turkserver.server; import java.io.IOException; import java.net.DatagramSocket; import java.net.ServerSocket; import java.util.List; import edu.harvard.econcs.turkserver.api.ExperimentLog; import edu.harvard.econcs.turkserver.client.SessionClient; import edu.harvard.econcs.turkserver.logging.FakeExperimentLog; public class TestUtils { public static int PORT_SLEEP_MILLIS = 200; public static FakeHITWorkerGroup getFakeGroup(String prefix, int groupSize, Class<?> clientClass) throws Exception { FakeHITWorkerGroup fakeGroup = new FakeHITWorkerGroup(); for(int i = 1; i <= groupSize; i++ ) { String hitId = "HIT " + prefix + i; String workerId = "Worker " + prefix + i; String assignmentId = "Assignment " + prefix +i; String username = "Username " + prefix +i; FakeHITWorker fake = FakeHITWorker.getNew(hitId, assignmentId, workerId, username, clientClass); fakeGroup.addWorker(fake); } return fakeGroup; } public static FakeExperimentController getFakeController(FakeHITWorkerGroup fakeGroup) { FakeExperimentController fakeCont = new FakeExperimentController(fakeGroup); return fakeCont; } public static ExperimentLog getFakeLog() { return new FakeExperimentLog(); } public static void disconnectAll(List<? extends SessionClient<?>> clients) { for( SessionClient<?> client : clients ) { client.disconnect(); } } public static void waitForPort(int port) { while( !available(port) ) { try { Thread.sleep(PORT_SLEEP_MILLIS); } catch (InterruptedException e) {} } } /** * Stolen from http://stackoverflow.com/questions/434718/sockets-discover-port-availability-using-java * @param port * @return */ public static boolean available(int port) { if (port < 1 || port > 65535 ) { throw new IllegalArgumentException("Invalid start port: " + port); } ServerSocket ss = null; DatagramSocket ds = null; try { ss = new ServerSocket(port); ss.setReuseAddress(true); ds = new DatagramSocket(port); ds.setReuseAddress(true); return true; } catch (IOException e) { } finally { if (ds != null) { ds.close(); } if (ss != null) { try { ss.close(); } catch (IOException e) { /* should not be thrown */ } } } return false; } }