MsgPack and BSON Response writer.

This commit is contained in:
Fabian Märki
2016-11-23 11:13:22 +01:00
parent ebac00d678
commit b9755b6ad4
23 changed files with 864 additions and 70 deletions
@@ -0,0 +1,120 @@
package ch.psi.daq.test.queryrest.controller;
import static org.junit.Assert.assertEquals;
import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.junit.After;
import org.junit.Test;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import com.fasterxml.jackson.databind.ObjectMapper;
import ch.psi.daq.common.time.TimeUtils;
import ch.psi.daq.domain.DataEvent;
import ch.psi.daq.domain.backend.Backend;
import ch.psi.daq.domain.config.DomainConfig;
import ch.psi.daq.domain.json.ChannelEventTableImpl;
import ch.psi.daq.domain.query.DAQQuery;
import ch.psi.daq.domain.query.mapping.Mapping;
import ch.psi.daq.domain.query.operation.QueryField;
import ch.psi.daq.domain.query.response.Response;
import ch.psi.daq.domain.request.range.RequestRangePulseId;
import ch.psi.daq.test.queryrest.AbstractDaqRestTest;
/**
* Tests the {@link DaqController} implementation.
*/
public abstract class AbstractQueryRestControllerTableTest extends AbstractDaqRestTest {
public static final String TEST_CHANNEL_01 = "testChannel1";
public static final String TEST_CHANNEL_02 = "testChannel2";
public static final String TEST_CHANNEL_WAVEFORM_01 = "testChannelWaveform1";
public static final String TEST_CHANNEL_WAVEFORM_02 = "testChannelWaveform2";
public static final String[] TEST_CHANNEL_NAMES = new String[] {TEST_CHANNEL_01, TEST_CHANNEL_02};
@Resource(name = DomainConfig.BEAN_NAME_BACKEND_DEFAULT)
private Backend backend;
@After
public void tearDown() throws Exception {}
protected abstract ObjectMapper getResponseMapper();
protected abstract Response getResponse();
@Test
public void testPulseRangeQuery() throws Exception {
DAQQuery request = new DAQQuery(
new RequestRangePulseId(
100,
101),
TEST_CHANNEL_NAMES);
request.setMapping(new Mapping());
request.addField(QueryField.pulseId);
request.addField(QueryField.globalSeconds);
request.addField(QueryField.globalMillis);
request.addField(QueryField.iocSeconds);
request.addField(QueryField.iocMillis);
request.addField(QueryField.value);
request.setResponse(getResponse());
String content = mapper.writeValueAsString(request);
System.out.println(content);
MvcResult result = this.mockMvc
.perform(MockMvcRequestBuilders
.post(DomainConfig.PATH_QUERY)
.contentType(MediaType.APPLICATION_JSON)
.content(content))
.andDo(MockMvcResultHandlers.print())
.andExpect(MockMvcResultMatchers.status().isOk())
.andReturn();
byte[] responseBytes = result.getResponse().getContentAsByteArray();
System.out.println("ResponseSize: "+responseBytes.length);
ChannelEventTableImpl table = getResponseMapper().readValue(responseBytes, ChannelEventTableImpl.class);
assertEquals(2, table.size());
List<DataEvent> events = table.getEvents(0).collect(Collectors.toList());
assertEquals(2, events.size());
DataEvent event = events.get(0);
assertEquals(TEST_CHANNEL_01, event.getChannel());
assertEquals(Backend.SF_DATABUFFER, event.getBackend());
assertEquals(100, event.getPulseId());
assertEquals(TimeUtils.getTime(1, 0), event.getGlobalTime());
assertEquals(TimeUtils.getTime(1, 0), event.getIocTime());
assertEquals(100, event.getValue(Number.class).longValue());
event = events.get(1);
assertEquals(TEST_CHANNEL_02, event.getChannel());
assertEquals(Backend.SF_DATABUFFER, event.getBackend());
assertEquals(100, event.getPulseId());
assertEquals(TimeUtils.getTime(1, 0), event.getGlobalTime());
assertEquals(TimeUtils.getTime(1, 0), event.getIocTime());
assertEquals(100, event.getValue(Number.class).longValue());
events = table.getEvents(1).collect(Collectors.toList());
assertEquals(2, events.size());
event = events.get(0);
assertEquals(TEST_CHANNEL_01, event.getChannel());
assertEquals(Backend.SF_DATABUFFER, event.getBackend());
assertEquals(101, event.getPulseId());
assertEquals(TimeUtils.getTime(1, 10000000), event.getGlobalTime());
assertEquals(TimeUtils.getTime(1, 10000000), event.getIocTime());
assertEquals(101, event.getValue(Number.class).longValue());
event = events.get(1);
assertEquals(TEST_CHANNEL_02, event.getChannel());
assertEquals(Backend.SF_DATABUFFER, event.getBackend());
assertEquals(101, event.getPulseId());
assertEquals(TimeUtils.getTime(1, 10000000), event.getGlobalTime());
assertEquals(TimeUtils.getTime(1, 10000000), event.getIocTime());
assertEquals(101, event.getValue(Number.class).longValue());
}
}
@@ -0,0 +1,124 @@
package ch.psi.daq.test.queryrest.controller;
import static org.junit.Assert.assertEquals;
import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.junit.After;
import org.junit.Test;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import com.fasterxml.jackson.databind.ObjectMapper;
import ch.psi.daq.common.time.TimeUtils;
import ch.psi.daq.domain.DataEvent;
import ch.psi.daq.domain.backend.Backend;
import ch.psi.daq.domain.config.DomainConfig;
import ch.psi.daq.domain.json.ChannelEventsImpl;
import ch.psi.daq.domain.json.ChannelEventsList;
import ch.psi.daq.domain.query.DAQQuery;
import ch.psi.daq.domain.query.operation.QueryField;
import ch.psi.daq.domain.query.response.Response;
import ch.psi.daq.domain.request.range.RequestRangePulseId;
import ch.psi.daq.test.queryrest.AbstractDaqRestTest;
/**
* Tests the {@link DaqController} implementation.
*/
public abstract class AbstractQueryRestControllerTest extends AbstractDaqRestTest {
public static final String TEST_CHANNEL_01 = "testChannel1";
public static final String TEST_CHANNEL_02 = "testChannel2";
public static final String TEST_CHANNEL_WAVEFORM_01 = "testChannelWaveform1";
public static final String[] TEST_CHANNEL_NAMES = new String[] {TEST_CHANNEL_01, TEST_CHANNEL_02};
@Resource(name = DomainConfig.BEAN_NAME_BACKEND_DEFAULT)
private Backend backend;
@After
public void tearDown() throws Exception {}
protected abstract ObjectMapper getResponseMapper();
protected abstract Response getResponse();
@Test
public void testPulseRangeQuery() throws Exception {
DAQQuery request = new DAQQuery(
new RequestRangePulseId(
100,
101),
TEST_CHANNEL_NAMES);
request.addField(QueryField.pulseId);
request.addField(QueryField.globalSeconds);
request.addField(QueryField.globalMillis);
request.addField(QueryField.iocSeconds);
request.addField(QueryField.iocMillis);
request.addField(QueryField.value);
request.setResponse(getResponse());
String content = mapper.writeValueAsString(request);
System.out.println(content);
MvcResult result = this.mockMvc
.perform(MockMvcRequestBuilders
.post(DomainConfig.PATH_QUERY)
.contentType(MediaType.APPLICATION_JSON)
.content(content))
.andDo(MockMvcResultHandlers.print())
.andExpect(MockMvcResultMatchers.status().isOk())
.andReturn();
byte[] responseBytes = result.getResponse().getContentAsByteArray();
System.out.println("ResponseSize: "+responseBytes.length);
ChannelEventsList eventsList = getResponseMapper().readValue(responseBytes, ChannelEventsList.class);
assertEquals(2, eventsList.size());
ChannelEventsImpl chEvents = eventsList.get(0);
assertEquals(TEST_CHANNEL_01, chEvents.getChannel().getName());
assertEquals(Backend.SF_DATABUFFER, chEvents.getChannel().getBackend());
List<DataEvent> events = chEvents.getEvents().collect(Collectors.toList());
assertEquals(2, events.size());
DataEvent event = events.get(0);
assertEquals(TEST_CHANNEL_01, event.getChannel());
assertEquals(Backend.SF_DATABUFFER, event.getBackend());
assertEquals(100, event.getPulseId());
assertEquals(TimeUtils.getTime(1, 0), event.getGlobalTime());
assertEquals(TimeUtils.getTime(1, 0), event.getIocTime());
assertEquals(100, event.getValue(Number.class).longValue());
event = events.get(1);
assertEquals(TEST_CHANNEL_01, event.getChannel());
assertEquals(Backend.SF_DATABUFFER, event.getBackend());
assertEquals(101, event.getPulseId());
assertEquals(TimeUtils.getTime(1, 10000000), event.getGlobalTime());
assertEquals(TimeUtils.getTime(1, 10000000), event.getIocTime());
assertEquals(101, event.getValue(Number.class).longValue());
chEvents = eventsList.get(1);
assertEquals(TEST_CHANNEL_02, chEvents.getChannel().getName());
assertEquals(Backend.SF_DATABUFFER, chEvents.getChannel().getBackend());
events = chEvents.getEvents().collect(Collectors.toList());
assertEquals(2, events.size());
event = events.get(0);
assertEquals(TEST_CHANNEL_02, event.getChannel());
assertEquals(Backend.SF_DATABUFFER, event.getBackend());
assertEquals(100, event.getPulseId());
assertEquals(TimeUtils.getTime(1, 0), event.getGlobalTime());
assertEquals(TimeUtils.getTime(1, 0), event.getIocTime());
assertEquals(100, event.getValue(Number.class).longValue());
event = events.get(1);
assertEquals(TEST_CHANNEL_02, event.getChannel());
assertEquals(Backend.SF_DATABUFFER, event.getBackend());
assertEquals(101, event.getPulseId());
assertEquals(TimeUtils.getTime(1, 10000000), event.getGlobalTime());
assertEquals(TimeUtils.getTime(1, 10000000), event.getIocTime());
assertEquals(101, event.getValue(Number.class).longValue());
}
}
@@ -0,0 +1,31 @@
package ch.psi.daq.test.queryrest.controller;
import org.junit.After;
import com.fasterxml.jackson.databind.ObjectMapper;
import ch.psi.daq.domain.query.response.Response;
import ch.psi.daq.queryrest.response.bson.BSONHTTPResponse;
import de.undercouch.bson4jackson.BsonFactory;
/**
* Tests the {@link DaqController} implementation.
*/
public class BsonQueryRestControllerTableTest extends AbstractQueryRestControllerTableTest {
private ObjectMapper responseMapper = new ObjectMapper(new BsonFactory());
@After
public void tearDown() throws Exception {}
@Override
protected ObjectMapper getResponseMapper(){
return responseMapper;
}
@Override
protected Response getResponse() {
return new BSONHTTPResponse();
}
}
@@ -0,0 +1,31 @@
package ch.psi.daq.test.queryrest.controller;
import org.junit.After;
import com.fasterxml.jackson.databind.ObjectMapper;
import ch.psi.daq.domain.query.response.Response;
import ch.psi.daq.queryrest.response.bson.BSONHTTPResponse;
import de.undercouch.bson4jackson.BsonFactory;
/**
* Tests the {@link DaqController} implementation.
*/
public class BsonQueryRestControllerTest extends AbstractQueryRestControllerTest {
private ObjectMapper responseMapper = new ObjectMapper(new BsonFactory());
@After
public void tearDown() throws Exception {}
@Override
protected ObjectMapper getResponseMapper(){
return responseMapper;
}
@Override
protected Response getResponse() {
return new BSONHTTPResponse();
}
}
@@ -44,7 +44,7 @@ import ch.psi.daq.test.queryrest.AbstractDaqRestTest;
/**
* Tests the {@link DaqController} implementation.
*/
public class QueryRestControllerCsvTest extends AbstractDaqRestTest {
public class CSVQueryRestControllerTest extends AbstractDaqRestTest {
public static final String TEST_CHANNEL = "testChannel";
public static final String TEST_CHANNEL_01 = TEST_CHANNEL + "1";
@@ -41,7 +41,7 @@ import ch.psi.daq.test.queryrest.AbstractDaqRestTest;
/**
* Tests the {@link DaqController} implementation.
*/
public class QueryRestControllerJsonTableTest extends AbstractDaqRestTest {
public class JsonQueryRestControllerTableTest extends AbstractDaqRestTest {
public static final String TEST_CHANNEL_01 = "testChannel1";
public static final String TEST_CHANNEL_02 = "testChannel2";
@@ -38,7 +38,7 @@ import ch.psi.daq.test.queryrest.AbstractDaqRestTest;
/**
* Tests the {@link DaqController} implementation.
*/
public class QueryRestControllerJsonTest extends AbstractDaqRestTest {
public class JsonQueryRestControllerTest extends AbstractDaqRestTest {
public static final String TEST_CHANNEL_01 = "testChannel1";
public static final String TEST_CHANNEL_02 = "testChannel2";
@@ -0,0 +1,30 @@
package ch.psi.daq.test.queryrest.controller;
import org.junit.After;
import org.msgpack.jackson.dataformat.MessagePackFactory;
import com.fasterxml.jackson.databind.ObjectMapper;
import ch.psi.daq.domain.query.response.Response;
import ch.psi.daq.queryrest.response.msgpack.MsgPackHTTPResponse;
/**
* Tests the {@link DaqController} implementation.
*/
public class MsgPackQueryRestControllerTableTest extends AbstractQueryRestControllerTableTest {
private ObjectMapper responseMapper = new ObjectMapper(new MessagePackFactory());
@After
public void tearDown() throws Exception {}
@Override
protected ObjectMapper getResponseMapper(){
return responseMapper;
}
@Override
protected Response getResponse() {
return new MsgPackHTTPResponse();
}
}
@@ -0,0 +1,30 @@
package ch.psi.daq.test.queryrest.controller;
import org.junit.After;
import org.msgpack.jackson.dataformat.MessagePackFactory;
import com.fasterxml.jackson.databind.ObjectMapper;
import ch.psi.daq.domain.query.response.Response;
import ch.psi.daq.queryrest.response.msgpack.MsgPackHTTPResponse;
/**
* Tests the {@link DaqController} implementation.
*/
public class MsgPackQueryRestControllerTest extends AbstractQueryRestControllerTest {
private ObjectMapper responseMapper = new ObjectMapper(new MessagePackFactory());
@After
public void tearDown() throws Exception {}
@Override
protected ObjectMapper getResponseMapper(){
return responseMapper;
}
@Override
protected Response getResponse() {
return new MsgPackHTTPResponse();
}
}