using Amazon.AwsToolkit.Telemetry.Events.Core; using Amazon.AwsToolkit.Telemetry.Events.Generated; using Amazon.AwsToolkit.Telemetry.Events.Tests.Generated; using Moq; using Xunit; namespace Amazon.AwsToolkit.Telemetry.Events.Tests { /// /// Test a sampling of the auto-generated code for supplemental telemetry definitions, /// to see that RecordXxx calls function as expected /// public class GeneratedSupplementCodeTests { private readonly Mock _telemetryLogger = new Mock(); private Metrics _recordedMetrics = null; public GeneratedSupplementCodeTests() { _telemetryLogger.Setup(mock => mock.Record(It.IsAny())) .Callback(metrics => { _recordedMetrics = metrics; }); } /// /// RecordSampleExtendedInvoke was chosen as a sample call that uses both a /// common telemetry type (Runtime) and a supplemental telemetry type (ExtendedRuntime). /// [Fact] public void RecordSampleExtendedInvoke() { var payload = new SampleExtendedInvoke() { Result = Result.Succeeded, Runtime = Runtime.Dotnetcore31, ExtendedRuntime = ExtendedRuntime.Rascal, }; _telemetryLogger.Object.RecordSampleExtendedInvoke(payload); Assert.NotNull(_recordedMetrics); _telemetryLogger.Verify( mock => mock.Record(_recordedMetrics), Times.Once ); var datum = Assert.Single(_recordedMetrics.Data); Assert.NotNull(datum); Assert.Equal("sample_extendedInvoke", datum.MetricName); Assert.Equal(Unit.None, datum.Unit); Assert.Equal(payload.Runtime.Value.ToString(), datum.Metadata["runtime"]); Assert.Equal(payload.ExtendedRuntime.Value.ToString(), datum.Metadata["extendedRuntime"]); Assert.Equal(payload.Result.ToString(), datum.Metadata["result"]); } /// /// RecordSampleReleaseBees was chosen as a sample call that uses /// only supplemental telemetry types. /// [Fact] public void RecordSampleReleaseBees() { var payload = new SampleReleaseBees() { Bees = 123, Reason = "sample-reason", ErrorCode = "SampleErrorCode", CausedBy = "unknown", HttpStatusCode = "BadGateway", RequestId = "1234", RequestServiceType = "Lambda", Duration = 22.5, Locale = "en-US" }; _telemetryLogger.Object.RecordSampleReleaseBees(payload); Assert.NotNull(_recordedMetrics); _telemetryLogger.Verify( mock => mock.Record(_recordedMetrics), Times.Once ); var datum = Assert.Single(_recordedMetrics.Data); Assert.NotNull(datum); Assert.Equal("sample_releaseBees", datum.MetricName); Assert.Equal(Unit.None, datum.Unit); Assert.Equal(payload.Bees.ToString(), datum.Metadata["bees"]); Assert.Equal(payload.Reason, datum.Metadata["reason"]); Assert.Equal(payload.ErrorCode, datum.Metadata["errorCode"]); Assert.Equal(payload.CausedBy, datum.Metadata["causedBy"]); Assert.Equal(payload.HttpStatusCode, datum.Metadata["httpStatusCode"]); Assert.Equal(payload.RequestId, datum.Metadata["requestId"]); Assert.Equal(payload.RequestServiceType, datum.Metadata["requestServiceType"]); Assert.Equal(payload.Duration.ToString(), datum.Metadata["duration"]); Assert.Equal(payload.Locale, datum.Metadata["locale"]); } /// /// Sample test using a Unit (which is part of the common telemetry declarations). /// [Fact] public void RecordSampleTestRun() { var payload = new SampleTestRun() { Value = 2.4, }; _telemetryLogger.Object.RecordSampleTestRun(payload); Assert.NotNull(_recordedMetrics); _telemetryLogger.Verify( mock => mock.Record(_recordedMetrics), Times.Once ); var datum = Assert.Single(_recordedMetrics.Data); Assert.NotNull(datum); Assert.Equal("sample_testRun", datum.MetricName); Assert.Equal(Unit.Milliseconds, datum.Unit); Assert.Equal(payload.Value.Value, datum.Value); } [Fact] public void PassiveSampleEvent() { var payload = new SamplePassive(); _telemetryLogger.Object.RecordSamplePassive(payload); Assert.NotNull(_recordedMetrics); _telemetryLogger.Verify( mock => mock.Record(_recordedMetrics), Times.Once ); var datum = Assert.Single(_recordedMetrics.Data); Assert.NotNull(datum); Assert.Equal("sample_passive", datum.MetricName); Assert.True(datum.Passive); } } }