123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- # Copyright (c) Twisted Matrix Laboratories.
- # See LICENSE for details.
- """
- Tests for L{twisted.protocols.haproxy._parser}.
- """
- from twisted.trial.unittest import SynchronousTestCase as TestCase
- from twisted.test.proto_helpers import MemoryReactor
- from twisted.internet.endpoints import (
- _WrapperServerEndpoint, TCP4ServerEndpoint, TCP6ServerEndpoint,
- UNIXServerEndpoint, serverFromString, _parse as parseEndpoint
- )
- from .._wrapper import HAProxyWrappingFactory
- from .._parser import unparseEndpoint
- class UnparseEndpointTests(TestCase):
- """
- Tests to ensure that un-parsing an endpoint string round trips through
- escaping properly.
- """
- def check(self, input):
- """
- Check that the input unparses into the output, raising an assertion
- error if it doesn't.
- @param input: an input in endpoint-string-description format. (To
- ensure determinism, keyword arguments should be in alphabetical
- order.)
- @type input: native L{str}
- """
- self.assertEqual(unparseEndpoint(*parseEndpoint(input)), input)
- def test_basicUnparse(self):
- """
- An individual word.
- """
- self.check("word")
- def test_multipleArguments(self):
- """
- Multiple arguments.
- """
- self.check("one:two")
- def test_keywords(self):
- """
- Keyword arguments.
- """
- self.check("aleph=one:bet=two")
- def test_colonInArgument(self):
- """
- Escaped ":".
- """
- self.check("hello\\:colon\\:world")
- def test_colonInKeywordValue(self):
- """
- Escaped ":" in keyword value.
- """
- self.check("hello=\\:")
- def test_colonInKeywordName(self):
- """
- Escaped ":" in keyword name.
- """
- self.check("\\:=hello")
- class HAProxyServerParserTests(TestCase):
- """
- Tests that the parser generates the correct endpoints.
- """
- def onePrefix(self, description, expectedClass):
- """
- Test the C{haproxy} enpdoint prefix against one sub-endpoint type.
- @param description: A string endpoint description beginning with
- C{haproxy}.
- @type description: native L{str}
- @param expectedClass: the expected sub-endpoint class given the
- description.
- @type expectedClass: L{type}
- @return: the parsed endpoint
- @rtype: L{IStreamServerEndpoint}
- @raise twisted.trial.unittest.Failtest: if the parsed endpoint doesn't
- match expectations.
- """
- reactor = MemoryReactor()
- endpoint = serverFromString(reactor, description)
- self.assertIsInstance(endpoint, _WrapperServerEndpoint)
- self.assertIsInstance(endpoint._wrappedEndpoint, expectedClass)
- self.assertIs(endpoint._wrapperFactory, HAProxyWrappingFactory)
- return endpoint
- def test_tcp4(self):
- """
- Test if the parser generates a wrapped TCP4 endpoint.
- """
- self.onePrefix('haproxy:tcp:8080', TCP4ServerEndpoint)
- def test_tcp6(self):
- """
- Test if the parser generates a wrapped TCP6 endpoint.
- """
- self.onePrefix('haproxy:tcp6:8080', TCP6ServerEndpoint)
- def test_unix(self):
- """
- Test if the parser generates a wrapped UNIX endpoint.
- """
- self.onePrefix('haproxy:unix:address=/tmp/socket', UNIXServerEndpoint)
|