25
24
import org.eclipse.core.runtime.IPath;
26
25
import org.eclipse.core.runtime.Path;
27
import org.eclipse.linuxtools.internal.perf.BaseDataManipulator;
28
import org.eclipse.linuxtools.internal.perf.PerfPlugin;
29
26
import org.eclipse.linuxtools.internal.perf.StatComparisonData;
30
27
import org.eclipse.linuxtools.internal.perf.model.PMStatEntry;
31
28
import org.junit.Before;
32
29
import org.junit.Test;
34
31
public class StatsComparisonTest {
35
private PMStatEntry statEntry;
36
private PMStatEntry statEntry2;
37
private PMStatEntry statEntry3;
38
private PMStatEntry statEntry4;
39
private static final String STAT_RES = "resources/stat-data/";
43
String event = "event";
44
String units = "unit";
50
statEntry = new PMStatEntry(samples, event, metrics, units, deviation,
52
statEntry2 = new PMStatEntry(samples, event, metrics, units, deviation,
54
statEntry3 = new PMStatEntry(samples++, event, metrics++, units,
55
deviation++, scaling);
56
statEntry4 = new PMStatEntry(samples--, "event2", metrics--, units,
57
deviation--, scaling);
61
public void testPMStatEntryGetters() {
62
assertEquals("event", statEntry.getEvent());
63
assertEquals("unit", statEntry.getUnits());
64
assertEquals(1, statEntry.getSamples(), 0);
65
assertEquals(2, statEntry.getMetrics(), 0);
66
assertEquals(3, statEntry.getDeviation(), 0);
67
assertEquals(4, statEntry.getScaling(), 0);
71
public void testPMStatEntryEquality() {
72
assertTrue(statEntry.equalEvents(statEntry3));
73
assertFalse(statEntry.equalEvents(statEntry4));
74
assertTrue(statEntry.equals(statEntry2));
78
public void testPMStatEntryArray() {
79
String[] expectedList = new String[] {
80
String.valueOf(statEntry.getSamples()), statEntry.getEvent(),
81
String.valueOf(statEntry.getFormattedMetrics()), statEntry.getUnits(),
82
String.valueOf(statEntry.getFormattedDeviation()) };
84
String[] actualList = statEntry.toStringArray();
86
// test string array representation
87
assertArrayEquals(expectedList, actualList);
91
public void testPMStatEntryComparison() {
92
String expectedEvent = "event";
93
String expectedUnits = "unit";
94
float expectedSamples = statEntry.getSamples() - statEntry2.getSamples();
95
float expectedMetrics = statEntry.getMetrics() - statEntry2.getMetrics();
96
float expectedDeviation = statEntry.getDeviation() + statEntry2.getDeviation();
97
float expectedScaling = statEntry.getScaling() + statEntry2.getScaling();
99
PMStatEntry expectedDiff = new PMStatEntry(expectedSamples,
100
expectedEvent, expectedMetrics, expectedUnits,
101
expectedDeviation, expectedScaling);
103
PMStatEntry actualDiff = statEntry.compare(statEntry2);
105
// test stat entry comparison
106
assertEquals(expectedDiff,actualDiff);
111
public void testStatDataCollection() {
112
IPath statData = Path.fromOSString(STAT_RES + "perf_simple.stat");
114
//set up expected result
115
ArrayList<PMStatEntry> expectedStatList = new ArrayList<PMStatEntry>();
117
expectedStatList.add(new PMStatEntry((float) 4.78, "cpu-clock",
118
(float) 0.0, null, (float) 0.37, (float) 0.0));
119
expectedStatList.add(new PMStatEntry((float) 4.78, "task-clock",
120
(float) 0.08, "CPUs utilized", (float) 0.37, (float) 0.0));
121
expectedStatList.add(new PMStatEntry((float) 1164.0, "page-faults",
122
(float) 0.05, "M/sec", (float) 0.01, (float) 0.0));
123
expectedStatList.add(new PMStatEntry((float) 2164.0, "minor-faults",
124
(float) 0.06, "M/sec", (float) 0.01, (float) 0.0));
125
expectedStatList.add(new PMStatEntry((float) 9.6418E-4,
126
"seconds time elapsed", (float) 0.0, null, (float) 0.46,
129
ArrayList<PMStatEntry> actualStatList = StatComparisonData.collectStats(statData);
131
assertFalse(actualStatList.isEmpty());
133
for(PMStatEntry expectedEntry : expectedStatList){
134
assertTrue(actualStatList.contains(expectedEntry));
139
public void testStatDataComparisonFieldGetters() {
140
IPath oldStatData = Path.fromOSString(STAT_RES + "perf_old.stat");
141
IPath newStatData = Path.fromOSString(STAT_RES + "perf_new.stat");
142
String dataTitle = "title";
143
StatComparisonData diffData = new StatComparisonData(dataTitle,
144
oldStatData, newStatData);
146
assertEquals(dataTitle, diffData.getTitle());
147
assertEquals("", diffData.getPerfData());
148
assertNotNull(diffData.getDataID());
149
assertEquals(oldStatData.toOSString(), diffData.getOldDataPath());
150
assertEquals(newStatData.toOSString(), diffData.getNewDataPath());
151
assertEquals(oldStatData.toOSString() + diffData.getDataID(),diffData.getOldDataID());
152
assertEquals(newStatData.toOSString() + diffData.getDataID(),diffData.getNewDataID());
156
public void testStatDataComparison() {
157
IPath oldStatData = Path.fromOSString(STAT_RES + "perf_old.stat");
158
IPath newStatData = Path.fromOSString(STAT_RES + "perf_new.stat");
159
StatComparisonData diffData = new StatComparisonData("title",
160
oldStatData, newStatData);
162
// expected comparison list
163
ArrayList<PMStatEntry> expectedDiff = new ArrayList<PMStatEntry>();
165
expectedDiff.add(new PMStatEntry((float) -4.0, "cpu-clock",
166
(float) 0.0, null, (float) 0.54, (float) 0.0));
167
expectedDiff.add(new PMStatEntry((float) -2000.0, "page-faults",
168
(float) -0.31, "M/sec", (float) 0.02, (float) 0.0));
169
expectedDiff.add(new PMStatEntry((float) 0.0, "context-switches",
170
(float) -0.13, "K/sec", (float) 36.34, (float) 0.0));
171
expectedDiff.add(new PMStatEntry((float) -1000.0, "minor-faults",
172
(float) -0.3, "M/sec", (float) 0.02, (float) 0.0));
173
expectedDiff.add(new PMStatEntry((float) 0.0, "major-faults",
174
(float) 0.0, "K/sec", (float) 0.0, (float) 0.0));
175
expectedDiff.add(new PMStatEntry((float) -0.008,
176
"seconds time elapsed", (float) 0.0, null, (float) 0.92,
179
ArrayList<PMStatEntry> actualDiff = diffData.getComparisonStats();
181
assertFalse(actualDiff.isEmpty());
183
for (PMStatEntry expectedEntry : expectedDiff) {
184
assertTrue(actualDiff.contains(expectedEntry));
189
public void testStatComparisonResult() throws IOException {
190
IPath oldStatData = Path.fromOSString(STAT_RES + "perf_old.stat");
191
IPath newStatData = Path.fromOSString(STAT_RES + "perf_new.stat");
192
IPath diffStatData = Path.fromOSString(STAT_RES + "perf_diff.stat");
194
BufferedReader diffDataReader = new BufferedReader(new FileReader(
195
diffStatData.toFile()));
196
StatComparisonData diffData = new StatComparisonData("title",
197
oldStatData, newStatData);
199
diffData.runComparison();
200
String actualResult = diffData.getPerfData();
201
String[] actualResultLines = actualResult.split("\n");
204
for (int i = 0; i < actualResultLines.length; i++) {
205
curLine = diffDataReader.readLine();
208
* Elapsed seconds are usually very close to zero, and thus prone to
209
* some small formatting differences across systems. Total time
210
* entry items are checked more thoroughly to avoid test failures.
212
if (curLine.contains(PMStatEntry.TIME)) {
213
String expectedEntry = curLine.trim();
214
String actualEntry = actualResultLines[i].trim();
216
String expectedSamples = expectedEntry.substring(0, expectedEntry.indexOf(" "));
217
String expectedRest = expectedEntry.substring(expectedEntry.indexOf(" ") + 1);
219
String actualSamples = actualEntry.substring(0, actualEntry.indexOf(" "));
220
String actualRest = actualEntry.substring(actualEntry.indexOf(" ") + 1);
222
assertEquals(StatComparisonData.toFloat(actualSamples),
223
StatComparisonData.toFloat(expectedSamples), 0);
224
assertEquals(actualRest, expectedRest);
226
assertEquals(actualResultLines[i], curLine);
230
diffDataReader.close();
32
private PMStatEntry statEntry;
33
private PMStatEntry statEntry2;
34
private PMStatEntry statEntry3;
35
private PMStatEntry statEntry4;
36
private static final String STAT_RES = "resources/stat-data/";
40
String event = "event";
41
String units = "unit";
47
statEntry = new PMStatEntry(samples, event, metrics, units, deviation,
49
statEntry2 = new PMStatEntry(samples, event, metrics, units, deviation,
51
statEntry3 = new PMStatEntry(samples++, event, metrics++, units,
52
deviation++, scaling);
53
statEntry4 = new PMStatEntry(samples--, "event2", metrics--, units,
54
deviation--, scaling);
58
public void testPMStatEntryGetters() {
59
assertEquals("event", statEntry.getEvent());
60
assertEquals("unit", statEntry.getUnits());
61
assertEquals(1, statEntry.getSamples(), 0);
62
assertEquals(2, statEntry.getMetrics(), 0);
63
assertEquals(3, statEntry.getDeviation(), 0);
64
assertEquals(4, statEntry.getScaling(), 0);
68
public void testPMStatEntryEquality() {
69
assertTrue(statEntry.equalEvents(statEntry3));
70
assertFalse(statEntry.equalEvents(statEntry4));
71
assertTrue(statEntry.equals(statEntry2));
75
public void testPMStatEntryArray() {
76
String[] expectedList = new String[] {
77
String.valueOf(statEntry.getSamples()), statEntry.getEvent(),
78
String.valueOf(statEntry.getFormattedMetrics()), statEntry.getUnits(),
79
String.valueOf(statEntry.getFormattedDeviation()) };
81
String[] actualList = statEntry.toStringArray();
83
// test string array representation
84
assertArrayEquals(expectedList, actualList);
88
public void testPMStatEntryComparison() {
89
String expectedEvent = "event";
90
String expectedUnits = "unit";
91
float expectedSamples = statEntry.getSamples() - statEntry2.getSamples();
92
float expectedMetrics = statEntry.getMetrics() - statEntry2.getMetrics();
93
float expectedDeviation = statEntry.getDeviation() + statEntry2.getDeviation();
94
float expectedScaling = statEntry.getScaling() + statEntry2.getScaling();
96
PMStatEntry expectedDiff = new PMStatEntry(expectedSamples,
97
expectedEvent, expectedMetrics, expectedUnits,
98
expectedDeviation, expectedScaling);
100
PMStatEntry actualDiff = statEntry.compare(statEntry2);
102
// test stat entry comparison
103
assertEquals(expectedDiff,actualDiff);
108
public void testStatDataComparisonFieldGetters() {
109
IPath oldStatData = Path.fromOSString(STAT_RES + "perf_old.stat");
110
IPath newStatData = Path.fromOSString(STAT_RES + "perf_new.stat");
111
String dataTitle = "title";
112
StatComparisonData diffData = new StatComparisonData(dataTitle,
113
oldStatData, newStatData);
115
assertEquals(dataTitle, diffData.getTitle());
116
assertEquals("", diffData.getPerfData());
117
assertNotNull(diffData.getDataID());
118
assertEquals(oldStatData.toOSString(), diffData.getOldDataPath());
119
assertEquals(newStatData.toOSString(), diffData.getNewDataPath());
120
assertEquals(oldStatData.toOSString() + diffData.getDataID(),diffData.getOldDataID());
121
assertEquals(newStatData.toOSString() + diffData.getDataID(),diffData.getNewDataID());
125
public void testStatDataComparison() {
126
IPath oldStatData = Path.fromOSString(STAT_RES + "perf_old.stat");
127
IPath newStatData = Path.fromOSString(STAT_RES + "perf_new.stat");
128
StatComparisonData diffData = new StatComparisonData("title",
129
oldStatData, newStatData);
131
// expected comparison list
132
ArrayList<PMStatEntry> expectedDiff = new ArrayList<>();
134
expectedDiff.add(new PMStatEntry((float) -4.0, "cpu-clock",
135
(float) 0.0, null, (float) 0.54, (float) 0.0));
136
expectedDiff.add(new PMStatEntry((float) -2000.0, "page-faults",
137
(float) -0.31, "M/sec", (float) 0.02, (float) 0.0));
138
expectedDiff.add(new PMStatEntry((float) 0.0, "context-switches",
139
(float) -0.13, "K/sec", (float) 36.34, (float) 0.0));
140
expectedDiff.add(new PMStatEntry((float) -1000.0, "minor-faults",
141
(float) -0.3, "M/sec", (float) 0.02, (float) 0.0));
142
expectedDiff.add(new PMStatEntry((float) 0.0, "major-faults",
143
(float) 0.0, "K/sec", (float) 0.0, (float) 0.0));
144
expectedDiff.add(new PMStatEntry((float) -0.008,
145
"seconds time elapsed", (float) 0.0, null, (float) 0.92,
148
ArrayList<PMStatEntry> actualDiff = diffData.getComparisonStats();
150
assertFalse(actualDiff.isEmpty());
152
for (PMStatEntry expectedEntry : expectedDiff) {
153
assertTrue(actualDiff.contains(expectedEntry));
158
public void testStatComparisonResult() throws IOException {
159
IPath oldStatData = Path.fromOSString(STAT_RES + "perf_old.stat");
160
IPath newStatData = Path.fromOSString(STAT_RES + "perf_new.stat");
161
IPath diffStatData = Path.fromOSString(STAT_RES + "perf_diff.stat");
163
try (BufferedReader diffDataReader = new BufferedReader(new FileReader(
164
diffStatData.toFile()))) {
165
StatComparisonData diffData = new StatComparisonData("title",
166
oldStatData, newStatData);
168
diffData.runComparison();
169
String actualResult = diffData.getPerfData();
170
String[] actualResultLines = actualResult.split("\n");
173
for (int i = 0; i < actualResultLines.length; i++) {
174
curLine = diffDataReader.readLine();
177
* Elapsed seconds are usually very close to zero, and thus
178
* prone to some small formatting differences across systems.
179
* Total time entry items are checked more thoroughly to avoid
182
if (curLine.contains(PMStatEntry.TIME)) {
183
String expectedEntry = curLine.trim();
184
String actualEntry = actualResultLines[i].trim();
186
String expectedSamples = expectedEntry.substring(0,
187
expectedEntry.indexOf(" "));
188
String expectedRest = expectedEntry.substring(expectedEntry
191
String actualSamples = actualEntry.substring(0,
192
actualEntry.indexOf(" "));
193
String actualRest = actualEntry.substring(actualEntry
196
assertEquals(StatComparisonData.toFloat(actualSamples),
197
StatComparisonData.toFloat(expectedSamples), 0);
198
assertEquals(actualRest, expectedRest);
200
assertEquals(actualResultLines[i], curLine);