File: test_objects.py

package info (click to toggle)
python-pykube-ng 22.9.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 424 kB
  • sloc: python: 2,336; makefile: 44
file content (121 lines) | stat: -rw-r--r-- 3,516 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
from typing import Any
from typing import Dict
from typing import Optional
from unittest.mock import MagicMock

import pytest
from pytest_mock import MockFixture

import pykube
from pykube.objects import NamespacedAPIObject
from pykube.objects import Pod
from pykube.utils import obj_merge


def test_api_object():
    pod = Pod(None, {"metadata": {"name": "myname"}})
    assert repr(pod) == "<Pod myname>"
    assert str(pod) == "myname"
    assert pod.metadata == {"name": "myname"}
    assert pod.labels == {}
    assert pod.annotations == {}


def test_object_factory_succeeds():
    api = MagicMock()
    api.resource_list.return_value = {
        "resources": [
            {"kind": "ExampleObject", "namespaced": True, "name": "exampleobjects"}
        ]
    }
    ExampleObject = pykube.object_factory(api, "example.org/v1", "ExampleObject")
    assert ExampleObject.kind == "ExampleObject"
    assert ExampleObject.endpoint == "exampleobjects"
    assert ExampleObject.version == "example.org/v1"
    assert NamespacedAPIObject in ExampleObject.mro()


def test_object_factory_raises_for_unknown_kind():
    api = MagicMock()
    api.resource_list.return_value = {
        "resources": [
            {"kind": "ExampleObject", "namespaced": True, "name": "exampleobjects"}
        ]
    }
    with pytest.raises(ValueError):
        pykube.object_factory(api, "example.org/v1", "OtherObject")


def test_set_annotation():
    pod = Pod(None, {"metadata": {"name": "myname"}})
    pod.annotations["foo"] = "bar"
    assert pod.annotations["foo"] == "bar"


def test_set_label():
    pod = Pod(None, {"metadata": {"name": "myname"}})
    pod.labels["foo"] = "bar"
    assert pod.labels["foo"] == "bar"


def test_update():
    pod = Pod(
        None,
        {"metadata": {"name": "john", "kind": "test"}, "annotations": "a long string"},
    )
    pod.obj = {"metadata": {"name": "john"}}
    pod.api = MagicMock()
    pod.api.patch.return_value.json.return_value = obj_merge(
        pod.obj, pod._original_obj, False
    )
    pod.update(is_strategic=False)
    assert pod.metadata == {"name": "john"}
    assert pod.annotations == {}


@pytest.mark.parametrize(
    "port,expected_request_kwargs",
    [
        # empty port - default service port should be used
        (
            None,
            {
                "url": "services/test_service:9090/proxy//",
                "namespace": "test_namespace",
                "version": "v1",
            },
        ),
        # override the default port, should be included in url
        (
            8080,
            {
                "url": "services/test_service:8080/proxy//",
                "namespace": "test_namespace",
                "version": "v1",
            },
        ),
    ],
)
def test_service_proxy_http_request(
    mocker: MockFixture, port: Optional[int], expected_request_kwargs: Dict[str, Any]
) -> None:
    mock_client = mocker.MagicMock(spec=pykube.http.HTTPClient)

    service = pykube.Service(
        mock_client,
        {
            "apiVersion": "core/v1",
            "kind": "Service",
            "metadata": {
                "name": "test_service",
                "namespace": "test_namespace",
            },
            "spec": {"ports": [{"port": 9090}]},
        },
    )
    service.proxy_http_request("GET", "/", port)

    request = mock_client.request
    assert request.called
    assert request.call_args_list[0][0] == ("GET",)
    assert request.call_args_list[0][1] == expected_request_kwargs