...

Text file src/github.com/emissary-ingress/emissary/v3/python/tests/kat/t_cors.py

Documentation: github.com/emissary-ingress/emissary/v3/python/tests/kat

     1from typing import Generator, Tuple, Union
     2
     3from abstract_tests import HTTP, AmbassadorTest, Node, ServiceType
     4from kat.harness import Query
     5
     6# Note that there's also a CORS OptionTest in t_optiontests.py.
     7
     8
     9class GlobalCORSTest(AmbassadorTest):
    10    target: ServiceType
    11
    12    def init(self):
    13        self.target = HTTP()
    14
    15    def config(self) -> Generator[Union[str, Tuple[Node, str]], None, None]:
    16        yield self, self.format(
    17            """
    18---
    19apiVersion: getambassador.io/v3alpha1
    20kind:  Module
    21name:  ambassador
    22config:
    23  cors:
    24    origins: [http://foo.example.com]
    25    methods: [POST, GET, OPTIONS]
    26---
    27apiVersion: getambassador.io/v3alpha1
    28kind: Mapping
    29name:  {self.target.path.k8s}-foo
    30hostname: "*"
    31prefix: /foo/
    32service: {self.target.path.fqdn}
    33---
    34apiVersion: getambassador.io/v3alpha1
    35kind: Mapping
    36name:  {self.target.path.k8s}-bar
    37hostname: "*"
    38prefix: /bar/
    39service: {self.target.path.fqdn}
    40cors:
    41  origins: [http://bar.example.com]
    42  methods: [POST, GET, OPTIONS]
    43"""
    44        )
    45
    46    def queries(self):
    47        # 0. No Access-Control-Allow-Origin because no Origin was provided.
    48        yield Query(self.url("foo/"))
    49
    50        # 1. Access-Control-Allow-Origin because a matching Origin was provided.
    51        yield Query(self.url("foo/"), headers={"Origin": "http://foo.example.com"})
    52
    53        # 2. No Access-Control-Allow-Origin because the provided Origin does not match.
    54        yield Query(self.url("foo/"), headers={"Origin": "http://wrong.example.com"})
    55
    56        # 3. No Access-Control-Allow-Origin because no Origin was provided.
    57        yield Query(self.url("bar/"))
    58
    59        # 4. Access-Control-Allow-Origin because a matching Origin was provided.
    60        yield Query(self.url("bar/"), headers={"Origin": "http://bar.example.com"})
    61
    62        # 5. No Access-Control-Allow-Origin because no Origin was provided.
    63        yield Query(self.url("bar/"), headers={"Origin": "http://wrong.example.com"})
    64
    65    def check(self):
    66        assert self.results[0].backend
    67        assert self.results[0].backend.name == self.target.path.k8s
    68        assert "Access-Control-Allow-Origin" not in self.results[0].headers
    69
    70        assert self.results[1].backend
    71        assert self.results[1].backend.name == self.target.path.k8s
    72        assert self.results[1].headers["Access-Control-Allow-Origin"] == ["http://foo.example.com"]
    73
    74        assert self.results[2].backend
    75        assert self.results[2].backend.name == self.target.path.k8s
    76        assert "Access-Control-Allow-Origin" not in self.results[2].headers
    77
    78        assert self.results[3].backend
    79        assert self.results[3].backend.name == self.target.path.k8s
    80        assert "Access-Control-Allow-Origin" not in self.results[3].headers
    81
    82        assert self.results[4].backend
    83        assert self.results[4].backend.name == self.target.path.k8s
    84        assert self.results[4].headers["Access-Control-Allow-Origin"] == ["http://bar.example.com"]
    85
    86        assert self.results[5].backend
    87        assert self.results[5].backend.name == self.target.path.k8s
    88        assert "Access-Control-Allow-Origin" not in self.results[5].headers

View as plain text