Skip to content

Commit 266de94

Browse files
Enable MockHttpRequestFactory in non netframework targets
1 parent 89b3090 commit 266de94

File tree

4 files changed

+80
-11
lines changed

4 files changed

+80
-11
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
2+
{
3+
"core": {
4+
"changeLogMessages": ["Enable MockHttpRequestFactory in non netframework targets"],
5+
"type": "patch",
6+
"updateMinimum": false
7+
}
8+
}

sdk/test/UnitTests/Custom/Runtime/CustomResponses.cs

+4
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,13 @@ public static void SetResponse(
6262
AmazonServiceClient client,
6363
Func<HttpHandlerTests.MockHttpRequest, HttpWebResponse> responseCreator)
6464
{
65+
#if BCL
6566
var requestFactory = new HttpHandlerTests.MockHttpRequestFactory();
6667
requestFactory.ResponseCreator = responseCreator;
6768
ReplaceHttpRequestHandler(client, requestFactory);
69+
#else
70+
throw new NotImplementedException();
71+
#endif
6872
}
6973

7074
public static void ReplaceHttpRequestHandler<T>(

sdk/test/UnitTests/Custom/Runtime/HttpHandlerTests.cs

+41-10
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using Amazon.Runtime.Internal.Util;
1111
using System.Net;
1212
using System.Reflection;
13+
using System.Net.Http;
1314

1415
using Amazon.S3;
1516
using Amazon.S3.Model;
@@ -167,7 +168,12 @@ private ExecutionContext CreateExecutionContextForListBuckets()
167168
public class MockHttpRequestFactory : IHttpRequestFactory<Stream>
168169
{
169170
public Action GetResponseAction { get; set; }
171+
172+
#if BCL
170173
public Func<MockHttpRequest, HttpWebResponse> ResponseCreator { get; set; }
174+
#else
175+
public Func<MockHttpRequest, HttpResponseMessage> ResponseCreator { get; set; }
176+
#endif
171177

172178
public MockHttpRequest LastCreatedRequest { get; private set; }
173179

@@ -201,23 +207,29 @@ public class MockHttpRequest : IHttpRequest<Stream>
201207
public Uri RequestUri { get; set; }
202208

203209
public Action GetResponseAction { get; set; }
204-
public Func<MockHttpRequest, HttpWebResponse> ResponseCreator { get; set; }
205210

206211
public Version HttpProtocolVersion { get; set; }
207212

213+
#if BCL
214+
public Func<MockHttpRequest, HttpWebResponse> ResponseCreator { get; set; }
215+
208216
public MockHttpRequest(Uri requestUri, Action action, Func<MockHttpRequest, HttpWebResponse> responseCreator = null)
217+
#else
218+
public Func<MockHttpRequest, HttpResponseMessage> ResponseCreator { get; set; }
219+
220+
public MockHttpRequest(Uri requestUri, Action action, Func<MockHttpRequest, HttpResponseMessage> responseCreator = null)
221+
#endif
209222
{
210223
this.RequestUri = requestUri;
211224
this.GetResponseAction = action;
212-
#if BCL
213225
this.ResponseCreator = responseCreator ?? CreateResponse;
214-
#else
215-
throw new NotImplementedException();
216-
#endif
217226
}
218227

219228
#if BCL
220229
private HttpWebResponse CreateResponse(MockHttpRequest request)
230+
#else
231+
private HttpResponseMessage CreateResponse(MockHttpRequest request)
232+
#endif
221233
{
222234
// Extract the last segment of the URI, this is the custom URI
223235
// sent by the unit tests.
@@ -227,10 +239,22 @@ private HttpWebResponse CreateResponse(MockHttpRequest request)
227239
if (response.StatusCode >= HttpStatusCode.OK && response.StatusCode <= (HttpStatusCode)299)
228240
return response;
229241
else
230-
throw new HttpErrorResponseException(new HttpWebRequestResponseData(response));
231-
}
242+
#if BCL
243+
throw new HttpErrorResponseException(new HttpWebRequestResponseData(response));
244+
#else
245+
{
246+
var instance = Activator.CreateInstance(
247+
typeof(HttpClientResponseData),
248+
BindingFlags.Instance | BindingFlags.NonPublic,
249+
binder: null,
250+
args: new[] { response },
251+
culture: null
252+
);
253+
throw new HttpErrorResponseException(instance as HttpClientResponseData);
254+
}
232255
#endif
233-
256+
}
257+
234258
public void ConfigureRequest(IRequestContext requestContext)
235259
{
236260
this.IsConfigureRequestCalled = true;
@@ -250,14 +274,21 @@ public Stream GetRequestContent()
250274

251275
public Amazon.Runtime.Internal.Transform.IWebResponseData GetResponse()
252276
{
253-
#if BCL
254277
if (this.GetResponseAction!=null)
255278
this.GetResponseAction();
256279

257280
var response = ResponseCreator(this);
281+
#if BCL
258282
return new HttpWebRequestResponseData(response);
259283
#else
260-
throw new NotImplementedException();
284+
var instance = Activator.CreateInstance(
285+
typeof(HttpClientResponseData),
286+
BindingFlags.Instance | BindingFlags.NonPublic,
287+
binder: null,
288+
args: new[] { response },
289+
culture: null
290+
);
291+
return instance as HttpClientResponseData;
261292
#endif
262293
}
263294

sdk/test/UnitTests/Custom/TestTools/MockWebResponse.cs

+27-1
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@
77
using System.Net;
88
using System.Reflection;
99
using System.IO;
10+
using System.Net.Http;
1011

1112
namespace AWSSDK.UnitTests
1213
{
1314
public class MockWebResponse
1415
{
16+
#if BCL
1517
public static HttpWebResponse CreateFromResource(string resourceName)
1618
{
1719
var rawResponse = Utils.GetResourceText(resourceName);
@@ -21,9 +23,33 @@ public static HttpWebResponse CreateFromResource(string resourceName)
2123

2224
return Create(statusCode, response.Headers, response.Body);
2325
}
26+
#else
27+
public static HttpResponseMessage CreateFromResource(string resourceName)
28+
{
29+
var rawResponse = Utils.GetResourceText(resourceName);
30+
31+
var response = ParseRawReponse(rawResponse);
32+
var statusCode = ParseStatusCode(response.StatusLine);
33+
var httpResponseMessage = new HttpResponseMessage(statusCode);
34+
35+
if (response.Headers != null)
36+
{
37+
foreach (var header in response.Headers)
38+
{
39+
httpResponseMessage.Headers.TryAddWithoutValidation(header.Key, header.Value);
40+
}
41+
}
42+
43+
var body = response.Body ?? string.Empty;
44+
var responseBodyStream = Utils.CreateStreamFromString(body);
45+
46+
httpResponseMessage.Content = new StreamContent(responseBodyStream);
47+
return httpResponseMessage;
48+
}
49+
#endif
2450

2551
public static HttpWebResponse Create(HttpStatusCode statusCode,
26-
IDictionary<string,string> headers, string body = null)
52+
IDictionary<string, string> headers, string body = null)
2753
{
2854
var type = typeof(HttpWebResponse);
2955
var assembly = Assembly.GetAssembly(type);

0 commit comments

Comments
 (0)