@@ -214,5 +214,101 @@ public void ItIgnoresNonIntegerPropertiesDuringAggregation()
214214 fakeTelemetry . LogEntry . Properties . Should ( ) . NotContainKey ( "InvalidProperty" ) ;
215215 fakeTelemetry . LogEntry . Properties . Should ( ) . NotContainKey ( "InvalidProperty2" ) ;
216216 }
217+
218+ [ Fact ]
219+ public void ItAggregatesEvents ( )
220+ {
221+ var fakeTelemetry = new FakeTelemetry ( ) ;
222+ fakeTelemetry . Enabled = true ;
223+ var logger = new MSBuildLogger ( fakeTelemetry ) ;
224+
225+ var event1 = new TelemetryEventArgs
226+ {
227+ EventName = MSBuildLogger . TaskFactoryTelemetryAggregatedEventName ,
228+ Properties = new Dictionary < string , string >
229+ {
230+ { "AssemblyTaskFactoryTasksExecutedCount" , "2" } ,
231+ { "RoslynCodeTaskFactoryTasksExecutedCount" , "1" }
232+ }
233+ } ;
234+
235+ var event2 = new TelemetryEventArgs
236+ {
237+ EventName = MSBuildLogger . TaskFactoryTelemetryAggregatedEventName ,
238+ Properties = new Dictionary < string , string >
239+ {
240+ { "AssemblyTaskFactoryTasksExecutedCount" , "3" } ,
241+ { "CustomTaskFactoryTasksExecutedCount" , "2" }
242+ }
243+ } ;
244+
245+ var event3 = new TelemetryEventArgs
246+ {
247+ EventName = MSBuildLogger . TasksTelemetryAggregatedEventName ,
248+ Properties = new Dictionary < string , string >
249+ {
250+ { "TasksExecutedCount" , "3" } ,
251+ { "TaskHostTasksExecutedCount" , "2" }
252+ }
253+ } ;
254+
255+ var event4 = new TelemetryEventArgs
256+ {
257+ EventName = MSBuildLogger . TasksTelemetryAggregatedEventName ,
258+ Properties = new Dictionary < string , string >
259+ {
260+ { "TasksExecutedCount" , "5" }
261+ }
262+ } ;
263+
264+ logger . AggregateEvent ( event1 ) ;
265+ logger . AggregateEvent ( event2 ) ;
266+ logger . AggregateEvent ( event3 ) ;
267+ logger . AggregateEvent ( event4 ) ;
268+
269+ logger . SendAggregatedEventsOnBuildFinished ( fakeTelemetry ) ;
270+
271+ fakeTelemetry . LogEntries . Should ( ) . HaveCount ( 2 ) ;
272+
273+ var taskFactoryEntry = fakeTelemetry . LogEntries . FirstOrDefault ( e => e . EventName == $ "msbuild/{ MSBuildLogger . TaskFactoryTelemetryAggregatedEventName } ") ;
274+ taskFactoryEntry . Should ( ) . NotBeNull ( ) ;
275+ taskFactoryEntry . Properties [ "AssemblyTaskFactoryTasksExecutedCount" ] . Should ( ) . Be ( "5" ) ; // 2 + 3
276+ taskFactoryEntry . Properties [ "RoslynCodeTaskFactoryTasksExecutedCount" ] . Should ( ) . Be ( "1" ) ; // 1 + 0
277+ taskFactoryEntry . Properties [ "CustomTaskFactoryTasksExecutedCount" ] . Should ( ) . Be ( "2" ) ; // 0 + 2
278+
279+ var tasksEntry = fakeTelemetry . LogEntries . FirstOrDefault ( e => e . EventName == $ "msbuild/{ MSBuildLogger . TasksTelemetryAggregatedEventName } ") ;
280+ tasksEntry . Should ( ) . NotBeNull ( ) ;
281+ tasksEntry . Properties [ "TasksExecutedCount" ] . Should ( ) . Be ( "8" ) ; // 3 + 5
282+ tasksEntry . Properties [ "TaskHostTasksExecutedCount" ] . Should ( ) . Be ( "2" ) ; // 2 + 0
283+ }
284+
285+ [ Fact ]
286+ public void ItIgnoresNonIntegerPropertiesDuringAggregation ( )
287+ {
288+ var fakeTelemetry = new FakeTelemetry ( ) ;
289+ fakeTelemetry . Enabled = true ;
290+ var logger = new MSBuildLogger ( fakeTelemetry ) ;
291+
292+ var eventArgs = new TelemetryEventArgs
293+ {
294+ EventName = MSBuildLogger . TaskFactoryTelemetryAggregatedEventName ,
295+ Properties = new Dictionary < string , string >
296+ {
297+ { "AssemblyTaskFactoryTasksExecutedCount" , "3" } ,
298+ { "InvalidProperty" , "not-a-number" } ,
299+ { "InvalidProperty2" , "1.234" } ,
300+ }
301+ } ;
302+
303+ logger . AggregateEvent ( eventArgs ) ;
304+
305+ logger . SendAggregatedEventsOnBuildFinished ( fakeTelemetry ) ;
306+
307+ fakeTelemetry . LogEntry . Should ( ) . NotBeNull ( ) ;
308+ fakeTelemetry . LogEntry . EventName . Should ( ) . Be ( $ "msbuild/{ MSBuildLogger . TaskFactoryTelemetryAggregatedEventName } ") ;
309+ fakeTelemetry . LogEntry . Properties [ "AssemblyTaskFactoryTasksExecutedCount" ] . Should ( ) . Be ( "3" ) ;
310+ fakeTelemetry . LogEntry . Properties . Should ( ) . NotContainKey ( "InvalidProperty" ) ;
311+ fakeTelemetry . LogEntry . Properties . Should ( ) . NotContainKey ( "InvalidProperty2" ) ;
312+ }
217313 }
218314}
0 commit comments