package com.openxc;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
import com.openxc.messages.KeyedMessage;
import com.openxc.messages.DiagnosticRequest;
import com.openxc.messages.SimpleVehicleMessage;
import com.openxc.messages.VehicleMessage;
import com.openxc.sources.TestSource;
import com.openxc.sinks.TestSink;
public class DataPipelineTest {
DataPipeline pipeline;
TestSource source;
TestSink sink;
@Before
public void set() {
pipeline = new DataPipeline();
source = new TestSource();
sink = new TestSink();
}
@Test
public void addSource() {
pipeline.addSource(source);
assertThat(source.callback, notNullValue());
}
@Test
public void addSink() {
pipeline.addSource(source);
source.sendTestMessage();
assertFalse(sink.received);
pipeline.addSink(sink);
source.sendTestMessage();
assertTrue(sink.received);
}
@Test
public void clearSources() {
pipeline.addSource(source);
pipeline.addSink(sink);
pipeline.clearSources();
source.sendTestMessage();
assertFalse(sink.received);
}
@Test
public void clearSinks() {
pipeline.addSink(sink);
pipeline.clearSinks();
source.sendTestMessage();
assertFalse(sink.received);
}
@Test
public void stopClearsPipeline() {
pipeline.addSink(sink);
pipeline.addSource(source);
source.sendTestMessage();
assertTrue(sink.received);
sink.received = false;
pipeline.stop();
source.sendTestMessage();
assertFalse(sink.received);
}
@Test
public void receiveNewData() {
pipeline.addSink(sink);
pipeline.receive(new SimpleVehicleMessage("measurement", "value"));
assertTrue(sink.received);
}
@Test
public void connectsSourceCallback() {
pipeline.addSink(sink);
pipeline.addSource(source);
source.sendTestMessage();
assertTrue(sink.received);
}
@Test
public void removeSink() {
pipeline.addSink(sink);
TestSink anotherSink = new TestSink();
pipeline.addSink(anotherSink);
pipeline.removeSink(sink);
source.sendTestMessage();
assertFalse(sink.received);
}
@Test
public void removeSource() {
pipeline.addSource(source);
TestSource anotherSource = new TestSource();
pipeline.addSource(anotherSource);
pipeline.removeSource(source);
source.sendTestMessage();
assertFalse(sink.received);
}
@Test
public void getNamed() {
String name = "foo";
String value = "value";
KeyedMessage message = new SimpleVehicleMessage(name, value);
pipeline.receive(message);
SimpleVehicleMessage retreived = (SimpleVehicleMessage) pipeline.get(
message.getKey());
assertThat(retreived, notNullValue());
assertThat((String)retreived.getValue(), equalTo(value));
}
@Test
public void getKeyed() {
DiagnosticRequest request = new DiagnosticRequest(42, 1, 2, 4);
pipeline.receive(request);
VehicleMessage message = pipeline.get(request.getKey());
assertThat(message, notNullValue());
assertEquals(message, request);
}
}