File: test_response.py

package info (click to toggle)
python-gvm 26.5.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 5,132 kB
  • sloc: python: 44,662; makefile: 18
file content (103 lines) | stat: -rw-r--r-- 3,588 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
# SPDX-FileCopyrightText: 2024 Greenbone AG
#
# SPDX-License-Identifier: GPL-3.0-or-later

import unittest

from gvm.protocols.core import Response, StatusError
from gvm.xml import Element, XmlError


class RequestMock:
    def __init__(self, data: bytes) -> None:
        self._data = data

    def __bytes__(self) -> bytes:
        return self._data


class ResponseTestCase(unittest.TestCase):

    def test_data(self) -> None:
        request = RequestMock(b"<request/>")
        response = Response(data=b"<response/>", request=request)

        self.assertEqual(response.data, b"<response/>")

    def test_bytes(self) -> None:
        request = RequestMock(b"<request/>")
        response = Response(data=b"<response/>", request=request)

        self.assertEqual(bytes(response), b"<response/>")

    def test_request(self) -> None:
        request = RequestMock(b"<request/>")
        response = Response(data=b"<response/>", request=request)

        self.assertEqual(response.request, request)

    def test_status_code(self):
        request = RequestMock(b"<request/>")
        response = Response(data=b"<response/>", request=request)
        self.assertIsNone(response.status_code)

        response = Response(data=b'<response status="abc"/>', request=request)
        self.assertIsNone(response.status_code)

        response = Response(data=b'<response status="123"/>', request=request)
        self.assertEqual(response.status_code, 123)

    def test_is_success(self):
        request = RequestMock(b"<request/>")
        response = Response(data=b"<response/>", request=request)
        self.assertFalse(response.is_success)

        response = Response(data=b'<response status="abc"/>', request=request)
        self.assertFalse(response.is_success)

        response = Response(data=b'<response status="123"/>', request=request)
        self.assertFalse(response.is_success)

        response = Response(data=b'<response status="234"/>', request=request)
        self.assertTrue(response.is_success)

    def test_raise_for_status(self):
        request = RequestMock(b"<request/>")
        response = Response(data=b"<response/>", request=request)

        with self.assertRaisesRegex(StatusError, "^Invalid status code None$"):
            response.raise_for_status()

        response = Response(data=b'<response status="abc"/>', request=request)
        with self.assertRaisesRegex(StatusError, "^Invalid status code None$"):
            response.raise_for_status()

        response = Response(data=b'<response status="123"/>', request=request)
        with self.assertRaisesRegex(StatusError, "^Invalid status code 123$"):
            response.raise_for_status()

        response = Response(data=b'<response status="234"/>', request=request)
        self.assertIs(response.raise_for_status(), response)

    def test_xml(self):
        request = RequestMock(b"<request/>")
        response = Response(
            data=b'<response><some data="lorem"/></response>', request=request
        )

        xml = response.xml()
        self.assertIsInstance(xml, Element)

        self.assertEqual(xml.tag, "response")
        sub_element = xml[0]
        self.assertEqual(sub_element.tag, "some")
        self.assertEqual(sub_element.attrib["data"], "lorem")

    def test_invalid_xml(self):
        request = RequestMock(b"<request/>")
        response = Response(data=b"<response</response>", request=request)

        with self.assertRaisesRegex(
            XmlError, "^Invalid XML b'<response</response>'. Error was .*$"
        ):
            response.xml()