package edu.harvard.econcs.turkserver.server;
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import edu.harvard.econcs.turkserver.cometd.MockServerSession;
import edu.harvard.econcs.turkserver.logging.FakeExperimentLog;
import edu.harvard.econcs.turkserver.schema.Session;
import edu.harvard.econcs.turkserver.server.mysql.MockDataTracker;
public class ExperimentsTest {
Experiments exps;
Session record;
@Before
public void setUp() throws Exception {
exps = new Experiments(
TestExperiment.class,
new DummyConfigurator(1),
new MockDataTracker(),
new EventAnnotationManager()
);
record = new Session();
record.setHitId("TestHITID");
}
@After
public void tearDown() throws Exception {
}
@Test
public void testIntervals() throws InterruptedException {
HITWorkerImpl worker = new HITWorkerImpl(new MockServerSession(), record);
FakeExperimentLog log = new FakeExperimentLog();
ExperimentControllerImpl cont = new ExperimentControllerImpl(log, worker, exps);
TestExperiment bean = new TestExperiment(worker, log, cont);
exps.startExperiment(worker, cont, bean);
// Check that worker is mapped
assertTrue(exps.currentExps.containsKey(worker));
Thread.sleep(5000);
exps.scheduleFinishExperiment(cont);
Thread.sleep(500); // Allow for time to finish
// check that scheduledIntervals is cleared
assertTrue(exps.scheduledIntervals.size() == 0);
// Check that worker is unmapped
assertFalse(exps.currentExps.containsKey(worker));
// check that there were approx 5 interval calls
assertEquals(5, bean.intervalCalls, 1);
}
}