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]);
        }
Beispiel #3
0
            /// <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);
 }