From ff6094e77b4abfe1635fe4f17b5a14c8314c3a2f Mon Sep 17 00:00:00 2001 From: Denis Makogon Date: Sun, 7 Jul 2019 12:17:04 +0300 Subject: [PATCH] Fix request URL and HTTP method definitions Closes: #94 --- fdk/context.py | 4 ++-- fdk/fixtures.py | 7 +++++-- fdk/tests/funcs.py | 3 +-- fdk/tests/test_http_stream.py | 39 +++++++++++++++++++++++++++++++++++ fdk/version.py | 2 +- 5 files changed, 48 insertions(+), 7 deletions(-) diff --git a/fdk/context.py b/fdk/context.py index bb849fd..a086137 100644 --- a/fdk/context.py +++ b/fdk/context.py @@ -106,10 +106,10 @@ def GetResponseHeaders(self): return self.__response_headers def RequestURL(self): - return self.__invoke_context._request_url + return self._request_url def Method(self): - return self.__invoke_context._method + return self._method def __is_gateway(self): return (constants.FN_INTENT in self.__headers and diff --git a/fdk/fixtures.py b/fdk/fixtures.py index 21d3044..d37e996 100644 --- a/fdk/fixtures.py +++ b/fdk/fixtures.py @@ -53,13 +53,16 @@ def setup_headers(deadline=None, headers=None, new_headers = hs.encap_headers(headers) new_headers.update({ constants.FN_INTENT: constants.INTENT_HTTP_REQUEST, - constants.FN_HTTP_REQUEST_URL: request_url, - constants.FN_HTTP_METHOD: method, }) elif headers is not None: for k, v in headers.items(): new_headers.update({k: v}) + new_headers.update({ + constants.FN_HTTP_REQUEST_URL: request_url, + constants.FN_HTTP_METHOD: method, + }) + if deadline is None: now = dt.datetime.now(dt.timezone.utc).astimezone() now += dt.timedelta(0, float(constants.DEFAULT_DEADLINE)) diff --git a/fdk/tests/funcs.py b/fdk/tests/funcs.py index 95e380f..72848ce 100644 --- a/fdk/tests/funcs.py +++ b/fdk/tests/funcs.py @@ -114,9 +114,8 @@ def verify_request_headers(ctx, **kwargs): def access_request_url(ctx, **kwargs): - hs = ctx.Headers() method = ctx.Method() - request_url = hs.get("Fn-Http-Request-Url") + request_url = ctx.RequestURL() return response.Response( ctx, response_data="OK", headers={ "Response-Request-URL": request_url, diff --git a/fdk/tests/test_http_stream.py b/fdk/tests/test_http_stream.py index 8a9797e..100c7d7 100644 --- a/fdk/tests/test_http_stream.py +++ b/fdk/tests/test_http_stream.py @@ -193,3 +193,42 @@ def test_log_frame_header(monkeypatch, capsys): captured = capsys.readouterr() assert "\nfoo=12345\n" in captured.out assert "\nfoo=12345\n" in captured.err + + +@pytest.mark.asyncio +async def test_request_url_and_method_no_gateway(): + url_path = "/call" + method = "POST" + call = await fixtures.setup_fn_call( + funcs.access_request_url, + request_url=url_path, + method=method, + ) + content, status, headers = await call + + assert "response-request-url" in headers + assert "request-method" in headers + + assert url_path == headers.get("response-request-url") + assert method == headers.get("request-method") + + +@pytest.mark.asyncio +async def test_request_url_and_method_with_gateway(): + url_path = "/t/app/path" + method = "GET" + call = await fixtures.setup_fn_call( + funcs.access_request_url, + request_url=url_path, + method=method, + gateway=True + ) + content, status, headers = await call + + assert "response-request-url" not in headers + assert "request-method" not in headers + assert "fn-http-h-response-request-url" in headers + assert "fn-http-h-request-method" in headers + + assert url_path == headers.get("fn-http-h-response-request-url") + assert method == headers.get("fn-http-h-request-method") diff --git a/fdk/version.py b/fdk/version.py index 8d91de2..9bef2a6 100644 --- a/fdk/version.py +++ b/fdk/version.py @@ -1 +1 @@ -VERSION = "0.1.7" +VERSION = "0.1.8"