Skip to content

Commit 238fb05

Browse files
authored
Improve flaky Render_ChangeTrace_RowsRendered test (#8744)
* Improve flaky Render_ChangeTrace_RowsRendered test * Update
1 parent 5f9a547 commit 238fb05

File tree

2 files changed

+35
-10
lines changed

2 files changed

+35
-10
lines changed

src/Aspire.Dashboard/Components/Pages/TraceDetail.razor.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ public partial class TraceDetail : ComponentBase, IDisposable
4242
[SupplyParameterFromQuery]
4343
public string? SpanId { get; set; }
4444

45+
[Inject]
46+
public required ILogger<TraceDetail> Logger { get; init; }
47+
4548
[Inject]
4649
public required TelemetryRepository TelemetryRepository { get; init; }
4750

@@ -167,15 +170,18 @@ private void UpdateDetailViewData()
167170
{
168171
_applications = TelemetryRepository.GetApplications();
169172

173+
Logger.LogInformation("Getting trace '{TraceId}'.", TraceId);
170174
_trace = (TraceId != null) ? TelemetryRepository.GetTrace(TraceId) : null;
171175

172176
if (_trace == null)
173177
{
178+
Logger.LogInformation("Couldn't find trace '{TraceId}'.", TraceId);
174179
_spanWaterfallViewModels = null;
175180
_maxDepth = 0;
176181
return;
177182
}
178183

184+
Logger.LogInformation("Trace '{TraceId}' has {SpanCount} spans.", _trace.TraceId, _trace.Spans.Count);
179185
_spanWaterfallViewModels = SpanWaterfallViewModel.Create(_trace, new SpanWaterfallViewModel.TraceDetailState(OutgoingPeerResolvers, _collapsedSpanIds));
180186
_maxDepth = _spanWaterfallViewModels.Max(s => s.Depth);
181187
}

tests/Aspire.Dashboard.Components.Tests/Pages/TraceDetailsTests.cs

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
using Aspire.Dashboard.Model.Otlp;
1212
using Aspire.Dashboard.Otlp.Model;
1313
using Aspire.Dashboard.Otlp.Storage;
14-
using Aspire.TestUtilities;
1514
using Bunit;
1615
using Google.Protobuf.Collections;
1716
using Microsoft.AspNetCore.InternalTesting;
@@ -31,6 +30,13 @@ public partial class TraceDetailsTests : DashboardTestContext
3130
{
3231
private static readonly DateTime s_testTime = new(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
3332

33+
private readonly ITestOutputHelper _testOutputHelper;
34+
35+
public TraceDetailsTests(ITestOutputHelper testOutputHelper)
36+
{
37+
_testOutputHelper = testOutputHelper;
38+
}
39+
3440
[Fact]
3541
public void Render_HasTrace_SubscriptionRemovedOnDispose()
3642
{
@@ -83,11 +89,13 @@ public void Render_HasTrace_SubscriptionRemovedOnDispose()
8389
}
8490

8591
[Fact]
86-
[QuarantinedTest("https://github.com/dotnet/aspire/issues/8546")]
8792
public async Task Render_ChangeTrace_RowsRendered()
8893
{
8994
// Arrange
90-
SetupTraceDetailsServices();
95+
var loggerFactory = IntegrationTestHelpers.CreateLoggerFactory(_testOutputHelper);
96+
var logger = loggerFactory.CreateLogger(nameof(Render_ChangeTrace_RowsRendered));
97+
98+
SetupTraceDetailsServices(loggerFactory: loggerFactory);
9199

92100
var viewport = new ViewportInformation(IsDesktop: true, IsUltraLowHeight: false, IsUltraLowWidth: false);
93101

@@ -125,21 +133,30 @@ public async Task Render_ChangeTrace_RowsRendered()
125133
});
126134

127135
// Assert
128-
var grid = cut.FindComponent<FluentDataGrid<SpanWaterfallViewModel>>();
129-
var rows = grid.FindAll(".fluent-data-grid-row", enableAutoRefresh: true);
130-
131-
await AsyncTestHelpers.AssertIsTrueRetryAsync(() => rows.Count == 3, "Expected rows to be rendered.");
136+
logger.LogInformation($"Assert row count for '{traceId}'");
137+
await AsyncTestHelpers.AssertIsTrueRetryAsync(() =>
138+
{
139+
var grid = cut.FindComponent<FluentDataGrid<SpanWaterfallViewModel>>();
140+
var rows = grid.FindAll(".fluent-data-grid-row");
141+
return rows.Count == 3;
142+
}, "Expected rows to be rendered.", logger);
132143

133144
traceId = Convert.ToHexString(Encoding.UTF8.GetBytes("2"));
134145
cut.SetParametersAndRender(builder =>
135146
{
136147
builder.Add(p => p.TraceId, traceId);
137148
});
138149

139-
await AsyncTestHelpers.AssertIsTrueRetryAsync(() => rows.Count == 2, "Expected rows to be rendered.");
150+
logger.LogInformation($"Assert row count for '{traceId}'");
151+
await AsyncTestHelpers.AssertIsTrueRetryAsync(() =>
152+
{
153+
var grid = cut.FindComponent<FluentDataGrid<SpanWaterfallViewModel>>();
154+
var rows = grid.FindAll(".fluent-data-grid-row");
155+
return rows.Count == 2;
156+
}, "Expected rows to be rendered.", logger);
140157
}
141158

142-
private void SetupTraceDetailsServices()
159+
private void SetupTraceDetailsServices(ILoggerFactory? loggerFactory = null)
143160
{
144161
var version = typeof(FluentMain).Assembly.GetName().Version!;
145162

@@ -170,14 +187,16 @@ private void SetupTraceDetailsServices()
170187

171188
JSInterop.SetupVoid("initializeContinuousScroll");
172189

190+
loggerFactory ??= NullLoggerFactory.Instance;
191+
173192
Services.AddLocalization();
174193
Services.AddSingleton<BrowserTimeProvider, TestTimeProvider>();
175194
Services.AddSingleton<PauseManager>();
176195
Services.AddSingleton<TelemetryRepository>();
177196
Services.AddSingleton<IMessageService, MessageService>();
178197
Services.AddSingleton<IOptions<DashboardOptions>>(Options.Create(new DashboardOptions()));
179198
Services.AddSingleton<DimensionManager>();
180-
Services.AddSingleton<ILogger<StructuredLogs>>(NullLogger<StructuredLogs>.Instance);
199+
Services.AddSingleton<ILoggerFactory>(loggerFactory);
181200
Services.AddSingleton<IDialogService, DialogService>();
182201
Services.AddSingleton<ISessionStorage, TestSessionStorage>();
183202
Services.AddSingleton<ILocalStorage, TestLocalStorage>();

0 commit comments

Comments
 (0)