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_group_message_header(self): # Setup user_input = UserInput(plaintext='Test message', type=MESSAGE) window = TxWindow(name='testgroup', type=WIN_TYPE_GROUP, group=create_group(), 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_file_queue_short_traffic_masking(self): # Setup input_data = os.urandom(5) with open('testfile.txt', 'wb+') as f: f.write(input_data) window = TxWindow(name='Alice', type=WIN_TYPE_CONTACT, type_print='contact', uid='*****@*****.**', log_messages=True) settings = Settings(session_traffic_masking=True, disable_gui_dialog=True) gateway = Gateway(txm_inter_packet_delay=0.02) input_list = ['./testfile.txt', 'Yes'] gen = iter(input_list) builtins.input = lambda _: str(next(gen)) # Test self.assertIsNone(queue_file(window, settings, self.f_queue, gateway)) time.sleep(0.1) self.assertEqual(self.f_queue.qsize(), 1) q_data, log_messages, log_as_ph = self.f_queue.get() self.assertIsInstance(q_data, bytes) self.assertTrue(log_messages) self.assertTrue(log_as_ph)
def test_loops(self) -> None: queues = gen_queue_dict() window = TxWindow(log_messages=True) settings = Settings(traffic_masking=True, tm_static_delay=0.001, tm_random_delay=0.001) gateway = Gateway() key_list = KeyList(nicks=['Bob', LOCAL_ID]) # Output Bob as existing contact queues[TM_NOISE_COMMAND_QUEUE].put( (C_N_HEADER + bytes(PADDING_LENGTH))) queues[TM_NOISE_PACKET_QUEUE].put( (P_N_HEADER + bytes(PADDING_LENGTH), True, True)) queues[WINDOW_SELECT_QUEUE].put(window.window_contacts) queues[SENDER_MODE_QUEUE].put(settings) queue_command(b'test', settings, queues) # Output command self.assertIsNone( sender_loop(queues, settings, gateway, key_list, unit_test=True)) self.assertEqual(len(gateway.packets), 1) settings.traffic_masking = False queues[SENDER_MODE_QUEUE].put(settings) self.assertIsNone( sender_loop(queues, settings, gateway, key_list, unit_test=True)) # Output Alice & Bob again self.assertEqual(len(gateway.packets), 1)
def setUp(self): self.queues = gen_queue_dict() self.settings = Settings() self.contact_list = ContactList() self.group_list = GroupList(groups=['test_group']) self.window = TxWindow() self.args = self.window, self.contact_list, self.group_list, self.settings, self.queues
def setUp(self): """Pre-test actions.""" self.settings = Settings() self.queues = gen_queue_dict() self.window = TxWindow(uid=nick_to_pub_key("Alice"), log_messages=True) self.window.window_contacts = [create_contact('Alice')] self.args = self.settings, self.queues, self.window
def setUp(self): self.o_input = builtins.input self.c_queue = Queue() self.window = TxWindow(uid='*****@*****.**', name='Alice') self.contact_list = ContactList() self.group_list = GroupList() self.settings = Settings() self.master_key = MasterKey()
def test_psk_raises_fr(self): # Setup contact = create_contact() contact.tx_fingerprint = bytes(FINGERPRINT_LEN) window = TxWindow(name='Alice', type=WIN_TYPE_CONTACT, contact=contact) # Test self.assertFR("Pre-shared keys have no fingerprints.", show_fingerprints, window)
def test_invalid_nick_raises_fr(self): # Setup user_input = UserInput("nick Alice\x01") window = TxWindow(type=WIN_TYPE_CONTACT, contact=create_contact('Bob')) # Test self.assertFR("Nick must be printable.", change_nick, user_input, window, self.contact_list, self.group_list, None, None)
def test_missing_nick_raises_fr(self): # Setup user_input = UserInput("nick ") window = TxWindow(type=WIN_TYPE_CONTACT) # Test self.assertFR("Error: No nick specified.", change_nick, user_input, window, None, None, None, None)
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 setUp(self) -> None: """Pre-test actions.""" self.settings = Settings() self.window = TxWindow(name='Alice', type=WIN_TYPE_CONTACT, type_print='contact', window_contacts=[create_contact('Alice')]) self.window.group = create_group('test_group')
def test_invalid_nick_raises_soft_error(self) -> None: # Setup window = TxWindow(type=WIN_TYPE_CONTACT, contact=create_contact('Bob')) # Test self.assert_se("Error: Nick must be printable.", change_nick, UserInput("nick Alice\x01"), window, *self.args)
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 setUp(self): self.window = TxWindow(uid=nick_to_pub_key("Alice"), name='Alice', window_contacts=[create_contact('Alice')], log_messages=True) self.settings = Settings() self.queues = gen_queue_dict() self.args = self.window, self.settings, self.queues
def test_x25519_key_raises_fr(self): # Setup window = TxWindow(type=WIN_TYPE_CONTACT, uid='*****@*****.**') contact_list = ContactList(nicks=['Alice']) # Test self.assertFR("Error: Current key was exchanged with X25519.", rxm_load_psk, window, contact_list, self.settings, None)
def setUp(self): self.window = TxWindow() self.contact_list = ContactList() self.group_list = GroupList() self.settings = Settings() self.queues = gen_queue_dict() self.gateway = Gateway() self.args = self.window, self.contact_list, self.group_list, self.settings, self.queues, self.gateway
def setUp(self): self.unittest_dir = cd_unittest() self.settings = Settings() self.queues = gen_queue_dict() self.window = TxWindow() self.onion_service = OnionService() self.contact_list = ContactList(nicks=['Alice', 'Bob', 'Charlie']) self.args = self.settings, self.queues, self.window
def test_cancel_file_during_traffic_masking(self) -> None: # 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 setUp(self): self.unittest_dir = cd_unittest() self.window = TxWindow(name='Alice', uid=nick_to_pub_key('Alice')) self.contact_list = ContactList() self.group_list = GroupList() self.settings = Settings() self.queues = gen_queue_dict() self.master_key = MasterKey() self.args = self.window, self.contact_list, self.group_list, self.settings, self.queues, self.master_key
def test_invalid_account_raises_soft_error(self, *_: Any) -> None: # Setup user_input = UserInput(f'rm {nick_to_onion_address("Alice")[:-1]}') window = TxWindow(window_contacts=[self.contact_list.get_contact_by_address_or_nick('Alice')], type=WIN_TYPE_CONTACT, uid=self.pub_key) # Test self.assert_se("Error: Invalid selection.", remove_contact, user_input, window, *self.args)
def test_successful_nick_change(self) -> None: # Setup window = TxWindow(name='Alice', type=WIN_TYPE_CONTACT, contact=self.contact_list.get_contact_by_address_or_nick('Alice')) # Test self.assertIsNone(change_nick(UserInput("nick Alice_"), window, *self.args)) self.assertEqual(self.contact_list.get_contact_by_pub_key(nick_to_pub_key('Alice')).nick, 'Alice_')
def test_keyboard_interrupt_raises_se(self, *_: Any) -> None: # Setup contact = create_contact('Alice', kex_status=KEX_STATUS_NO_RX_PSK) contact_list = ContactList(contacts=[contact]) window = TxWindow(type=WIN_TYPE_CONTACT, uid=nick_to_pub_key("Alice"), contact=contact) # Test self.assert_se("PSK verification aborted.", rxp_load_psk, window, contact_list, *self.args)
def setUp(self): self.user_input = UserInput( "whisper Decryption key for file 'test_file.txt' is " "92Kocbqxo7Vcsqq1ThVVySighDUAuUUmUwcjQdyAnzZZaQjKoKm") self.window = TxWindow(uid='*****@*****.**', name='Alice', window_contacts=[create_contact()], log_messages=True) self.settings = Settings() self.m_queue = Queue()
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 setUp(self): """Pre-test actions.""" self.window = TxWindow() self.contact_list = ContactList() self.group_list = GroupList() self.settings = Settings() self.queues = gen_queue_dict() self.master_key = MasterKey() self.gateway = Gateway() self.args = (self.window, self.contact_list, self.group_list, self.settings, self.queues, self.master_key, self.gateway)
def test_ecdhe_key_raises_fr(self): # Setup contact = create_contact('Alice') contact_list = ContactList(contacts=[contact]) window = TxWindow(type=WIN_TYPE_CONTACT, uid=nick_to_pub_key("Alice"), contact=contact) # Test self.assert_fr(f"Error: The current key was exchanged with {ECDHE}.", rxp_load_psk, window, contact_list, *self.args)
def setUp(self): self.queues = { COMMAND_PACKET_QUEUE: Queue(), MESSAGE_PACKET_QUEUE: Queue(), NH_PACKET_QUEUE: Queue() } self.window = TxWindow() self.settings = Settings() self.contact_list = ContactList() self.group_list = GroupList() self.master_key = MasterKey()
def setUp(self): self.window = TxWindow(uid=nick_to_pub_key("Alice"), name='Alice', window_contacts=[create_contact('test_group')], log_messages=True, type=WIN_TYPE_CONTACT) self.contact_list = ContactList(nicks=['Alice']) self.contact = self.contact_list.get_contact_by_address_or_nick( 'Alice') self.window.contact = self.contact self.args = self.window, self.contact_list
def test_enable_notifications_for_user(self) -> None: # Setup contact = self.contact_list.get_contact_by_address_or_nick('Alice') contact.notifications = False window = TxWindow(uid=self.pub_key, type=WIN_TYPE_CONTACT, contact=contact) # Test self.assertFalse(contact.notifications) self.assertIsNone(contact_setting(UserInput('notify on'), window, *self.args)) self.assertTrue(contact.notifications)