def test_copy_messages_by_uid(self): imap_receive(Mail.create(['user'])) imap_client = yield from self.login_user('user', 'pass', select=True) result, _ = yield from imap_client.uid('copy', '1', 'MAILBOX') self.assertEqual('OK', result) self.assertEquals(('OK', ['1']), (yield from imap_client.select('MAILBOX')))
def test_expunge_messages(self): imap_receive(Mail.create(['user'])) imap_receive(Mail.create(['user'])) imap_client = yield from self.login_user('user', 'pass', select=True) self.assertEquals(('OK', ['1', '2', 'EXPUNGE completed.']), (yield from imap_client.expunge())) self.assertEquals(('OK', ['0']), (yield from imap_client.select()))
def test_search_two_messages(self): imap_receive(Mail.create(['user'])) imap_receive(Mail.create(['user'])) imap_client = yield from self.login_user('user', 'pass', select=True) result, data = yield from imap_client.search('ALL') self.assertEqual('OK', result) self.assertEqual('1 2', data[0])
def test_concurrency_2_executing_same_async_commands_sequentially(self): imap_receive(Mail.create(['user'])) imap_client = yield from self.login_user('user', 'pass', select=True) f1 = asyncio. async (imap_client.fetch('1', '(RFC822)')) f2 = asyncio. async (imap_client.fetch('1', '(RFC822)')) yield from asyncio.wait([f1, f2]) self.assertIsNone(f1.exception()) self.assertIsNone(f2.exception())
def test_copy_messages(self): imap_receive(Mail.create(['user'])) imap_receive(Mail.create(['user'])) imap_client = yield from self.login_user('user', 'pass', select=True) result, _ = yield from imap_client.copy('1', '2', 'MAILBOX') self.assertEqual('OK', result) self.assertEquals( 2, extract_exists((yield from imap_client.select('MAILBOX'))))
def test_select_one_message_in_mailbox(self): imap_receive(Mail.create(to=['user'], mail_from='me', subject='hello')) imap_client = yield from self.login_user('user', 'pass') result, data = yield from asyncio.wait_for( self.loop.run_in_executor(None, functools.partial(imap_client.select)), 1) self.assertEqual('OK', result) self.assertEqual([b'1'], data)
def test_file_with_attachement(self): with open(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'data/test_attachment.eml'), mode='br') as msg: imap_client = yield from self.login_user('user@mail', 'pass', select=True) mail = Mail(email.message_from_binary_file(msg)) imap_receive(mail, imap_user='******') result, data = yield from imap_client.fetch('1', '(RFC822)') self.assertEqual('OK', result) self.assertEqual([b'* 1 FETCH (UID 1 RFC822 {418898}', mail.as_bytes(), 'FETCH completed.'], data)
def test_concurrency_4_sync_command_waits_for_async_commands_to_finish( self): imap_receive(Mail.create(['user'])) imap_client = yield from self.login_user('user', 'pass', select=True) asyncio. async (imap_client.copy('1', 'MBOX')) asyncio. async (imap_client.expunge()) examine = asyncio. async (imap_client.examine('MBOX')) self.assertEquals(('OK', ['1']), (yield from asyncio.wait_for(examine, 1)))
def test_expunge_messages(self): imap_receive(Mail.create(['user'])) imap_receive(Mail.create(['user'])) imap_client = yield from self.login_user('user', 'pass', select=True) yield from asyncio.wait_for( self.loop.run_in_executor(None, imap_client.expunge), 1) self.assertEquals(('OK', [b'0']), (yield from asyncio.wait_for( self.loop.run_in_executor( None, functools.partial(imap_client.select)), 1)))
def test_fetch_by_uid_without_body(self): imap_client = yield from self.login_user('user', 'pass', select=True) mail = Mail.create( ['user'], mail_from='me', subject='hello', content='pleased to meet you, wont you guess my name ?') imap_receive(mail) response = (yield from imap_client.uid('fetch', '1', '(UID FLAGS)')) self.assertEqual('OK', response.result) self.assertEquals('1 FETCH (UID 1 FLAGS ())', response.lines[0])
def test_fetch_by_uid(self): imap_client = yield from self.login_user('user', 'pass', select=True) mail = Mail.create( ['user'], mail_from='me', subject='hello', content='pleased to meet you, wont you guess my name ?') imap_receive(mail) response = (yield from imap_client.uid('fetch', '1', '(RFC822)')) self.assertEqual('OK', response.result) self.assertEquals(mail.as_bytes(), response.lines[1])
def test_search_by_uid_two_messages(self): imap_receive(Mail.create(['user'])) imap_receive(Mail.create(['user'])) imap_client = yield from self.login_user('user', 'pass', select=True) result, data = yield from asyncio.wait_for( self.loop.run_in_executor( None, functools.partial(imap_client.uid, 'search', 'utf-8', 'ALL')), 1) self.assertEqual('OK', result) self.assertEqual([b'1 2'], data)
def test_fetch(self): imap_client = yield from self.login_user('user', 'pass', select=True) mail = Mail.create( ['user'], mail_from='me', subject='hello', content='pleased to meet you, wont you guess my name ?') imap_receive(mail) result, data = yield from imap_client.fetch('1', '(RFC822)') self.assertEqual('OK', result) self.assertEqual([mail.as_bytes(), 'FETCH completed.'], data)
def test_copy_messages(self): imap_receive(Mail.create(['user'])) imap_receive(Mail.create(['user'])) imap_client = yield from self.login_user('user', 'pass', select=True) result, _ = yield from asyncio.wait_for( self.loop.run_in_executor( None, functools.partial(imap_client.copy, '1 2', 'MAILBOX')), 20) self.assertEqual('OK', result) self.assertEquals(('OK', [b'2']), (yield from asyncio.wait_for( self.loop.run_in_executor( None, functools.partial(imap_client.select, 'MAILBOX')), 20)))
def test_fetch_one_messages_by_uid_without_body(self): mail = Mail.create(['user'], mail_from='me', subject='hello', content='whatever') imap_receive(mail) imap_client = yield from self.login_user('user', 'pass', select=True) result, data = yield from asyncio.wait_for( self.loop.run_in_executor( None, functools.partial(imap_client.uid, 'fetch', '1', '(UID FLAGS)')), 1) self.assertEqual('OK', result) self.assertEqual([(b'1 (UID 1 FLAGS ())')], data)
def test_concurrency_3_executing_async_commands_in_parallel(self): # cf valid example in https://tools.ietf.org/html/rfc3501#section-5.5 imap_receive(Mail.create(['user'])) imap_client = yield from self.login_user('user', 'pass', select=True) store = asyncio. async (imap_client.store('1', '+FLAGS FOO')) copy = asyncio. async (imap_client.copy('1', 'MBOX')) expunge = asyncio. async (imap_client.expunge()) yield from asyncio.wait([store, copy, expunge]) self.assertEquals(('OK', ['0']), (yield from imap_client.select())) self.assertEquals(('OK', ['1']), (yield from imap_client.select('MBOX'))) self.assertEqual('1', (yield from imap_client.search('KEYWORD FOO', charset=None)).lines[0])
def test_idle(self): imap_client = yield from self.login_user('user', 'pass', select=True) idle = asyncio. async (imap_client.idle()) self.assertEquals('idling', (yield from imap_client.wait_server_push())) imap_receive(Mail.create(to=['user'], mail_from='me', subject='hello')) self.assertEquals('1 EXISTS', (yield from imap_client.wait_server_push())) self.assertEquals('1 RECENT', (yield from imap_client.wait_server_push())) imap_client.idle_done() self.assertEquals(('OK', ['IDLE terminated']), (yield from asyncio.wait_for(idle, 1)))
def test_fetch_one_messages_by_uid(self): mail = Mail.create( ['user'], mail_from='me', subject='hello', content='pleased to meet you, wont you guess my name ?') imap_receive(mail) imap_client = yield from self.login_user('user', 'pass', select=True) result, data = yield from asyncio.wait_for( self.loop.run_in_executor( None, functools.partial(imap_client.uid, 'fetch', '1', '(RFC822)')), 1) self.assertEqual('OK', result) self.assertEqual([(b'1 (UID 1 RFC822 {359}', mail.as_bytes()), b')'], data)
def test_store_and_search_by_keyword(self): imap_receive(Mail.create(['user'])) imap_receive(Mail.create(['user'])) imap_client = yield from self.login_user('user', 'pass', select=True) self.assertEqual('', (yield from imap_client.uid_search('KEYWORD FOO', charset=None)).lines[0]) self.assertEquals('OK', (yield from imap_client.uid('store', '1', '+FLAGS FOO')).result) self.assertEqual('1', (yield from imap_client.uid_search('KEYWORD FOO', charset=None)).lines[0]) self.assertEqual('2', (yield from imap_client.uid_search('UNKEYWORD FOO', charset=None)).lines[0])
def test_fetch_one_message_with_UID(self): imap_receive( Mail.create(['user'], mail_from='me', subject='hello', content='maître')) imap_receive( Mail.create(['user'], mail_from='you', subject='yo', content='bro')) imap_client = yield from self.login_user('user', 'pass', select=True) _, data = yield from asyncio.wait_for( self.loop.run_in_executor( None, functools.partial(imap_client.uid, 'fetch', '1', '(RFC822)')), 1) self.assertEqual(2, len(data))
def test_fetch_one_messages_by_uid_encoding_cp1252(self): imap_receive( Mail.create(['user'], mail_from='me', subject='hello', content='maître', encoding='cp1252')) imap_client = yield from self.login_user('user', 'pass', select=True) _, data = yield from asyncio.wait_for( self.loop.run_in_executor( None, functools.partial(imap_client.uid, 'fetch', '1', '(RFC822)')), 1) mail_content = data[0][1] self.assertTrue(b'charset=cp1252' in mail_content) self.assertTrue(b'ma\xeetre' in mail_content) self.assertEqual( 'maître', email.message_from_bytes(mail_content).get_payload().strip())
def test_rename_mailbox(self): imap_receive(Mail.create(['user'])) imap_client = yield from self.login_user('user', 'pass') self.assertEquals(('NO', [b'STATUS completed.']), (yield from asyncio.wait_for( self.loop.run_in_executor( None, functools.partial(imap_client.status, 'MBOX', '(MESSAGES)')), 1))) self.assertEquals( ('OK', [b'RENAME completed.']), (yield from asyncio.wait_for( self.loop.run_in_executor( None, functools.partial(imap_client.rename, 'INBOX', 'MBOX')), 1))) self.assertEquals(('OK', [b'MBOX (MESSAGES 1)']), (yield from asyncio.wait_for( self.loop.run_in_executor( None, functools.partial(imap_client.status, 'MBOX', '(MESSAGES)')), 1)))
def test_store_and_search_by_keyword(self): imap_receive(Mail.create(['user'])) imap_receive(Mail.create(['user'])) imap_client = yield from self.login_user('user', 'pass', select=True) result, data = yield from asyncio.wait_for( self.loop.run_in_executor( None, functools.partial(imap_client.uid, 'search', None, 'KEYWORD FOO')), 1) self.assertEqual('OK', result) self.assertEqual([b''], data) result, data = yield from asyncio.wait_for( self.loop.run_in_executor( None, functools.partial(imap_client.uid, 'store', '1', '+FLAGS FOO')), 1) self.assertEqual('OK', result) result, data = yield from asyncio.wait_for( self.loop.run_in_executor( None, functools.partial(imap_client.uid, 'search', None, 'KEYWORD FOO')), 1) self.assertEqual('OK', result) self.assertEqual([b'1'], data) result, data = yield from asyncio.wait_for( self.loop.run_in_executor( None, functools.partial(imap_client.uid, 'search', None, 'UNKEYWORD FOO')), 1) self.assertEqual('OK', result) self.assertEqual([b'2'], data)
def test_search_three_messages_by_uid(self): imap_client = yield from self.login_user('user', 'pass', select=True) imap_receive(Mail.create(['user'])) # id=1 uid=1 imap_receive(Mail.create(['user']), mailbox='OTHER_MAILBOX') # id=1 uid=2 imap_receive(Mail.create(['user'])) # id=2 uid=3 self.assertEqual('1 2', (yield from imap_client.search('ALL')).lines[0]) self.assertEqual('1 3', (yield from imap_client.uid_search('ALL')).lines[0])
def test_rfc5032_within(self): imap_receive( Mail.create(['user'], date=datetime.now(tz=utc) - timedelta(seconds=84600 * 3))) # 1 imap_receive( Mail.create(['user'], date=datetime.now(tz=utc) - timedelta(seconds=84600))) # 2 imap_receive(Mail.create(['user'])) # 3 imap_client = yield from self.login_user('user', 'pass', select=True) self.assertEquals('1', (yield from imap_client.search('OLDER', '84700')).lines[0]) self.assertEquals('2 3', (yield from imap_client.search('YOUNGER', '84700')).lines[0])
def test_rfc5032_within(self): imap_receive( Mail.create(['user'], date=datetime.now(tz=utc) - timedelta(seconds=84600 * 3))) # 1 imap_receive( Mail.create(['user'], date=datetime.now(tz=utc) - timedelta(seconds=84600))) # 2 imap_receive(Mail.create(['user'])) # 3 imap_client = yield from self.login_user('user', 'pass', select=True) self.assertEquals([b'2 3'], (yield from asyncio.wait_for( self.loop.run_in_executor( None, functools.partial(imap_client.search, 'utf-8', 'YOUNGER', '84700')), 1))[1]) self.assertEquals([b'1'], (yield from asyncio.wait_for( self.loop.run_in_executor( None, functools.partial(imap_client.search, 'utf-8', 'OLDER', '84700')), 1))[1])