|
|
|
@ -47,7 +47,13 @@ import ch.psi.daq.domain.query.transform.image.color.TypedColorModel;
|
|
|
|
|
import ch.psi.daq.domain.query.transform.image.encoding.Base64ImageEncoder;
|
|
|
|
|
import ch.psi.daq.domain.query.transform.sampling.ValueSamplerValueTransformation;
|
|
|
|
|
import ch.psi.daq.domain.request.range.RequestRangeDate;
|
|
|
|
|
import ch.psi.daq.domain.request.range.RequestRangeEndDate;
|
|
|
|
|
import ch.psi.daq.domain.request.range.RequestRangeEndPulseId;
|
|
|
|
|
import ch.psi.daq.domain.request.range.RequestRangeEndTime;
|
|
|
|
|
import ch.psi.daq.domain.request.range.RequestRangePulseId;
|
|
|
|
|
import ch.psi.daq.domain.request.range.RequestRangeStartDate;
|
|
|
|
|
import ch.psi.daq.domain.request.range.RequestRangeStartPulseId;
|
|
|
|
|
import ch.psi.daq.domain.request.range.RequestRangeStartTime;
|
|
|
|
|
import ch.psi.daq.domain.request.range.RequestRangeTime;
|
|
|
|
|
import ch.psi.daq.domain.test.TestTimeUtils;
|
|
|
|
|
import ch.psi.daq.queryrest.response.json.JSONHTTPResponse;
|
|
|
|
@ -609,6 +615,639 @@ public class JsonQueryRestControllerTest extends AbstractDaqRestTest implements
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[1].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(1, 10000000)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testOpenTimeRangeQueryStart_01() throws Exception {
|
|
|
|
|
DAQQuery request = new DAQQuery(
|
|
|
|
|
new RequestRangeStartTime(
|
|
|
|
|
TimeUtils.getTimeFromMillis(2000, 0)),
|
|
|
|
|
TEST_CHANNEL_NAMES);
|
|
|
|
|
request.setLimit(2);
|
|
|
|
|
|
|
|
|
|
String content = mapper.writeValueAsString(request);
|
|
|
|
|
|
|
|
|
|
this.mockMvc.perform(MockMvcRequestBuilders
|
|
|
|
|
.post(DomainConfig.PATH_QUERY)
|
|
|
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
|
|
|
.content(content))
|
|
|
|
|
|
|
|
|
|
.andDo(MockMvcResultHandlers.print())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.status().isOk())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$").isArray())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0]").exists())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].channel").isMap())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].channel.name").value(TEST_CHANNEL_01))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data").isArray())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[0].pulseId").value(200))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[0].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 0)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[1].pulseId").value(201))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[1].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 10000000)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[2]").doesNotExist())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1]").exists())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].channel").isMap())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].channel.name").value(TEST_CHANNEL_02))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data").isArray())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[0].pulseId").value(200))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[0].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 0)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[1].pulseId").value(201))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[1].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 10000000)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[2]").doesNotExist());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testOpenTimeRangeQueryStart_01_Exclusive() throws Exception {
|
|
|
|
|
DAQQuery request = new DAQQuery(
|
|
|
|
|
new RequestRangeStartTime(
|
|
|
|
|
TimeUtils.getTimeFromMillis(2000, 0),
|
|
|
|
|
false),
|
|
|
|
|
TEST_CHANNEL_NAMES);
|
|
|
|
|
request.setLimit(2);
|
|
|
|
|
|
|
|
|
|
String content = mapper.writeValueAsString(request);
|
|
|
|
|
|
|
|
|
|
this.mockMvc.perform(MockMvcRequestBuilders
|
|
|
|
|
.post(DomainConfig.PATH_QUERY)
|
|
|
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
|
|
|
.content(content))
|
|
|
|
|
|
|
|
|
|
.andDo(MockMvcResultHandlers.print())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.status().isOk())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$").isArray())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0]").exists())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].channel").isMap())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].channel.name").value(TEST_CHANNEL_01))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data").isArray())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[0].pulseId").value(201))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[0].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 10000000)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[1].pulseId").value(202))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[1].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 20000000)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[2]").doesNotExist())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1]").exists())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].channel").isMap())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].channel.name").value(TEST_CHANNEL_02))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data").isArray())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[0].pulseId").value(201))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[0].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 10000000)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[1].pulseId").value(202))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[1].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 20000000)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[2]").doesNotExist());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testOpenTimeRangeQueryStartDate_01_Exclusive() throws Exception {
|
|
|
|
|
DAQQuery request = new DAQQuery(
|
|
|
|
|
new RequestRangeStartDate(
|
|
|
|
|
TimeUtils.format(TimeUtils.getTimeFromMillis(2000, 0)),
|
|
|
|
|
false),
|
|
|
|
|
TEST_CHANNEL_NAMES);
|
|
|
|
|
request.setLimit(2);
|
|
|
|
|
|
|
|
|
|
String content = mapper.writeValueAsString(request);
|
|
|
|
|
|
|
|
|
|
this.mockMvc.perform(MockMvcRequestBuilders
|
|
|
|
|
.post(DomainConfig.PATH_QUERY)
|
|
|
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
|
|
|
.content(content))
|
|
|
|
|
|
|
|
|
|
.andDo(MockMvcResultHandlers.print())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.status().isOk())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$").isArray())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0]").exists())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].channel").isMap())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].channel.name").value(TEST_CHANNEL_01))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data").isArray())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[0].pulseId").value(201))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[0].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 10000000)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[1].pulseId").value(202))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[1].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 20000000)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[2]").doesNotExist())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1]").exists())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].channel").isMap())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].channel.name").value(TEST_CHANNEL_02))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data").isArray())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[0].pulseId").value(201))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[0].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 10000000)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[1].pulseId").value(202))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[1].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 20000000)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[2]").doesNotExist());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testOpenTimeRangeQueryStart_02() throws Exception {
|
|
|
|
|
DAQQuery request = new DAQQuery(
|
|
|
|
|
new RequestRangeStartTime(
|
|
|
|
|
TimeUtils.getTimeFromMillis(2000, 0)),
|
|
|
|
|
TEST_CHANNEL_NAMES);
|
|
|
|
|
|
|
|
|
|
String content = mapper.writeValueAsString(request);
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
// limit needs to be defined
|
|
|
|
|
this.mockMvc.perform(MockMvcRequestBuilders
|
|
|
|
|
.post(DomainConfig.PATH_QUERY)
|
|
|
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
|
|
|
.content(content))
|
|
|
|
|
|
|
|
|
|
.andDo(MockMvcResultHandlers.print())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.status().isOk());
|
|
|
|
|
assertTrue(false);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
assertTrue(true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testOpenTimeRangeQueryStart_03() throws Exception {
|
|
|
|
|
DAQQuery request = new DAQQuery(
|
|
|
|
|
new RequestRangeStartTime(
|
|
|
|
|
TimeUtils.getTimeFromMillis(2000, 0)),
|
|
|
|
|
TEST_CHANNEL_NAMES);
|
|
|
|
|
request.setLimit(2);
|
|
|
|
|
request.setOrdering(Ordering.desc);
|
|
|
|
|
|
|
|
|
|
String content = mapper.writeValueAsString(request);
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
// asc needs to be defined
|
|
|
|
|
this.mockMvc.perform(MockMvcRequestBuilders
|
|
|
|
|
.post(DomainConfig.PATH_QUERY)
|
|
|
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
|
|
|
.content(content))
|
|
|
|
|
|
|
|
|
|
.andDo(MockMvcResultHandlers.print())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.status().isOk());
|
|
|
|
|
assertTrue(false);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
assertTrue(true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testOpenTimeRangeQueryEnd_01() throws Exception {
|
|
|
|
|
DAQQuery request = new DAQQuery(
|
|
|
|
|
new RequestRangeEndTime(
|
|
|
|
|
TimeUtils.getTimeFromMillis(2010, 0)),
|
|
|
|
|
TEST_CHANNEL_NAMES);
|
|
|
|
|
request.setLimit(2);
|
|
|
|
|
request.setOrdering(Ordering.desc);
|
|
|
|
|
|
|
|
|
|
String content = mapper.writeValueAsString(request);
|
|
|
|
|
|
|
|
|
|
this.mockMvc.perform(MockMvcRequestBuilders
|
|
|
|
|
.post(DomainConfig.PATH_QUERY)
|
|
|
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
|
|
|
.content(content))
|
|
|
|
|
|
|
|
|
|
.andDo(MockMvcResultHandlers.print())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.status().isOk())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$").isArray())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0]").exists())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].channel").isMap())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].channel.name").value(TEST_CHANNEL_01))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data").isArray())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[0].pulseId").value(201))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[0].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 10000000)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[1].pulseId").value(200))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[1].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 0)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[2]").doesNotExist())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1]").exists())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].channel").isMap())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].channel.name").value(TEST_CHANNEL_02))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data").isArray())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[0].pulseId").value(201))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[0].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 10000000)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[1].pulseId").value(200))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[1].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 0)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[2]").doesNotExist());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testOpenTimeRangeQueryEnd_01_Exclusive() throws Exception {
|
|
|
|
|
DAQQuery request = new DAQQuery(
|
|
|
|
|
new RequestRangeEndTime(
|
|
|
|
|
TimeUtils.getTimeFromMillis(2020, 0),
|
|
|
|
|
false),
|
|
|
|
|
TEST_CHANNEL_NAMES);
|
|
|
|
|
request.setLimit(2);
|
|
|
|
|
request.setOrdering(Ordering.desc);
|
|
|
|
|
|
|
|
|
|
String content = mapper.writeValueAsString(request);
|
|
|
|
|
|
|
|
|
|
this.mockMvc.perform(MockMvcRequestBuilders
|
|
|
|
|
.post(DomainConfig.PATH_QUERY)
|
|
|
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
|
|
|
.content(content))
|
|
|
|
|
|
|
|
|
|
.andDo(MockMvcResultHandlers.print())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.status().isOk())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$").isArray())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0]").exists())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].channel").isMap())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].channel.name").value(TEST_CHANNEL_01))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data").isArray())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[0].pulseId").value(201))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[0].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 10000000)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[1].pulseId").value(200))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[1].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 0)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[2]").doesNotExist())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1]").exists())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].channel").isMap())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].channel.name").value(TEST_CHANNEL_02))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data").isArray())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[0].pulseId").value(201))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[0].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 10000000)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[1].pulseId").value(200))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[1].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 0)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[2]").doesNotExist());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testOpenTimeRangeQueryEndDate_01_Exclusive() throws Exception {
|
|
|
|
|
DAQQuery request = new DAQQuery(
|
|
|
|
|
new RequestRangeEndDate(
|
|
|
|
|
TimeUtils.format(TimeUtils.getTimeFromMillis(2020, 0)),
|
|
|
|
|
false),
|
|
|
|
|
TEST_CHANNEL_NAMES);
|
|
|
|
|
request.setLimit(2);
|
|
|
|
|
request.setOrdering(Ordering.desc);
|
|
|
|
|
|
|
|
|
|
String content = mapper.writeValueAsString(request);
|
|
|
|
|
|
|
|
|
|
this.mockMvc.perform(MockMvcRequestBuilders
|
|
|
|
|
.post(DomainConfig.PATH_QUERY)
|
|
|
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
|
|
|
.content(content))
|
|
|
|
|
|
|
|
|
|
.andDo(MockMvcResultHandlers.print())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.status().isOk())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$").isArray())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0]").exists())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].channel").isMap())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].channel.name").value(TEST_CHANNEL_01))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data").isArray())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[0].pulseId").value(201))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[0].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 10000000)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[1].pulseId").value(200))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[1].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 0)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[2]").doesNotExist())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1]").exists())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].channel").isMap())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].channel.name").value(TEST_CHANNEL_02))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data").isArray())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[0].pulseId").value(201))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[0].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 10000000)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[1].pulseId").value(200))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[1].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 0)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[2]").doesNotExist());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testOpenTimeRangeQueryEnd_02() throws Exception {
|
|
|
|
|
DAQQuery request = new DAQQuery(
|
|
|
|
|
new RequestRangeEndTime(
|
|
|
|
|
TimeUtils.getTimeFromMillis(2010, 0)),
|
|
|
|
|
TEST_CHANNEL_NAMES);
|
|
|
|
|
request.setOrdering(Ordering.desc);
|
|
|
|
|
|
|
|
|
|
String content = mapper.writeValueAsString(request);
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
// limit needs to be defined
|
|
|
|
|
this.mockMvc.perform(MockMvcRequestBuilders
|
|
|
|
|
.post(DomainConfig.PATH_QUERY)
|
|
|
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
|
|
|
.content(content))
|
|
|
|
|
|
|
|
|
|
.andDo(MockMvcResultHandlers.print())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.status().isOk());
|
|
|
|
|
assertTrue(false);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
assertTrue(true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testOpenTimeRangeQueryEnd_03() throws Exception {
|
|
|
|
|
DAQQuery request = new DAQQuery(
|
|
|
|
|
new RequestRangeEndTime(
|
|
|
|
|
TimeUtils.getTimeFromMillis(2010, 0)),
|
|
|
|
|
TEST_CHANNEL_NAMES);
|
|
|
|
|
request.setLimit(2);
|
|
|
|
|
request.setOrdering(Ordering.asc);
|
|
|
|
|
|
|
|
|
|
String content = mapper.writeValueAsString(request);
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
// desc needs to be defined
|
|
|
|
|
this.mockMvc.perform(MockMvcRequestBuilders
|
|
|
|
|
.post(DomainConfig.PATH_QUERY)
|
|
|
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
|
|
|
.content(content))
|
|
|
|
|
|
|
|
|
|
.andDo(MockMvcResultHandlers.print())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.status().isOk());
|
|
|
|
|
assertTrue(false);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
assertTrue(true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testOpenPulseRangeQueryStart_01() throws Exception {
|
|
|
|
|
DAQQuery request = new DAQQuery(
|
|
|
|
|
new RequestRangeStartPulseId(
|
|
|
|
|
200),
|
|
|
|
|
TEST_CHANNEL_NAMES);
|
|
|
|
|
request.setLimit(2);
|
|
|
|
|
|
|
|
|
|
String content = mapper.writeValueAsString(request);
|
|
|
|
|
|
|
|
|
|
this.mockMvc.perform(MockMvcRequestBuilders
|
|
|
|
|
.post(DomainConfig.PATH_QUERY)
|
|
|
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
|
|
|
.content(content))
|
|
|
|
|
|
|
|
|
|
.andDo(MockMvcResultHandlers.print())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.status().isOk())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$").isArray())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0]").exists())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].channel").isMap())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].channel.name").value(TEST_CHANNEL_01))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data").isArray())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[0].pulseId").value(200))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[0].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 0)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[1].pulseId").value(201))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[1].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 10000000)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[2]").doesNotExist())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1]").exists())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].channel").isMap())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].channel.name").value(TEST_CHANNEL_02))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data").isArray())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[0].pulseId").value(200))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[0].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 0)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[1].pulseId").value(201))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[1].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 10000000)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[2]").doesNotExist());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testOpenPulseRangeQueryStart_01_Exclusive() throws Exception {
|
|
|
|
|
DAQQuery request = new DAQQuery(
|
|
|
|
|
new RequestRangeStartPulseId(
|
|
|
|
|
200,
|
|
|
|
|
false),
|
|
|
|
|
TEST_CHANNEL_NAMES);
|
|
|
|
|
request.setLimit(2);
|
|
|
|
|
|
|
|
|
|
String content = mapper.writeValueAsString(request);
|
|
|
|
|
|
|
|
|
|
this.mockMvc.perform(MockMvcRequestBuilders
|
|
|
|
|
.post(DomainConfig.PATH_QUERY)
|
|
|
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
|
|
|
.content(content))
|
|
|
|
|
|
|
|
|
|
.andDo(MockMvcResultHandlers.print())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.status().isOk())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$").isArray())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0]").exists())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].channel").isMap())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].channel.name").value(TEST_CHANNEL_01))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data").isArray())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[0].pulseId").value(201))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[0].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 10000000)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[1].pulseId").value(202))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[1].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 20000000)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[2]").doesNotExist())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1]").exists())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].channel").isMap())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].channel.name").value(TEST_CHANNEL_02))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data").isArray())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[0].pulseId").value(201))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[0].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 10000000)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[1].pulseId").value(202))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[1].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 20000000)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[2]").doesNotExist());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testOpenPulseRangeQueryStart_02() throws Exception {
|
|
|
|
|
DAQQuery request = new DAQQuery(
|
|
|
|
|
new RequestRangeStartPulseId(
|
|
|
|
|
200),
|
|
|
|
|
TEST_CHANNEL_NAMES);
|
|
|
|
|
|
|
|
|
|
String content = mapper.writeValueAsString(request);
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
// limit needs to be defined
|
|
|
|
|
this.mockMvc.perform(MockMvcRequestBuilders
|
|
|
|
|
.post(DomainConfig.PATH_QUERY)
|
|
|
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
|
|
|
.content(content))
|
|
|
|
|
|
|
|
|
|
.andDo(MockMvcResultHandlers.print())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.status().isOk());
|
|
|
|
|
assertTrue(false);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
assertTrue(true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testOpenPulseRangeQueryStart_03() throws Exception {
|
|
|
|
|
DAQQuery request = new DAQQuery(
|
|
|
|
|
new RequestRangeStartPulseId(
|
|
|
|
|
200),
|
|
|
|
|
TEST_CHANNEL_NAMES);
|
|
|
|
|
request.setLimit(2);
|
|
|
|
|
request.setOrdering(Ordering.desc);
|
|
|
|
|
|
|
|
|
|
String content = mapper.writeValueAsString(request);
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
// asc needs to be defined
|
|
|
|
|
this.mockMvc.perform(MockMvcRequestBuilders
|
|
|
|
|
.post(DomainConfig.PATH_QUERY)
|
|
|
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
|
|
|
.content(content))
|
|
|
|
|
|
|
|
|
|
.andDo(MockMvcResultHandlers.print())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.status().isOk());
|
|
|
|
|
assertTrue(false);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
assertTrue(true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testOpenPulseRangeQueryEnd_01() throws Exception {
|
|
|
|
|
DAQQuery request = new DAQQuery(
|
|
|
|
|
new RequestRangeEndPulseId(
|
|
|
|
|
201),
|
|
|
|
|
TEST_CHANNEL_NAMES);
|
|
|
|
|
request.setLimit(2);
|
|
|
|
|
request.setOrdering(Ordering.desc);
|
|
|
|
|
|
|
|
|
|
String content = mapper.writeValueAsString(request);
|
|
|
|
|
|
|
|
|
|
this.mockMvc.perform(MockMvcRequestBuilders
|
|
|
|
|
.post(DomainConfig.PATH_QUERY)
|
|
|
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
|
|
|
.content(content))
|
|
|
|
|
|
|
|
|
|
.andDo(MockMvcResultHandlers.print())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.status().isOk())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$").isArray())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0]").exists())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].channel").isMap())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].channel.name").value(TEST_CHANNEL_01))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data").isArray())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[0].pulseId").value(201))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[0].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 10000000)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[1].pulseId").value(200))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[1].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 0)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[2]").doesNotExist())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1]").exists())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].channel").isMap())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].channel.name").value(TEST_CHANNEL_02))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data").isArray())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[0].pulseId").value(201))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[0].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 10000000)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[1].pulseId").value(200))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[1].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 0)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[2]").doesNotExist());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testOpenPulseRangeQueryEnd_01_Exclusive() throws Exception {
|
|
|
|
|
DAQQuery request = new DAQQuery(
|
|
|
|
|
new RequestRangeEndPulseId(
|
|
|
|
|
202,
|
|
|
|
|
false),
|
|
|
|
|
TEST_CHANNEL_NAMES);
|
|
|
|
|
request.setLimit(2);
|
|
|
|
|
request.setOrdering(Ordering.desc);
|
|
|
|
|
|
|
|
|
|
String content = mapper.writeValueAsString(request);
|
|
|
|
|
|
|
|
|
|
this.mockMvc.perform(MockMvcRequestBuilders
|
|
|
|
|
.post(DomainConfig.PATH_QUERY)
|
|
|
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
|
|
|
.content(content))
|
|
|
|
|
|
|
|
|
|
.andDo(MockMvcResultHandlers.print())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.status().isOk())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$").isArray())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0]").exists())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].channel").isMap())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].channel.name").value(TEST_CHANNEL_01))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data").isArray())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[0].pulseId").value(201))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[0].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 10000000)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[1].pulseId").value(200))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[1].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 0)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[0].data[2]").doesNotExist())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1]").exists())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].channel").isMap())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].channel.name").value(TEST_CHANNEL_02))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data").isArray())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[0].pulseId").value(201))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[0].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 10000000)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[1].pulseId").value(200))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[1].globalSeconds").value(
|
|
|
|
|
TestTimeUtils.getTimeStr(2, 0)))
|
|
|
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$[1].data[2]").doesNotExist());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testOpenPulseRangeQueryEnd_02() throws Exception {
|
|
|
|
|
DAQQuery request = new DAQQuery(
|
|
|
|
|
new RequestRangeEndPulseId(
|
|
|
|
|
201),
|
|
|
|
|
TEST_CHANNEL_NAMES);
|
|
|
|
|
request.setOrdering(Ordering.desc);
|
|
|
|
|
|
|
|
|
|
String content = mapper.writeValueAsString(request);
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
// limit needs to be defined
|
|
|
|
|
this.mockMvc.perform(MockMvcRequestBuilders
|
|
|
|
|
.post(DomainConfig.PATH_QUERY)
|
|
|
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
|
|
|
.content(content))
|
|
|
|
|
|
|
|
|
|
.andDo(MockMvcResultHandlers.print())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.status().isOk());
|
|
|
|
|
assertTrue(false);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
assertTrue(true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testOpenPulseRangeQueryEnd_03() throws Exception {
|
|
|
|
|
DAQQuery request = new DAQQuery(
|
|
|
|
|
new RequestRangeEndPulseId(
|
|
|
|
|
201),
|
|
|
|
|
TEST_CHANNEL_NAMES);
|
|
|
|
|
request.setOrdering(Ordering.asc);
|
|
|
|
|
request.setLimit(2);
|
|
|
|
|
|
|
|
|
|
String content = mapper.writeValueAsString(request);
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
// desc needs to be defined
|
|
|
|
|
this.mockMvc.perform(MockMvcRequestBuilders
|
|
|
|
|
.post(DomainConfig.PATH_QUERY)
|
|
|
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
|
|
|
.content(content))
|
|
|
|
|
|
|
|
|
|
.andDo(MockMvcResultHandlers.print())
|
|
|
|
|
.andExpect(MockMvcResultMatchers.status().isOk());
|
|
|
|
|
assertTrue(false);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
assertTrue(true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testExtremaAggregation() throws Exception {
|
|
|
|
|