|
17 | 17 | import static org.junit.Assert.assertNull; |
18 | 18 | import static org.junit.Assert.assertTrue; |
19 | 19 |
|
| 20 | +import java.util.ArrayList; |
20 | 21 | import java.util.Arrays; |
21 | 22 | import java.util.Collections; |
22 | 23 | import java.util.HashMap; |
23 | 24 | import java.util.List; |
24 | 25 | import java.util.Map; |
| 26 | +import java.util.Set; |
25 | 27 |
|
26 | 28 | import javax.ws.rs.client.Entity; |
27 | 29 | import javax.ws.rs.client.WebTarget; |
|
32 | 34 | import org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests.stubs.AxisDomainStub; |
33 | 35 | import org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests.stubs.EntryStub; |
34 | 36 | import org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests.stubs.ExperimentModelStub; |
| 37 | +import org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests.stubs.SamplingStub; |
35 | 38 | import org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests.stubs.TmfTreeModelWithAxisDescriptorsResponseStub; |
36 | 39 | import org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests.stubs.TmfTreeModelWithAxisDescriptorsStub; |
37 | 40 | import org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests.stubs.TmfXYAxisDescriptionStub; |
| 41 | +import org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests.stubs.XyModelStub; |
| 42 | +import org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests.stubs.XyOutputResponseStub; |
| 43 | +import org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests.stubs.XySeriesStub; |
38 | 44 | import org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests.utils.RestServerTest; |
| 45 | +import org.eclipse.tracecompass.tmf.core.model.StyleProperties; |
39 | 46 | import org.junit.Test; |
40 | 47 |
|
41 | 48 | /** |
|
47 | 54 | public class BarChartDataProviderServiceTest extends RestServerTest { |
48 | 55 | private static final String DATA_PROVIDER_RESPONSE_FAILED_MSG = "There should be a positive response for the data provider"; |
49 | 56 | private static final String MODEL_NULL_MSG = "The model is null, maybe the analysis did not run long enough?"; |
| 57 | + private static final String REQUESTED_ITEMS_KEY = "requested_items"; |
| 58 | + private static final String REQUESTED_SAMPLING_KEY = "requested_sampling"; |
50 | 59 | private static final int MAX_ITER = 40; |
| 60 | + private static final long TRACE_START_TIME = 1450193697034689597L; |
| 61 | + private static final long TRACE_END_TIME = 1450193745774189602L; |
51 | 62 | private static final List<EntryStub> EXPECTED_ENTRIES = List.of( |
52 | 63 | new EntryStub(Arrays.asList("ust"), 0, -1, true, null), |
53 | 64 | new EntryStub(Arrays.asList("UNKNOWN_PID"), 1, 0, true, null)); |
@@ -99,6 +110,30 @@ public void testBarChartDataProvider() throws InterruptedException { |
99 | 110 | assertNotNull("Y axis description should not be null", yAxis); |
100 | 111 | List<EntryStub> entries = model.getEntries(); |
101 | 112 | assertFalse(entries.isEmpty()); |
| 113 | + |
| 114 | + // Test getting the bars endpoint with descriptors for bar chart |
| 115 | + WebTarget barsEnpoint = getBarChartBarsEndpoint(exp.getUUID().toString(), CALL_STACK_BAR_CHART_DATAPROVIDER_ID); |
| 116 | + parameters = new HashMap<>(); |
| 117 | + List<Integer> items = new ArrayList<>(); |
| 118 | + for (EntryStub entry : entries) { |
| 119 | + items.add(entry.getId()); |
| 120 | + } |
| 121 | + parameters.put(REQUESTED_ITEMS_KEY, items); |
| 122 | + parameters.put(REQUESTED_TIMES_KEY, List.of(TRACE_START_TIME, TRACE_END_TIME)); |
| 123 | + List<List<Number>> ranges = new ArrayList<>(); |
| 124 | + ranges.add(List.of(1L, 100L)); |
| 125 | + ranges.add(List.of(101L, 10000L)); |
| 126 | + ranges.add(List.of(10001L, 1000000L)); |
| 127 | + parameters.put(REQUESTED_SAMPLING_KEY, ranges); |
| 128 | + try (Response series = barsEnpoint.request().post(Entity.json(new QueryParameters(parameters, Collections.emptyList())))) { |
| 129 | + assertEquals(DATA_PROVIDER_RESPONSE_FAILED_MSG, 200, series.getStatus()); |
| 130 | + XyOutputResponseStub xyModelResponse = series.readEntity(XyOutputResponseStub.class); |
| 131 | + assertNotNull(xyModelResponse); |
| 132 | + |
| 133 | + XyModelStub xyModel = xyModelResponse.getModel(); |
| 134 | + Set<XySeriesStub> xySeries = xyModel.getSeries(); |
| 135 | + assertFalse(xySeries.isEmpty()); |
| 136 | + } |
102 | 137 | } |
103 | 138 |
|
104 | 139 | /** |
@@ -185,5 +220,66 @@ public void testCallStackBarChartDataProvider() throws InterruptedException { |
185 | 220 | assertEquals("Labels mismatch at index " + i, expected.getLabels(), actual.getLabels()); |
186 | 221 | assertEquals("Style mismatch at index " + i, expected.getStyle(), actual.getStyle()); |
187 | 222 | } |
| 223 | + |
| 224 | + /* |
| 225 | + * Test the data in bars end point. |
| 226 | + */ |
| 227 | + WebTarget barsEnpoint = getBarChartBarsEndpoint(exp.getUUID().toString(), CALL_STACK_BAR_CHART_DATAPROVIDER_ID); |
| 228 | + parameters = new HashMap<>(); |
| 229 | + List<Integer> items = new ArrayList<>(); |
| 230 | + for (EntryStub entry : actualEntries) { |
| 231 | + items.add(entry.getId()); |
| 232 | + } |
| 233 | + parameters.put(REQUESTED_ITEMS_KEY, items); |
| 234 | + List<List<Number>> ranges = List.of( |
| 235 | + List.of(1L, 100L), |
| 236 | + List.of(101L, 10_000L), |
| 237 | + List.of(10_001L, 1_000_000L), |
| 238 | + List.of(1_000_001L, 1_000_000_000L), |
| 239 | + List.of(1_000_000_001L, 1_000_000_000_000L) |
| 240 | + ); |
| 241 | + parameters.put(REQUESTED_SAMPLING_KEY, ranges); |
| 242 | + parameters.put(REQUESTED_TIMES_KEY, List.of(TRACE_START_TIME, TRACE_END_TIME)); |
| 243 | + XyOutputResponseStub xyModelResponse; |
| 244 | + try (Response series = barsEnpoint.request().post(Entity.json(new QueryParameters(parameters, Collections.emptyList())))) { |
| 245 | + assertEquals(DATA_PROVIDER_RESPONSE_FAILED_MSG, 200, series.getStatus()); |
| 246 | + xyModelResponse = series.readEntity(XyOutputResponseStub.class); |
| 247 | + } |
| 248 | + assertNotNull(xyModelResponse); |
| 249 | + XyModelStub xyModel = xyModelResponse.getModel(); |
| 250 | + Set<XySeriesStub> xySeries = xyModel.getSeries(); |
| 251 | + assertEquals("Number of series mismatch", 1, xySeries.size()); |
| 252 | + XySeriesStub seriesStub = xySeries.iterator().next(); |
| 253 | + |
| 254 | + // Validate fields |
| 255 | + assertEquals("Name mismatch", "UNKNOWN_PID", seriesStub.getName()); |
| 256 | + assertEquals("ID mismatch", 1, seriesStub.getId()); |
| 257 | + List<Double> actualYValues = seriesStub.getYValues(); |
| 258 | + List<Double> expectedYValues = Arrays.asList(1.0, 0.0, 1764.0, 178.0, 5.0); |
| 259 | + assertEquals("Y values size mismatch", expectedYValues.size(), actualYValues.size()); |
| 260 | + for (int i = 0; i < expectedYValues.size(); i++) { |
| 261 | + assertEquals("Y value mismatch at index " + i, expectedYValues.get(i), actualYValues.get(i), 0.000001); |
| 262 | + } |
| 263 | + |
| 264 | + // Validate xValues |
| 265 | + SamplingStub xValues = seriesStub.getXValues(); |
| 266 | + assertTrue("xValues should be a RangesStub", xValues instanceof SamplingStub.RangesStub); |
| 267 | + List<SamplingStub.RangesStub.RangeStub> actualRanges = ((SamplingStub.RangesStub) xValues).getRanges(); |
| 268 | + List<SamplingStub.RangesStub.RangeStub> expectedRanges = Arrays.asList( |
| 269 | + new SamplingStub.RangesStub.RangeStub(1L, 100L), |
| 270 | + new SamplingStub.RangesStub.RangeStub(101L, 10_000L), |
| 271 | + new SamplingStub.RangesStub.RangeStub(10_001L, 1_000_000L), |
| 272 | + new SamplingStub.RangesStub.RangeStub(1_000_001L, 1_000_000_000L), |
| 273 | + new SamplingStub.RangesStub.RangeStub(1_000_000_001L, 1_000_000_000_000L) |
| 274 | + ); |
| 275 | + assertEquals("Range size mismatch", expectedRanges.size(), actualRanges.size()); |
| 276 | + for (int i = 0; i < expectedRanges.size(); i++) { |
| 277 | + assertEquals("Range mismatch at index " + i, expectedRanges.get(i), actualRanges.get(i)); |
| 278 | + } |
| 279 | + |
| 280 | + // Validate style |
| 281 | + assertNotNull("Style should not be null", seriesStub.getStyle()); |
| 282 | + assertEquals("Series type should be bar", "bar", |
| 283 | + seriesStub.getStyle().getStyleValues().get(StyleProperties.SERIES_TYPE)); |
188 | 284 | } |
189 | 285 | } |
0 commit comments