PageRenderTime 43ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/edk2/AppPkg/Applications/Python/Python-2.7.2/Lib/test/test_imaplib.py

https://gitlab.com/envieidoc/Clover
Python | 240 lines | 179 code | 49 blank | 12 comment | 21 complexity | b1518399490a0165eff5a1134cbdcc65 MD5 | raw file
  1. from test import test_support as support
  2. # If we end up with a significant number of tests that don't require
  3. # threading, this test module should be split. Right now we skip
  4. # them all if we don't have threading.
  5. threading = support.import_module('threading')
  6. from contextlib import contextmanager
  7. import imaplib
  8. import os.path
  9. import SocketServer
  10. import time
  11. from test_support import reap_threads, verbose, transient_internet
  12. import unittest
  13. try:
  14. import ssl
  15. except ImportError:
  16. ssl = None
  17. CERTFILE = None
  18. class TestImaplib(unittest.TestCase):
  19. def test_that_Time2Internaldate_returns_a_result(self):
  20. # We can check only that it successfully produces a result,
  21. # not the correctness of the result itself, since the result
  22. # depends on the timezone the machine is in.
  23. timevalues = [2000000000, 2000000000.0, time.localtime(2000000000),
  24. '"18-May-2033 05:33:20 +0200"']
  25. for t in timevalues:
  26. imaplib.Time2Internaldate(t)
  27. if ssl:
  28. class SecureTCPServer(SocketServer.TCPServer):
  29. def get_request(self):
  30. newsocket, fromaddr = self.socket.accept()
  31. connstream = ssl.wrap_socket(newsocket,
  32. server_side=True,
  33. certfile=CERTFILE)
  34. return connstream, fromaddr
  35. IMAP4_SSL = imaplib.IMAP4_SSL
  36. else:
  37. class SecureTCPServer:
  38. pass
  39. IMAP4_SSL = None
  40. class SimpleIMAPHandler(SocketServer.StreamRequestHandler):
  41. timeout = 1
  42. def _send(self, message):
  43. if verbose: print "SENT:", message.strip()
  44. self.wfile.write(message)
  45. def handle(self):
  46. # Send a welcome message.
  47. self._send('* OK IMAP4rev1\r\n')
  48. while 1:
  49. # Gather up input until we receive a line terminator or we timeout.
  50. # Accumulate read(1) because it's simpler to handle the differences
  51. # between naked sockets and SSL sockets.
  52. line = ''
  53. while 1:
  54. try:
  55. part = self.rfile.read(1)
  56. if part == '':
  57. # Naked sockets return empty strings..
  58. return
  59. line += part
  60. except IOError:
  61. # ..but SSLSockets throw exceptions.
  62. return
  63. if line.endswith('\r\n'):
  64. break
  65. if verbose: print 'GOT:', line.strip()
  66. splitline = line.split()
  67. tag = splitline[0]
  68. cmd = splitline[1]
  69. args = splitline[2:]
  70. if hasattr(self, 'cmd_%s' % (cmd,)):
  71. getattr(self, 'cmd_%s' % (cmd,))(tag, args)
  72. else:
  73. self._send('%s BAD %s unknown\r\n' % (tag, cmd))
  74. def cmd_CAPABILITY(self, tag, args):
  75. self._send('* CAPABILITY IMAP4rev1\r\n')
  76. self._send('%s OK CAPABILITY completed\r\n' % (tag,))
  77. class BaseThreadedNetworkedTests(unittest.TestCase):
  78. def make_server(self, addr, hdlr):
  79. class MyServer(self.server_class):
  80. def handle_error(self, request, client_address):
  81. self.close_request(request)
  82. self.server_close()
  83. raise
  84. if verbose: print "creating server"
  85. server = MyServer(addr, hdlr)
  86. self.assertEqual(server.server_address, server.socket.getsockname())
  87. if verbose:
  88. print "server created"
  89. print "ADDR =", addr
  90. print "CLASS =", self.server_class
  91. print "HDLR =", server.RequestHandlerClass
  92. t = threading.Thread(
  93. name='%s serving' % self.server_class,
  94. target=server.serve_forever,
  95. # Short poll interval to make the test finish quickly.
  96. # Time between requests is short enough that we won't wake
  97. # up spuriously too many times.
  98. kwargs={'poll_interval':0.01})
  99. t.daemon = True # In case this function raises.
  100. t.start()
  101. if verbose: print "server running"
  102. return server, t
  103. def reap_server(self, server, thread):
  104. if verbose: print "waiting for server"
  105. server.shutdown()
  106. thread.join()
  107. if verbose: print "done"
  108. @contextmanager
  109. def reaped_server(self, hdlr):
  110. server, thread = self.make_server((support.HOST, 0), hdlr)
  111. try:
  112. yield server
  113. finally:
  114. self.reap_server(server, thread)
  115. @reap_threads
  116. def test_connect(self):
  117. with self.reaped_server(SimpleIMAPHandler) as server:
  118. client = self.imap_class(*server.server_address)
  119. client.shutdown()
  120. @reap_threads
  121. def test_issue5949(self):
  122. class EOFHandler(SocketServer.StreamRequestHandler):
  123. def handle(self):
  124. # EOF without sending a complete welcome message.
  125. self.wfile.write('* OK')
  126. with self.reaped_server(EOFHandler) as server:
  127. self.assertRaises(imaplib.IMAP4.abort,
  128. self.imap_class, *server.server_address)
  129. class ThreadedNetworkedTests(BaseThreadedNetworkedTests):
  130. server_class = SocketServer.TCPServer
  131. imap_class = imaplib.IMAP4
  132. @unittest.skipUnless(ssl, "SSL not available")
  133. class ThreadedNetworkedTestsSSL(BaseThreadedNetworkedTests):
  134. server_class = SecureTCPServer
  135. imap_class = IMAP4_SSL
  136. class RemoteIMAPTest(unittest.TestCase):
  137. host = 'cyrus.andrew.cmu.edu'
  138. port = 143
  139. username = 'anonymous'
  140. password = 'pass'
  141. imap_class = imaplib.IMAP4
  142. def setUp(self):
  143. with transient_internet(self.host):
  144. self.server = self.imap_class(self.host, self.port)
  145. def tearDown(self):
  146. if self.server is not None:
  147. self.server.logout()
  148. def test_logincapa(self):
  149. self.assertTrue('LOGINDISABLED' in self.server.capabilities)
  150. def test_anonlogin(self):
  151. self.assertTrue('AUTH=ANONYMOUS' in self.server.capabilities)
  152. rs = self.server.login(self.username, self.password)
  153. self.assertEqual(rs[0], 'OK')
  154. def test_logout(self):
  155. rs = self.server.logout()
  156. self.server = None
  157. self.assertEqual(rs[0], 'BYE')
  158. @unittest.skipUnless(ssl, "SSL not available")
  159. class RemoteIMAP_SSLTest(RemoteIMAPTest):
  160. port = 993
  161. imap_class = IMAP4_SSL
  162. def test_logincapa(self):
  163. self.assertFalse('LOGINDISABLED' in self.server.capabilities)
  164. self.assertTrue('AUTH=PLAIN' in self.server.capabilities)
  165. def test_main():
  166. tests = [TestImaplib]
  167. if support.is_resource_enabled('network'):
  168. if ssl:
  169. global CERTFILE
  170. CERTFILE = os.path.join(os.path.dirname(__file__) or os.curdir,
  171. "keycert.pem")
  172. if not os.path.exists(CERTFILE):
  173. raise support.TestFailed("Can't read certificate files!")
  174. tests.extend([
  175. ThreadedNetworkedTests, ThreadedNetworkedTestsSSL,
  176. RemoteIMAPTest, RemoteIMAP_SSLTest,
  177. ])
  178. support.run_unittest(*tests)
  179. if __name__ == "__main__":
  180. support.use_resources = ['network']
  181. test_main()