示例#1
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)
示例#2
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)
示例#3
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)
示例#4
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('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)
示例#5
0
    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)
示例#6
0
    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)
示例#7
0
    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)
示例#8
0
    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)
示例#9
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)
示例#10
0
    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)
示例#11
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=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)
示例#12
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)
示例#13
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
示例#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)
示例#15
0
    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)
示例#16
0
    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)
示例#17
0
    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()