123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- # Copyright (c) Twisted Matrix Laboratories.
- # See LICENSE for details.
-
- """
- Test cases for twisted.protocols.postfix module.
- """
-
- from typing import Dict, List, Tuple
-
- from twisted.protocols import postfix
- from twisted.test.proto_helpers import StringTransport
- 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"),
- ]
|