improve eventsource tests - part 1 (#3586)

This commit is contained in:
Timothy Mothra 2022-09-16 16:22:22 -07:00 committed by GitHub
parent d72a94f3ba
commit 78e38423d7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 61 additions and 17 deletions

View File

@ -195,7 +195,7 @@ namespace OpenTelemetry.Internal
[Event(3, Message = "Exporter returned error '{0}'.", Level = EventLevel.Warning)]
public void ExporterErrorResult(ExportResult exportResult)
{
this.WriteEvent(3, exportResult.ToString());
this.WriteEvent(3, exportResult);
}
[Event(4, Message = "Unknown error in SpanProcessor event '{0}': '{1}'.", Level = EventLevel.Error)]

View File

@ -0,0 +1,29 @@
// <copyright file="EventSourceTest.cs" company="OpenTelemetry Authors">
// Copyright The OpenTelemetry Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// </copyright>
using OpenTelemetry.Tests;
using Xunit;
namespace OpenTelemetry.Exporter.Prometheus.Tests;
public class EventSourceTest
{
[Fact]
public void EventSourceTest_PrometheusExporterEventSource()
{
EventSourceTestHelper.MethodsAreImplementedConsistentlyWithTheirAttributes(PrometheusExporterEventSource.Log);
}
}

View File

@ -29,6 +29,8 @@
</ItemGroup>
<ItemGroup>
<Compile Include="$(RepoRoot)\test\OpenTelemetry.Tests\Shared\EventSourceTestHelper.cs" Link="EventSourceTestHelper.cs" />
<Compile Include="$(RepoRoot)\test\OpenTelemetry.Tests\Shared\TestEventListener.cs" Link="TestEventListener.cs" />
<Compile Include="$(RepoRoot)\test\OpenTelemetry.Tests\Shared\Utils.cs" Link="Includes\Utils.cs" />
</ItemGroup>

View File

@ -42,17 +42,24 @@ namespace OpenTelemetry.Tests
object[] eventArguments = GenerateEventArguments(eventMethod);
eventMethod.Invoke(eventSource, eventArguments);
EventWrittenEventArgs actualEvent = null;
EventWrittenEventArgs actualEvent = listener.Messages.FirstOrDefault(x => x.EventName == eventMethod.Name);
actualEvent = listener.Messages.First(q => q.EventName == eventMethod.Name);
if (actualEvent == null)
{
// check for errors
actualEvent = listener.Messages.FirstOrDefault(x => x.EventId == 0);
if (actualEvent != null)
{
throw new Exception(actualEvent.Message);
}
// give up
throw new Exception("Listener failed to collect event.");
}
VerifyEventId(eventMethod, actualEvent);
VerifyEventLevel(eventMethod, actualEvent);
if (eventMethod.Name != "ExporterErrorResult")
{
VerifyEventMessage(eventMethod, actualEvent, eventArguments);
}
VerifyEventMessage(eventMethod, actualEvent, eventArguments);
}
catch (Exception e)
{

View File

@ -26,8 +26,11 @@ namespace OpenTelemetry.Tests
/// </summary>
internal class TestEventListener : EventListener
{
/// <summary>Unique Id used to identify events from the test thread.</summary>
private readonly Guid activityId;
/// <summary>A queue of events that have been logged.</summary>
private readonly Queue<EventWrittenEventArgs> events;
private readonly List<EventWrittenEventArgs> events;
/// <summary>
/// Lock for event writing tracking.
@ -39,11 +42,14 @@ namespace OpenTelemetry.Tests
/// </summary>
public TestEventListener()
{
this.events = new Queue<EventWrittenEventArgs>();
this.activityId = Guid.NewGuid();
EventSource.SetCurrentThreadActivityId(this.activityId);
this.events = new List<EventWrittenEventArgs>();
this.eventWritten = new AutoResetEvent(false);
this.OnOnEventWritten = e =>
{
this.events.Enqueue(e);
this.events.Add(e);
this.eventWritten.Set();
};
}
@ -55,7 +61,7 @@ namespace OpenTelemetry.Tests
public Action<EventWrittenEventArgs> OnOnEventWritten { get; set; }
/// <summary>Gets the events that have been written.</summary>
public IEnumerable<EventWrittenEventArgs> Messages
public IList<EventWrittenEventArgs> Messages
{
get
{
@ -64,10 +70,7 @@ namespace OpenTelemetry.Tests
this.eventWritten.WaitOne(TimeSpan.FromSeconds(5));
}
while (this.events.Count != 0)
{
yield return this.events.Dequeue();
}
return this.events;
}
}
@ -83,7 +86,10 @@ namespace OpenTelemetry.Tests
/// <param name="eventData">The event data that was written.</param>
protected override void OnEventWritten(EventWrittenEventArgs eventData)
{
this.OnOnEventWritten(eventData);
if (eventData.ActivityId == this.activityId)
{
this.OnOnEventWritten(eventData);
}
}
/// <summary>Handler for event source creation.</summary>