Skip to content

Commit 8dac1a3

Browse files
committed
Added transport extension method diagnostics
1 parent b6d98d0 commit 8dac1a3

2 files changed

Lines changed: 94 additions & 0 deletions

File tree

src/NServiceBus.AzureFunctions.Analyzer.Tests/AzureFunctionsConfigurationAnalyzerTests.cs

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,5 +300,77 @@ void Bar(ServiceBusTriggeredEndpointConfiguration endpointConfig)
300300

301301
return Assert(AzureFunctionsDiagnostics.TimeToWaitBeforeTriggeringCircuitBreakerNotAllowedId, source);
302302
}
303+
304+
[Test]
305+
public Task DiagnosticIsReportedForPrefetchCountAsExtension()
306+
{
307+
var source =
308+
$@"using NServiceBus;
309+
using System;
310+
using System.Threading.Tasks;
311+
class Foo
312+
{{
313+
void Bar(TransportExtensions<AzureServiceBusTransport> transportExtension)
314+
{{
315+
[|transportExtension.PrefetchCount(5)|];
316+
}}
317+
}}";
318+
319+
return Assert(AzureFunctionsDiagnostics.PrefetchCountNotAllowedId, source);
320+
}
321+
322+
[Test]
323+
public Task DiagnosticIsReportedForPrefetchMultiplierAsExtension()
324+
{
325+
var source =
326+
$@"using NServiceBus;
327+
using System;
328+
using System.Threading.Tasks;
329+
class Foo
330+
{{
331+
void Bar(TransportExtensions<AzureServiceBusTransport> transportExtension)
332+
{{
333+
[|transportExtension.PrefetchMultiplier(5)|];
334+
}}
335+
}}";
336+
337+
return Assert(AzureFunctionsDiagnostics.PrefetchMultiplierNotAllowedId, source);
338+
}
339+
340+
[Test]
341+
public Task DiagnosticIsReportedForMaxAutoLockRenewalDurationAsExtension()
342+
{
343+
var source =
344+
$@"using NServiceBus;
345+
using System;
346+
using System.Threading.Tasks;
347+
class Foo
348+
{{
349+
void Bar(TransportExtensions<AzureServiceBusTransport> transportExtension)
350+
{{
351+
[|transportExtension.MaxAutoLockRenewalDuration(new System.TimeSpan(0, 0, 5, 0))|];
352+
}}
353+
}}";
354+
355+
return Assert(AzureFunctionsDiagnostics.MaxAutoLockRenewalDurationNotAllowedId, source);
356+
}
357+
358+
[Test]
359+
public Task DiagnosticIsReportedForTimeToWaitBeforeTriggeringCircuitBreakerAsExtension()
360+
{
361+
var source =
362+
$@"using NServiceBus;
363+
using System;
364+
using System.Threading.Tasks;
365+
class Foo
366+
{{
367+
void Bar(TransportExtensions<AzureServiceBusTransport> transportExtension)
368+
{{
369+
[|transportExtension.TimeToWaitBeforeTriggeringCircuitBreaker(new System.TimeSpan(0, 0, 5, 0))|];
370+
}}
371+
}}";
372+
373+
return Assert(AzureFunctionsDiagnostics.TimeToWaitBeforeTriggeringCircuitBreakerNotAllowedId, source);
374+
}
303375
}
304376
}

src/NServiceBus.AzureFunctions.Analyzer/AzureFunctionsConfigurationAnalyzer.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ static void Analyze(SyntaxNodeAnalysisContext context)
8080
AnalyzeEndpointConfiguration(context, invocationExpression, memberAccessExpression);
8181

8282
AnalyzeSendAndReplyOptions(context, invocationExpression, memberAccessExpression);
83+
84+
AnalyzeTransportExtensions(context, invocationExpression, memberAccessExpression);
8385
}
8486

8587
static void AnalyzeTransport(SyntaxNodeAnalysisContext context)
@@ -148,5 +150,25 @@ static void AnalyzeSendAndReplyOptions(SyntaxNodeAnalysisContext context, Invoca
148150
context.ReportDiagnostic(diagnosticDescriptor, invocationExpression);
149151
}
150152
}
153+
154+
static void AnalyzeTransportExtensions(SyntaxNodeAnalysisContext context, InvocationExpressionSyntax invocationExpression, MemberAccessExpressionSyntax memberAccessExpression)
155+
{
156+
if (!NotAllowedTransportSettings.TryGetValue(memberAccessExpression.Name.Identifier.Text, out var diagnosticDescriptor))
157+
{
158+
return;
159+
}
160+
161+
var memberAccessSymbol = context.SemanticModel.GetSymbolInfo(memberAccessExpression, context.CancellationToken);
162+
163+
if (!(memberAccessSymbol.Symbol is IMethodSymbol methodSymbol))
164+
{
165+
return;
166+
}
167+
168+
if (methodSymbol.ReceiverType.ToString() == "NServiceBus.TransportExtensions<NServiceBus.AzureServiceBusTransport>")
169+
{
170+
context.ReportDiagnostic(diagnosticDescriptor, invocationExpression);
171+
}
172+
}
151173
}
152174
}

0 commit comments

Comments
 (0)