Exemplo n.º 1
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)
Exemplo n.º 2
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)
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
    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)
Exemplo n.º 5
0
 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
Exemplo n.º 6
0
 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
Exemplo n.º 7
0
 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()
Exemplo n.º 8
0
 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)
Exemplo n.º 9
0
    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)
Exemplo n.º 10
0
    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)
Exemplo n.º 11
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
Exemplo n.º 12
0
 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')
Exemplo n.º 13
0
    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)
Exemplo n.º 14
0
    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)
Exemplo n.º 15
0
 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
Exemplo n.º 16
0
    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)
Exemplo n.º 17
0
 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
Exemplo n.º 18
0
 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
Exemplo n.º 19
0
    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)
Exemplo n.º 20
0
 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
Exemplo n.º 21
0
    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)
Exemplo n.º 22
0
    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_')
Exemplo n.º 23
0
    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)
Exemplo n.º 24
0
 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()
Exemplo n.º 25
0
    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)
Exemplo n.º 26
0
 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)
Exemplo n.º 27
0
    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)
Exemplo n.º 28
0
 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()
Exemplo n.º 29
0
 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
Exemplo n.º 30
0
    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)