Skip to content

Commit 1bb8169

Browse files
authored
Fix ScaleHostEndToEndTest for ServiceBus (Azure#37020)
* Enable tests * Disposing ScaleHost * Try to ignore * Disposing host * Adding exception stack * Fix exceptions logs * Remove comment * Remove stack from log message
1 parent aa63fec commit 1bb8169

File tree

2 files changed

+52
-47
lines changed

2 files changed

+52
-47
lines changed

sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Listeners/ServiceBusMetricsProvider.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,13 +96,13 @@ public async Task<long> GetMessageCountAsync()
9696
{
9797
if (TimeToLogWarning())
9898
{
99-
_logger.LogWarning($"Connection string does not have 'Manage Claim' for {entityName} '{_entityPath}'. Unable to determine active message count.", ex);
99+
_logger.LogWarning(ex, $"Connection string does not have 'Manage Claim' for {entityName} '{_entityPath}'. Unable to determine active message count.");
100100
}
101101
throw ex;
102102
}
103103
catch (Exception e)
104104
{
105-
_logger.LogWarning($"Error querying for Service Bus {entityName} scale status: {e.Message}");
105+
_logger.LogWarning(e, $"Error querying for Service Bus {entityName} scale");
106106
}
107107

108108
long totalNewMessageCount = 0;

sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/tests/ScaleHostEndToEndTests.cs

Lines changed: 50 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ public ScaleHostEndToEndTests() : base(isSession: false)
3131
}
3232

3333
[Test]
34-
[Ignore("Consistently failing in CI; awaiting investigation")]
3534
[TestCase(false)]
3635
[TestCase(true)]
3736
public async Task ScaleHostEndToEndTest(bool tbsEnabled)
@@ -68,9 +67,12 @@ public async Task ScaleHostEndToEndTest(bool tbsEnabled)
6867
}}
6968
]}}";
7069

71-
IHost host = new HostBuilder().ConfigureServices(services => services.AddAzureClientsCore()).Build();
72-
AzureComponentFactory defaultAzureComponentFactory = host.Services.GetService<AzureComponentFactory>();
73-
TestComponentFactory factoryWrapper = new TestComponentFactory(defaultAzureComponentFactory, ServiceBusTestEnvironment.Instance.Credential);
70+
TestComponentFactory factoryWrapper = null;
71+
using (IHost host = new HostBuilder().ConfigureServices(services => services.AddAzureClientsCore()).Build())
72+
{
73+
AzureComponentFactory defaultAzureComponentFactory = host.Services.GetService<AzureComponentFactory>();
74+
factoryWrapper = new TestComponentFactory(defaultAzureComponentFactory, ServiceBusTestEnvironment.Instance.Credential);
75+
}
7476

7577
string hostId = "test-host";
7678
var loggerProvider = new TestLoggerProvider();
@@ -125,60 +127,63 @@ public async Task ScaleHostEndToEndTest(bool tbsEnabled)
125127
scaleOptions.ScaleMetricsSampleInterval = TimeSpan.FromSeconds(1);
126128
});
127129

128-
IHost scaleHost = hostBuilder.Build();
129-
await scaleHost.StartAsync();
130-
131-
// add some messages to the queue
132-
await WriteQueueMessage("test");
133-
await WriteQueueMessage("test");
134-
await WriteQueueMessage("test", queueName: SecondQueueScope.QueueName);
135-
await WriteQueueMessage("test", queueName: SecondQueueScope.QueueName);
136-
await WriteQueueMessage("test", queueName: SecondQueueScope.QueueName);
137-
138-
await TestHelpers.Await(async () =>
130+
using (IHost scaleHost = hostBuilder.Build())
139131
{
140-
IScaleStatusProvider scaleManager = scaleHost.Services.GetService<IScaleStatusProvider>();
132+
await scaleHost.StartAsync();
141133

142-
var scaleStatus = await scaleManager.GetScaleStatusAsync(new ScaleStatusContext());
134+
// add some messages to the queue
135+
await WriteQueueMessage("test");
136+
await WriteQueueMessage("test");
137+
await WriteQueueMessage("test", queueName: SecondQueueScope.QueueName);
138+
await WriteQueueMessage("test", queueName: SecondQueueScope.QueueName);
139+
await WriteQueueMessage("test", queueName: SecondQueueScope.QueueName);
143140

144-
bool scaledOut = false;
145-
if (!tbsEnabled)
141+
await TestHelpers.Await(async () =>
146142
{
147-
scaledOut = scaleStatus.Vote == ScaleVote.ScaleOut && scaleStatus.TargetWorkerCount == null
148-
&& scaleStatus.FunctionScaleStatuses[Function1Name].Vote == ScaleVote.ScaleOut
149-
&& scaleStatus.FunctionScaleStatuses[Function2Name].Vote == ScaleVote.ScaleOut;
143+
IScaleStatusProvider scaleManager = scaleHost.Services.GetService<IScaleStatusProvider>();
150144

151-
if (scaledOut)
145+
var scaleStatus = await scaleManager.GetScaleStatusAsync(new ScaleStatusContext());
146+
147+
bool scaledOut = false;
148+
if (!tbsEnabled)
152149
{
153-
var logMessages = loggerProvider.GetAllLogMessages().Select(p => p.FormattedMessage).ToArray();
154-
Assert.Contains("2 scale monitors to sample", logMessages);
150+
scaledOut = scaleStatus.Vote == ScaleVote.ScaleOut && scaleStatus.TargetWorkerCount == null
151+
&& scaleStatus.FunctionScaleStatuses[Function1Name].Vote == ScaleVote.ScaleOut
152+
&& scaleStatus.FunctionScaleStatuses[Function2Name].Vote == ScaleVote.ScaleOut;
153+
154+
if (scaledOut)
155+
{
156+
var logMessages = loggerProvider.GetAllLogMessages().Select(p => p.FormattedMessage).ToArray();
157+
Assert.Contains("2 scale monitors to sample", logMessages);
158+
}
155159
}
156-
}
157-
else
158-
{
159-
scaledOut = scaleStatus.Vote == ScaleVote.ScaleOut && scaleStatus.TargetWorkerCount == 3
160-
&& scaleStatus.FunctionTargetScalerResults[Function1Name].TargetWorkerCount == 2
161-
&& scaleStatus.FunctionTargetScalerResults[Function2Name].TargetWorkerCount == 3;
162-
163-
if (scaledOut)
160+
else
164161
{
165-
var logMessages = loggerProvider.GetAllLogMessages().Select(p => p.FormattedMessage).ToArray();
166-
Assert.Contains("2 target scalers to sample", logMessages);
162+
scaledOut = scaleStatus.Vote == ScaleVote.ScaleOut && scaleStatus.TargetWorkerCount == 3
163+
&& scaleStatus.FunctionTargetScalerResults[Function1Name].TargetWorkerCount == 2
164+
&& scaleStatus.FunctionTargetScalerResults[Function2Name].TargetWorkerCount == 3;
165+
166+
if (scaledOut)
167+
{
168+
var logMessages = loggerProvider.GetAllLogMessages().Select(p => p.FormattedMessage).ToArray();
169+
Assert.Contains("2 target scalers to sample", logMessages);
170+
}
167171
}
168-
}
169172

170-
if (scaledOut)
171-
{
172-
var logMessages = loggerProvider.GetAllLogMessages().Select(p => p.FormattedMessage).ToArray();
173-
Assert.IsNotEmpty(logMessages.Where(x => x.StartsWith("Runtime scale monitoring is enabled.")));
174-
if (!tbsEnabled)
173+
if (scaledOut)
175174
{
176-
Assert.Contains("Scaling out based on votes", logMessages);
175+
var logMessages = loggerProvider.GetAllLogMessages().Select(p => p.FormattedMessage).ToArray();
176+
Assert.IsNotEmpty(logMessages.Where(x => x.StartsWith("Runtime scale monitoring is enabled.")));
177+
if (!tbsEnabled)
178+
{
179+
Assert.Contains("Scaling out based on votes", logMessages);
180+
}
177181
}
178-
}
179182

180-
return scaledOut;
181-
}, pollingInterval: 2000, timeout: 180000, throwWhenDebugging: true);
183+
return scaledOut;
184+
}, pollingInterval: 2000, timeout: 180000, throwWhenDebugging: true);
185+
await scaleHost.StopAsync();
186+
}
182187
}
183188
}
184189
}

0 commit comments

Comments
 (0)