diff --git a/sdk/core/azure-core/tests/testserver_tests/async_tests/test_rest_headers_async.py b/sdk/core/azure-core/tests/testserver_tests/async_tests/test_rest_headers_async.py new file mode 100644 index 000000000000..4452e326126d --- /dev/null +++ b/sdk/core/azure-core/tests/testserver_tests/async_tests/test_rest_headers_async.py @@ -0,0 +1,36 @@ +# coding: utf-8 +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See LICENSE.txt in the project root for +# license information. +# ------------------------------------------------------------------------- +import pytest +from azure.core.rest import HttpRequest + +@pytest.mark.asyncio +async def test_response_headers_case_insensitive(client): + request = HttpRequest("GET", "/basic/headers") + response = await client.send_request(request) + response.raise_for_status() + assert ( + response.headers["lowercase-header"] == + response.headers["LOWERCASE-HEADER"] == + response.headers["Lowercase-Header"] == + response.headers["lOwErCasE-HeADer"] == + "lowercase" + ) + assert ( + response.headers["allcaps-header"] == + response.headers["ALLCAPS-HEADER"] == + response.headers["Allcaps-Header"] == + response.headers["AlLCapS-HeADer"] == + "ALLCAPS" + ) + assert ( + response.headers["camelcase-header"] == + response.headers["CAMELCASE-HEADER"] == + response.headers["CamelCase-Header"] == + response.headers["cAMeLCaSE-hEadER"] == + "camelCase" + ) + return response \ No newline at end of file diff --git a/sdk/core/azure-core/tests/testserver_tests/coretestserver/coretestserver/test_routes/basic.py b/sdk/core/azure-core/tests/testserver_tests/coretestserver/coretestserver/test_routes/basic.py index 0f0735522d11..933a53de5d14 100644 --- a/sdk/core/azure-core/tests/testserver_tests/coretestserver/coretestserver/test_routes/basic.py +++ b/sdk/core/azure-core/tests/testserver_tests/coretestserver/coretestserver/test_routes/basic.py @@ -64,3 +64,14 @@ def complicated_json(): assert request.json["None"] == None return Response(status=200) + +@basic_api.route("/headers", methods=['GET']) +def headers(): + return Response( + status=200, + headers={ + "lowercase-header": "lowercase", + "ALLCAPS-HEADER": "ALLCAPS", + "CamelCase-Header": "camelCase", + } + ) diff --git a/sdk/core/azure-core/tests/testserver_tests/test_rest_headers.py b/sdk/core/azure-core/tests/testserver_tests/test_rest_headers.py index 30112c50c912..a21cbe84a8b1 100644 --- a/sdk/core/azure-core/tests/testserver_tests/test_rest_headers.py +++ b/sdk/core/azure-core/tests/testserver_tests/test_rest_headers.py @@ -91,6 +91,59 @@ def test_headers_not_override(): assert request.headers["Content-Length"] == "5000" assert request.headers["Content-Type"] == "application/my-content-type" +def test_request_headers_case_insensitive(): + request = HttpRequest( + "PUT", + "http://example.org", + headers={ + "Content-Length": 5000, + "Content-Type": "application/my-content-type" + } + ) + assert ( + request.headers["Content-Length"] == + request.headers["content-length"] == + request.headers["CONTENT-LENGTH"] == + request.headers["cOnTEnT-lEngTH"] == + 5000 + ) + + assert( + request.headers["Content-Type"] == + request.headers["content-type"] == + request.headers["CONTENT-TYPE"] == + request.headers["ConTENt-tYpE"] == + "application/my-content-type" + ) + +def test_response_headers_case_insensitive(client): + request = HttpRequest("GET", "/basic/headers") + response = client.send_request(request) + response.raise_for_status() + assert ( + response.headers["lowercase-header"] == + response.headers["LOWERCASE-HEADER"] == + response.headers["Lowercase-Header"] == + response.headers["lOwErCasE-HeADer"] == + "lowercase" + ) + assert ( + response.headers["allcaps-header"] == + response.headers["ALLCAPS-HEADER"] == + response.headers["Allcaps-Header"] == + response.headers["AlLCapS-HeADer"] == + "ALLCAPS" + ) + assert ( + response.headers["camelcase-header"] == + response.headers["CAMELCASE-HEADER"] == + response.headers["CamelCase-Header"] == + response.headers["cAMeLCaSE-hEadER"] == + "camelCase" + ) + return response + + # Can't support list of tuples. Will uncomment once we add that support # def test_multiple_headers():