PHP 8.5.2
Preview: test_postfix.py Size: 4.32 KB
/lib/python3/dist-packages/twisted/test/test_postfix.py

# Copyright (c) Twisted Matrix Laboratories.
# See LICENSE for details.

"""
Test cases for twisted.protocols.postfix module.
"""

from typing import Dict, List, Tuple

from twisted.internet.testing import StringTransport
from twisted.protocols import postfix
from twisted.trial import unittest


class PostfixTCPMapQuoteTests(unittest.TestCase):
    data = [
        # (raw, quoted, [aliasQuotedForms]),
        (b"foo", b"foo"),
        (b"foo bar", b"foo%20bar"),
        (b"foo\tbar", b"foo%09bar"),
        (b"foo\nbar", b"foo%0Abar", b"foo%0abar"),
        (
            b"foo\r\nbar",
            b"foo%0D%0Abar",
            b"foo%0D%0abar",
            b"foo%0d%0Abar",
            b"foo%0d%0abar",
        ),
        (b"foo ", b"foo%20"),
        (b" foo", b"%20foo"),
    ]

    def testData(self):
        for entry in self.data:
            raw = entry[0]
            quoted = entry[1:]

            self.assertEqual(postfix.quote(raw), quoted[0])
            for q in quoted:
                self.assertEqual(postfix.unquote(q), raw)


class PostfixTCPMapServerTestCase:
    data: Dict[bytes, bytes] = {
        # 'key': 'value',
    }

    chat: List[Tuple[bytes, bytes]] = [
        # (input, expected_output),
    ]

    def test_chat(self):
        """
        Test that I{get} and I{put} commands are responded to correctly by
        L{postfix.PostfixTCPMapServer} when its factory is an instance of
        L{postifx.PostfixTCPMapDictServerFactory}.
        """
        factory = postfix.PostfixTCPMapDictServerFactory(self.data)
        transport = StringTransport()

        protocol = postfix.PostfixTCPMapServer()
        protocol.service = factory
        protocol.factory = factory
        protocol.makeConnection(transport)

        for input, expected_output in self.chat:
            protocol.lineReceived(input)
            self.assertEqual(
                transport.value(),
                expected_output,
                "For %r, expected %r but got %r"
                % (input, expected_output, transport.value()),
            )
            transport.clear()
        protocol.setTimeout(None)

    def test_deferredChat(self):
        """
        Test that I{get} and I{put} commands are responded to correctly by
        L{postfix.PostfixTCPMapServer} when its factory is an instance of
        L{postifx.PostfixTCPMapDeferringDictServerFactory}.
        """
        factory = postfix.PostfixTCPMapDeferringDictServerFactory(self.data)
        transport = StringTransport()

        protocol = postfix.PostfixTCPMapServer()
        protocol.service = factory
        protocol.factory = factory
        protocol.makeConnection(transport)

        for input, expected_output in self.chat:
            protocol.lineReceived(input)
            self.assertEqual(
                transport.value(),
                expected_output,
                "For {!r}, expected {!r} but got {!r}".format(
                    input, expected_output, transport.value()
                ),
            )
            transport.clear()
        protocol.setTimeout(None)

    def test_getException(self):
        """
        If the factory throws an exception,
        error code 400 must be returned.
        """

        class ErrorFactory:
            """
            Factory that raises an error on key lookup.
            """

            def get(self, key):
                raise Exception("This is a test error")

        server = postfix.PostfixTCPMapServer()
        server.factory = ErrorFactory()
        server.transport = StringTransport()
        server.lineReceived(b"get example")
        self.assertEqual(server.transport.value(), b"400 This is a test error\n")


class ValidTests(PostfixTCPMapServerTestCase, unittest.TestCase):
    data = {
        b"foo": b"ThisIs Foo",
        b"bar": b" bar really is found\r\n",
    }
    chat = [
        (b"get", b"400 Command 'get' takes 1 parameters.\n"),
        (b"get foo bar", b"500 \n"),
        (b"put", b"400 Command 'put' takes 2 parameters.\n"),
        (b"put foo", b"400 Command 'put' takes 2 parameters.\n"),
        (b"put foo bar baz", b"500 put is not implemented yet.\n"),
        (b"put foo bar", b"500 put is not implemented yet.\n"),
        (b"get foo", b"200 ThisIs%20Foo\n"),
        (b"get bar", b"200 %20bar%20really%20is%20found%0D%0A\n"),
        (b"get baz", b"500 \n"),
        (b"foo", b"400 unknown command\n"),
    ]

Directory Contents

Dirs: 1 × Files: 104

Name Size Perms Modified Actions
- drwxr-xr-x 2026-01-08 12:56:24
Edit Download
1.46 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
654 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
34.88 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
18.40 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
1.63 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
1.25 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
172 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
172 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
925 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
400 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
566 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
123 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
214 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
983 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
233 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
268 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
297 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
178 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
220 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
739 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
787 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
130 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
1.15 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
1.34 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
60 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
81 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
48 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
5.23 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
1.72 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
1.14 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
2.00 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
1.06 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
1.13 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
1.55 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
1.45 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
902 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
894 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download
5.06 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
3.66 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
25.47 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
108.04 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
33.34 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
17.75 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
1.43 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
20.84 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
143.37 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
13.01 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
6.90 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
9.60 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
4.46 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
7.28 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
1.89 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
4.27 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
126.96 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
2.65 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
3.19 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
6.56 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
45.38 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
9.58 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
13.31 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
15.54 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
36.86 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
17.79 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
13.99 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
2.12 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
24.69 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
17.84 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
6.38 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
73.64 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
12.23 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
14.73 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
26.02 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
32.28 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
4.32 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
86.29 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
7.16 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
3.63 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
7.40 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
23.89 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
1.65 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
1.91 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
24.90 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
5.53 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
17.09 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
22.73 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
113.84 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
1.97 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
12.43 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
5.10 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
1.67 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
47.73 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
64.26 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
12.73 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
6.47 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
3.26 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
21.64 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
12.90 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
1.69 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
72.29 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
6.13 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
26.79 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
13.26 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
22.76 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
475 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).