Skip to content

Commit 471264d

Browse files
committed
Use extension method
add docs update tests
1 parent 57bfdc2 commit 471264d

15 files changed

+424
-577
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
# Visual Studio Version 17
4+
VisualStudioVersion = 17.0.31903.59
5+
MinimumVisualStudioVersion = 10.0.40219.1
6+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{1C0036F2-946B-481C-AA12-9F6CF548727E}"
7+
EndProject
8+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{742C8915-E527-4EA6-959B-CB206C33C77D}"
9+
EndProject
10+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Amazon.Lambda.TestTool", "src\Amazon.Lambda.TestTool\Amazon.Lambda.TestTool.csproj", "{818A8567-E1C2-42E9-9C92-4F4D3339CF6B}"
11+
EndProject
12+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Amazon.Lambda.TestTool.UnitTests", "tests\Amazon.Lambda.TestTool.UnitTests\Amazon.Lambda.TestTool.UnitTests.csproj", "{3651CE4A-20FF-465F-8E60-7068C7900815}"
13+
EndProject
14+
Global
15+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
16+
Debug|Any CPU = Debug|Any CPU
17+
Release|Any CPU = Release|Any CPU
18+
EndGlobalSection
19+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
20+
{818A8567-E1C2-42E9-9C92-4F4D3339CF6B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
21+
{818A8567-E1C2-42E9-9C92-4F4D3339CF6B}.Debug|Any CPU.Build.0 = Debug|Any CPU
22+
{818A8567-E1C2-42E9-9C92-4F4D3339CF6B}.Release|Any CPU.ActiveCfg = Release|Any CPU
23+
{818A8567-E1C2-42E9-9C92-4F4D3339CF6B}.Release|Any CPU.Build.0 = Release|Any CPU
24+
{3651CE4A-20FF-465F-8E60-7068C7900815}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
25+
{3651CE4A-20FF-465F-8E60-7068C7900815}.Debug|Any CPU.Build.0 = Debug|Any CPU
26+
{3651CE4A-20FF-465F-8E60-7068C7900815}.Release|Any CPU.ActiveCfg = Release|Any CPU
27+
{3651CE4A-20FF-465F-8E60-7068C7900815}.Release|Any CPU.Build.0 = Release|Any CPU
28+
EndGlobalSection
29+
GlobalSection(SolutionProperties) = preSolution
30+
HideSolutionNode = FALSE
31+
EndGlobalSection
32+
GlobalSection(NestedProjects) = preSolution
33+
{818A8567-E1C2-42E9-9C92-4F4D3339CF6B} = {1C0036F2-946B-481C-AA12-9F6CF548727E}
34+
{3651CE4A-20FF-465F-8E60-7068C7900815} = {742C8915-E527-4EA6-959B-CB206C33C77D}
35+
EndGlobalSection
36+
EndGlobal

Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/ApiGatewayHttpApiV2ProxyRequestTranslator.cs

Lines changed: 0 additions & 71 deletions
This file was deleted.

Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/ApiGatewayMode.cs

Lines changed: 0 additions & 23 deletions
This file was deleted.

Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/ApiGatewayProxyRequestTranslator.cs

Lines changed: 0 additions & 61 deletions
This file was deleted.

Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/ApiGatewayRequestTranslatorFactory.cs

Lines changed: 0 additions & 36 deletions
This file was deleted.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
namespace Amazon.Lambda.TestTool
2+
{
3+
public class ApiGatewayRouteConfig
4+
{
5+
public string LambdaResourceName { get; set; }
6+
public string Endpoint { get; set; }
7+
public string HttpMethod { get; set; }
8+
public string Path { get; set; }
9+
}
10+
}
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
using Amazon.Lambda.APIGatewayEvents;
2+
using System.Text;
3+
using System.Web;
4+
using static Amazon.Lambda.APIGatewayEvents.APIGatewayHttpApiV2ProxyRequest;
5+
6+
namespace Amazon.Lambda.TestTool
7+
{
8+
/// <summary>
9+
/// Provides extension methods to translate an <see cref="HttpContext"/> to different types of API Gateway requests.
10+
/// </summary>
11+
public static class HttpContextExtensions
12+
{
13+
private static IHttpRequestUtility _httpRequestUtility = new HttpRequestUtility();
14+
private static IRouteConfigurationParser _routeConfigurationParser;
15+
16+
public static void SetHttpRequestUtility(IHttpRequestUtility httpRequestUtility)
17+
{
18+
_httpRequestUtility = httpRequestUtility ?? throw new ArgumentNullException(nameof(httpRequestUtility));
19+
}
20+
21+
public static void SetRouteConfigurationParser(IRouteConfigurationParser routeConfigurationParser)
22+
{
23+
_routeConfigurationParser = routeConfigurationParser ?? throw new ArgumentNullException(nameof(routeConfigurationParser));
24+
}
25+
26+
/// <summary>
27+
/// Translates an <see cref="HttpContext"/> to an <see cref="APIGatewayHttpApiV2ProxyRequest"/>.
28+
/// </summary>
29+
/// <param name="context">The <see cref="HttpContext"/> to be translated.</param>
30+
/// <param name="resource">The API Gateway resource path.</param>
31+
/// <returns>An <see cref="APIGatewayHttpApiV2ProxyRequest"/> object representing the translated request.</returns>
32+
public static APIGatewayHttpApiV2ProxyRequest ToApiGatewayHttpV2Request(
33+
this HttpContext context,
34+
string resource)
35+
{
36+
var request = context.Request;
37+
38+
var matchedConfig = _routeConfigurationParser.GetRouteConfig(request.Method, request.Path);
39+
var pathParameters = _routeConfigurationParser.ExtractPathParameters(matchedConfig, request.Path);
40+
41+
var (headers, _) = _httpRequestUtility.ExtractHeaders(request.Headers);
42+
var (queryStringParameters, _) = _httpRequestUtility.ExtractQueryStringParameters(request.Query);
43+
44+
var httpApiV2ProxyRequest = new APIGatewayHttpApiV2ProxyRequest
45+
{
46+
RouteKey = $"{request.Method} {resource}",
47+
RawPath = request.Path,
48+
RawQueryString = request.QueryString.Value,
49+
Cookies = request.Cookies.Select(c => $"{c.Key}={c.Value}").ToArray(),
50+
Headers = headers,
51+
QueryStringParameters = queryStringParameters,
52+
PathParameters = pathParameters ?? new Dictionary<string, string>(),
53+
Body = _httpRequestUtility.ReadRequestBody(request),
54+
IsBase64Encoded = false,
55+
RequestContext = new ProxyRequestContext
56+
{
57+
Http = new HttpDescription
58+
{
59+
Method = request.Method,
60+
Path = request.Path,
61+
Protocol = request.Protocol
62+
},
63+
RouteKey = $"{request.Method} {resource}"
64+
},
65+
Version = "2.0"
66+
};
67+
68+
if (_httpRequestUtility.IsBinaryContent(request.ContentType))
69+
{
70+
httpApiV2ProxyRequest.Body = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(httpApiV2ProxyRequest.Body));
71+
httpApiV2ProxyRequest.IsBase64Encoded = true;
72+
}
73+
74+
return httpApiV2ProxyRequest;
75+
}
76+
77+
/// <summary>
78+
/// Translates an <see cref="HttpContext"/> to an <see cref="APIGatewayProxyRequest"/>.
79+
/// </summary>
80+
/// <param name="context">The <see cref="HttpContext"/> to be translated.</param>
81+
/// <param name="resource">The API Gateway resource path.</param>
82+
/// <returns>An <see cref="APIGatewayProxyRequest"/> object representing the translated request.</returns>
83+
public static APIGatewayProxyRequest ToApiGatewayRequest(
84+
this HttpContext context,
85+
string resource)
86+
{
87+
var request = context.Request;
88+
89+
var matchedConfig = _routeConfigurationParser.GetRouteConfig(request.Method, request.Path);
90+
var pathParameters = _routeConfigurationParser.ExtractPathParameters(matchedConfig, request.Path);
91+
92+
var (headers, multiValueHeaders) = _httpRequestUtility.ExtractHeaders(request.Headers);
93+
var (queryStringParameters, multiValueQueryStringParameters) = _httpRequestUtility.ExtractQueryStringParameters(request.Query);
94+
95+
var proxyRequest = new APIGatewayProxyRequest
96+
{
97+
Resource = resource,
98+
Path = HttpUtility.UrlEncode(request.Path),
99+
HttpMethod = request.Method,
100+
Headers = headers,
101+
MultiValueHeaders = multiValueHeaders,
102+
QueryStringParameters = queryStringParameters,
103+
MultiValueQueryStringParameters = multiValueQueryStringParameters,
104+
PathParameters = pathParameters ?? new Dictionary<string, string>(),
105+
Body = _httpRequestUtility.ReadRequestBody(request),
106+
IsBase64Encoded = false
107+
};
108+
109+
if (_httpRequestUtility.IsBinaryContent(request.ContentType))
110+
{
111+
proxyRequest.Body = Convert.ToBase64String(Encoding.UTF8.GetBytes(proxyRequest.Body));
112+
proxyRequest.IsBase64Encoded = true;
113+
}
114+
115+
return proxyRequest;
116+
}
117+
}
118+
}

Tools/LambdaTestTool-v2/src/Amazon.Lambda.TestTool/IApiGatewayRequestTranslator.cs

Lines changed: 0 additions & 23 deletions
This file was deleted.

0 commit comments

Comments
 (0)