public async Task HandlesStringContent_WithHeader() { var obj = "{ \"a\": 1 }"; var contentHeader = "application/json"; var result = new RawScriptResult(null, obj) { Headers = new Dictionary <string, object>() }; var context = new ActionContext() { HttpContext = new DefaultHttpContext() }; context.HttpContext.Response.Headers.Add("Content-Type", contentHeader); context.HttpContext.Response.Body = new MemoryStream(); await result.ExecuteResultAsync(context); var body = await TestHelpers.ReadStreamToEnd(context.HttpContext.Response.Body); StringValues value; Assert.True(context.HttpContext.Response.Headers.TryGetValue("Content-Type", out value)); Assert.Equal("application/json; charset=utf-8", value); Assert.Equal(obj, body); Assert.Equal(200, context.HttpContext.Response.StatusCode); }
public async Task AddsHttpCookies() { var result = new RawScriptResult(null, null) { Headers = new Dictionary<string, object>(), Cookies = new List<Tuple<string, string, CookieOptions>>() { new Tuple<string, string, CookieOptions>("firstCookie", "cookieValue", new CookieOptions() { SameSite = SameSiteMode.Lax }), new Tuple<string, string, CookieOptions>("secondCookie", "cookieValue2", new CookieOptions() { Path = "/", HttpOnly = true, MaxAge = TimeSpan.FromSeconds(20), SameSite = (SameSiteMode)(-1) }) } }; var context = new ActionContext() { HttpContext = new DefaultHttpContext() }; context.HttpContext.Response.Body = new MemoryStream(); await result.ExecuteResultAsync(context); context.HttpContext.Response.Headers.TryGetValue("Set-Cookie", out StringValues cookies); Assert.Equal(2, cookies.Count); Assert.Equal("firstCookie=cookieValue; path=/; samesite=lax", cookies[0]); Assert.Equal("secondCookie=cookieValue2; max-age=20; path=/; httponly", cookies[1]); }
/// <summary> /// This method creates a mock proxy client that emulates the behaviour of Azure Function Proxies for /// TestScripts\Proxies\proxies.json /// </summary> /// <returns>Mock IProxyClient object</returns> private static ProxyClientExecutor GetMockProxyClient() { var proxyClient = new Mock <IProxyClient>(); ProxyData proxyData = new ProxyData(); proxyData.Routes.Add(new Routes("/myproxy", "test", new[] { HttpMethod.Get, HttpMethod.Post })); proxyData.Routes.Add(new Routes("/mymockhttp", "localFunction", new[] { HttpMethod.Get })); proxyClient.Setup(p => p.GetProxyData()).Returns(proxyData); proxyClient.Setup(p => p.CallAsync(It.IsAny <object[]>(), It.IsAny <IFuncExecutor>(), It.IsAny <ILogger>())).Returns( (object[] arguments, IFuncExecutor funcExecutor, ILogger logger) => { object requestObj = arguments != null && arguments.Length > 0 ? arguments[0] : null; var request = requestObj as HttpRequest; if (string.Equals(request.Method, "GET", StringComparison.OrdinalIgnoreCase) && string.Equals(request.GetDisplayUrl(), "http://localhost/mymockhttp", StringComparison.OrdinalIgnoreCase)) { var response = new RawScriptResult(StatusCodes.Status200OK, null) { Headers = new Dictionary <string, object> { { "myversion", "123" } } }; request.HttpContext.Items[ScriptConstants.AzureFunctionsHttpResponseKey] = response; } return(Task.CompletedTask); }); return(new ProxyClientExecutor(proxyClient.Object)); }
public async Task HttpTrigger_Post_ByteArray(string contentType) { TestHelpers.ClearFunctionLogs("HttpTriggerByteArray"); IHeaderDictionary headers = new HeaderDictionary(); headers.Add("Content-Type", contentType); byte[] inputBytes = new byte[] { 1, 2, 3, 4, 5 }; var content = inputBytes; HttpRequest request = HttpTestHelpers.CreateHttpRequest("POST", "http://localhost/api/httptriggerbytearray", headers, content); Dictionary <string, object> arguments = new Dictionary <string, object> { { "req", request } }; await Fixture.JobHost.CallAsync("HttpTriggerByteArray", arguments); var result = (IActionResult)request.HttpContext.Items[ScriptConstants.AzureFunctionsHttpResponseKey]; RawScriptResult objectResult = result as RawScriptResult; Assert.NotNull(objectResult); Assert.Equal(200, objectResult.StatusCode); JObject body = (JObject)objectResult.Content; Assert.True((bool)body["isBuffer"]); Assert.Equal(5, body["length"]); var rawBody = Encoding.UTF8.GetBytes((string)body["rawBody"]); Assert.Equal(inputBytes, rawBody); }
public void HasExpectedProperties_WithoutStatusCode() { var obj = "hello world"; var result = new RawScriptResult(null, obj) { Headers = new Dictionary<string, object>() }; Assert.Null(result.StatusCode); Assert.Equal(obj, result.Content); Assert.Empty(result.Headers); }
protected async Task <string> CreateTest <Req>(Req content, string contentType, bool contentNegotiation, string expectedContentType = null) { IHeaderDictionary headers = new HeaderDictionary(); headers.Add("accept", contentType); headers.Add("type", contentType); if (contentNegotiation) { headers.Add("negotiation", "true"); } headers.Add("scenario", "content"); HttpRequest request = HttpTestHelpers.CreateHttpRequest("POST", "http://localhost/api/httptrigger", headers, content); Dictionary <string, object> arguments = new Dictionary <string, object> { { "req", request } }; await Fixture.JobHost.CallAsync("HttpTrigger-Scenarios", arguments); var result = (IActionResult)request.HttpContext.Items[ScriptConstants.AzureFunctionsHttpResponseKey]; if (contentNegotiation) { ObjectResult objResult = result as ObjectResult; Assert.NotNull(objResult); if (contentType == null) { Assert.Equal(0, objResult.ContentTypes.Count); } else { Assert.Equal(contentType, objResult.ContentTypes[0]); } Assert.Equal(200, objResult.StatusCode); if (content is byte[]) { Assert.Equal(System.Text.Encoding.UTF8.GetString(content as byte[]), objResult.Value); } else { Assert.Equal(content.ToString(), objResult.Value); } return(objResult.Value.ToString()); } else { RawScriptResult rawResult = result as RawScriptResult; Assert.NotNull(rawResult); Assert.Equal(contentType, rawResult.Headers["content-type"].ToString()); Assert.Equal(200, rawResult.StatusCode); return(rawResult.Content.ToString()); } }
public async Task HandlesStringContent() { var obj = "{ \"a\": 1 }"; var result = new RawScriptResult(null, obj) { Headers = new Dictionary<string, object>() }; var context = new ActionContext() { HttpContext = new DefaultHttpContext() }; context.HttpContext.Response.Body = new MemoryStream(); await result.ExecuteResultAsync(context); var body = await TestHelpers.ReadStreamToEnd(context.HttpContext.Response.Body); Assert.Equal(obj, body); Assert.Equal(200, context.HttpContext.Response.StatusCode); }