Example #1
0
 def test_successful_command(self, *_):
     self.assertIsNone(
         process_group_command(UserInput('group create team Alice'),
                               *self.args))
     user_input = UserInput(
         f"group join {b58encode(GROUP_ID_LENGTH*b'a')} team2")
     self.assert_fr("Error: Group with matching ID already exists.",
                    process_group_command, user_input, *self.args)
Example #2
0
    def test_serial_settings_raise_fr(self):
        self.assert_fr(
            "Error: Serial interface setting can only be changed manually.",
            change_setting, UserInput("set use_serial_usb_adapter True"),
            *self.args)

        self.assert_fr(
            "Error: Serial interface setting can only be changed manually.",
            change_setting, UserInput("set built_in_serial_interface Truej"),
            *self.args)
Example #3
0
 def test_file_window(self, _):
     self.assertIsNone(
         rxp_show_sys_win(UserInput(plaintext='fw'), *self.args))
     self.assertEqual(self.queues[COMMAND_PACKET_QUEUE].qsize(), 2)
     self.assertIsNone(
         rxp_show_sys_win(UserInput(plaintext='fw'), *self.args))
     self.assertEqual(self.queues[COMMAND_PACKET_QUEUE].qsize(), 4)
     self.assertIsNone(
         rxp_show_sys_win(UserInput(plaintext='fw'), *self.args))
     self.assertEqual(self.queues[COMMAND_PACKET_QUEUE].qsize(), 6)
Example #4
0
 def test_rxm_command(self):
     self.assertIsNone(
         change_master_key(UserInput("passwd rx"), self.contact_list,
                           self.group_list, self.settings, self.queues,
                           self.master_key))
     time.sleep(0.1)
     self.assertEqual(self.queues[COMMAND_PACKET_QUEUE].qsize(), 1)
Example #5
0
    def test_successful_removal_of_last_member_of_active_group(self):
        # Setup
        builtins.input = lambda _: 'Yes'
        user_input = UserInput('rm Alice')
        window = TxWindow(
            window_contacts=[self.contact_list.get_contact('Alice')],
            type=WIN_TYPE_GROUP,
            name='testgroup')
        group = self.group_list.get_group('testgroup')
        group.members = [self.contact_list.get_contact('*****@*****.**')]

        # Test
        for g in self.group_list:
            self.assertIsInstance(g, Group)
            self.assertTrue(g.has_member('*****@*****.**'))
        self.assertEqual(len(group), 1)

        self.assertIsNone(
            remove_contact(user_input, window, self.contact_list,
                           self.group_list, self.settings, self.queues,
                           self.master_key))
        time.sleep(0.1)

        for g in self.group_list:
            self.assertIsInstance(g, Group)
            self.assertFalse(g.has_member('*****@*****.**'))

        self.assertFalse(self.contact_list.has_contact('*****@*****.**'))
        self.assertEqual(self.queues[COMMAND_PACKET_QUEUE].qsize(), 2)

        km_data = self.queues[KEY_MANAGEMENT_QUEUE].get()
        self.assertEqual(km_data,
                         (KDB_REMOVE_ENTRY_HEADER, '*****@*****.**'))
Example #6
0
    def test_disable_notifications_for_all_users(self):
        # Setup
        user_input = UserInput('notify off all')
        contact_list = ContactList(nicks=['Alice', 'Bob'])
        group_list = GroupList(groups=['testgroup'])
        contact = contact_list.get_contact('*****@*****.**')
        settings = Settings()
        c_queue = Queue()
        window = Window(uid='*****@*****.**',
                        type='contact',
                        contact=contact,
                        window_contacts=[contact])
        for c in contact_list:
            c.notifications = True
        for g in group_list:
            g.notifications = True

        # Test
        for c in contact_list:
            self.assertTrue(c.notifications)
        for g in group_list:
            self.assertTrue(g.notifications)
        self.assertIsNone(
            contact_setting(user_input, window, contact_list, group_list,
                            settings, c_queue))
        time.sleep(0.2)
        for c in contact_list:
            self.assertFalse(c.notifications)
        for g in group_list:
            self.assertFalse(g.notifications)
Example #7
0
    def test_missing_setting_raises_fr(self):
        # Setup
        user_input = UserInput('set')

        # Test
        self.assertFR('No setting specified.', change_setting, user_input,
                      None, None, None, None, None)
Example #8
0
    def test_invalid_number_raises_fr(self):
        # Setup
        user_input = UserInput('export a')

        # Test
        self.assertFR("Specified invalid number of messages to export.",
                      export_logs, user_input, None, None, None, None, None)
Example #9
0
    def test_enable_logging_for_all_users(self) -> None:
        # Setup
        contact = self.contact_list.get_contact_by_address_or_nick("Alice")
        window  = TxWindow(uid=self.pub_key,
                           type=WIN_TYPE_CONTACT,
                           contact=contact,
                           window_contacts=[contact])

        for c in self.contact_list:
            c.log_messages = False
        for g in self.group_list:
            g.log_messages = False

        # Test
        for c in self.contact_list:
            self.assertFalse(c.log_messages)
        for g in self.group_list:
            self.assertFalse(g.log_messages)

        self.assertIsNone(contact_setting(UserInput('logging on all'), window, *self.args))

        for c in self.contact_list:
            self.assertTrue(c.log_messages)
        for g in self.group_list:
            self.assertTrue(g.log_messages)
Example #10
0
    def test_contact_removal_during_traffic_masking_raises_soft_error(self) -> None:
        # Setup
        self.settings.traffic_masking = True

        # Test
        self.assert_se("Error: Command is disabled during traffic masking.",
                       remove_contact, UserInput(), None, *self.args)
Example #11
0
    def test_user_abort_raises_se(self, *_: Any) -> None:
        # Setup
        user_input = UserInput(f'rm {nick_to_onion_address("Alice")}')

        # Test
        self.assert_se("Removal of contact aborted.", remove_contact,
                       user_input, None, *self.args)
Example #12
0
    def test_raises_fr_when_traffic_masking_is_enabled(self):
        # Setup
        self.settings.traffic_masking = True

        # Test
        self.assert_fr("Error: Command is disabled during traffic masking.",
                       process_group_command, UserInput(), *self.args)
Example #13
0
    def test_raises_fr_during_traffic_masking(self):
        # Setup
        self.settings.traffic_masking = True

        # Test
        self.assert_fr("Error: Command is disabled during traffic masking.",
                       change_master_key, UserInput(), *self.args)
Example #14
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)
Example #15
0
    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)
Example #16
0
    def test_disable_notifications_for_all_users(self):
        # Setup
        user_input = UserInput('notify off all')
        contact = self.contact_list.get_contact('*****@*****.**')
        window = TxWindow(uid='*****@*****.**',
                          type=WIN_TYPE_CONTACT,
                          contact=contact,
                          window_contacts=[contact])

        for c in self.contact_list:
            c.notifications = True
        for g in self.group_list:
            g.notifications = True

        # Test
        for c in self.contact_list:
            self.assertTrue(c.notifications)
        for g in self.group_list:
            self.assertTrue(g.notifications)

        self.assertIsNone(
            contact_setting(user_input, window, self.contact_list,
                            self.group_list, self.settings, self.c_queue))
        time.sleep(0.1)

        for c in self.contact_list:
            self.assertFalse(c.notifications)
        for g in self.group_list:
            self.assertFalse(g.notifications)
Example #17
0
    def test_enable_logging_for_all_users(self):
        # Setup
        user_input = UserInput('logging on all')
        contact = self.contact_list.get_contact('*****@*****.**')
        window = TxWindow(uid='*****@*****.**',
                          type=WIN_TYPE_CONTACT,
                          contact=contact,
                          window_contacts=[contact])

        for c in self.contact_list:
            c.log_messages = False
        for g in self.group_list:
            g.log_messages = False

        # Test
        for c in self.contact_list:
            self.assertFalse(c.log_messages)
        for g in self.group_list:
            self.assertFalse(g.log_messages)

        self.assertIsNone(
            contact_setting(user_input, window, self.contact_list,
                            self.group_list, self.settings, self.c_queue))
        time.sleep(0.1)

        for c in self.contact_list:
            self.assertTrue(c.log_messages)
        for g in self.group_list:
            self.assertTrue(g.log_messages)
Example #18
0
    def test_successful_removal_of_contact(self):
        # Setup
        o_input = builtins.input
        builtins.input = lambda x: 'Yes'
        user_input = UserInput('rm Alice')
        contact_list = ContactList(nicks=['Alice'])
        window = Window(window_contacts=[contact_list.get_contact('Alice')],
                        type='contact')
        group_list = GroupList(groups=['testgroup'])
        settings = Settings()
        queues = {KEY_MANAGEMENT_QUEUE: Queue(), COMMAND_PACKET_QUEUE: Queue()}

        # Test
        for g in group_list:
            self.assertIsInstance(g, Group)
            self.assertTrue(g.has_member('*****@*****.**'))

        self.assertIsNone(
            remove_contact(user_input, window, contact_list, group_list,
                           settings, queues))
        self.assertEqual(queues[COMMAND_PACKET_QUEUE].qsize(), 1)

        km_data = queues[KEY_MANAGEMENT_QUEUE].get()
        self.assertEqual(km_data, ('REM', '*****@*****.**'))
        self.assertFalse(contact_list.has_contact('*****@*****.**'))

        for g in group_list:
            self.assertIsInstance(g, Group)
            self.assertFalse(g.has_member('*****@*****.**'))

        # Teardown
        builtins.input = o_input
Example #19
0
    def test_contact_not_present_on_txm(self):
        # Setup
        o_input = builtins.input
        builtins.input = lambda x: 'Yes'
        user_input = UserInput('rm [email protected]')
        contact_list = ContactList(nicks=['Bob'])
        window = Window(window_contact=[contact_list.get_contact('Bob')],
                        type='group')
        group_list = GroupList(groups=[])
        settings = Settings()
        queues = {KEY_MANAGEMENT_QUEUE: Queue(), COMMAND_PACKET_QUEUE: Queue()}

        # Test
        self.assertIsNone(
            remove_contact(user_input, window, contact_list, group_list,
                           settings, queues))
        self.assertEqual(queues[COMMAND_PACKET_QUEUE].qsize(), 1)

        command_packet, settings_ = queues[COMMAND_PACKET_QUEUE].get()
        self.assertIsInstance(command_packet, bytes)
        self.assertIsInstance(settings_, Settings)

        # Teardown
        builtins.input = o_input

        queues[KEY_MANAGEMENT_QUEUE].close()
        queues[COMMAND_PACKET_QUEUE].close()
Example #20
0
    def test_invalid_nick_raises_se(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)
Example #21
0
    def test_missing_parameter_raises_fr(self):
        # Setup
        user_input = UserInput('')

        # Test
        self.assertFR("Error: Invalid command.", contact_setting, user_input,
                      None, None, None, None, None)
Example #22
0
    def test_successful_removal_of_last_member_of_active_group(self, _: Any) -> None:
        # Setup
        user_input    = UserInput('rm Alice')
        window        = TxWindow(window_contacts=[self.contact_list.get_contact_by_address_or_nick("Alice")],
                                 type=WIN_TYPE_GROUP,
                                 name='test_group')
        group         = self.group_list.get_group('test_group')
        group.members = [self.contact_list.get_contact_by_address_or_nick("Alice")]
        pub_key       = nick_to_pub_key('Alice')

        # Test
        for g in self.group_list:
            self.assertIsInstance(g, Group)
            self.assertTrue(g.has_member(pub_key))
        self.assertEqual(len(group), 1)

        self.assertIsNone(remove_contact(user_input, window, *self.args))

        for g in self.group_list:
            self.assertIsInstance(g, Group)
            self.assertFalse(g.has_member(pub_key))

        self.assertFalse(self.contact_list.has_pub_key(pub_key))
        self.assertEqual(self.queues[COMMAND_PACKET_QUEUE].qsize(), 1)

        km_data = self.queues[KEY_MANAGEMENT_QUEUE].get()
        self.assertEqual(km_data, (KDB_REMOVE_ENTRY_HEADER, pub_key))
Example #23
0
    def test_invalid_extra_parameter_raises_fr(self):
        # Setup
        user_input = UserInput('logging on al')

        # Test
        self.assertFR("Error: Invalid command.", contact_setting, user_input,
                      None, None, None, None, None)
Example #24
0
    def test_disable_notifications_for_all_users(self) -> None:
        # Setup
        contact = self.contact_list.get_contact_by_address_or_nick("Alice")
        window  = TxWindow(uid=self.pub_key,
                           type=WIN_TYPE_CONTACT,
                           contact=contact,
                           window_contacts=[contact])

        for c in self.contact_list:
            c.notifications = True
        for g in self.group_list:
            g.notifications = True

        # Test
        for c in self.contact_list:
            self.assertTrue(c.notifications)
        for g in self.group_list:
            self.assertTrue(g.notifications)

        self.assertIsNone(contact_setting(UserInput('notify off all'), window, *self.args))

        for c in self.contact_list:
            self.assertFalse(c.notifications)
        for g in self.group_list:
            self.assertFalse(g.notifications)
Example #25
0
    def test_disable_file_reception_for_all_users(self):
        # Setup
        user_input = UserInput('store off all')
        contact_list = ContactList(nicks=['Alice', 'Bob'])
        group_list = GroupList()
        contact = contact_list.get_contact('*****@*****.**')
        settings = Settings()
        c_queue = Queue()
        window = Window(uid='*****@*****.**',
                        type='contact',
                        contact=contact,
                        window_contacts=[contact])
        for c in contact_list:
            c.file_reception = True
        for g in group_list:
            g.file_reception = True

        # Test
        for c in contact_list:
            self.assertTrue(c.file_reception)
        for g in group_list:
            self.assertTrue(g.log_messages)
        self.assertIsNone(
            contact_setting(user_input, window, contact_list, group_list,
                            settings, c_queue))
        time.sleep(0.2)
        for c in contact_list:
            self.assertFalse(c.file_reception)
        for g in group_list:
            self.assertFalse(g.log_messages)
Example #26
0
    def test_txm_command(self):
        # Setup
        user_input = UserInput("passwd tx")
        contact_list = ContactList()
        group_list = GroupList()
        settings = Settings()
        queues = {COMMAND_PACKET_QUEUE: Queue(), KEY_MANAGEMENT_QUEUE: Queue()}
        master_key = MasterKey()
        o_getpass = getpass.getpass
        getpass.getpass = lambda x: 'a'

        # Test
        self.assertIsNone(
            change_master_key(user_input, contact_list, group_list, settings,
                              queues, master_key))

        # Teardown
        while not queues[COMMAND_PACKET_QUEUE].empty():
            queues[COMMAND_PACKET_QUEUE].get()

        while not queues[KEY_MANAGEMENT_QUEUE].empty():
            queues[KEY_MANAGEMENT_QUEUE].get()

        getpass.getpass = o_getpass
        time.sleep(0.2)
        cleanup()
Example #27
0
 def test_reset_screens(self):
     self.assertIsNone(
         clear_screens(UserInput(plaintext='reset'), self.window,
                       self.settings, self.queues))
     time.sleep(0.1)
     self.assertEqual(self.queues[COMMAND_PACKET_QUEUE].qsize(), 1)
     self.assertEqual(self.queues[NH_PACKET_QUEUE].qsize(), 1)
Example #28
0
    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)
Example #29
0
    def test_invalid_setting_raises_fr(self):
        # Setup
        user_input = UserInput('set e_correction_ratia true')
        settings = Settings(key_list=['e_correction_ratio'])

        # Test
        self.assertFR('Invalid setting e_correction_ratia.', change_setting,
                      user_input, None, None, settings, None, None)
Example #30
0
    def test_missing_value_raises_fr(self):
        # Setup
        user_input = UserInput('set e_correction_ratio')
        settings = Settings(key_list=['e_correction_ratio'])

        # Test
        self.assertFR('No value for setting specified.', change_setting,
                      user_input, None, None, settings, None, None)