diff --git a/src/MinimalLambda.OpenTelemetry/LambdaOpenTelemetryAdapters.cs b/src/MinimalLambda.OpenTelemetry/LambdaOpenTelemetryAdapters.cs
deleted file mode 100644
index f7663547..00000000
--- a/src/MinimalLambda.OpenTelemetry/LambdaOpenTelemetryAdapters.cs
+++ /dev/null
@@ -1,231 +0,0 @@
-using Amazon.Lambda.Core;
-using MinimalLambda;
-using OpenTelemetry.Instrumentation.AWSLambda;
-using OpenTelemetry.Trace;
-
-namespace Microsoft.Extensions.DependencyInjection;
-
-///
-/// Provides extension methods for integrating OpenTelemetry tracing with AWS Lambda
-/// invocations.
-///
-public static class LambdaOpenTelemetryServiceProviderExtensions
-{
- extension(IServiceProvider services)
- {
- ///
- /// Creates a middleware function that traces Lambda invocations with both event and response
- /// types.
- ///
- /// The type of the Lambda event expected in the context.
- /// The type of the Lambda response expected in the context.
- /// A middleware function that wraps the Lambda invocation with OpenTelemetry tracing.
- ///
- ///
- /// Important: These methods are primarily intended to be used by source generators
- /// and interceptors. Direct usage is not recommended. Source generation and interception are
- /// the primary use cases for automatic tracing integration.
- ///
- ///
- /// Uses the registered to wrap Lambda invocations with
- /// distributed tracing capabilities through AWS Lambda instrumentation. This method is a
- /// wrapper around from
- /// the
- /// OpenTelemetry.Instrumentation.AWSLambda
- /// NuGet package.
- ///
- ///
- /// The context must contain an event of type and the handler
- /// must set a response of type .
- ///
- ///
- /// TracerProvider Registration Required: A instance
- /// must be registered in the dependency injection container before calling these methods.
- /// Failure to register a will result in an
- /// being thrown at startup.
- ///
- ///
- ///
- /// Thrown if the context event is not of type
- /// or if the context response is not of type
- /// , or if a instance is not
- /// registered in the dependency injection container.
- ///
- [Obsolete(
- "This method will be removed in v2.0.0 Use UseOpenTelemetryTracing directly instead."
- )]
- public Func GetOpenTelemetryTracer<
- TEvent,
- TResponse
- >()
- {
- ArgumentNullException.ThrowIfNull(services);
-
- var tracerProvider = services.GetRequiredService();
-
- return next =>
- {
- return async context =>
- {
- if (
- context.Features.Get()?.GetEvent(context)
- is not TEvent eventT
- )
- throw new InvalidOperationException(
- $"Lambda event of type '{typeof(TEvent).FullName}' is not available in the context."
- );
-
- await AWSLambdaWrapper.TraceAsync(
- tracerProvider,
- async Task (_, _) =>
- {
- await next(context);
-
- if (
- context.Features.Get()?.GetResponse()
- is not TResponse responseT
- )
- throw new InvalidOperationException(
- $"Lambda response of type '{typeof(TResponse).FullName}' is not available in the context."
- );
-
- return responseT;
- },
- eventT,
- context
- );
- };
- };
- }
-
- /// Creates a middleware function that traces Lambda invocations with only a response type.
- /// The type of the Lambda response expected in the context.
- ///
- ///
- /// The event
- /// type is not relevant or known when using this overload.
- ///
- ///
- /// Thrown if the context response is not of type
- /// .
- ///
- [Obsolete(
- "This method will be removed in v2.0.0 Use UseOpenTelemetryTracing directly instead."
- )]
- public Func<
- LambdaInvocationDelegate,
- LambdaInvocationDelegate
- > GetOpenTelemetryTracerNoEvent()
- {
- ArgumentNullException.ThrowIfNull(services);
-
- var tracerProvider = services.GetRequiredService();
-
- return next =>
- {
- return async context =>
- {
- await AWSLambdaWrapper.TraceAsync(
- tracerProvider,
- async Task (object? _, ILambdaContext _) =>
- {
- await next(context);
-
- if (
- context.Features.Get()?.GetResponse()
- is not TResponse responseT
- )
- throw new InvalidOperationException(
- $"Lambda response of type '{typeof(TResponse).FullName}' is not available in the context."
- );
-
- return responseT;
- },
- null,
- context
- );
- };
- };
- }
-
- /// Creates a middleware function that traces Lambda invocations with only an event type.
- /// The type of the Lambda event expected in the context.
- ///
- ///
- /// The
- /// response type is not relevant or known when using this overload.
- ///
- ///
- /// Thrown if the context event is not of type
- /// .
- ///
- [Obsolete(
- "This method will be removed in v2.0.0 Use UseOpenTelemetryTracing directly instead."
- )]
- public Func<
- LambdaInvocationDelegate,
- LambdaInvocationDelegate
- > GetOpenTelemetryTracerNoResponse()
- {
- ArgumentNullException.ThrowIfNull(services);
-
- var tracerProvider = services.GetRequiredService();
-
- return next =>
- {
- return async context =>
- {
- if (
- context.Features.Get()?.GetEvent(context)
- is not TEvent eventT
- )
- throw new InvalidOperationException(
- $"Lambda event of type '{typeof(TEvent).FullName}' is not available in the context."
- );
-
- await AWSLambdaWrapper.TraceAsync(
- tracerProvider,
- async Task (_, _) => await next(context),
- eventT,
- context
- );
- };
- };
- }
-
- ///
- /// Creates a middleware function that traces Lambda invocations without specific event or
- /// response types.
- ///
- ///
- ///
- /// Neither
- /// event nor response types are relevant or known when using this overload.
- ///
- [Obsolete(
- "This method will be removed in v2.0.0 Use UseOpenTelemetryTracing directly instead."
- )]
- public Func<
- LambdaInvocationDelegate,
- LambdaInvocationDelegate
- > GetOpenTelemetryTracerNoEventNoResponse()
- {
- ArgumentNullException.ThrowIfNull(services);
-
- var tracerProvider = services.GetRequiredService();
-
- return next =>
- {
- return async context =>
- {
- await AWSLambdaWrapper.TraceAsync(
- tracerProvider,
- async Task (object? _, ILambdaContext _) => await next(context),
- null,
- context
- );
- };
- };
- }
- }
-}
diff --git a/src/MinimalLambda.SourceGenerators/MapHandlerIncrementalGenerator.cs b/src/MinimalLambda.SourceGenerators/MapHandlerIncrementalGenerator.cs
index 7484b1c1..09b1f8d9 100644
--- a/src/MinimalLambda.SourceGenerators/MapHandlerIncrementalGenerator.cs
+++ b/src/MinimalLambda.SourceGenerators/MapHandlerIncrementalGenerator.cs
@@ -77,15 +77,6 @@ is CSharpCompilation
.Where(static m => m is not null)
.Select(static (m, _) => m!.Value);
- // find any calls to `UseOpenTelemetryTracing` and extract the location
- var openTelemetryTracingCalls = context
- .SyntaxProvider.CreateSyntaxProvider(
- UseOpenTelemetryTracingSyntaxProvider.Predicate,
- UseOpenTelemetryTracingSyntaxProvider.Transformer
- )
- .Where(static m => m is not null)
- .Select(static (m, _) => m!.Value);
-
// find LambdaApplicationBuilder.Build() calls
var lambdaApplicationBuilderBuildCalls = context
.SyntaxProvider.CreateSyntaxProvider(
@@ -99,7 +90,6 @@ is CSharpCompilation
var mapHandlerCallsCollected = mapHandlerCalls.Collect();
var onShutdownCallsCollected = onShutdownCalls.Collect();
var onInitCallsCollected = onInitCalls.Collect();
- var openTelemetryTracingCallsCollected = openTelemetryTracingCalls.Collect();
var lambdaApplicationBuilderBuildCallsCollected =
lambdaApplicationBuilderBuildCalls.Collect();
@@ -107,14 +97,12 @@ is CSharpCompilation
var combined = mapHandlerCallsCollected
.Combine(onShutdownCallsCollected)
.Combine(onInitCallsCollected)
- .Combine(openTelemetryTracingCallsCollected)
.Combine(lambdaApplicationBuilderBuildCallsCollected)
.Select(
CompilationInfo? (t, _) =>
{
if (
- t.Left.Left.Left.Left.Length == 0
- && t.Left.Left.Left.Right.Length == 0
+ t.Left.Left.Left.Length == 0
&& t.Left.Left.Right.Length == 0
&& t.Left.Right.Length == 0
&& t.Right.Length == 0
@@ -122,8 +110,7 @@ is CSharpCompilation
return null;
return new CompilationInfo(
- t.Left.Left.Left.Left.ToEquatableArray(),
- t.Left.Left.Left.Right.ToEquatableArray(),
+ t.Left.Left.Left.ToEquatableArray(),
t.Left.Left.Right.ToEquatableArray(),
t.Left.Right.ToEquatableArray(),
t.Right.ToEquatableArray()
diff --git a/src/MinimalLambda.SourceGenerators/Models/CompilationInfo.cs b/src/MinimalLambda.SourceGenerators/Models/CompilationInfo.cs
index 871699c8..f168b3e3 100644
--- a/src/MinimalLambda.SourceGenerators/Models/CompilationInfo.cs
+++ b/src/MinimalLambda.SourceGenerators/Models/CompilationInfo.cs
@@ -6,6 +6,5 @@ internal readonly record struct CompilationInfo(
EquatableArray MapHandlerInvocationInfos,
EquatableArray OnShutdownInvocationInfos,
EquatableArray OnInitInvocationInfos,
- EquatableArray UseOpenTelemetryTracingInfos,
- EquatableArray BuilderInfos = default
+ EquatableArray BuilderInfos
);
diff --git a/src/MinimalLambda.SourceGenerators/SyntaxProviders/LambdaApplicationBuilderBuildSyntaxProvider.cs b/src/MinimalLambda.SourceGenerators/SyntaxProviders/LambdaApplicationBuilderBuildSyntaxProvider.cs
index ae329bd4..aec95558 100644
--- a/src/MinimalLambda.SourceGenerators/SyntaxProviders/LambdaApplicationBuilderBuildSyntaxProvider.cs
+++ b/src/MinimalLambda.SourceGenerators/SyntaxProviders/LambdaApplicationBuilderBuildSyntaxProvider.cs
@@ -30,11 +30,7 @@ is IInvocationOperation
{
Name: "Builder",
ContainingNamespace:
- {
- Name: "Host",
- ContainingNamespace:
- { Name: "AwsLambda", ContainingNamespace.IsGlobalNamespace: true },
- },
+ { Name: "MinimalLambda", ContainingNamespace.IsGlobalNamespace: true },
},
},
} targetOperation
diff --git a/src/MinimalLambda.SourceGenerators/SyntaxProviders/UseOpenTelemetryTracingSyntaxProvider.cs b/src/MinimalLambda.SourceGenerators/SyntaxProviders/UseOpenTelemetryTracingSyntaxProvider.cs
deleted file mode 100644
index 1ab88a45..00000000
--- a/src/MinimalLambda.SourceGenerators/SyntaxProviders/UseOpenTelemetryTracingSyntaxProvider.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-using System.Threading;
-using Microsoft.CodeAnalysis;
-using Microsoft.CodeAnalysis.CSharp;
-using Microsoft.CodeAnalysis.CSharp.Syntax;
-using Microsoft.CodeAnalysis.Operations;
-using MinimalLambda.SourceGenerators.Models;
-
-namespace MinimalLambda.SourceGenerators;
-
-internal static class UseOpenTelemetryTracingSyntaxProvider
-{
- internal static bool Predicate(SyntaxNode node, CancellationToken _) =>
- node.TryGetMethodName(out var name)
- && name == GeneratorConstants.UseOpenTelemetryTracingMethodName;
-
- internal static SimpleMethodInfo? Transformer(
- GeneratorSyntaxContext context,
- CancellationToken cancellationToken
- )
- {
- var operation = context.SemanticModel.GetOperation(context.Node, cancellationToken);
-
- if (
- operation
- is IInvocationOperation
- {
- TargetMethod.ContainingNamespace:
- {
- Name: "Builder",
- ContainingNamespace:
- {
- Name: "Host",
- ContainingNamespace:
- { Name: "AwsLambda", ContainingNamespace.IsGlobalNamespace: true },
- },
- },
- } targetOperation
- && targetOperation.TargetMethod.ContainingAssembly.Name == "MinimalLambda.OpenTelemetry"
- )
- {
- var interceptableLocation = context.SemanticModel.GetInterceptableLocation(
- (InvocationExpressionSyntax)targetOperation.Syntax,
- cancellationToken
- )!;
-
- return new SimpleMethodInfo(
- targetOperation.TargetMethod.Name,
- LocationInfo.CreateFrom(context.Node),
- InterceptableLocationInfo.CreateFrom(interceptableLocation)
- );
- }
-
- return null;
- }
-}
diff --git a/src/MinimalLambda/Core/Options/LambdaHostOptions.cs b/src/MinimalLambda/Core/Options/LambdaHostOptions.cs
index 9b50512d..c9d45807 100644
--- a/src/MinimalLambda/Core/Options/LambdaHostOptions.cs
+++ b/src/MinimalLambda/Core/Options/LambdaHostOptions.cs
@@ -6,22 +6,6 @@ namespace MinimalLambda.Options;
/// Options for configuring Lambda hosting behavior.
public class LambdaHostOptions
{
- /// Gets or sets an optional custom HTTP client for the Lambda bootstrap.
- ///
- /// When null, the bootstrap will create its own HTTP client for communicating with the Lambda
- /// runtime API. This property will be overridden by keyed service registrations from
- /// or
- ///
- /// extension methods.
- ///
- [Obsolete(
- "This property will be removed in version 2.0.0. Use "
- + "AddLambdaBootstrapHttpClient() or TryAddLambdaBootstrapHttpClient() extension methods "
- + "instead.",
- false
- )]
- public HttpClient? BootstrapHttpClient { get; set; } = null;
-
/// Gets or sets the options for configuring the Lambda bootstrap behavior.
///
///
diff --git a/src/MinimalLambda/Runtime/LambdaBootstrapAdapter.cs b/src/MinimalLambda/Runtime/LambdaBootstrapAdapter.cs
index 3ed17e18..b9d4fff7 100644
--- a/src/MinimalLambda/Runtime/LambdaBootstrapAdapter.cs
+++ b/src/MinimalLambda/Runtime/LambdaBootstrapAdapter.cs
@@ -21,13 +21,7 @@ public LambdaBootstrapAdapter(
{
ArgumentNullException.ThrowIfNull(lambdaHostSettings);
- // TODO: Remove this check once ILambdaBootstrapOrchestrator.BootstrapHttpClient is removed.
- // until ILambdaBootstrapOrchestrator.BootstrapHttpClient is removed, we need to check for
- // it if the keyed service is NOT present.
-#pragma warning disable CS0618 // Type or member is obsolete
- _httpClient = httpClient ?? lambdaHostSettings.Value.BootstrapHttpClient;
-#pragma warning restore CS0618 // Type or member is obsolete
-
+ _httpClient = httpClient;
_settings = lambdaHostSettings.Value;
}
diff --git a/tests/MinimalLambda.OpenTelemetry.UnitTests/LambdaOpenTelemetryServiceProviderExtensionsTests.cs b/tests/MinimalLambda.OpenTelemetry.UnitTests/LambdaOpenTelemetryServiceProviderExtensionsTests.cs
deleted file mode 100644
index 22d5d446..00000000
--- a/tests/MinimalLambda.OpenTelemetry.UnitTests/LambdaOpenTelemetryServiceProviderExtensionsTests.cs
+++ /dev/null
@@ -1,459 +0,0 @@
-using Microsoft.Extensions.DependencyInjection;
-using MinimalLambda.UnitTests;
-using OpenTelemetry.Trace;
-
-namespace MinimalLambda.OpenTelemetry.UnitTests;
-
-[TestSubject(typeof(LambdaOpenTelemetryServiceProviderExtensions))]
-public class LambdaOpenTelemetryServiceProviderExtensionsTests
-{
- [Fact]
- public void GetOpenTelemetryTracer_WithNullServiceProvider_ThrowsArgumentNullException()
- {
- // Arrange
- IServiceProvider? nullProvider = null;
-
- // Act
- var action = () => nullProvider!.GetOpenTelemetryTracer();
-
- // Assert
- action.Should().ThrowExactly();
- }
-
- [Theory]
- [AutoNSubstituteData]
- public void GetOpenTelemetryTracer_WithoutTracerProvider_ThrowsInvalidOperationException(
- [Frozen] IServiceProvider serviceProvider
- )
- {
- // Arrange
- serviceProvider.GetService(typeof(TracerProvider)).Returns(null);
-
- // Act
- var action = () => serviceProvider.GetOpenTelemetryTracer();
-
- // Assert
- action.Should().ThrowExactly();
- }
-
- [Theory]
- [AutoNSubstituteData]
- public void GetOpenTelemetryTracer_ReturnsMiddlewareFunction(
- [Frozen] IServiceProvider serviceProvider,
- TracerProvider tracerProvider
- )
- {
- // Arrange
- serviceProvider.GetService(typeof(TracerProvider)).Returns(tracerProvider);
-
- // Act
- var middleware = serviceProvider.GetOpenTelemetryTracer();
-
- // Assert
- middleware.Should().NotBeNull();
- middleware.Should().BeOfType>();
- }
-
- [Theory]
- [AutoNSubstituteData]
- public async Task GetOpenTelemetryTracer_WithIncorrectEventType_ThrowsInvalidOperationException(
- [Frozen] IServiceProvider serviceProvider,
- TracerProvider tracerProvider,
- ILambdaHostContext context,
- IFeatureCollection features,
- IEventFeature eventFeature,
- IResponseFeature responseFeature
- )
- {
- // Arrange
- serviceProvider.GetService(typeof(TracerProvider)).Returns(tracerProvider);
- var middleware = serviceProvider.GetOpenTelemetryTracer();
- var nextDelegate = Substitute.For();
- var wrappedDelegate = middleware(nextDelegate);
-
- context.Features.Returns(features);
- features.Get().Returns(eventFeature);
- features.Get().Returns(responseFeature);
- eventFeature.GetEvent(context).Returns(new object());
-
- // Act
- var action = async () => await wrappedDelegate(context);
-
- // Assert
- await action.Should().ThrowAsync();
- }
-
- [Theory]
- [AutoNSubstituteData]
- public async Task GetOpenTelemetryTracer_WithIncorrectResponseType_ThrowsInvalidOperationException(
- [Frozen] IServiceProvider serviceProvider,
- TracerProvider tracerProvider,
- ILambdaHostContext context,
- IFeatureCollection features,
- IEventFeature eventFeature,
- IResponseFeature responseFeature
- )
- {
- // Arrange
- serviceProvider.GetService(typeof(TracerProvider)).Returns(tracerProvider);
- var middleware = serviceProvider.GetOpenTelemetryTracer();
- var nextDelegate = Substitute.For();
- var wrappedDelegate = middleware(nextDelegate);
-
- context.Features.Returns(features);
- features.Get().Returns(eventFeature);
- features.Get().Returns(responseFeature);
- eventFeature.GetEvent(context).Returns(new TestEvent());
- responseFeature.GetResponse().Returns(new object()); // Wrong type
-
- nextDelegate(Arg.Any()).Returns(Task.CompletedTask);
-
- // Act
- var action = async () => await wrappedDelegate(context);
-
- // Assert
- await action.Should().ThrowAsync();
- }
-
- [Theory]
- [AutoNSubstituteData]
- public async Task GetOpenTelemetryTracer_WithValidEventAndResponse_CallsNextDelegate(
- [Frozen] IServiceProvider serviceProvider,
- TracerProvider tracerProvider,
- ILambdaHostContext context,
- IFeatureCollection features,
- IEventFeature eventFeature,
- IResponseFeature responseFeature
- )
- {
- // Arrange
- serviceProvider.GetService(typeof(TracerProvider)).Returns(tracerProvider);
- var middleware = serviceProvider.GetOpenTelemetryTracer();
- var nextDelegate = Substitute.For();
- var wrappedDelegate = middleware(nextDelegate);
-
- var testEvent = new TestEvent();
- var testResponse = new TestResponse();
-
- context.Features.Returns(features);
- features.Get().Returns(eventFeature);
- features.Get().Returns(responseFeature);
- eventFeature.GetEvent(context).Returns(testEvent);
- responseFeature.GetResponse().Returns(testResponse);
-
- nextDelegate(Arg.Any()).Returns(Task.CompletedTask);
-
- // Act
- await wrappedDelegate(context);
-
- // Assert
- await nextDelegate.Received(1)(Arg.Any());
- }
-
- [Fact]
- public void GetOpenTelemetryTracerNoEvent_WithNullServiceProvider_ThrowsArgumentNullException()
- {
- // Arrange
- IServiceProvider? nullProvider = null;
-
- // Act
- var action = () => nullProvider!.GetOpenTelemetryTracerNoEvent();
-
- // Assert
- action.Should().ThrowExactly();
- }
-
- [Theory]
- [AutoNSubstituteData]
- public void GetOpenTelemetryTracerNoEvent_WithoutTracerProvider_ThrowsInvalidOperationException(
- [Frozen] IServiceProvider serviceProvider
- )
- {
- // Arrange
- serviceProvider.GetService(typeof(TracerProvider)).Returns(null);
-
- // Act
- var action = () => serviceProvider.GetOpenTelemetryTracerNoEvent();
-
- // Assert
- action.Should().ThrowExactly();
- }
-
- [Theory]
- [AutoNSubstituteData]
- public void GetOpenTelemetryTracerNoEvent_ReturnsMiddlewareFunction(
- [Frozen] IServiceProvider serviceProvider,
- TracerProvider tracerProvider
- )
- {
- // Arrange
- serviceProvider.GetService(typeof(TracerProvider)).Returns(tracerProvider);
-
- // Act
- var middleware = serviceProvider.GetOpenTelemetryTracerNoEvent();
-
- // Assert
- middleware.Should().NotBeNull();
- middleware.Should().BeOfType>();
- }
-
- [Theory]
- [AutoNSubstituteData]
- public async Task GetOpenTelemetryTracerNoEvent_WithIncorrectResponseType_ThrowsInvalidOperationException(
- [Frozen] IServiceProvider serviceProvider,
- TracerProvider tracerProvider,
- ILambdaHostContext context,
- IFeatureCollection features,
- IEventFeature eventFeature,
- IResponseFeature responseFeature
- )
- {
- // Arrange
- serviceProvider.GetService(typeof(TracerProvider)).Returns(tracerProvider);
- var middleware = serviceProvider.GetOpenTelemetryTracerNoEvent();
- var nextDelegate = Substitute.For();
- var wrappedDelegate = middleware(nextDelegate);
-
- context.Features.Returns(features);
- features.Get().Returns(eventFeature);
- features.Get().Returns(responseFeature);
- eventFeature.GetEvent(context).Returns(new object());
- responseFeature.GetResponse().Returns(new object()); // Wrong type
-
- nextDelegate(Arg.Any()).Returns(Task.CompletedTask);
-
- // Act
- var action = async () => await wrappedDelegate(context);
-
- // Assert
- await action.Should().ThrowAsync();
- }
-
- [Theory]
- [AutoNSubstituteData]
- public async Task GetOpenTelemetryTracerNoEvent_WithValidResponse_CallsNextDelegate(
- [Frozen] IServiceProvider serviceProvider,
- TracerProvider tracerProvider,
- ILambdaHostContext context,
- IFeatureCollection features,
- IEventFeature eventFeature,
- IResponseFeature responseFeature
- )
- {
- // Arrange
- serviceProvider.GetService(typeof(TracerProvider)).Returns(tracerProvider);
- var middleware = serviceProvider.GetOpenTelemetryTracerNoEvent();
- var nextDelegate = Substitute.For();
- var wrappedDelegate = middleware(nextDelegate);
-
- var testResponse = new TestResponse();
-
- context.Features.Returns(features);
- features.Get().Returns(eventFeature);
- features.Get().Returns(responseFeature);
- eventFeature.GetEvent(context).Returns(new object());
- responseFeature.GetResponse().Returns(testResponse);
-
- nextDelegate(Arg.Any()).Returns(Task.CompletedTask);
-
- // Act
- await wrappedDelegate(context);
-
- // Assert
- await nextDelegate.Received(1)(Arg.Any());
- }
-
- [Fact]
- public void GetOpenTelemetryTracerNoResponse_WithNullServiceProvider_ThrowsArgumentNullException()
- {
- // Arrange
- IServiceProvider? nullProvider = null;
-
- // Act
- var action = () => nullProvider!.GetOpenTelemetryTracerNoResponse();
-
- // Assert
- action.Should().ThrowExactly();
- }
-
- [Theory]
- [AutoNSubstituteData]
- public void GetOpenTelemetryTracerNoResponse_WithoutTracerProvider_ThrowsInvalidOperationException(
- [Frozen] IServiceProvider serviceProvider
- )
- {
- // Arrange
- serviceProvider.GetService(typeof(TracerProvider)).Returns(null);
-
- // Act
- var action = () => serviceProvider.GetOpenTelemetryTracerNoResponse();
-
- // Assert
- action.Should().ThrowExactly();
- }
-
- [Theory]
- [AutoNSubstituteData]
- public void GetOpenTelemetryTracerNoResponse_ReturnsMiddlewareFunction(
- [Frozen] IServiceProvider serviceProvider,
- TracerProvider tracerProvider
- )
- {
- // Arrange
- serviceProvider.GetService(typeof(TracerProvider)).Returns(tracerProvider);
-
- // Act
- var middleware = serviceProvider.GetOpenTelemetryTracerNoResponse();
-
- // Assert
- middleware.Should().NotBeNull();
- middleware.Should().BeOfType>();
- }
-
- [Theory]
- [AutoNSubstituteData]
- public async Task GetOpenTelemetryTracerNoResponse_WithIncorrectEventType_ThrowsInvalidOperationException(
- [Frozen] IServiceProvider serviceProvider,
- TracerProvider tracerProvider,
- ILambdaHostContext context,
- IFeatureCollection features,
- IEventFeature eventFeature,
- IResponseFeature responseFeature
- )
- {
- // Arrange
- serviceProvider.GetService(typeof(TracerProvider)).Returns(tracerProvider);
- var middleware = serviceProvider.GetOpenTelemetryTracerNoResponse();
- var nextDelegate = Substitute.For();
- var wrappedDelegate = middleware(nextDelegate);
-
- context.Features.Returns(features);
- features.Get().Returns(eventFeature);
- features.Get().Returns(responseFeature);
- eventFeature.GetEvent(context).Returns(new object()); // Wrong type
- responseFeature.GetResponse().Returns(new object());
-
- // Act
- var action = async () => await wrappedDelegate(context);
-
- // Assert
- await action.Should().ThrowAsync();
- }
-
- [Theory]
- [AutoNSubstituteData]
- public async Task GetOpenTelemetryTracerNoResponse_WithValidEvent_CallsNextDelegate(
- [Frozen] IServiceProvider serviceProvider,
- TracerProvider tracerProvider,
- ILambdaHostContext context,
- IFeatureCollection features,
- IEventFeature eventFeature,
- IResponseFeature responseFeature
- )
- {
- // Arrange
- serviceProvider.GetService(typeof(TracerProvider)).Returns(tracerProvider);
- var middleware = serviceProvider.GetOpenTelemetryTracerNoResponse();
- var nextDelegate = Substitute.For();
- var wrappedDelegate = middleware(nextDelegate);
-
- var testEvent = new TestEvent();
-
- context.Features.Returns(features);
- features.Get().Returns(eventFeature);
- features.Get().Returns(responseFeature);
- eventFeature.GetEvent(context).Returns(testEvent);
- responseFeature.GetResponse().Returns(new object());
-
- nextDelegate(Arg.Any()).Returns(Task.CompletedTask);
-
- // Act
- await wrappedDelegate(context);
-
- // Assert
- await nextDelegate.Received(1)(Arg.Any());
- }
-
- [Fact]
- public void GetOpenTelemetryTracerNoEventNoResponse_WithNullServiceProvider_ThrowsArgumentNullException()
- {
- // Arrange
- IServiceProvider? nullProvider = null;
-
- // Act
- var action = () => nullProvider!.GetOpenTelemetryTracerNoEventNoResponse();
-
- // Assert
- action.Should().ThrowExactly();
- }
-
- [Theory]
- [AutoNSubstituteData]
- public void GetOpenTelemetryTracerNoEventNoResponse_WithoutTracerProvider_ThrowsInvalidOperationException(
- [Frozen] IServiceProvider serviceProvider
- )
- {
- // Arrange
- serviceProvider.GetService(typeof(TracerProvider)).Returns(null);
-
- // Act
- var action = () => serviceProvider.GetOpenTelemetryTracerNoEventNoResponse();
-
- // Assert
- action.Should().ThrowExactly();
- }
-
- [Theory]
- [AutoNSubstituteData]
- public void GetOpenTelemetryTracerNoEventNoResponse_ReturnsMiddlewareFunction(
- [Frozen] IServiceProvider serviceProvider,
- TracerProvider tracerProvider
- )
- {
- // Arrange
- serviceProvider.GetService(typeof(TracerProvider)).Returns(tracerProvider);
-
- // Act
- var middleware = serviceProvider.GetOpenTelemetryTracerNoEventNoResponse();
-
- // Assert
- middleware.Should().NotBeNull();
- middleware.Should().BeOfType>();
- }
-
- [Theory]
- [AutoNSubstituteData]
- public async Task GetOpenTelemetryTracerNoEventNoResponse_WithAnyEventAndResponse_CallsNextDelegate(
- [Frozen] IServiceProvider serviceProvider,
- TracerProvider tracerProvider,
- ILambdaHostContext context,
- IFeatureCollection features,
- IEventFeature eventFeature,
- IResponseFeature responseFeature
- )
- {
- // Arrange
- serviceProvider.GetService(typeof(TracerProvider)).Returns(tracerProvider);
- var middleware = serviceProvider.GetOpenTelemetryTracerNoEventNoResponse();
- var nextDelegate = Substitute.For();
- var wrappedDelegate = middleware(nextDelegate);
-
- context.Features.Returns(features);
- features.Get().Returns(eventFeature);
- features.Get().Returns(responseFeature);
- eventFeature.GetEvent(context).Returns(new object());
- responseFeature.GetResponse().Returns(new object());
-
- nextDelegate(Arg.Any()).Returns(Task.CompletedTask);
-
- // Act
- await wrappedDelegate(context);
-
- // Assert
- await nextDelegate.Received(1)(Arg.Any());
- }
-
- private class TestEvent { }
-
- private class TestResponse { }
-}
diff --git a/tests/MinimalLambda.SourceGenerators.UnitTests/Snapshots/ExpressionLambdaVerifyTests.Test_ExpressionLambda_MainOverload_DeserializerSerializer_NoOp#LambdaHandler.g.verified.cs b/tests/MinimalLambda.SourceGenerators.UnitTests/Snapshots/ExpressionLambdaVerifyTests.Test_ExpressionLambda_MainOverload_DeserializerSerializer_NoOp#LambdaHandler.g.verified.cs
new file mode 100644
index 00000000..a80f8bfe
--- /dev/null
+++ b/tests/MinimalLambda.SourceGenerators.UnitTests/Snapshots/ExpressionLambdaVerifyTests.Test_ExpressionLambda_MainOverload_DeserializerSerializer_NoOp#LambdaHandler.g.verified.cs
@@ -0,0 +1,27 @@
+//HintName: LambdaHandler.g.cs
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
+
+#nullable enable
+
+namespace System.Runtime.CompilerServices
+{
+ using System.CodeDom.Compiler;
+
+ [GeneratedCode("MinimalLambda.SourceGenerators", "0.0.0")]
+ [AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
+ file sealed class InterceptsLocationAttribute : Attribute
+ {
+ public InterceptsLocationAttribute(int version, string data)
+ {
+ }
+ }
+}
diff --git a/tests/MinimalLambda.SourceGenerators.UnitTests/Snapshots/ExpressionLambdaVerifyTests.Test_ExpressionLambda_MainOverload_NoOp#LambdaHandler.g.verified.cs b/tests/MinimalLambda.SourceGenerators.UnitTests/Snapshots/ExpressionLambdaVerifyTests.Test_ExpressionLambda_MainOverload_NoOp#LambdaHandler.g.verified.cs
new file mode 100644
index 00000000..a80f8bfe
--- /dev/null
+++ b/tests/MinimalLambda.SourceGenerators.UnitTests/Snapshots/ExpressionLambdaVerifyTests.Test_ExpressionLambda_MainOverload_NoOp#LambdaHandler.g.verified.cs
@@ -0,0 +1,27 @@
+//HintName: LambdaHandler.g.cs
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
+
+#nullable enable
+
+namespace System.Runtime.CompilerServices
+{
+ using System.CodeDom.Compiler;
+
+ [GeneratedCode("MinimalLambda.SourceGenerators", "0.0.0")]
+ [AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
+ file sealed class InterceptsLocationAttribute : Attribute
+ {
+ public InterceptsLocationAttribute(int version, string data)
+ {
+ }
+ }
+}
diff --git a/tests/MinimalLambda.SourceGenerators.UnitTests/Snapshots/OnInitVerifyTests.Test_OnInit_BaseMethodCall#LambdaHandler.g.verified.cs b/tests/MinimalLambda.SourceGenerators.UnitTests/Snapshots/OnInitVerifyTests.Test_OnInit_BaseMethodCall#LambdaHandler.g.verified.cs
new file mode 100644
index 00000000..a80f8bfe
--- /dev/null
+++ b/tests/MinimalLambda.SourceGenerators.UnitTests/Snapshots/OnInitVerifyTests.Test_OnInit_BaseMethodCall#LambdaHandler.g.verified.cs
@@ -0,0 +1,27 @@
+//HintName: LambdaHandler.g.cs
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
+
+#nullable enable
+
+namespace System.Runtime.CompilerServices
+{
+ using System.CodeDom.Compiler;
+
+ [GeneratedCode("MinimalLambda.SourceGenerators", "0.0.0")]
+ [AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
+ file sealed class InterceptsLocationAttribute : Attribute
+ {
+ public InterceptsLocationAttribute(int version, string data)
+ {
+ }
+ }
+}
diff --git a/tests/MinimalLambda.SourceGenerators.UnitTests/Snapshots/OnShutdownVerifyTests.Test_OnShutdown_BaseMethodCall#LambdaHandler.g.verified.cs b/tests/MinimalLambda.SourceGenerators.UnitTests/Snapshots/OnShutdownVerifyTests.Test_OnShutdown_BaseMethodCall#LambdaHandler.g.verified.cs
new file mode 100644
index 00000000..a80f8bfe
--- /dev/null
+++ b/tests/MinimalLambda.SourceGenerators.UnitTests/Snapshots/OnShutdownVerifyTests.Test_OnShutdown_BaseMethodCall#LambdaHandler.g.verified.cs
@@ -0,0 +1,27 @@
+//HintName: LambdaHandler.g.cs
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
+
+#nullable enable
+
+namespace System.Runtime.CompilerServices
+{
+ using System.CodeDom.Compiler;
+
+ [GeneratedCode("MinimalLambda.SourceGenerators", "0.0.0")]
+ [AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
+ file sealed class InterceptsLocationAttribute : Attribute
+ {
+ public InterceptsLocationAttribute(int version, string data)
+ {
+ }
+ }
+}
diff --git a/tests/MinimalLambda.SourceGenerators.UnitTests/VerifyTests/ExpressionLambdaVerifyTests.cs b/tests/MinimalLambda.SourceGenerators.UnitTests/VerifyTests/ExpressionLambdaVerifyTests.cs
index 2c8efdad..648a77dd 100644
--- a/tests/MinimalLambda.SourceGenerators.UnitTests/VerifyTests/ExpressionLambdaVerifyTests.cs
+++ b/tests/MinimalLambda.SourceGenerators.UnitTests/VerifyTests/ExpressionLambdaVerifyTests.cs
@@ -18,8 +18,7 @@ await GeneratorTestHelpers.Verify(
lambda.Handle(Task (ILambdaHostContext context) => Task.CompletedTask);
await lambda.RunAsync();
- """,
- 0
+ """
);
[Fact]
@@ -40,8 +39,7 @@ await GeneratorTestHelpers.Verify(
lambda.Handle(Task (ILambdaHostContext context) => Task.CompletedTask);
await lambda.RunAsync();
- """,
- 0
+ """
);
[Fact]
diff --git a/tests/MinimalLambda.SourceGenerators.UnitTests/VerifyTests/OnInitVerifyTests.cs b/tests/MinimalLambda.SourceGenerators.UnitTests/VerifyTests/OnInitVerifyTests.cs
index 7dbb1bc1..f4ba93ca 100644
--- a/tests/MinimalLambda.SourceGenerators.UnitTests/VerifyTests/OnInitVerifyTests.cs
+++ b/tests/MinimalLambda.SourceGenerators.UnitTests/VerifyTests/OnInitVerifyTests.cs
@@ -22,8 +22,7 @@ await GeneratorTestHelpers.Verify(
);
await lambda.RunAsync();
- """,
- 0
+ """
);
[Fact]
diff --git a/tests/MinimalLambda.SourceGenerators.UnitTests/VerifyTests/OnShutdownVerifyTests.cs b/tests/MinimalLambda.SourceGenerators.UnitTests/VerifyTests/OnShutdownVerifyTests.cs
index 21f93c92..98a0e8ef 100644
--- a/tests/MinimalLambda.SourceGenerators.UnitTests/VerifyTests/OnShutdownVerifyTests.cs
+++ b/tests/MinimalLambda.SourceGenerators.UnitTests/VerifyTests/OnShutdownVerifyTests.cs
@@ -22,8 +22,7 @@ await GeneratorTestHelpers.Verify(
);
await lambda.RunAsync();
- """,
- 0
+ """
);
[Fact]