100% unit tests

- Add SANs to pathod SSLConfig
- Fix tricky SSL establishment error test. Lets see if it's platform portable.
This commit is contained in:
Aldo Cortesi 2015-04-19 10:43:16 +12:00
parent d8b79e9982
commit f332674ce1
3 changed files with 22 additions and 12 deletions

View File

@ -22,9 +22,15 @@ class PathodError(Exception):
class SSLOptions:
def __init__(self, confdir=CONFDIR, cn=None, not_after_connect=None,
request_client_cert=False, sslversion=tcp.SSLv23_METHOD,
ciphers=None, certs=None):
def __init__(self,
confdir=CONFDIR,
cn=None,
sans=(),
not_after_connect=None,
request_client_cert=False,
sslversion=tcp.SSLv23_METHOD,
ciphers=None,
certs=None):
self.confdir = confdir
self.cn = cn
self.certstore = certutils.CertStore.from_store(
@ -37,13 +43,14 @@ class SSLOptions:
self.request_client_cert = request_client_cert
self.ciphers = ciphers
self.sslversion = sslversion
self.sans = sans
def get_cert(self, name):
if self.cn:
name = self.cn
elif not name:
name = DEFAULT_CERT_DOMAIN
return self.certstore.get_cert(name, [])
return self.certstore.get_cert(name, self.sans)
class PathodHandler(tcp.BaseHandler):
@ -51,7 +58,9 @@ class PathodHandler(tcp.BaseHandler):
sni = None
def info(self, s):
logger.info("%s:%s: %s" % (self.address.host, self.address.port, str(s)))
logger.info(
"%s:%s: %s" % (self.address.host, self.address.port, str(s))
)
def handle_sni(self, connection):
self.sni = connection.get_servername()

View File

@ -78,7 +78,10 @@ class _TestDaemon:
class TestDaemonSSL(_TestDaemon):
ssl = True
ssloptions = pathod.SSLOptions(request_client_cert=True)
ssloptions = pathod.SSLOptions(
request_client_cert=True,
sans = ["test1.com", "test2.com"]
)
def test_sni(self):
c = pathoc.Pathoc(

View File

@ -206,16 +206,14 @@ class TestDaemon(CommonTests):
class TestDaemonSSL(CommonTests):
ssl = True
def _test_ssl_conn_failure(self):
def test_ssl_conn_failure(self):
c = tcp.TCPClient(("localhost", self.d.port))
c.rbufsize = 0
c.wbufsize = 0
c.connect()
try:
while 1:
c.wfile.write("\r\n\r\n\r\n")
except:
pass
c.wfile.write("\0\0\0\0")
tutils.raises(tcp.NetLibError, c.convert_to_ssl)
l = self.d.last_log()
assert l["type"] == "error"
assert "SSL" in l["msg"]