/
AgentHealthHeartbeatTests.cs
104 lines (91 loc) · 4.09 KB
/
AgentHealthHeartbeatTests.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// Copyright 2020 New Relic, Inc. All rights reserved.
// SPDX-License-Identifier: Apache-2.0
using System;
using NewRelic.Agent.Core.Metrics;
using NewRelic.Agent.Core.Time;
using NewRelic.Agent.Core.WireModels;
using NewRelic.Testing.Assertions;
using NUnit.Framework;
using Telerik.JustMock;
namespace NewRelic.Agent.Core.AgentHealth
{
internal class FakeScheduler : IScheduler
{
protected Action _action;
public void ExecuteOnce(Action action, TimeSpan timeUntilExecution)
{
_action = action;
}
public void ExecuteEvery(Action action, TimeSpan timeBetweenExecutions, TimeSpan? optionalInitialDelay = null)
{
_action = action;
}
public void StopExecuting(Action action, TimeSpan? timeToWaitForInProgressAction = null)
{
_action = null;
}
public void ForceExecute()
{
_action?.Invoke();
}
}
[TestFixture]
internal class AgentHealthHeartbeatTests
{
public static IMetricBuilder GetSimpleMetricBuilder()
{
var metricNameService = Mock.Create<IMetricNameService>();
Mock.Arrange(() => metricNameService.RenameMetric(Arg.IsAny<string>())).Returns<string>(name => name);
return new MetricWireModel.MetricBuilder(metricNameService);
}
[Test]
public void HeartbeatTest()
{
var scheduler = new FakeScheduler();
var reporter = new AgentHealthReporter(GetSimpleMetricBuilder(), scheduler);
using (var logger = new TestUtilities.Logging())
{
// Make sure all the event types get seen in the log
reporter.ReportTransactionEventsSent(1);
reporter.ReportCustomEventsSent(2);
reporter.ReportErrorEventsSent(3);
reporter.ReportSpanEventsSent(4);
reporter.ReportInfiniteTracingSpanEventsSent(5);
reporter.ReportLoggingEventsSent(6);
scheduler.ForceExecute();
NrAssert.Multiple(
() => Assert.IsTrue(logger.HasMessageThatContains("1 Transaction")),
() => Assert.IsTrue(logger.HasMessageThatContains("2 Custom")),
() => Assert.IsTrue(logger.HasMessageThatContains("3 Error")),
() => Assert.IsTrue(logger.HasMessageThatContains("4 Span")),
() => Assert.IsTrue(logger.HasMessageThatContains("5 InfiniteTracingSpan")),
() => Assert.IsTrue(logger.HasMessageThatContains("6 Log")),
() => Assert.IsFalse(logger.HasMessageThatContains("No events"))
);
// Make sure they all update their cumulative counts
for (int twice = 0; twice < 2; twice++)
{
reporter.ReportTransactionEventsSent(1);
reporter.ReportCustomEventsSent(2);
reporter.ReportErrorEventsSent(3);
reporter.ReportSpanEventsSent(4);
reporter.ReportInfiniteTracingSpanEventsSent(5);
reporter.ReportLoggingEventsSent(6);
}
scheduler.ForceExecute();
NrAssert.Multiple(
() => Assert.IsTrue(logger.HasMessageThatContains("2 Transaction")),
() => Assert.IsTrue(logger.HasMessageThatContains("4 Custom")),
() => Assert.IsTrue(logger.HasMessageThatContains("6 Error")),
() => Assert.IsTrue(logger.HasMessageThatContains("8 Span")),
() => Assert.IsTrue(logger.HasMessageThatContains("10 InfiniteTracingSpan")),
() => Assert.IsTrue(logger.HasMessageThatContains("12 Log")),
() => Assert.IsFalse(logger.HasMessageThatContains("No events"))
);
// Make sure they get cleared out between triggers
scheduler.ForceExecute();
Assert.IsTrue(logger.HasMessageThatContains("No events"));
}
}
}
}