mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 11:49:12 +00:00 
			
		
		
		
	I have compared output between pre- and post-patch runs of these tests to make sure there's nothing missing and nothing broken, on both Windows and Linux. The only differences I found were actually tests that were previously *not* run.
		
			
				
	
	
		
			83 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import unittest
 | 
						|
from test import support
 | 
						|
import smtplib
 | 
						|
import socket
 | 
						|
 | 
						|
ssl = support.import_module("ssl")
 | 
						|
 | 
						|
support.requires("network")
 | 
						|
 | 
						|
def check_ssl_verifiy(host, port):
 | 
						|
    context = ssl.create_default_context()
 | 
						|
    with socket.create_connection((host, port)) as sock:
 | 
						|
        try:
 | 
						|
            sock = context.wrap_socket(sock, server_hostname=host)
 | 
						|
        except Exception:
 | 
						|
            return False
 | 
						|
        else:
 | 
						|
            sock.close()
 | 
						|
            return True
 | 
						|
 | 
						|
 | 
						|
class SmtpTest(unittest.TestCase):
 | 
						|
    testServer = 'smtp.gmail.com'
 | 
						|
    remotePort = 587
 | 
						|
 | 
						|
    def test_connect_starttls(self):
 | 
						|
        support.get_attribute(smtplib, 'SMTP_SSL')
 | 
						|
        context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
 | 
						|
        with support.transient_internet(self.testServer):
 | 
						|
            server = smtplib.SMTP(self.testServer, self.remotePort)
 | 
						|
            try:
 | 
						|
                server.starttls(context=context)
 | 
						|
            except smtplib.SMTPException as e:
 | 
						|
                if e.args[0] == 'STARTTLS extension not supported by server.':
 | 
						|
                    unittest.skip(e.args[0])
 | 
						|
                else:
 | 
						|
                    raise
 | 
						|
            server.ehlo()
 | 
						|
            server.quit()
 | 
						|
 | 
						|
 | 
						|
class SmtpSSLTest(unittest.TestCase):
 | 
						|
    testServer = 'smtp.gmail.com'
 | 
						|
    remotePort = 465
 | 
						|
 | 
						|
    def test_connect(self):
 | 
						|
        support.get_attribute(smtplib, 'SMTP_SSL')
 | 
						|
        with support.transient_internet(self.testServer):
 | 
						|
            server = smtplib.SMTP_SSL(self.testServer, self.remotePort)
 | 
						|
            server.ehlo()
 | 
						|
            server.quit()
 | 
						|
 | 
						|
    def test_connect_default_port(self):
 | 
						|
        support.get_attribute(smtplib, 'SMTP_SSL')
 | 
						|
        with support.transient_internet(self.testServer):
 | 
						|
            server = smtplib.SMTP_SSL(self.testServer)
 | 
						|
            server.ehlo()
 | 
						|
            server.quit()
 | 
						|
 | 
						|
    def test_connect_using_sslcontext(self):
 | 
						|
        context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
 | 
						|
        support.get_attribute(smtplib, 'SMTP_SSL')
 | 
						|
        with support.transient_internet(self.testServer):
 | 
						|
            server = smtplib.SMTP_SSL(self.testServer, self.remotePort, context=context)
 | 
						|
            server.ehlo()
 | 
						|
            server.quit()
 | 
						|
 | 
						|
    def test_connect_using_sslcontext_verified(self):
 | 
						|
        with support.transient_internet(self.testServer):
 | 
						|
            can_verify = check_ssl_verifiy(self.testServer, self.remotePort)
 | 
						|
            if not can_verify:
 | 
						|
                self.skipTest("SSL certificate can't be verified")
 | 
						|
 | 
						|
        support.get_attribute(smtplib, 'SMTP_SSL')
 | 
						|
        context = ssl.create_default_context()
 | 
						|
        with support.transient_internet(self.testServer):
 | 
						|
            server = smtplib.SMTP_SSL(self.testServer, self.remotePort, context=context)
 | 
						|
            server.ehlo()
 | 
						|
            server.quit()
 | 
						|
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    unittest.main()
 |