package uk.co.acuminous.julez.event.source;
import static java.util.concurrent.TimeUnit.*;
import static org.junit.Assert.assertEquals;
import javax.jms.QueueConnectionFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import uk.co.acuminous.julez.event.handler.JmsEventHandler;
import uk.co.acuminous.julez.marshalling.json.JsonEventTranslator;
import uk.co.acuminous.julez.runner.ScenarioRunnerEvent;
import uk.co.acuminous.julez.runner.ScenarioRunnerEventFactory;
import uk.co.acuminous.julez.scenario.ScenarioEvent;
import uk.co.acuminous.julez.scenario.ScenarioEventFactory;
import uk.co.acuminous.julez.test.JmsTestUtils;
import uk.co.acuminous.julez.test.TestEventRepository;
public class JmsEventSourceTest {
private QueueConnectionFactory connectionFactory;
private JmsEventSource listener;
private TestEventRepository repository;
private JmsEventHandler jmsSender;
@Before
public void init() {
JmsTestUtils.createBroker();
JsonEventTranslator marshaller = new JsonEventTranslator();
connectionFactory = JmsTestUtils.getConnectionFactory();
repository = new TestEventRepository();
listener = new JmsEventSource(connectionFactory, marshaller);
listener.setShutdownDelay(500, MILLISECONDS);
listener.register(repository);
listener.listen();
jmsSender = new JmsEventHandler(connectionFactory, marshaller);
}
@After
public void nuke() throws Exception {
JmsTestUtils.nukeBroker();
}
@Test
public void scenarioEventsAreRecreated() throws InterruptedException {
ScenarioEvent pass = new ScenarioEventFactory().pass();
jmsSender.onEvent(pass);
listener.shutdownWhenEmpty();
assertEquals(pass, repository.first());
}
@Test
public void scenarioRunnerEventsAreRecreated() throws InterruptedException {
ScenarioRunnerEvent event = new ScenarioRunnerEventFactory().begin();
jmsSender.onEvent(event);
listener.shutdownWhenEmpty();
assertEquals(event, repository.first());
}
}