Skip to content

Commit 08a91b6

Browse files
authored
User/ivberg/perfetto ut cov (#92)
* Build tables to test & get code coverage for table generation used by UI. Get all data to test for issues seen with projectors vs certain data. Increases Perfetto CC from 32% to 83% * Fix LTTng tables not implementing IsDataAvailable(). Increase LTTng code coverage from 56% -> 61% by covering table & data projectors
1 parent 107e4e4 commit 08a91b6

15 files changed

+215
-33
lines changed

LTTngDataExtUnitTest/LTTngUnitTest.cs

Lines changed: 39 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@
1313
using LTTngDataExtensions.SourceDataCookers.Module;
1414
using LTTngDataExtensions.SourceDataCookers.Syscall;
1515
using LTTngDataExtensions.SourceDataCookers.Thread;
16+
using LTTngDataExtensions.Tables;
1617
using Microsoft.Performance.SDK.Extensibility;
1718
using Microsoft.Performance.SDK.Processing;
1819
using Microsoft.Performance.Toolkit.Engine;
1920
using Microsoft.VisualStudio.TestTools.UnitTesting;
20-
21+
using UnitTestCommon;
22+
2123
namespace LTTngDataExtUnitTest
2224
{
2325
[TestClass]
@@ -74,6 +76,18 @@ public static void ProcessTrace()
7476
LTTngDiskDataCookerPath = lttngDiskDataCooker.Path;
7577
runtime.EnableCooker(LTTngDiskDataCookerPath);
7678

79+
// Enable tables used by UI
80+
//runtime.EnableTable(CpuTable.TableDescriptor);
81+
runtime.EnableTable(DiagnosticMessageTable.TableDescriptor);
82+
runtime.EnableTable(DiskTable.TableDescriptor);
83+
runtime.EnableTable(ExecutionEventTable.TableDescriptor);
84+
runtime.EnableTable(FileEventsTable.TableDescriptor);
85+
runtime.EnableTable(GenericEventTable.TableDescriptor);
86+
runtime.EnableTable(ModuleEventsTable.TableDescriptor);
87+
//runtime.EnableTable(ProcessTable.TableDescriptor);
88+
runtime.EnableTable(SyscallTable.TableDescriptor);
89+
runtime.EnableTable(ThreadTable.TableDescriptor);
90+
7791
//
7892
// Process our data.
7993
//
@@ -120,7 +134,7 @@ public void ProcessTraceAsFolder()
120134
}
121135

122136
[TestMethod]
123-
public void DiagnosticMessageTable()
137+
public void DiagnosticMessageTableTest()
124138
{
125139
ProcessTrace();
126140

@@ -130,10 +144,12 @@ public void DiagnosticMessageTable()
130144
nameof(LTTngDmesgDataCooker.DiagnosticMessages)));
131145

132146
Assert.IsTrue(eventData.Count == 0); // TODO - UT - Trace has no DiagMessages
147+
148+
UnitTest.TestTableBuild(RuntimeExecutionResults, DiagnosticMessageTable.TableDescriptor, 0, true);
133149
}
134150

135151
[TestMethod]
136-
public void DiskTable()
152+
public void DiskTableTest()
137153
{
138154
ProcessTrace();
139155

@@ -142,11 +158,13 @@ public void DiskTable()
142158
LTTngDiskDataCookerPath,
143159
nameof(LTTngDiskDataCooker.DiskActivity)));
144160

145-
Assert.IsTrue(eventData.Count > 0);
161+
Assert.IsTrue(eventData.Count == 6437);
162+
163+
UnitTest.TestTableBuild(RuntimeExecutionResults, DiskTable.TableDescriptor, 6437);
146164
}
147165

148166
[TestMethod]
149-
public void ExecutionEventTable()
167+
public void ExecutionEventTableTest()
150168
{
151169
ProcessTrace();
152170

@@ -155,11 +173,12 @@ public void ExecutionEventTable()
155173
LTTngThreadDataCookerPath,
156174
nameof(LTTngThreadDataCooker.ExecutionEvents)));
157175

158-
Assert.IsTrue(eventData.Count > 0);
176+
Assert.IsTrue(eventData.Count == 18780);
177+
UnitTest.TestTableBuild(RuntimeExecutionResults, ExecutionEventTable.TableDescriptor, 18780);
159178
}
160179

161180
[TestMethod]
162-
public void FileEventsTable()
181+
public void FileEventsTableTest()
163182
{
164183
ProcessTrace();
165184

@@ -168,11 +187,12 @@ public void FileEventsTable()
168187
LTTngDiskDataCookerPath,
169188
nameof(LTTngDiskDataCooker.FileEvents)));
170189

171-
Assert.IsTrue(eventData.Count > 0);
190+
Assert.IsTrue(eventData.Count == 433143);
191+
UnitTest.TestTableBuild(RuntimeExecutionResults, FileEventsTable.TableDescriptor, 433143);
172192
}
173193

174194
[TestMethod]
175-
public void GenericEventsTable()
195+
public void GenericEventsTableTest()
176196
{
177197
ProcessTrace();
178198

@@ -181,14 +201,15 @@ public void GenericEventsTable()
181201
LTTngGenericEventDataCookerPath,
182202
nameof(LTTngGenericEventDataCooker.Events)));
183203

184-
Assert.IsTrue(eventData.Count > 0);
204+
Assert.IsTrue(eventData.Count == 936356);
205+
UnitTest.TestTableBuild(RuntimeExecutionResults, GenericEventTable.TableDescriptor, 936356);
185206

186207
Assert.IsTrue(!String.IsNullOrWhiteSpace(eventData[0].FieldNames[0]));
187208
Assert.IsTrue(!String.IsNullOrWhiteSpace(eventData[0].FieldValues[0]));
188209
}
189210

190211
[TestMethod]
191-
public void ModuleEventsTable()
212+
public void ModuleEventsTableTest()
192213
{
193214
ProcessTrace();
194215

@@ -198,10 +219,11 @@ public void ModuleEventsTable()
198219
nameof(LTTngModuleDataCooker.ModuleEvents)));
199220

200221
Assert.IsTrue(eventData.Count == 0); // TODO - UT - Trace has no ModuleEvents
222+
UnitTest.TestTableBuild(RuntimeExecutionResults, ModuleEventsTable.TableDescriptor, 0, true);
201223
}
202224

203225
[TestMethod]
204-
public void SyscallTable()
226+
public void SyscallTableTest()
205227
{
206228
ProcessTrace();
207229

@@ -210,11 +232,12 @@ public void SyscallTable()
210232
LTTngSyscallDataCookerPath,
211233
nameof(LTTngSyscallDataCooker.Syscalls)));
212234

213-
Assert.IsTrue(eventData.Count > 0);
235+
Assert.IsTrue(eventData.Count == 441037);
236+
UnitTest.TestTableBuild(RuntimeExecutionResults, SyscallTable.TableDescriptor, 441037);
214237
}
215238

216239
[TestMethod]
217-
public void ThreadTable()
240+
public void ThreadTableTest()
218241
{
219242
ProcessTrace();
220243

@@ -223,7 +246,8 @@ public void ThreadTable()
223246
LTTngThreadDataCookerPath,
224247
nameof(LTTngThreadDataCooker.Threads)));
225248

226-
Assert.IsTrue(threads.Count > 0);
249+
Assert.IsTrue(threads.Count == 82);
250+
UnitTest.TestTableBuild(RuntimeExecutionResults, ThreadTable.TableDescriptor, 82);
227251
}
228252
}
229253
}

LTTngDataExtensions/LTTngDataExtensions.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<TargetFramework>netstandard2.1</TargetFramework>
5-
<Version>1.2.4</Version>
5+
<Version>1.2.5</Version>
66
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
77
<Authors>Microsoft</Authors>
88
<Company>Microsoft Corp.</Company>

LTTngDataExtensions/Tables/DiagnosticMessageTable.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
using System;
55
using System.Collections.Generic;
6+
using System.Linq;
67
using LTTngCds.CookerData;
78
using LTTngDataExtensions.SourceDataCookers.Diagnostic_Messages;
89
using Microsoft.Performance.SDK.Extensibility;
@@ -30,6 +31,12 @@ public class DiagnosticMessageTable
3031
new ColumnMetadata(new Guid("{45A3AB1A-503E-46F0-B10D-20FC303DF0C7}"), "Timestamp"),
3132
new UIHints { Width = 80, });
3233

34+
public static bool IsDataAvailable(IDataExtensionRetrieval tableData)
35+
{
36+
return tableData.QueryOutput<IReadOnlyList<IDiagnosticMessage>>(
37+
DataOutputPath.ForSource(LTTngConstants.SourceId, LTTngDmesgDataCooker.Identifier, nameof(LTTngDmesgDataCooker.DiagnosticMessages))).Any();
38+
}
39+
3340
public static void BuildTable(ITableBuilder tableBuilder, IDataExtensionRetrieval tableData)
3441
{
3542
var messages = tableData.QueryOutput<IReadOnlyList<IDiagnosticMessage>>(

LTTngDataExtensions/Tables/DiskTable.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
using System;
55
using System.Collections.Generic;
6+
using System.Linq;
67
using LTTngCds.CookerData;
78
using LTTngDataExtensions.DataOutputTypes;
89
using LTTngDataExtensions.SourceDataCookers.Disk;
@@ -155,6 +156,12 @@ public static class DiskTable
155156
new ColumnMetadata(new Guid("{6F229839-2D61-4780-858B-6574E73E43F9}"), "Time Delta"),
156157
new UIHints { Width = 80, IsVisible = false });
157158

159+
public static bool IsDataAvailable(IDataExtensionRetrieval tableData)
160+
{
161+
return tableData.QueryOutput<IReadOnlyList<IDiskActivity>>(
162+
DataOutputPath.ForSource(LTTngConstants.SourceId, LTTngDiskDataCooker.Identifier, nameof(LTTngDiskDataCooker.DiskActivity))).Any();
163+
}
164+
158165
public static void BuildTable(ITableBuilder tableBuilder, IDataExtensionRetrieval tableData)
159166
{
160167
var diskEvents = tableData.QueryOutput<IReadOnlyList<IDiskActivity>>(

LTTngDataExtensions/Tables/ExecutionEvent.cs renamed to LTTngDataExtensions/Tables/ExecutionEventTable.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
using System;
55
using System.Collections.Generic;
6+
using System.Linq;
67
using LTTngCds.CookerData;
78
using LTTngDataExtensions.SourceDataCookers.Thread;
89
using Microsoft.Performance.SDK;
@@ -13,7 +14,7 @@ namespace LTTngDataExtensions.Tables
1314
{
1415
[Table]
1516
[RequiresSourceCooker(LTTngConstants.SourceId, LTTngThreadDataCooker.Identifier)]
16-
public class ExecutionEvent
17+
public class ExecutionEventTable
1718
{
1819
public static TableDescriptor TableDescriptor = new TableDescriptor(
1920
Guid.Parse("{91A234C3-3A3C-4230-85DA-76DE1C8E86BA}"),
@@ -140,6 +141,12 @@ public class ExecutionEvent
140141
SortPriority = 0,
141142
});
142143

144+
public static bool IsDataAvailable(IDataExtensionRetrieval tableData)
145+
{
146+
return tableData.QueryOutput<IReadOnlyList<IExecutionEvent>>(
147+
DataOutputPath.ForSource(LTTngConstants.SourceId, LTTngThreadDataCooker.Identifier, nameof(LTTngThreadDataCooker.ExecutionEvents))).Any();
148+
}
149+
143150
public static void BuildTable(ITableBuilder tableBuilder, IDataExtensionRetrieval tableData)
144151
{
145152
var threads = tableData.QueryOutput<IReadOnlyList<IExecutionEvent>>(

LTTngDataExtensions/Tables/FileEventsTable.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
using Microsoft.Performance.SDK;
1010
using Microsoft.Performance.SDK.Processing;
1111
using LTTngCds.CookerData;
12-
12+
using System.Linq;
13+
1314
namespace LTTngDataExtensions.Tables
1415
{
1516
[Table]
@@ -68,6 +69,12 @@ public class FileEventsTable
6869
new ColumnMetadata(new Guid("{62A57C1A-45AE-4A81-B2D9-850A2C8D53C8}"), "File"),
6970
new UIHints { Width = 80, });
7071

72+
public static bool IsDataAvailable(IDataExtensionRetrieval tableData)
73+
{
74+
return tableData.QueryOutput<IReadOnlyList<IFileEvent>>(
75+
DataOutputPath.ForSource(LTTngConstants.SourceId, LTTngDiskDataCooker.Identifier, nameof(LTTngDiskDataCooker.FileEvents))).Any();
76+
}
77+
7178
public static void BuildTable(ITableBuilder tableBuilder, IDataExtensionRetrieval tableData)
7279
{
7380
var fileEvents = tableData.QueryOutput<IReadOnlyList<IFileEvent>>(

LTTngDataExtensions/Tables/GenericEventTable.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// Licensed under the MIT license.
33

44
using System;
5+
using System.Linq;
56
using LTTngCds.CookerData;
67
using LTTngDataExtensions.DataOutputTypes;
78
using LTTngDataExtensions.SourceDataCookers;
@@ -72,6 +73,12 @@ public class GenericEventTable
7273
AggregationMode = AggregationMode.Sum,
7374
});
7475

76+
public static bool IsDataAvailable(IDataExtensionRetrieval tableData)
77+
{
78+
return tableData.QueryOutput<ProcessedEventData<LTTngGenericEvent>>(
79+
DataOutputPath.ForSource(LTTngConstants.SourceId, LTTngGenericEventDataCooker.Identifier, nameof(LTTngGenericEventDataCooker.Events))).Any();
80+
}
81+
7582
public static void BuildTable(ITableBuilder tableBuilder, IDataExtensionRetrieval tableData)
7683
{
7784
int maximumFieldCount = tableData.QueryOutput<int>(

LTTngDataExtensions/Tables/ModuleEventsTable.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
using System;
55
using System.Collections.Generic;
6+
using System.Linq;
67
using LTTngCds.CookerData;
78
using LTTngDataExtensions.SourceDataCookers.Module;
89
using Microsoft.Performance.SDK.Extensibility;
@@ -60,6 +61,12 @@ public class ModuleEventsTable
6061
new ColumnMetadata(new Guid("{FE56A50D-5CF2-4BD9-8A87-8DED7F67CAB0}"), "Thread's Command"),
6162
new UIHints { Width = 80, });
6263

64+
public static bool IsDataAvailable(IDataExtensionRetrieval tableData)
65+
{
66+
return tableData.QueryOutput<IReadOnlyList<IModuleEvent>>(
67+
DataOutputPath.ForSource(LTTngConstants.SourceId, LTTngModuleDataCooker.Identifier, nameof(LTTngModuleDataCooker.ModuleEvents))).Any();
68+
}
69+
6370
public static void BuildTable(ITableBuilder tableBuilder, IDataExtensionRetrieval tableData)
6471
{
6572
var moduleEvents = tableData.QueryOutput<IReadOnlyList<IModuleEvent>>(

LTTngDataExtensions/Tables/SyscallTable.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
using System;
55
using System.Collections.Generic;
6+
using System.Linq;
67
using LTTngCds.CookerData;
78
using LTTngDataExtensions.SourceDataCookers.Syscall;
89
using Microsoft.Performance.SDK.Extensibility;
@@ -71,6 +72,12 @@ public class SyscallTable
7172
new ColumnMetadata(new Guid("{9721F620-CCC6-40E3-BB26-EBE522F2FCE7}"), "Return Value"),
7273
new UIHints { Width = 80, });
7374

75+
public static bool IsDataAvailable(IDataExtensionRetrieval tableData)
76+
{
77+
return tableData.QueryOutput<IReadOnlyList<ISyscall>>(
78+
DataOutputPath.ForSource(LTTngConstants.SourceId, LTTngSyscallDataCooker.Identifier, nameof(LTTngSyscallDataCooker.Syscalls))).Any();
79+
}
80+
7481
public static void BuildTable(ITableBuilder tableBuilder, IDataExtensionRetrieval tableData)
7582
{
7683
var syscalls = tableData.QueryOutput<IReadOnlyList<ISyscall>>(

LTTngDataExtensions/Tables/ThreadTable.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
using Microsoft.Performance.SDK.Extensibility;
88
using Microsoft.Performance.SDK.Processing;
99
using LTTngCds.CookerData;
10-
10+
using System.Linq;
11+
1112
namespace LTTngDataExtensions.Tables
1213
{
1314
[Table]
@@ -96,6 +97,12 @@ public class ThreadTable
9697
new ColumnMetadata(new Guid("{6F29EABD-12B9-47BD-A78A-BD885456437F}"), "Idle time", "Time spent idle"),
9798
new UIHints { Width = 80, CellFormat = "ms" });
9899

100+
public static bool IsDataAvailable(IDataExtensionRetrieval tableData)
101+
{
102+
return tableData.QueryOutput<IReadOnlyList<IThread>>(
103+
DataOutputPath.ForSource(LTTngConstants.SourceId, LTTngThreadDataCooker.Identifier, nameof(LTTngThreadDataCooker.Threads))).Any();
104+
}
105+
99106
public static void BuildTable(ITableBuilder tableBuilder, IDataExtensionRetrieval tableData)
100107
{
101108
var threads = tableData.QueryOutput<IReadOnlyList<IThread>>(

0 commit comments

Comments
 (0)