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))
Exemple #3
0
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)