Attached please find a patch for poker-network that currently reflects
the differences between r5730 on coverage-poker-network branch and trunk
at the same revision.

This patch implements tests necessary to get full test coverage for
proxy.py.

If there are no objections, I will merge this patch into trunk on
Saturday 2009-05-16.  Please respond by then if you have objections.

The attached patch is copyrighted by me and licensed under
AGPLv3-or-later.

diff --git a/poker-network/ChangeLog b/poker-network/ChangeLog
index f0b1526..e8c9d73 100644
--- a/poker-network/ChangeLog
+++ b/poker-network/ChangeLog
@@ -1,3 +1,92 @@
+2009-05-10  Bradley M. Kuhn  <[email protected]>
+
+	* tests/test-proxy.py.in (ConnectorTestCase): Created class.
+	(ConnectorTestCase.test01_connector_setProxyHost_noColon): Wrote
+	test.
+	(ConnectorTestCase.test02_connector_setProxyHost_colonOnRight):
+	Wrote test.
+	(ConnectorTestCase.test03_connector_setProxyHost_portIsNotInt):
+	Wrote test.
+	(ConnectorTestCase.test04_connector_setProxyHost_colonOnLeft):
+	Wrote test.
+	(ConnectorTestCase.test05_connector_setProxyHost_fullyValid):
+	Wrote test.
+	(ConnectorTestCase.test07_connector_getDestination_contextIsNone):
+	Wrote test.
+	(ConnectorTestCase.test08_connector_getDestination_contextIsFalse):
+	Wrote test.
+	(ConnectorTestCase.test09_connector_getDestination_contextIsString):
+	Wrote test.
+	(ConnectorTestCase.test10_connector_getDestination_contextIsTrue):
+	Wrote test.
+
+2009-05-03  Bradley M. Kuhn  <[email protected]>
+
+	* tests/test-proxy.py.in
+	(ProxyClientProtocoTestCase.test05_Client_getPeer_contextIsNone):
+	Wrote test.
+	(ProxyClientProtocoTestCase.test06_Client_getPeer_contextIsFalse):
+	Wrote test.
+	(ProxyClientProtocoTestCase.test07_Client_getPeer_contextIsString):
+	Wrote test.
+	(ProxyClientProtocoTestCase.test08_Client_getPeer_contextIsTrue):
+	Wrote test.
+	(ProxyClientProtocoTestCase.setUp.sslClientInit): Added assignment
+	of clientSelf.addr
+	(ProxyClientProtocoTestCase.setUp.sslClientStartReading): Added
+	method; set ssl.Client.startReading to it on setUp().
+	(ProxyClientProtocoTestCase.tearDown): Restored
+	ssl.Client.startReading
+	(ProxyClientProtocoTestCase.test09_Client_connectDone_usesProxy):
+	Wrote test.
+	(ProxyClientProtocoTestCase.setUp.connectProtocolMakeConnection):
+	Wrote method.
+	(ProxyClientProtocoTestCase.tearDown): Added
+	ConnectProtocol.makeConnection.
+	(ProxyClientTestCase.setUp, ProxyClientTestCase.tearDown): Added
+	startTLS and startWriting replacements.
+	(ProxyClientTestCase.setUp): Switched callCounts as a dict
+	(ProxyClientTestCase.test10_Client_connectDone_noProxy_noContextFactory):
+	Wrote test.
+	(ProxyClientTestCase.test11_Client_connectDone_noProxy_withContextFactory):
+	Wrote test.
+
+2009-05-02  Bradley M. Kuhn  <[email protected]>
+
+
+	* tests/test-proxy.py.in (ProxyClientProtocoTestCase): Created
+	class.
+	(ProxyConnectProtocolTestCase): Renamed ProxyTestCase ->
+	ProxyConnectProtocolTestCase.
+	(ProxyClientProtocoTestCase.setUp): Wrote method.
+	(ProxyClientProtocoTestCase.tearDown): Wrote method.
+	(ProxyClientProtocoTestCase.test00_Client_init): Wrote test.
+	(MockSocket): Created class.
+	(ProxyClientProtocoTestCase.test01_Client_getHost_contextIsNone):
+	Wrote test.
+	(ProxyClientProtocoTestCase.test02_Client_getHost_contextIsFalse):
+	Wrote test.
+	(ProxyClientProtocoTestCase.test03_Client_getHost_contextIsString):
+	Wrote test.
+
+2009-04-26  Bradley M. Kuhn  <[email protected]>
+
+	* tests/test-proxy.py.in
+	(ProxyTestCase.test00_ConnectProtocol_init): Wrote test.
+	(MockTransport): Created mock up.
+	(ProxyTestCase.test01_ConnectProtocol_connectionMade): Wrote test.
+	(MockTransport._proxyConnectDone): Added method.
+	(ProxyTestCase.test02_ConnectProtocol_dataReceived_noNewlinesThere):
+	Wrote test.
+	(ProxyTestCase.test03_ConnectProtocol_dataReceived_newlinesThere_badString):
+	Wrote test.
+	(ProxyTestCase.test04_ConnectProtocol_dataReceived_newlinesThere_GoodHTTPString):
+	Wrote test.
+	(ProxyTestCase.test05_ConnectProtocol_dataReceived_HTTP10ConsideredHarmful):
+	Wrote test.
+	(ProxyConnectProtocolTestCase): Renamed ProxyTestCase to
+	ProxyConnectProtocolTestCase.
+
 2009-04-19  Bradley M. Kuhn  <[email protected]>
 
 	* tests/run.in (COVERAGE_100_PERCENT): Added pokermemchache.py.
diff --git a/poker-network/configure.ac b/poker-network/configure.ac
index 01e7b14..1ac1370 100644
--- a/poker-network/configure.ac
+++ b/poker-network/configure.ac
@@ -341,6 +341,7 @@ AC_CONFIG_FILES([
         tests/test-pokerauth.py
         tests/test-pokersql.py
         tests/test-pokertable.py
+        tests/test-proxy.py
         tests/test-proxyfilter.py
         tests/test-countfilter.py
         tests/test-string.py
diff --git a/poker-network/tests/Makefile.am b/poker-network/tests/Makefile.am
index ad31cd8..2804a12 100644
--- a/poker-network/tests/Makefile.am
+++ b/poker-network/tests/Makefile.am
@@ -119,6 +119,7 @@ TESTS = coverage-reset \
 	test-pokersite.py \
 	test-pokermemcache.py \
 	test-proxyfilter.py \
+	test-proxy.py \
 	test-pokerserver.py \
 	testcurrency.php \
 	testpoker.php \
diff --git a/poker-network/tests/run.in b/poker-network/tests/run.in
index bdd3be5..7647aed 100644
--- a/poker-network/tests/run.in
+++ b/poker-network/tests/run.in
@@ -80,6 +80,7 @@ COVERAGE_100_PERCENT="
 ../pokernetwork/protocol
 ../pokernetwork/server
 ../pokernetwork/client
+../pokernetwork/proxy
 ../pokernetwork/pokercashier
 ../pokernetwork/pokerauthmysql
 ../pokernetwork/user
diff --git a/poker-network/tests/test-proxy.py.in b/poker-network/tests/test-proxy.py.in
new file mode 100644
index 0000000..b686c0c
--- /dev/null
+++ b/poker-network/tests/test-proxy.py.in
@@ -0,0 +1,515 @@
+...@python@
+# -*- mode: python; coding: iso-8859-1 -*-
+#
+# Copyright (C) 2009 Bradley M. Kuhn <[email protected]>
+#
+# This software's license gives you freedom; you can copy, convey,
+# propagate, redistribute and/or modify this program under the terms of
+# the GNU Affero General Public License (AGPL) as published by the Free
+# Software Foundation (FSF), either version 3 of the License, or (at your
+# option) any later version of the AGPL published by the FSF.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Affero
+# General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program in a file in the toplevel directory called
+# "AGPLv3".  If not, see <http://www.gnu.org/licenses/>.
+#
+# Authors:
+#  Bradley M. Kuhn <[email protected]>
+#
+import sys, os, tempfile, shutil
+sys.path.insert(0, "@srcdir@/..")
+sys.path.insert(0, "..")
+
+import time
+
+from tests import testclock
+
+from twisted.trial import unittest, runner, reporter
+import twisted.internet.base
+from twisted.internet import reactor, defer, address
+
+from pokernetwork.proxy import ConnectProtocol, Client, Connector
+
+twisted.internet.base.DelayedCall.debug = True
+
+from tests.testmessages import silence_all_messages, search_output, clear_all_messages, get_messages
+verbose = int(os.environ.get('VERBOSE_T', '-1'))
+silence_all_messages()
+# ----------------------------------------------------------------
+class MockTransport():
+    def __init__(self, bufSize = None):
+        self.bufferSize = bufSize
+        self.writtenData = []
+        self.proxyConnectDoneCallCount = 0
+    def write(self, value):      self.writtenData.append(value)
+    def _proxyConnectDone(self): self.proxyConnectDoneCallCount += 1
+# ----------------------------------------------------------------
+class ProxyConnectProtocolTestCase(unittest.TestCase):
+    def test00_ConnectProtocol_init(self):
+        cp = ConnectProtocol("myhost", "myport")
+        self.assertEquals(cp.host, "myhost")
+        self.assertEquals(cp.port, "myport")
+        self.assertEquals(cp.buffer, "")
+    # -------------------------------------------------------------------------
+    def test01_ConnectProtocol_connectionMade(self):
+        cp = ConnectProtocol("testhost", 3222)
+        cp.transport = MockTransport(23)
+        self.assertEquals(cp.transport.bufferSize, 23)
+        self.assertEquals(cp.transport.writtenData, [])
+
+        cp.connectionMade()
+        self.assertEquals(cp.bufferSize, 23)
+        self.assertEquals(cp.buffer, "")
+        self.assertEquals(cp.transport.bufferSize, 1)
+        self.assertEquals(cp.transport.writtenData,
+                          ['CONNECT testhost:3222 HTTP/1.0\n\n'])
+        self.assertEquals(cp.transport.proxyConnectDoneCallCount, 0)
+    # -------------------------------------------------------------------------
+    def test02_ConnectProtocol_dataReceived_noNewlinesThere(self):
+        cp = ConnectProtocol("somewhere.example.org", 2723)
+        cp.transport = MockTransport(99)
+        self.assertEquals(cp.transport.bufferSize, 99)
+        self.assertEquals(cp.transport.writtenData, [])
+
+        cp.dataReceived("There are no newlines in this data\rbut has\rback-rs")
+        self.failIf(hasattr(cp, 'bufferSize'),
+                    "bufferSize not created by mere receive")
+        self.assertEquals(cp.buffer,
+                          "There are no newlines in this data\rbut has\rback-rs")
+        self.assertEquals(cp.transport.bufferSize, 99)
+        self.assertEquals(cp.transport.writtenData, [])
+        self.assertEquals(cp.transport.proxyConnectDoneCallCount, 0)
+    # -------------------------------------------------------------------------
+    def test03_ConnectProtocol_dataReceived_newlinesThere_badString(self):
+        cp = ConnectProtocol("somewhere.example.org", 2723)
+        cp.transport = MockTransport(99)
+        self.assertEquals(cp.transport.bufferSize, 99)
+        self.assertEquals(cp.transport.writtenData, [])
+
+        caughtIt = False
+        try:
+            cp.dataReceived("We got two newlines here\n\nBut we'll fail\rno HTTP")
+            self.fail("previous line should have thrown exception")
+        except Exception, e:
+            self.assertEquals(e.__str__(), "We got two newlines here\n\nBut we'll failno HTTP")
+            caughtIt = True
+        self.failUnless(caughtIt, "Should have caught an Exception")
+
+        self.failIf(hasattr(cp, 'bufferSize'),
+                    "bufferSize not created by mere receive")
+        self.assertEquals(cp.buffer,
+                          "We got two newlines here\n\nBut we'll fail\rno HTTP")
+        self.assertEquals(cp.transport.bufferSize, 99)
+        self.assertEquals(cp.transport.writtenData, [])
+        self.assertEquals(cp.transport.proxyConnectDoneCallCount, 0)
+    # -------------------------------------------------------------------------
+    def test04_ConnectProtocol_dataReceived_newlinesThere_GoodHTTPString(self):
+        cp = ConnectProtocol("another.example.org", 2222)
+        cp.transport = MockTransport(26)
+        self.assertEquals(cp.transport.bufferSize, 26)
+        self.assertEquals(cp.transport.writtenData, [])
+
+        cp.connectionMade()
+        self.assertEquals(cp.bufferSize, 26)
+        self.assertEquals(cp.buffer, "")
+        self.assertEquals(cp.transport.bufferSize, 1)
+        self.assertEquals(cp.transport.writtenData,
+                          ['CONNECT another.example.org:2222 HTTP/1.0\n\n'])
+        self.assertEquals(cp.transport.proxyConnectDoneCallCount, 0)
+
+        cp.dataReceived("HT\rTP\r/9\r.9\r          266\r\r\r\r\n\r\r\n\r\r")
+
+        self.assertEquals(cp.bufferSize, 26)
+        self.assertEquals(cp.buffer, "HT\rTP\r/9\r.9\r          266\r\r\r\r\n\r\r\n\r\r")
+        self.assertEquals(cp.bufferSize, cp.transport.bufferSize)
+        self.assertEquals(cp.transport.proxyConnectDoneCallCount, 1)
+        self.assertEquals(cp.transport.writtenData,
+                          ['CONNECT another.example.org:2222 HTTP/1.0\n\n'])
+    # -------------------------------------------------------------------------
+    def test05_ConnectProtocol_dataReceived_HTTP10ConsideredHarmful(self):
+        cp = ConnectProtocol("somewhere.example.org", 2723)
+        cp.transport = MockTransport(99)
+        self.assertEquals(cp.transport.bufferSize, 99)
+        self.assertEquals(cp.transport.writtenData, [])
+
+        caughtIt = False
+        try:
+            cp.dataReceived("HTTP/10.0 200\n\n")
+            self.fail("previous line should have thrown exception")
+        except Exception, e:
+            self.assertEquals(e.__str__(), "HTTP/10.0 200\n\n")
+            caughtIt = True
+        self.failUnless(caughtIt, "Should have caught an Exception")
+
+        self.failIf(hasattr(cp, 'bufferSize'),
+                    "bufferSize not created by mere receive")
+        self.assertEquals(cp.buffer, "HTTP/10.0 200\n\n")
+        self.assertEquals(cp.transport.bufferSize, 99)
+        self.assertEquals(cp.transport.writtenData, [])
+        self.assertEquals(cp.transport.proxyConnectDoneCallCount, 0)
+# ----------------------------------------------------------------
+class MockSocket():
+    def getsockname(self):
+        return ("mocksocket.example.org", 923)
+
+from twisted.internet import ssl, tcp
+
+class ProxyClientTestCase(unittest.TestCase):
+    # -------------------------------------------------------------------------
+    # setUp creates MockUp methods for pokernetwork.proxy.Client class.
+    # Note that many of the tests.  
+    def setUp(self):
+        self.client = None
+        self.saveMethods = {}
+
+        def sslClientInit(clientSelf, host, port, bindAddress, contextFactory, connector, reactor):
+            clientSelf.callCounts = {}
+            for ss in ['startReading', 'makeConnection', 'startWriting',                       'startTLS', 'connectionDone', 'tcpConnectDone' ]:
+                clientSelf.callCounts[ss] = 0
+
+            clientSelf.addr = (host, port)
+            clientSelf.socket = MockSocket()
+            self.assertEquals(contextFactory, clientSelf.contextFactory)
+
+        def sslClientStartReading(clientSelf):
+            clientSelf.callCounts['startReading'] += 1
+
+        def sslClientStartWriting(clientSelf):
+            clientSelf.callCounts['startWriting'] += 1
+
+        def sslClientStartTLS(clientSelf, contextFactory):
+            clientSelf.callCounts['startTLS'] += 1
+            self.assertEquals(clientSelf.contextFactory, contextFactory)
+
+        def connectProtocolMakeConnection(connectionSelf, clientSelf):
+            self.assertEquals(clientSelf, self.client)
+            clientSelf.callCounts['makeConnection'] += 1
+
+        def tcpClientConnectDone(clientSelf):
+            self.assertEquals(clientSelf, self.client)
+            clientSelf.callCounts['tcpConnectDone'] += 1
+
+        self.saveMethods['sslClientInit'] = ssl.Client.__init__
+        self.saveMethods['sslClientStartTLS'] = ssl.Client.startTLS
+        self.saveMethods['sslClientStartWriting'] = ssl.Client.startWriting
+        self.saveMethods['sslClientStartReading'] = ssl.Client.startReading
+        self.saveMethods['cpMakeConnection'] = ConnectProtocol.makeConnection
+        self.saveMethods['tcpClientConnectDone'] = tcp.Client._connectDone
+        ssl.Client.__init__ = sslClientInit
+        ssl.Client.startReading = sslClientStartReading
+        ConnectProtocol.makeConnection = connectProtocolMakeConnection
+        ssl.Client.startTLS = sslClientStartTLS
+        ssl.Client.startWriting = sslClientStartWriting
+        tcp.Client._connectDone = tcpClientConnectDone
+    # -------------------------------------------------------------------------
+    def tearDown(self):
+        ssl.Client.__init__ = self.saveMethods['sslClientInit']
+        ssl.Client.startReading = self.saveMethods['sslClientStartReading']
+        ConnectProtocol.makeConnection = self.saveMethods['cpMakeConnection']
+        ssl.Client.startTLS = self.saveMethods['sslClientStartTLS']
+        ssl.Client.startWriting = self.saveMethods['sslClientStartWriting']
+        tcp.Client._connectDone = self.saveMethods['tcpClientConnectDone']
+    # -------------------------------------------------------------------------
+    def test00_Client_init(self):
+        self.client = Client("testhost", 7677, "bindaddr", "fakecontext", 
+                             "fakeconnector", "fakeproxy")
+        self.assertEquals(self.client.proxy, "fakeproxy")
+        self.assertEquals(self.client.contextFactory, "fakecontext")
+    # -------------------------------------------------------------------------
+    def test01_Client_getHost_contextIsNone(self):
+        self.client = Client("testhost", 7677, "bindaddr", None, 
+                             "fakeconnector", "fakeproxy")
+        host = self.client.getHost()
+        self.assertEquals(host._bwHack, 'INET')
+        self.assertEquals(host.host, 'mocksocket.example.org')
+        self.assertEquals(host.type, 'TCP')
+        self.assertEquals(host.port, 923)
+    # -------------------------------------------------------------------------
+    def test02_Client_getHost_contextIsFalse(self):
+        self.client = Client("testhost", 7677, "bindaddr", False, 
+                             "fakeconnector", "fakeproxy")
+        host = self.client.getHost()
+        self.assertEquals(host._bwHack, 'INET')
+        self.assertEquals(host.host, 'mocksocket.example.org')
+        self.assertEquals(host.type, 'TCP')
+        self.assertEquals(host.port, 923)
+    # -------------------------------------------------------------------------
+    def test03_Client_getHost_contextIsString(self):
+        self.client = Client("testhost", 7677, "bindaddr", "ContextISString", 
+                             "fakeconnector", "fakeproxy")
+        host = self.client.getHost()
+        self.assertEquals(host._bwHack, 'SSL')
+        self.assertEquals(host.host, 'mocksocket.example.org')
+        self.assertEquals(host.type, 'TCP')
+        self.assertEquals(host.port, 923)
+    # -------------------------------------------------------------------------
+    def test04_Client_getHost_contextIsTrue(self):
+        self.client = Client("testhost", 7677, "bindaddr", True,
+                             "fakeconnector", "fakeproxy")
+        host = self.client.getHost()
+        self.assertEquals(host._bwHack, 'SSL')
+        self.assertEquals(host.host, 'mocksocket.example.org')
+        self.assertEquals(host.type, 'TCP')
+        self.assertEquals(host.port, 923)
+    # -------------------------------------------------------------------------
+    def test05_Client_getPeer_contextIsNone(self):
+        self.client = Client("testhost", 7677, "bindaddr", None, 
+                             "fakeconnector", "fakeproxy")
+        host = self.client.getPeer()
+        self.assertEquals(host._bwHack, 'INET')
+        self.assertEquals(host.host, 'testhost')
+        self.assertEquals(host.type, 'TCP')
+        self.assertEquals(host.port, 7677)
+    # -------------------------------------------------------------------------
+    def test06_Client_getPeer_contextIsFalse(self):
+        self.client = Client("testhost", 7677, "bindaddr", False, 
+                             "fakeconnector", "fakeproxy")
+        host = self.client.getPeer()
+        self.assertEquals(host._bwHack, 'INET')
+        self.assertEquals(host.host, 'testhost')
+        self.assertEquals(host.type, 'TCP')
+        self.assertEquals(host.port, 7677)
+    # -------------------------------------------------------------------------
+    def test07_Client_getPeer_contextIsString(self):
+        self.client = Client("testhost", 7677, "bindaddr", "ContextISString", 
+                             "fakeconnector", "fakeproxy")
+        host = self.client.getPeer()
+        self.assertEquals(host._bwHack, 'SSL')
+        self.assertEquals(host.host, 'testhost')
+        self.assertEquals(host.type, 'TCP')
+        self.assertEquals(host.port, 7677)
+    # -------------------------------------------------------------------------
+    def test08_Client_getPeer_contextIsTrue(self):
+        self.client = Client("testhost", 7677, "bindaddr", True,
+                             "fakeconnector", "fakeproxy")
+        host = self.client.getPeer()
+        self.assertEquals(host._bwHack, 'SSL')
+        self.assertEquals(host.host, 'testhost')
+        self.assertEquals(host.type, 'TCP')
+        self.assertEquals(host.port, 7677)
+    # -------------------------------------------------------------------------
+    def test09_Client_connectDone_usesProxy(self):
+        self.client = Client("testhost", 7677, "bindaddr", True,
+                             "fakeconnector", "fakeproxy")
+        self.client.proxy = ("proxy.example.org", 215)
+        host = self.client._connectDone()
+        self.assertEquals(self.client.connected, 1)
+        self.assertEquals(self.client.logstr, 'ConnectProtocol,client')
+
+        for ss in self.client.callCounts.keys():
+            val = 0
+            if ss == 'startReading' or ss == 'makeConnection': val = 1
+            self.assertEquals(self.client.callCounts[ss], val)
+    # -------------------------------------------------------------------------
+    def test09_Client_connectDone_usesProxy(self):
+        self.client = Client("testhost", 7677, "bindaddr", True,
+                             "fakeconnector", "fakeproxy")
+        self.client.proxy = ("proxy.example.org", 215)
+        host = self.client._connectDone()
+        self.assertEquals(self.client.connected, 1)
+        self.assertEquals(self.client.logstr, 'ConnectProtocol,client')
+
+        for ss in self.client.callCounts.keys():
+            val = 0
+            if ss == 'startReading' or ss == 'makeConnection': val = 1
+            self.assertEquals(self.client.callCounts[ss], val)
+
+        self.assertEquals(self.client.protocol.host, "proxy.example.org")
+        self.assertEquals(self.client.protocol.port, 215)
+    # -------------------------------------------------------------------------
+    def test10_Client_connectDone_noProxy_noContextFactory(self):
+        self.client = Client("testhost", 7677, "bindaddr", None,
+                             "fakeconnector", "fakeproxy")
+        self.client.proxy = None
+        host = self.client._connectDone()
+
+        self.assertEquals(self.client.connected, 0)
+        self.assertEquals(self.client.logstr, 'Uninitialized')
+        self.assertEquals(self.client.protocol, None)
+
+        for ss in self.client.callCounts.keys():
+            val = 0
+            if ss == 'tcpConnectDone': val = 1
+            self.assertEquals(self.client.callCounts[ss], val)
+    # -------------------------------------------------------------------------
+    def test11_Client_connectDone_noProxy_withContextFactory(self):
+        self.client = Client("testhost", 7677, "bindaddr", "FakeContextFactory",
+                             "fakeconnector", "fakeproxy")
+        self.client.proxy = None
+        host = self.client._connectDone()
+
+        self.assertEquals(self.client.connected, 0)
+        self.assertEquals(self.client.logstr, 'Uninitialized')
+        self.assertEquals(self.client.protocol, None)
+
+        for ss in self.client.callCounts.keys():
+            val = 0
+            if ss == 'tcpConnectDone' or ss == 'startTLS' or ss == 'startWriting':
+               val = 1
+            self.assertEquals(self.client.callCounts[ss], val)
+# ----------------------------------------------------------------
+class ConnectorTestCase(unittest.TestCase):
+    def setUp(self):
+        self.connector = None
+        self.saveMethods = {}
+
+        def sslConnectorInit(conSelf, host, port, factory, contextFactory, timeout, bindAddr, reactor):
+            self.assertEquals(conSelf.proxy, None)
+            self.assertEquals(conSelf.host, host)
+            self.assertEquals(conSelf.port, port)
+            conSelf.bindAddress = bindAddr
+            conSelf.contextFactory = contextFactory
+            conSelf.reactor = reactor
+
+        def sslClientInit(clientSelf, host, port, bindAddress, contextFactory, connector, reactor):
+            self.assertEquals(contextFactory, clientSelf.contextFactory)
+            self.assertEquals(contextFactory, self.connector.contextFactory)
+            self.assertEquals(bindAddress, self.connector.bindAddress)
+            self.assertEquals(reactor, self.connector.reactor)
+            self.assertEquals(host, self.connector.host)
+            self.assertEquals(port, self.connector.port)
+
+        self.saveMethods['sslClientInit'] = ssl.Client.__init__
+        ssl.Client.__init__ = sslClientInit
+        self.saveMethods['sslConnectorInit'] = ssl.Connector.__init__
+        ssl.Connector.__init__ = sslConnectorInit
+    # -------------------------------------------------------------------------
+    def tearDown(self):
+        ssl.Client.__init__ = self.saveMethods['sslClientInit']
+        ssl.Connector.__init__ = self.saveMethods['sslConnectorInit']
+    # -------------------------------------------------------------------------
+    def test00_connector_init(self):
+        self.connector = Connector("fake.example.org", 1233, None,
+                                   None, None, None)
+    # -------------------------------------------------------------------------
+    def test01_connector_setProxyHost_noColon(self):
+        self.connector = Connector("fake.example.org", 1233, None,
+                                   None, None, None)
+        self.assertEquals(self.connector.proxy, None)
+        caughtIt = False
+        try:
+            self.connector.setProxyHost("proxy.example.org")
+        except IndexError, ie:
+            self.assertEquals(ie.__str__(), "list index out of range")
+            caughtIt = True
+        self.failUnless(caughtIt, "Should have caught an IndexError")
+    # -------------------------------------------------------------------------
+    def test02_connector_setProxyHost_colonOnRight(self):
+        self.connector = Connector("fake.example.org", 1233, None,
+                                   None, None, None)
+        self.assertEquals(self.connector.proxy, None)
+        caughtIt = False
+        try:
+            self.connector.setProxyHost("proxy.example.org:")
+        except ValueError, ve:
+            self.assertEquals(ve.__str__(),
+                              "invalid literal for int() with base 10: ''")
+            caughtIt = True
+        self.failUnless(caughtIt, "Should have caught an ValueError")
+    # -------------------------------------------------------------------------
+    def test03_connector_setProxyHost_portIsNotInt(self):
+        self.connector = Connector("fake.example.org", 1233, None,
+                                   None, None, None)
+        self.assertEquals(self.connector.proxy, None)
+        caughtIt = False
+        try:
+            self.connector.setProxyHost("proxy.example.org:my22port22")
+        except ValueError, ve:
+            self.assertEquals(ve.__str__(),
+                        "invalid literal for int() with base 10: 'my22port22'")
+            caughtIt = True
+        self.failUnless(caughtIt, "Should have caught an ValueError")
+    # -------------------------------------------------------------------------
+    def test04_connector_setProxyHost_colonOnLeft(self):
+        self.connector = Connector("fake.example.org", 1233, None,
+                                   None, None, None)
+        self.assertEquals(self.connector.proxy, None)
+
+        self.connector.setProxyHost(":555")
+
+        self.assertEquals(self.connector.proxy, ('', 555))
+    # -------------------------------------------------------------------------
+    def test05_connector_setProxyHost_fullyValid(self):
+        self.connector = Connector("fake.example.org", 1233, None,
+                                   None, None, None)
+        self.assertEquals(self.connector.proxy, None)
+
+        self.connector.setProxyHost("myproxy.example.org:274")
+
+        self.assertEquals(self.connector.proxy, ('myproxy.example.org', 274))
+    # -------------------------------------------------------------------------
+    def test06_connector_makeTransport(self):
+        self.connector = Connector("fake.example.org", 1233, None,
+                                   "conextFactoryDummy", None, 7634)
+        client = self.connector._makeTransport()
+        # Note: other checks in the setUp() init.
+        self.assertEquals(client.contextFactory, "conextFactoryDummy")
+    # -------------------------------------------------------------------------
+    def test07_connector_getDestination_contextIsNone(self):
+        self.connector = Connector("fake.example.org", 1233, None,
+                                   None, None, 7634)
+
+        host = self.connector.getDestination()
+        self.assertEquals(host._bwHack, 'INET')
+        self.assertEquals(host.host, 'fake.example.org')
+        self.assertEquals(host.type, 'TCP')
+        self.assertEquals(host.port, 1233)
+    # -------------------------------------------------------------------------
+    def test08_connector_getDestination_contextIsFalse(self):
+        self.connector = Connector("fake.example.org", 1234, None,
+                                   False, None, 7634)
+        host = self.connector.getDestination()
+        self.assertEquals(host._bwHack, 'INET')
+        self.assertEquals(host.host, 'fake.example.org')
+        self.assertEquals(host.type, 'TCP')
+        self.assertEquals(host.port, 1234)
+    # -------------------------------------------------------------------------
+    def test09_connector_getDestination_contextIsString(self):
+        self.connector = Connector("myfake.example.org", 1235, None,
+                                   "conextFactoryDummy", None, 7634)
+        host = self.connector.getDestination()
+        self.assertEquals(host._bwHack, 'SSL')
+        self.assertEquals(host.host, 'myfake.example.org')
+        self.assertEquals(host.type, 'TCP')
+        self.assertEquals(host.port, 1235)
+    # -------------------------------------------------------------------------
+    def test10_connector_getDestination_contextIsTrue(self):
+        self.connector = Connector("afake.example.org", 1400, None,
+                                   True, None, 7634)
+        host = self.connector.getDestination()
+        self.assertEquals(host._bwHack, 'SSL')
+        self.assertEquals(host.host, 'afake.example.org')
+        self.assertEquals(host.type, 'TCP')
+        self.assertEquals(host.port, 1400)
+# ----------------------------------------------------------------
+def Run():
+    loader = runner.TestLoader()
+#    loader.methodPrefix = "test_trynow"
+    suite = loader.suiteFactory()
+    suite.addTest(loader.loadClass(ProxyConnectProtocolTestCase))
+    suite.addTest(loader.loadClass(ProxyClientTestCase))
+    suite.addTest(loader.loadClass(ConnectorTestCase))
+    return runner.TrialRunner(
+        reporter.VerboseTextReporter,
+#       reporter.TextReporter,
+#	tracebackFormat='verbose',
+        tracebackFormat='default',
+        ).run(suite)
+
+# ----------------------------------------------------------------
+if __name__ == '__main__':
+    if Run().wasSuccessful():
+        sys.exit(0)
+    else:
+        sys.exit(1)
+
+
+# Interpreted by emacs
+# Local Variables:
+# compile-command: "( cd .. ; ./config.status tests/test-proxy.py ) ; ( cd ../tests ; make VERBOSE_T=-1 COVERAGE_FILES='../pokernetwork/proxy.py' TESTS='coverage-reset test-proxy.py coverage-report' check )"
+# End:
-- 

   -- bkuhn
_______________________________________________
Pokersource-users mailing list
[email protected]
https://mail.gna.org/listinfo/pokersource-users

Reply via email to