forked from mindw/wincertstore
-
Notifications
You must be signed in to change notification settings - Fork 0
/
tests.py
94 lines (81 loc) · 2.82 KB
/
tests.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/usr/bin/env python
#
# Copyright (c) 2013 by Christian Heimes <christian@python.org>
# Licensed to PSF under a Contributor Agreement.
# See http://www.python.org/psf/license for licensing details.
#
import os
import pprint
import socket
import sys
import unittest
import ssl
import wincertstore
if sys.version_info[0] == 3:
def b(s):
return s.encode("ascii")
else:
def b(s):
return s
class TestWinCertStore(unittest.TestCase):
def test_wincertstore(self):
store = wincertstore.CertSystemStore("ROOT")
try:
for cert in store.itercerts():
pem = cert.get_pem()
enc = cert.get_encoded()
name = cert.get_name()
trust = cert.enhanced_keyusage_names()
self.assertEqual(ssl.DER_cert_to_PEM_cert(enc), pem)
self.assertEqual(ssl.PEM_cert_to_DER_cert(pem), enc)
for crl in store.itercrls():
pem = cert.get_pem()
finally:
store.close()
def create_certfile(self):
certfile = wincertstore.CertFile()
store = wincertstore.CertSystemStore("ROOT")
try:
certfile.addstore(store)
finally:
store.close()
certfile.addstore("CA")
return certfile
def test_certfile(self):
certfile = self.create_certfile()
pemfile = certfile.name
try:
self.assertTrue(os.path.isfile(pemfile))
self.assertTrue(pemfile.endswith("ca.pem"), pemfile)
self.assertEqual(certfile.read(), certfile.read())
finally:
certfile.close()
self.assertFalse(os.path.isfile(pemfile))
def test_certfile_ssl(self):
certfile = self.create_certfile()
try:
# based on example from SSL module docs
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(("pypi.python.org", 443))
ssl_sock = ssl.wrap_socket(sock,
ssl_version=ssl.PROTOCOL_TLSv1,
ca_certs=certfile.name,
cert_reqs=ssl.CERT_REQUIRED)
if 0:
print(repr(ssl_sock.getpeername()))
print(ssl_sock.cipher())
print(pprint.pformat(ssl_sock.getpeercert()))
ssl_sock.write(b("GET / HTTP/1.1\r\n"
"Host: www.google.com\r\n\r\n"))
data = ssl_sock.read()
ssl_sock.close()
finally:
certfile.close()
def _test_main():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestWinCertStore))
return suite
if __name__ == "__main__":
suite = _test_main()
result = unittest.TextTestRunner(verbosity=1).run(suite)
sys.exit(not result.wasSuccessful())