def test_cancel_message_during_normal(self) -> None: # Setup user_input = UserInput('cm') settings = Settings() window = TxWindow(name='Alice', type=WIN_TYPE_CONTACT, type_print='contact', uid=nick_to_pub_key("Alice")) window.window_contacts = [create_contact('Alice')] self.queues[MESSAGE_PACKET_QUEUE].put( ('test_message1', nick_to_pub_key("Alice"), False, False, nick_to_pub_key("Alice"))) self.queues[MESSAGE_PACKET_QUEUE].put( ('test_message2', nick_to_pub_key("Charlie"), False, False, nick_to_pub_key("Charlie"))) self.queues[MESSAGE_PACKET_QUEUE].put( ('test_message3', nick_to_pub_key("Alice"), False, False, nick_to_pub_key("Alice"))) # Test self.assert_se("Cancelled queued messages to contact Alice.", cancel_packet, user_input, window, settings, self.queues) self.assertEqual(self.queues[MESSAGE_PACKET_QUEUE].qsize(), 2)
def test_cancel_message_during_normal(self): # Setup user_input = UserInput('cm') settings = Settings() window = TxWindow(name='Alice', type=WIN_TYPE_CONTACT, type_print='contact', uid='*****@*****.**') window.window_contacts = [create_contact()] self.queues[MESSAGE_PACKET_QUEUE].put( ('testmessage1', settings, '*****@*****.**', '*****@*****.**', False, False, '*****@*****.**')) self.queues[MESSAGE_PACKET_QUEUE].put( ('testmessage2', settings, '*****@*****.**', '*****@*****.**', False, False, '*****@*****.**')) self.queues[MESSAGE_PACKET_QUEUE].put( ('testmessage3', settings, '*****@*****.**', '*****@*****.**', False, False, '*****@*****.**')) time.sleep(0.1) # Test self.assertIsNone( cancel_packet(user_input, window, settings, self.queues)) time.sleep(0.1) self.assertEqual(self.queues[MESSAGE_PACKET_QUEUE].qsize(), 2)
def test_loop(self): # Setup queues = gen_queue_dict() settings = Settings(traffic_masking=True, tm_static_delay=0.001, tm_random_delay=0.001) gateway = Gateway() key_list = KeyList(nicks=['Alice', LOCAL_ID]) window = TxWindow(log_messages=True) contact_list = ContactList(nicks=['Alice', LOCAL_ID]) window.contact_list = contact_list window.window_contacts = [contact_list.get_contact_by_address_or_nick('Alice')] user_input = UserInput(plaintext='test') def queue_delayer(): """Place packets to queue after delay.""" time.sleep(0.01) queues[WINDOW_SELECT_QUEUE].put(window.window_contacts) time.sleep(0.01) queue_command(b'test', settings, queues) # 1 queue_message(user_input, window, settings, queues) # 2 queue_message(user_input, window, settings, queues) # 3 queue_command(b'test', settings, queues) # 4 queues[TM_NOISE_COMMAND_QUEUE].put((C_N_HEADER + bytes(PADDING_LENGTH))) # 5 queue_to_nc(UNENCRYPTED_DATAGRAM_HEADER + UNENCRYPTED_EXIT_COMMAND, queues[RELAY_PACKET_QUEUE]) # 6 queue_to_nc(UNENCRYPTED_DATAGRAM_HEADER + UNENCRYPTED_WIPE_COMMAND, queues[RELAY_PACKET_QUEUE]) # 7 queues[SENDER_MODE_QUEUE].put(settings) # Test threading.Thread(target=queue_delayer).start() self.assertIsInstance(traffic_masking_loop(queues, settings, gateway, key_list), Settings) self.assertEqual(len(gateway.packets), 7) # Teardown tear_queues(queues)
def test_group_management_message_header(self): # Setup user_input = UserInput(plaintext='Test message', type=MESSAGE) window = TxWindow(log_messages=True) window.window_contacts = [create_contact('Alice')] # Test self.assertIsNone(queue_message(user_input, window, *self.args, header=GROUP_MSG_INVITE_HEADER)) self.assertEqual(self.queues[MESSAGE_PACKET_QUEUE].qsize(), 1)
def test_private_message_header(self) -> None: # Setup user_input = UserInput(plaintext='Test message', type=MESSAGE) window = TxWindow(log_messages=True) window.window_contacts = [create_contact('Alice')] # Test self.assertIsNone(queue_message(user_input, window, *self.args)) self.assertEqual(self.queues[MESSAGE_PACKET_QUEUE].qsize(), 1)
def test_group_message_header(self): # Setup user_input = UserInput(plaintext='Test message', type=MESSAGE) window = TxWindow(name='test_group', type=WIN_TYPE_GROUP, group=create_group('test_group'), log_messages=True) window.window_contacts = [create_contact('Alice')] # Test self.assertIsNone(queue_message(user_input, window, *self.args)) self.assertEqual(self.queues[MESSAGE_PACKET_QUEUE].qsize(), 1)
def test_private_message_header(self): # Setup user_input = UserInput(plaintext='Test message', type=MESSAGE) window = TxWindow(log_messages=True) window.window_contacts = [create_contact()] # Test self.assertIsNone( queue_message(user_input, window, self.settings, self.m_queue)) time.sleep(0.1) self.assertEqual(self.m_queue.qsize(), 1)
def test_cancel_file_when_nothing_to_cancel(self): # Setup user_input = UserInput('cf') settings = Settings(traffic_masking=True) window = TxWindow(name='Alice', type=WIN_TYPE_CONTACT, type_print='contact', uid=nick_to_pub_key("Alice")) window.window_contacts = [create_contact('Alice')] # Test self.assertIsNone(cancel_packet(user_input, window, settings, self.queues)) self.assertEqual(self.queues[TM_FILE_PACKET_QUEUE].qsize(), 0)
def test_cancel_file_during_normal(self): # Setup user_input = UserInput('cf') settings = Settings() window = TxWindow(name='Alice', type=WIN_TYPE_CONTACT, type_print='contact', uid=nick_to_pub_key("Alice")) window.window_contacts = [create_contact('Alice')] # Test self.assert_fr('Files are only queued during traffic masking.', cancel_packet, user_input, window, settings, self.queues)
def test_cancel_file_during_traffic_masking(self): # Setup user_input = UserInput('cf') settings = Settings(traffic_masking=True) window = TxWindow() window.window_contacts = [create_contact('Alice')] self.queues[TM_FILE_PACKET_QUEUE].put(('testfile1', {nick_to_pub_key("Alice"): False})) self.queues[TM_FILE_PACKET_QUEUE].put(('testfile2', {nick_to_pub_key("Alice"): False})) # Test self.assertIsNone(cancel_packet(user_input, window, settings, self.queues)) self.assertEqual(self.queues[TM_FILE_PACKET_QUEUE].qsize(), 1)
def test_cancel_message_when_nothing_to_cancel(self): # Setup user_input = UserInput('cm') settings = Settings() window = TxWindow(name='Alice', type=WIN_TYPE_CONTACT, type_print='contact', uid=nick_to_pub_key("Alice")) window.window_contacts = [create_contact('Alice')] # Test self.assert_fr("No messages queued for contact Alice.", cancel_packet, user_input, window, settings, self.queues) self.assertEqual(self.queues[TM_FILE_PACKET_QUEUE].qsize(), 0)
def test_cancel_message_when_nothing_to_cancel(self): # Setup user_input = UserInput('cm') settings = Settings() window = TxWindow(name='Alice', type=WIN_TYPE_CONTACT, type_print='contact', uid='*****@*****.**') window.window_contacts = [create_contact()] # Test self.assertIsNone( cancel_packet(user_input, window, settings, self.queues)) time.sleep(0.1) self.assertEqual(self.queues[FILE_PACKET_QUEUE].qsize(), 0)
def test_cancel_group_message_during_normal(self): # Setup user_input = UserInput('cm') settings = Settings() window = TxWindow(name='test_group', type=WIN_TYPE_GROUP, type_print='group', uid='test_group') window.window_contacts = [create_contact('Alice')] self.queues[MESSAGE_PACKET_QUEUE].put(('test_message1', nick_to_pub_key("Alice"), False, False, 'test_group')) self.queues[MESSAGE_PACKET_QUEUE].put(('test_message2', nick_to_pub_key("Alice"), False, False, 'test_group')) # Test self.assert_fr("Cancelled queued messages to group test_group.", cancel_packet, user_input, window, settings, self.queues) self.assertEqual(self.queues[MESSAGE_PACKET_QUEUE].qsize(), 1) # Cancel packet
def test_group_management_message_header(self): # Setup user_input = UserInput(plaintext='Test message', type=MESSAGE) window = TxWindow(log_messages=True) window.window_contacts = [create_contact()] # Test self.assertIsNone( queue_message(user_input, window, self.settings, self.m_queue, header=GROUP_MSG_INVITEJOIN_HEADER)) time.sleep(0.1) self.assertEqual(self.m_queue.qsize(), 1)
def test_cancel_file_during_traffic_masking(self): # Setup user_input = UserInput('cf') settings = Settings(session_traffic_masking=True) window = TxWindow() window.window_contacts = [create_contact()] self.queues[FILE_PACKET_QUEUE].put(('testfile1', { '*****@*****.**': False })) self.queues[FILE_PACKET_QUEUE].put(('testfile2', { '*****@*****.**': False })) time.sleep(0.1) # Test self.assertIsNone( cancel_packet(user_input, window, settings, self.queues)) time.sleep(0.1) self.assertEqual(self.queues[FILE_PACKET_QUEUE].qsize(), 1)
def test_loop(self): # Setup queues = gen_queue_dict() settings = Settings(traffic_masking=False) gateway = Gateway() key_list = KeyList() window = TxWindow(log_messages=True) contact_list = ContactList(nicks=['Alice', LOCAL_ID]) window.contact_list = contact_list window.window_contacts = [contact_list.get_contact_by_address_or_nick('Alice')] user_input = UserInput(plaintext='test') delay = 0.01 def queue_delayer(): """Place datagrams into queue after delay.""" time.sleep(delay) queue_command(b'test', settings, queues) time.sleep(delay) queue_to_nc(PUBLIC_KEY_DATAGRAM_HEADER + TFC_PUBLIC_KEY_LENGTH * b'a' + nick_to_pub_key('Alice'), # 1 queues[RELAY_PACKET_QUEUE]) time.sleep(delay) queue_to_nc(UNENCRYPTED_DATAGRAM_HEADER + UNENCRYPTED_WIPE_COMMAND, queues[RELAY_PACKET_QUEUE]) # 2 time.sleep(delay) queue_to_nc(UNENCRYPTED_DATAGRAM_HEADER + UNENCRYPTED_EXIT_COMMAND, queues[RELAY_PACKET_QUEUE]) # 3 time.sleep(delay) queues[KEY_MANAGEMENT_QUEUE].put((KDB_ADD_ENTRY_HEADER, LOCAL_PUBKEY, # 4 SYMMETRIC_KEY_LENGTH * b'a', SYMMETRIC_KEY_LENGTH * b'a', SYMMETRIC_KEY_LENGTH * b'a', SYMMETRIC_KEY_LENGTH * b'a')) time.sleep(delay) queue_message(user_input, window, settings, queues) # 5 time.sleep(delay) queue_message(user_input, window, settings, queues) # 6 time.sleep(delay) queues[KEY_MANAGEMENT_QUEUE].put((KDB_ADD_ENTRY_HEADER, nick_to_pub_key('Alice'), SYMMETRIC_KEY_LENGTH * b'a', SYMMETRIC_KEY_LENGTH * b'a', SYMMETRIC_KEY_LENGTH * b'a', SYMMETRIC_KEY_LENGTH * b'a')) time.sleep(delay) queue_message(user_input, window, settings, queues) # 7 time.sleep(delay) queue_message(user_input, window, settings, queues) # 8 time.sleep(delay) queues[SENDER_MODE_QUEUE].put(settings) threading.Thread(target=queue_delayer).start() # Test settings, m_buffer = standard_sender_loop(queues, gateway, key_list) self.assertIsInstance(settings, Settings) self.assertEqual(m_buffer, {nick_to_pub_key('Alice'): []}) self.assertEqual(len(gateway.packets), 8) self.assertEqual(queues[EXIT_QUEUE].qsize(), 2) # Teardown tear_queues(queues)
def test_loop(self): # Setup queues = { MESSAGE_PACKET_QUEUE: Queue(), FILE_PACKET_QUEUE: Queue(), COMMAND_PACKET_QUEUE: Queue(), NH_PACKET_QUEUE: Queue(), LOG_PACKET_QUEUE: Queue(), NOISE_PACKET_QUEUE: Queue(), NOISE_COMMAND_QUEUE: Queue(), KEY_MANAGEMENT_QUEUE: Queue(), WINDOW_SELECT_QUEUE: Queue(), EXIT_QUEUE: Queue() } settings = Settings(session_traffic_masking=True) gateway = Gateway() key_list = KeyList(nicks=['Alice', LOCAL_ID]) window = TxWindow(log_messages=True) contact_list = ContactList(nicks=['Alice', LOCAL_ID]) window.contact_list = contact_list window.window_contacts = [contact_list.get_contact('Alice')] user_input = UserInput(plaintext='test') queue_message(user_input, window, settings, queues[MESSAGE_PACKET_QUEUE]) queue_message(user_input, window, settings, queues[MESSAGE_PACKET_QUEUE]) queue_message(user_input, window, settings, queues[MESSAGE_PACKET_QUEUE]) queue_command(b'test', settings, queues[COMMAND_PACKET_QUEUE]) queue_command(b'test', settings, queues[COMMAND_PACKET_QUEUE]) queue_command(b'test', settings, queues[COMMAND_PACKET_QUEUE], window) queue_to_nh(UNENCRYPTED_PACKET_HEADER + UNENCRYPTED_EXIT_COMMAND, settings, queues[NH_PACKET_QUEUE]) queue_to_nh(UNENCRYPTED_PACKET_HEADER + UNENCRYPTED_WIPE_COMMAND, settings, queues[NH_PACKET_QUEUE]) def queue_delayer(): time.sleep(0.1) queues[WINDOW_SELECT_QUEUE].put((window, True)) # Test threading.Thread(target=queue_delayer).start() self.assertIsNone( sender_loop(queues, settings, gateway, key_list, unittest=True)) threading.Thread(target=queue_delayer).start() self.assertIsNone( sender_loop(queues, settings, gateway, key_list, unittest=True)) threading.Thread(target=queue_delayer).start() self.assertIsNone( sender_loop(queues, settings, gateway, key_list, unittest=True)) self.assertEqual(len(gateway.packets), 8) self.assertEqual(queues[EXIT_QUEUE].qsize(), 2) # Teardown for key in queues: while not queues[key].empty(): queues[key].get() time.sleep(0.1) queues[key].close()