improve eventsource tests - part 1 (#3586)
This commit is contained in:
parent
d72a94f3ba
commit
78e38423d7
|
|
@ -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)]
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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>
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Reference in New Issue