def test_reprocess_ids_if_a_message_is_removed(self): server_state = ServerState() server_state.add_mail('user', Mail.create(['user'], 'from1'), mailbox='INBOX') server_state.add_mail('user', Mail.create(['user'], 'from2'), mailbox='INBOX') server_state.add_mail('user', Mail.create(['user'], 'from3'), mailbox='INBOX') server_state.remove_byid('user', 'INBOX', 1) self.assertEqual( 1, server_state.get_mailbox_messages('user', 'INBOX')[0].id) self.assertEqual( 2, server_state.get_mailbox_messages('user', 'INBOX')[1].id) self.assertEquals(2, server_state.max_id('user', 'INBOX')) self.assertEquals(3, server_state.max_uid('user', 'INBOX')) server_state.remove_byid('user', 'INBOX', 1) self.assertEqual( 1, server_state.get_mailbox_messages('user', 'INBOX')[0].id) self.assertEquals(1, server_state.max_id('user', 'INBOX')) self.assertEquals(3, server_state.max_uid('user', 'INBOX'))
def test_search_three_messages_by_uid(self): imap_client = yield from self.login_user('user', 'pass', select=True) self.imapserver.receive(Mail.create(['user'])) # id=1 uid=1 self.imapserver.receive(Mail.create(['user']), mailbox='OTHER_MAILBOX') # id=1 uid=2 self.imapserver.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_rfc4315_uidplus_expunge(self): self.imapserver.receive(Mail.create(['user'])) self.imapserver.receive(Mail.create(['user'])) imap_client = yield from self.login_user('user', 'pass', select=True) self.assertEquals(('OK', ['1 EXPUNGE', 'UID EXPUNGE completed.']), (yield from imap_client.uid('expunge', '1:1'))) self.assertEquals(1, extract_exists((yield from imap_client.select())))
def test_rfc5032_within(self): self.imapserver.receive(Mail.create(['user'], date=datetime.now(tz=utc) - timedelta(seconds=84600 * 3))) # 1 self.imapserver.receive(Mail.create(['user'], date=datetime.now(tz=utc) - timedelta(seconds=84600))) # 2 self.imapserver.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_max_ids_one_user_two_mails_one_per_mailbox(self): server_state = ServerState() server_state.add_mail('user', Mail.create(['user']), mailbox='INBOX') server_state.add_mail('user', Mail.create(['user']), mailbox='OUTBOX') self.assertEquals(1, server_state.max_id('user', 'INBOX')) self.assertEquals(1, server_state.max_id('user', 'OUTBOX')) self.assertEquals(2, server_state.max_uid('user'))
def test_expunge_messages(self): self.imapserver.receive(Mail.create(['user'])) self.imapserver.receive(Mail.create(['user'])) imap_client = yield from self.login_user('user', 'pass', select=True) self.assertEquals(('OK', ['1 EXPUNGE', '2 EXPUNGE', 'EXPUNGE completed.']), (yield from imap_client.expunge())) self.assertEquals(0, extract_exists((yield from imap_client.select())))
def test_copy_messages(self): self.imapserver.receive(Mail.create(['user'])) self.imapserver.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_max_ids_one_user_three_mails_in_two_mailboxes(self): server_state = ServerState() server_state.add_mail('user', Mail.create(['user']), mailbox='INBOX') server_state.add_mail('user', Mail.create(['user']), mailbox='INBOX') server_state.add_mail('user', Mail.create(['user']), mailbox='OUTBOX') self.assertEquals(1, server_state.max_id('user', 'OUTBOX')) self.assertEquals(2, server_state.max_id('user', 'INBOX')) self.assertEquals(2, server_state.max_uid('user', 'INBOX'))
async def test_search_two_messages(self): self.imapserver.receive(Mail.create(['user'])) self.imapserver.receive(Mail.create(['user'])) imap_client = await self.login_user('user', 'pass', select=True) result, data = await imap_client.search('ALL') self.assertEqual('OK', result) self.assertEqual('1 2', data[0])
async def test_fetch_one_messages_out_of_two(self): self.imapserver.receive(Mail.create(['user'], mail_from='me', subject='hello', content='maître')) self.imapserver.receive(Mail.create(['user'], mail_from='you', subject='yo', content='bro')) imap_client = await self.login_user('user', 'pass', select=True) _, data = await 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_search_two_messages(self): self.imapserver.receive(Mail.create(['user'])) self.imapserver.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_expunge_messages(self): self.imapserver.receive(Mail.create(['user'])) self.imapserver.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_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()))
async def test_expunge_messages(self): self.imapserver.receive(Mail.create(['user'])) self.imapserver.receive(Mail.create(['user'])) imap_client = await self.login_user('user', 'pass', select=True) await asyncio.wait_for(self.loop.run_in_executor(None, imap_client.expunge), 1) self.assertEqual(('OK', [b'0']), (await asyncio.wait_for( self.loop.run_in_executor(None, functools.partial(imap_client.select)), 1)))
def test_fetch_one_messages_out_of_two(self): self.imapserver.receive(Mail.create(['user'], mail_from='me', subject='hello', content='maître')) self.imapserver.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_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])
async def test_search_by_uid_two_messages(self): self.imapserver.receive(Mail.create(['user'])) self.imapserver.receive(Mail.create(['user'])) imap_client = await self.login_user('user', 'pass', select=True) result, data = await 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_store_and_search_by_keyword(self): self.imapserver.receive(Mail.create(['user'])) self.imapserver.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_search_by_uid_two_messages(self): self.imapserver.receive(Mail.create(['user'])) self.imapserver.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_rfc5032_within(self): self.imapserver.receive(Mail.create(['user'], date=datetime.now(tz=utc) - timedelta(seconds=84600 * 3))) # 1 self.imapserver.receive(Mail.create(['user'], date=datetime.now(tz=utc) - timedelta(seconds=84600))) # 2 self.imapserver.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])
def test_copy_messages(self): self.imapserver.receive(Mail.create(['user'])) self.imapserver.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)))
async def test_copy_messages(self): self.imapserver.receive(Mail.create(['user'])) self.imapserver.receive(Mail.create(['user'])) imap_client = await self.login_user('user', 'pass', select=True) result, _ = await asyncio.wait_for( self.loop.run_in_executor(None, functools.partial(imap_client.copy, '1 2', 'MAILBOX')), 20) self.assertEqual('OK', result) self.assertEqual(('OK', [b'2']), (await asyncio.wait_for( self.loop.run_in_executor(None, functools.partial(imap_client.select, 'MAILBOX')), 20)))
def test_search_three_messages_by_uid(self): imap_client = yield from self.login_user('user', 'pass', select=True) self.imapserver.receive(Mail.create(['user'])) # id=1 uid=1 self.imapserver.receive(Mail.create(['user']), mailbox='OTHER_MAILBOX') # id=1 uid=1 self.imapserver.receive(Mail.create(['user'])) # id=2 uid=2 self.assertEqual('1 2', (yield from imap_client.search('ALL')).lines[0]) self.assertEqual('1 2', (yield from imap_client.uid_search('ALL')).lines[0]) yield from imap_client.select('OTHER_MAILBOX') self.assertEqual('1', (yield from imap_client.uid_search('ALL')).lines[0])
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)))
async def test_rfc5032_within(self): self.imapserver.receive(Mail.create(['user'], date=datetime.now(tz=utc) - timedelta(seconds=84600 * 3))) # 1 self.imapserver.receive(Mail.create(['user'], date=datetime.now(tz=utc) - timedelta(seconds=84600))) # 2 self.imapserver.receive(Mail.create(['user'])) # 3 imap_client = await self.login_user('user', 'pass', select=True) self.assertEqual([b'2 3'], (await asyncio.wait_for( self.loop.run_in_executor(None, functools.partial(imap_client.search, 'utf-8', 'YOUNGER', '84700')), 1))[1]) self.assertEqual([b'1'], (await asyncio.wait_for( self.loop.run_in_executor(None, functools.partial(imap_client.search, 'utf-8', 'OLDER', '84700')), 1))[1])
def test_reprocess_ids_if_a_message_is_removed(self): server_state = ServerState() server_state.add_mail('user', Mail.create(['user'], 'from1'), mailbox='INBOX') server_state.add_mail('user', Mail.create(['user'], 'from2'), mailbox='INBOX') server_state.add_mail('user', Mail.create(['user'], 'from3'), mailbox='INBOX') server_state.remove_byid('user', 'INBOX', 1) self.assertEqual(1, server_state.get_mailbox_messages('user', 'INBOX')[0].id) self.assertEqual(2, server_state.get_mailbox_messages('user', 'INBOX')[1].id) self.assertEquals(2, server_state.max_id('user', 'INBOX')) self.assertEquals(3, server_state.max_uid('user', 'INBOX')) server_state.remove_byid('user', 'INBOX', 1) self.assertEqual(1, server_state.get_mailbox_messages('user', 'INBOX')[0].id) self.assertEquals(1, server_state.max_id('user', 'INBOX')) self.assertEquals(3, server_state.max_uid('user', 'INBOX'))
def test_max_ids_one_user_one_mail(self): server_state = ServerState() server_state.add_mail('user', Mail.create(['user'])) self.assertEquals(1, server_state.max_id('user', 'INBOX')) self.assertEquals(1, server_state.max_uid('user')) self.assertEquals(0, server_state.max_id('user', 'OTHER_MAILBOX'))
def test_search_by_uid_range(self): self.imapserver.receive(Mail.create(['user'])) self.imapserver.receive(Mail.create(['user'])) 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, 'search', None, '1:2')), 1) self.assertEqual([b'1 2'], data) _, data = yield from asyncio.wait_for( self.loop.run_in_executor(None, functools.partial(imap_client.uid, 'search', None, '1:*')), 1) self.assertEqual([b'1 2'], data) _, data = yield from asyncio.wait_for( self.loop.run_in_executor(None, functools.partial(imap_client.uid, 'search', None, '1:1')), 1) self.assertEqual([b'1'], data)
def test_append(self): imap_client = yield from self.login_user('user@mail', 'pass') self.assertEquals(('OK', [b'0']), (yield from asyncio.wait_for( self.loop.run_in_executor( None, functools.partial(imap_client.select, 'INBOX', readonly=True)), 2))) msg = Mail.create(['user@mail'], subject='append msg', content='do you see me ?') self.assertEquals( ('OK', [b'APPEND completed.']), (yield from asyncio.wait_for( self.loop.run_in_executor( None, functools.partial(imap_client.append, 'INBOX', 'FOO BAR', datetime.now(tz=utc), msg.as_bytes())), 2))) self.assertEquals(('OK', [b'1']), (yield from asyncio.wait_for( self.loop.run_in_executor( None, functools.partial(imap_client.select, 'INBOX', readonly=True)), 2)))
def test_max_ids_one_user_one_mail(self): server_state = ServerState() server_state.add_mail('user', Mail.create(['user'])) self.assertEquals(1, server_state.max_id('user', 'INBOX')) self.assertEquals(1, server_state.max_uid('user', 'INBOX')) self.assertEquals(0, server_state.max_id('user', 'OTHER_MAILBOX'))
async def test_search_by_uid_range(self): self.imapserver.receive(Mail.create(['user'])) self.imapserver.receive(Mail.create(['user'])) imap_client = await self.login_user('user', 'pass', select=True) _, data = await asyncio.wait_for( self.loop.run_in_executor(None, functools.partial(imap_client.uid, 'search', None, '1:2')), 1) self.assertEqual([b'1 2'], data) _, data = await asyncio.wait_for( self.loop.run_in_executor(None, functools.partial(imap_client.uid, 'search', None, '1:*')), 1) self.assertEqual([b'1 2'], data) _, data = await asyncio.wait_for( self.loop.run_in_executor(None, functools.partial(imap_client.uid, 'search', None, '1:1')), 1) self.assertEqual([b'1'], data)
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_select_one_message_in_mailbox(self): self.imapserver.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_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 ?') self.imapserver.receive(mail) response = (yield from imap_client.uid('fetch', '1', '(RFC822)')) self.assertEqual('OK', response.result) self.assertEquals(mail.as_bytes(), response.lines[1])
async def test_copy_messages_by_uid(self): self.imapserver.receive(Mail.create(['user'])) imap_client = await self.login_user('user', 'pass', select=True) result, _ = await imap_client.uid('copy', '1', 'MAILBOX') self.assertEqual('OK', result) self.assertEqual(1, extract_exists((await imap_client.select('MAILBOX'))))
async def test_fetch_one_message_with_headers(self): self.imapserver.receive(Mail.create(['user'], mail_from='me', subject='hello', content='maître')) imap_client = await self.login_user('user', 'pass', select=True) _, data = await asyncio.wait_for( self.loop.run_in_executor(None, functools.partial(imap_client.uid, 'fetch', '1', '(BODY.PEEK[HEADER.FIELDS (Content-type From)])')), 1) self.assertEqual(b'1 (UID 1 BODY[HEADER.FIELDS (Content-type From)] {57}', data[0][0]) self.assertEqual(b'Content-type: text/plain; charset="utf-8"\r\nFrom: <me>\r\n\r\n', data[0][1])
def test_concurrency_4_sync_command_waits_for_async_commands_to_finish(self): self.imapserver.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(1, extract_exists((yield from asyncio.wait_for(examine, 1))))
async def test_select_one_message_in_mailbox(self): self.imapserver.receive(Mail.create(to=['user'], mail_from='me', subject='hello')) imap_client = await self.login_user('user', 'pass') result, data = await 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_fetch_one_message_with_headers(self): self.imapserver.receive(Mail.create(['user'], mail_from='me', subject='hello', content='maître')) 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', '(BODY.PEEK[HEADER.FIELDS (Content-type From)])')), 1) self.assertEqual(b'1 (UID 1 BODY[HEADER.FIELDS (Content-type From)] {57}', data[0][0]) self.assertEqual(b'Content-type: text/plain; charset="utf-8"\r\nFrom: <me>\r\n\r\n', data[0][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 ?') self.imapserver.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_append(self): imap_client = yield from self.login_user('user@mail', 'pass') self.assertEquals(0, extract_exists((yield from imap_client.examine('INBOX')))) msg = Mail.create(['user@mail'], subject='append msg', content='do you see me ?') self.assertEquals(('OK', ['APPEND completed.']), (yield from imap_client.append(msg.as_bytes(), mailbox='INBOX', flags='FOO BAR', date=datetime.now(tz=utc), ))) self.assertEquals(1, extract_exists((yield from imap_client.examine('INBOX'))))
def test_concurrency_2_executing_same_async_commands_sequentially(self): self.imapserver.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_rfc6851_uidmove(self): self.imapserver.receive(Mail.create(['user'])) imap_client = yield from self.login_user('user', 'pass', select=True) uidvalidity = self.imapserver.get_connection('user').uidvalidity self.assertEqual(('OK', ['OK [COPYUID %d 1:1 1:1]' % uidvalidity, '1 EXPUNGE', 'Done']), (yield from imap_client.uid('move', '1:1', 'Trash'))) self.assertEquals(0, extract_exists((yield from imap_client.select()))) self.assertEquals(1, extract_exists((yield from imap_client.select('Trash'))))
def test_fetch_one_message_by_uid(self): mail = Mail.create(['user'], mail_from='me', subject='hello', content='pleased to meet you, wont you guess my name ?') self.imapserver.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 {360}', mail.as_bytes()), b')'], data)
def test_fetch_one_message_by_uid_with_bodypeek(self): mail = Mail.create(['user'], mail_from='me', subject='hello', content='this mail is still unread') self.imapserver.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 BODY.PEEK[])')), 1) self.assertEqual('OK', result) self.assertEqual([(b'1 (UID 1 BODY.PEEK[] {340}', mail.as_bytes()), b')'], data)
def test_fetch_one_messages_by_uid_without_body(self): mail = Mail.create(['user'], mail_from='me', subject='hello', content='whatever') self.imapserver.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_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_fetch_one_messages_by_uid_encoding_cp1252(self): self.imapserver.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_append(self): imap_client = yield from self.login_user('user@mail', 'pass') self.assertEquals(0, extract_exists((yield from imap_client.examine('INBOX')))) msg = Mail.create(['user@mail'], subject='append msg', content='do you see me ?') response = yield from imap_client.append(msg.as_bytes(), mailbox='INBOX', flags='FOO BAR', date=datetime.now(tz=utc), ) self.assertEquals('OK', response.result) self.assertTrue('1] APPEND completed' in response.lines[0]) self.assertEquals(1, extract_exists((yield from imap_client.examine('INBOX'))))
def test_idle(self): imap_client = yield from self.login_user('user', 'pass', select=True, lib=imaplib2.IMAP4) idle_callback = Mock() self.loop.run_in_executor(None, functools.partial(imap_client.idle, callback=idle_callback)) yield from asyncio.wait_for(self.imapserver.get_connection('user').wait(imapserver.IDLE), 1) self.loop.run_in_executor(None, functools.partial(self.imapserver.receive, Mail.create(to=['user'], mail_from='me', subject='hello'))) yield from asyncio.wait_for(self.imapserver.get_connection('user').wait(imapserver.SELECTED), 1) time.sleep(0.1) # eurk hate sleeps but I don't know how to wait for the lib to receive end of IDLE idle_callback.assert_called_once()
def test_concurrency_3_executing_async_commands_in_parallel(self): # cf valid example in https://tools.ietf.org/html/rfc3501#section-5.5 self.imapserver.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(0, extract_exists((yield from imap_client.select()))) self.assertEquals(1, extract_exists((yield from imap_client.select('MBOX')))) self.assertEqual('1', (yield from imap_client.search('KEYWORD FOO', charset=None)).lines[0])