blob: 72e21bcaaf6885010594a8559fe9a3cbd4899b64 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2015, 2019 Ericsson
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/
package org.eclipse.tracecompass.lttng2.ust.ui.swtbot.tests;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView;
import org.eclipse.swtbot.swt.finder.SWTBot;
import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner;
import org.eclipse.swtbot.swt.finder.matchers.WidgetOfType;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem;
import org.eclipse.tracecompass.internal.lttng2.ust.ui.views.memusage.UstMemoryUsageView;
import org.eclipse.tracecompass.testtraces.ctf.CtfTestTrace;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.ctf.core.tests.shared.CtfTmfTestTraceUtils;
import org.eclipse.tracecompass.tmf.ui.swtbot.tests.XYDataProviderBaseTest;
import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.ConditionHelpers;
import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.SWTBotUtils;
import org.eclipse.tracecompass.tmf.ui.viewers.xycharts.linecharts.TmfCommonXAxisChartViewer;
import org.eclipse.ui.IViewPart;
import org.hamcrest.Matcher;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.swtchart.Chart;
import org.swtchart.ILineSeries;
import org.swtchart.ISeries;
import org.swtchart.ISeriesSet;
import org.swtchart.LineStyle;
/**
* Test for the {@link UstMemoryUsageView} in trace compass
*/
@RunWith(SWTBotJunit4ClassRunner.class)
public class MemoryUsageViewTest extends XYDataProviderBaseTest {
private static final int EXPECTED_NUM_SERIES = 4;
private static final RGB RED = new RGB(255, 0, 0);
private static final RGB GREEN_BLUE = new RGB(0, 255, 255);
private static final RGB GREEN = new RGB(0, 255, 0);
private static final RGB MAGENTA = new RGB(255, 0, 255);
private static final @NonNull String TITLE = "Relative Kernel Memory Usage";
private static final @NonNull String FIRST_SERIES_NAME = "memory:10611";
private static final @NonNull String SECOND_SERIES_NAME = "memory:10618";
private static final @NonNull String THIRD_SERIES_NAME = "memory:10604";
private static final @NonNull String FOURTH_SERIES_NAME = "memory:10613";
/**
* Test if Memory Usage is populated
*/
@Test
public void testOpenMemoryUsage() {
SWTBotView viewBot = fBot.viewById(UstMemoryUsageView.ID);
viewBot.setFocus();
// Do some basic validation
Matcher<Chart> matcher = WidgetOfType.widgetOfType(Chart.class);
Chart chart = viewBot.bot().widget(matcher);
checkAllEntries();
// Verify that the chart has 4 series
fBot.waitUntil(ConditionHelpers.numberOfSeries(chart, EXPECTED_NUM_SERIES));
ISeriesSet seriesSet = chart.getSeriesSet();
ISeries[] series = seriesSet.getSeries();
// Verify that each series is a ILineSeries
for (ISeries serie : series) {
assertTrue(serie instanceof ILineSeries);
}
}
/**
* Test Memory Usage data model
*/
@Test
public void testMemoryUsage() {
IViewPart viewPart = getSWTBotView().getViewReference().getView(true);
assertTrue(viewPart instanceof UstMemoryUsageView);
final TmfCommonXAxisChartViewer chartViewer = (TmfCommonXAxisChartViewer) getChartViewer(viewPart);
assertNotNull(chartViewer);
fBot.waitUntil(ConditionHelpers.xyViewerIsReadyCondition(chartViewer));
final Chart chart = getChart();
assertNotNull(chart);
checkAllEntries();
SWTBotUtils.waitUntil(c -> c.getSeriesSet().getSeries().length > 3, chart, "No data available");
chartViewer.setNbPoints(50);
/* Test data model*/
SWTBotUtils.waitUntil(json -> isChartDataValid(chart, json, FIRST_SERIES_NAME, SECOND_SERIES_NAME, THIRD_SERIES_NAME, FOURTH_SERIES_NAME), "resources/memory-res50.json", "Chart data is not valid");
/* Test type, style and color of series */
verifyChartStyle();
}
private void verifyChartStyle() {
verifySeriesStyle(FIRST_SERIES_NAME, ISeries.SeriesType.LINE, RED, LineStyle.SOLID, false);
verifySeriesStyle(SECOND_SERIES_NAME, ISeries.SeriesType.LINE, MAGENTA, LineStyle.SOLID, false);
verifySeriesStyle(THIRD_SERIES_NAME, ISeries.SeriesType.LINE, GREEN, LineStyle.SOLID, false);
verifySeriesStyle(FOURTH_SERIES_NAME, ISeries.SeriesType.LINE, GREEN_BLUE, LineStyle.SOLID, false);
}
/**
* Ensure that the tree is loaded and then check all entries
*/
private void checkAllEntries() {
SWTBot bot = getSWTBotView().bot();
SWTBotUtils.waitUntil(b -> b.tree().visibleRowCount() == 5, bot,
"Incorrect number of tree entries, expected 5, was " + bot.tree().visibleRowCount());
for (SWTBotTreeItem entry : bot.tree().getAllItems()) {
entry.check();
}
}
@Override
protected @NonNull String getMainSeriesName() {
return FIRST_SERIES_NAME;
}
@Override
protected @NonNull String getTitle() {
return TITLE;
}
@Override
protected String getViewID() {
return UstMemoryUsageView.ID;
}
@Override
protected ITmfTrace getTestTrace() {
return CtfTmfTestTraceUtils.getTrace(CtfTestTrace.MEMORY_ANALYSIS);
}
@Override
protected void disposeTestTrace() {
CtfTmfTestTraceUtils.dispose(CtfTestTrace.MEMORY_ANALYSIS);
}
}