def setUp(self, maxW=2): self.maxW = maxW EmailValidator.THREAD_IDLE_SEC = 0.1 self.email_validator = EmailValidator("checked_emails", maxWorkers=self.maxW) now = time.time() obj = MagicMock() # init the cache with one value already resolved to invalid # we expect the resolvation function not to be called for this email obj.checked_emails = {'*****@*****.**': (False, now), '*****@*****.**': (True, now), '*****@*****.**': (False, now - (EmailValidator.VERIFY_EMAIL_BADADDRESS_TTL + 1)), '*****@*****.**': (False, now - (EmailValidator.VERIFY_EMAIL_GOODADDRESS_TTL + 1)), } self.email_validator.bind(obj)
class EmailValidatorTest(unittest.TestCase): def setUp(self, maxW=2): self.maxW = maxW EmailValidator.THREAD_IDLE_SEC = 0.1 self.email_validator = EmailValidator("checked_emails", maxWorkers=self.maxW) now = time.time() obj = MagicMock() # init the cache with one value already resolved to invalid # we expect the resolvation function not to be called for this email obj.checked_emails = {'*****@*****.**': (False, now), '*****@*****.**': (True, now), '*****@*****.**': (False, now - (EmailValidator.VERIFY_EMAIL_BADADDRESS_TTL + 1)), '*****@*****.**': (False, now - (EmailValidator.VERIFY_EMAIL_GOODADDRESS_TTL + 1)), } self.email_validator.bind(obj) def test_validate_from_cache(self): r = self.email_validator.validate_from_cache('*****@*****.**') self.assertEqual(r, False) r = self.email_validator.validate_from_cache('*****@*****.**') self.assertEqual(r, True) r = self.email_validator.validate_from_cache('*****@*****.**') self.assertEqual(r, None) r = self.email_validator.validate_from_cache('*****@*****.**') self.assertEqual(r, None) r = self.email_validator.validate_from_cache('*****@*****.**') self.assertEqual(r, None) @patch('Products.NaayaCore.EmailTool.EmailValidator.validate_email') def test_enqueue(self, mock_validate_email): # make resolvation function always return true (valid) mock_validate_email.return_value = True emails = ['*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**'] for email in emails: self.email_validator.enqueue(email) self.assertEqual(len(self.email_validator._workers), self.maxW) time.sleep(EmailValidator.THREAD_IDLE_SEC + 0.05) # they are all in the cache either True or False for email in emails: r = self.email_validator.validate_from_cache(email) self.assertNotEqual(r, None) # after the sleep period all the threads exited for th in self.email_validator._workers.values(): self.assertFalse(th['running']) @patch('Products.NaayaCore.EmailTool.EmailValidator.validate_email') def test_enqueue_retry(self, mock_validate_email): self.setUp(1) # make resolvation function return invalid for nr of retries - 1 return_sequence = [False] * EmailValidator.VALIDATION_ATTEMPTS return_sequence[-1] = True mock_validate_email.side_effect = return_sequence email = '*****@*****.**' self.email_validator.enqueue(email) time.sleep(0.1) self.assertTrue(self.email_validator.validate_from_cache(email))
import random import re import time try: import email.utils as email_utils import email.charset as email_charset import email.header as email_header import email.generator as email_generator except ImportError, e: import email.Utils as email_utils import email.Charset as email_charset import email.Header as email_header import email.Generator as email_generator email_validator = EmailValidator("checked_emails", maxWorkers=10) g_utils = utils.utils() mail_logger = logging.getLogger('naaya.core.email') log = logging.getLogger('Products.NaayaCore.EmailTool') try: import email.message except ImportError: def create_plain_message(body_bytes): """ This is just a simple factory for message instance (with payload) that works with both email.MIMEText (python 2.4) and email.message (python 2.6)