def test_redraw_file_win(self): # Setup self.packet_list.packets = [ Packet(type=FILE, name='testfile.txt', assembly_pt_list=5 * [b'a'], packets=10, size="100.0KB", contact=create_contact('Bob')), Packet(type=FILE, name='testfile2.txt', assembly_pt_list=7 * [b'a'], packets=100, size="15.0KB", contact=create_contact('Charlie')) ] # Test window = self.create_window(WIN_TYPE_FILE) self.assertPrints( f"""\ File name Size Sender Complete ──────────────────────────────────────────────────────────────────────────────── testfile.txt 100.0KB Bob 50.00% testfile2.txt 15.0KB Charlie 7.00% {6*(CURSOR_UP_ONE_LINE+CLEAR_ENTIRE_LINE)}""", window.redraw_file_win)
def test_class(self): # Setup settings = Settings() members = [create_contact(n) for n in ['Alice', 'Bob', 'Charlie']] sg_mock = lambda: None group = Group('testgroup', False, False, members, settings, sg_mock) # Test for c in group: self.assertIsInstance(c, Contact) self.assertEqual(len(group), 3) bytestring = group.dump_g() self.assertIsInstance(bytestring, bytes) self.assertEqual(len(bytestring), 1024 + 2 + (20 * 1024)) self.assertEqual( group.get_list_of_member_accounts(), ['*****@*****.**', '*****@*****.**', '*****@*****.**']) self.assertEqual(group.get_list_of_member_nicks(), ['Alice', 'Bob', 'Charlie']) self.assertTrue(group.has_members()) self.assertFalse(group.has_member('*****@*****.**')) group.add_members([create_contact(n) for n in ['David']]) self.assertTrue(group.has_member('*****@*****.**')) self.assertFalse(group.remove_members(['*****@*****.**'])) self.assertTrue(group.remove_members(['*****@*****.**'])) self.assertFalse(group.has_member('*****@*****.**')) # Teardown cleanup()
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')])
def test_contact_canceled_file(self): # Setup account = '*****@*****.**' contact = create_contact('Alice') origin = ORIGIN_CONTACT_HEADER type_ = 'file' settings = Settings() packet = Packet(account, contact, origin, type_, settings) file_data = os.urandom(10000) compressed = zlib.compress(file_data, level=9) file_key = os.urandom(32) encrypted = encrypt_and_sign(compressed, key=file_key) encrypted += file_key encoded = base64.b85encode(encrypted) file_data = US_BYTE.join([b'testfile.txt', b'11.0B', b'00d 00h 00m 00s', encoded]) packets = self.mock_file_preprocessor(file_data) packets = packets[:20] packets.append(byte_padding(F_C_HEADER)) # Add cancel packet # Test for p in packets: packet.add_packet(p) self.assertEqual(len(packet.assembly_pt_list), 0) # Cancel packet empties packet list self.assertFalse(packet.lt_active) self.assertFalse(packet.is_complete)
def test_long_file(self): # Setup account = '*****@*****.**' contact = create_contact('Alice') origin = ORIGIN_CONTACT_HEADER type_ = 'file' settings = Settings() packet = Packet(account, contact, origin, type_, settings) file_data = os.urandom(10000) compressed = zlib.compress(file_data, level=9) file_key = os.urandom(32) encrypted = encrypt_and_sign(compressed, key=file_key) encrypted += file_key encoded = base64.b85encode(encrypted) file_data = US_BYTE.join([b'testfile.txt', b'11.0B', b'00d 00h 00m 00s', encoded]) packets = self.mock_file_preprocessor(file_data) # Test for p in packets: packet.add_packet(p) self.assertIsNone(packet.assemble_and_store_file()) self.assertTrue(os.path.isfile('received_files/Alice/testfile.txt')) self.assertEqual(os.path.getsize('received_files/Alice/testfile.txt'), 10000) # Teardown shutil.rmtree('received_files/')
def test_long_message(self): # Setup account = '*****@*****.**' contact = create_contact('Alice') origin = ORIGIN_USER_HEADER type_ = 'message' settings = Settings() packet = Packet(account, contact, origin, type_, settings) long_msg = ("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean condimentum consectetur purus quis" " dapibus. Fusce venenatis lacus ut rhoncus faucibus. Cras sollicitudin commodo sapien, sed bibendu" "m velit maximus in. Aliquam ac metus risus. Sed cursus ornare luctus. Integer aliquet lectus id ma" "ssa blandit imperdiet. Ut sed massa eget quam facilisis rutrum. Mauris eget luctus nisl. Sed ut el" "it iaculis, faucibus lacus eget, sodales magna. Nunc sed commodo arcu. In hac habitasse platea dic" "tumst. Integer luctus aliquam justo, at vestibulum dolor iaculis ac. Etiam laoreet est eget odio r" "utrum, vel malesuada lorem rhoncus. Cras finibus in neque eu euismod. Nulla facilisi. Nunc nec ali" "quam quam, quis ullamcorper leo. Nunc egestas lectus eget est porttitor, in iaculis felis sceleris" "que. In sem elit, fringilla id viverra commodo, sagittis varius purus. Pellentesque rutrum loborti" "s neque a facilisis. Mauris id tortor placerat, aliquam dolor ac, venenatis arcu.") packets = self.mock_message_preprocessor(long_msg) # Test for p in packets: packet.add_packet(p) message = packet.assemble_message_packet() message = message[1:].decode() self.assertEqual(message, long_msg)
def test_fingerprint_print_command(self): # Setup window = Window(name='Alice', type='contact', contact=create_contact('Alice')) # Test self.assertIsNone(fingerprints(window))
def test_print_contacts(self): self.contact_list.contacts.append(create_contact(LOCAL_ID)) self.contact_list.get_contact_by_pub_key( nick_to_pub_key('Alice')).log_messages = False self.contact_list.get_contact_by_pub_key( nick_to_pub_key('Alice')).kex_status = KEX_STATUS_PENDING self.contact_list.get_contact_by_pub_key( nick_to_pub_key('Bob')).notifications = False self.contact_list.get_contact_by_pub_key( nick_to_pub_key('Charlie')).kex_status = KEX_STATUS_UNVERIFIED self.contact_list.get_contact_by_pub_key( nick_to_pub_key('Bob')).file_reception = False self.contact_list.get_contact_by_pub_key( nick_to_pub_key('Bob')).kex_status = KEX_STATUS_VERIFIED self.contact_list.get_contact_by_pub_key(nick_to_pub_key( 'David')).rx_fingerprint = bytes(FINGERPRINT_LENGTH) self.contact_list.get_contact_by_pub_key( nick_to_pub_key('David')).kex_status = bytes(KEX_STATUS_NO_RX_PSK) self.assert_prints( CLEAR_ENTIRE_SCREEN + CURSOR_LEFT_UP_CORNER + f"""\ Contact Account Logging Notify Files Key Ex ──────────────────────────────────────────────────────────────────────────────── Alice hpcra No Yes Accept {ECDHE} (Pending) Bob zwp3d Yes No Reject {ECDHE} (Verified) Charlie n2a3c Yes Yes Accept {ECDHE} (Unverified) David u22uy Yes Yes Accept {PSK} (No contact key) Eric jszzy Yes Yes Accept {ECDHE} (Verified) """, self.contact_list.print_contacts)
def test_select_rx_file_window(self): # Setup self.window_list.windows = [ self.create_window(g) for g in ['test_group', 'test_group2', WIN_TYPE_FILE] ] tg_win = self.window_list.windows[0] tg_win.is_active = True self.window_list.active_win = tg_win self.packet_list.packets = [ Packet(type=FILE, name='testfile.txt', assembly_pt_list=5 * [b'a'], packets=10, size="100.0KB", contact=create_contact('Bob')) ] # Test self.assertPrints( f"""\ File name Size Sender Complete ──────────────────────────────────────────────────────────────────────────────── testfile.txt 100.0KB Bob 50.00% {5*(CURSOR_UP_ONE_LINE+CLEAR_ENTIRE_LINE)}""", self.window_list.select_rx_window, WIN_TYPE_FILE) self.assertFalse(tg_win.is_active) self.assertTrue(self.window_list.get_window(WIN_TYPE_FILE).is_active)
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)
def setUp(self): self.short_msg = "Lorem ipsum dolor sit amet, consectetur adipiscing elit" self.msg = ("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean condimentum consectetur purus quis" " dapibus. Fusce venenatis lacus ut rhoncus faucibus. Cras sollicitudin commodo sapien, sed bibendu" "m velit maximus in. Aliquam ac metus risus. Sed cursus ornare luctus. Integer aliquet lectus id ma" "ssa blandit imperdiet. Ut sed massa eget quam facilisis rutrum. Mauris eget luctus nisl. Sed ut el" "it iaculis, faucibus lacus eget, sodales magna. Nunc sed commodo arcu. In hac habitasse platea dic" "tumst. Integer luctus aliquam justo, at vestibulum dolor iaculis ac. Etiam laoreet est eget odio r" "utrum, vel malesuada lorem rhoncus. Cras finibus in neque eu euismod. Nulla facilisi. Nunc nec ali" "quam quam, quis ullamcorper leo. Nunc egestas lectus eget est porttitor, in iaculis felis sceleris" "que. In sem elit, fringilla id viverra commodo, sagittis varius purus. Pellentesque rutrum loborti" "s neque a facilisis. Mauris id tortor placerat, aliquam dolor ac, venenatis arcu.") self.unittest_dir = cd_unittest() self.ts = datetime.now() self.contact = create_contact('Alice') self.settings = Settings(log_file_masking=True) self.onion_pub_key = nick_to_pub_key('Alice') self.window_list = WindowList() self.whisper_header = b'\x00' compressed = zlib.compress(b'file_data', level=COMPRESSION_LEVEL) file_key = os.urandom(SYMMETRIC_KEY_LENGTH) encrypted = encrypt_and_sign(compressed, key=file_key) encrypted += file_key self.short_f_data = (int_to_bytes(1) + int_to_bytes(2) + b'testfile.txt' + US_BYTE + encrypted)
def test_get_group_by_id(self): members = [create_contact('Laura')] group_id = os.urandom(GROUP_ID_LENGTH) self.group_list.add_group('test_group_12', group_id, False, False, members) self.assertEqual( self.group_list.get_group_by_id(group_id).name, 'test_group_12')
def setUp(self): 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 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 setUp(self): 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_has_group_id(self): members = [create_contact('Laura')] group_id = os.urandom(GROUP_ID_LENGTH) self.assertFalse(self.group_list.has_group_id(group_id)) self.group_list.add_group('test_group_12', group_id, False, False, members) self.assertTrue(self.group_list.has_group_id(group_id))
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_fingerprint_print_command(self): # Setup window = TxWindow(name='Alice', type=WIN_TYPE_CONTACT, contact=create_contact()) # Test self.assertIsNone(show_fingerprints(window))
def test_removal_of_contact_logs(self) -> None: # Setup short_msg = "Lorem ipsum dolor sit amet, consectetur adipiscing elit." # Create temp file that must be removed. with open(self.tmp_file_name, 'wb+') as f: f.write(os.urandom(LOG_ENTRY_LENGTH)) # Add a long message sent to both Alice and Bob. for p in assembly_packet_creator(MESSAGE, self.msg): write_log_entry(p, nick_to_pub_key('Alice'), self.tfc_log_database) write_log_entry(p, nick_to_pub_key('Charlie'), self.tfc_log_database) # Add a short message sent to both Alice and Bob. for p in assembly_packet_creator(MESSAGE, short_msg): write_log_entry(p, nick_to_pub_key('Alice'), self.tfc_log_database) write_log_entry(p, nick_to_pub_key('Charlie'), self.tfc_log_database) # Test self.assert_se(f"Removed log entries for contact '{nick_to_short_address('Alice')}'.", remove_logs, *self.args, selector=nick_to_pub_key('Alice')) self.assert_se(f"Removed log entries for contact '{nick_to_short_address('Charlie')}'.", remove_logs, *self.args, selector=nick_to_pub_key('Charlie')) self.assert_se(f"Found no log entries for contact '{nick_to_short_address('Alice')}'.", remove_logs, *self.args, selector=nick_to_pub_key('Alice')) self.contact_list.contacts = [create_contact('Alice')] self.assert_se(f"Found no log entries for contact 'Alice'.", remove_logs, *self.args, selector=nick_to_pub_key('Alice')) self.assert_se(f"Found no log entries for group '2e8b2Wns7dWjB'.", remove_logs, *self.args, selector=group_name_to_group_id('searched_group'))
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_contact_printing(self): # Setup contact_list = ContactList(MasterKey(), Settings()) contact_list.contacts = [ create_contact(n) for n in ['Alice', 'Bob', 'Charlie', 'David'] ] # Teardown self.assertIsNone(contact_list.print_contacts())
def test_add_members(self): self.group.members = [] self.assertFalse(self.group.has_member('*****@*****.**')) self.assertFalse(self.group.has_member('*****@*****.**')) self.group.add_members([create_contact(n) for n in ['David', 'Eric']]) self.assertTrue(self.group.has_member('*****@*****.**')) self.assertTrue(self.group.has_member('*****@*****.**'))
def test_no_contact_raises_se(self) -> None: # Setup window = TxWindow(type=WIN_TYPE_CONTACT, contact=create_contact('Bob')) window.contact = None # Test self.assert_se("Error: Window does not have contact.", change_nick, UserInput("nick Alice\x01"), window, *self.args)
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_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_psk_raises_fr(self): # Setup contact = create_contact('Alice') contact.tx_fingerprint = bytes(32) window = Window(name='Alice', type='contact', contact=contact) # Test self.assertFR( "Key have been pre-shared with Alice and thus have no fingerprints.", fingerprints, window)
def setUp(self): """Pre-test actions.""" 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_add_group(self): members = [create_contact('Laura')] self.group_list.add_group('test_group_12', bytes(GROUP_ID_LENGTH), False, False, members) self.group_list.add_group('test_group_12', bytes(GROUP_ID_LENGTH), False, True, members) self.assertTrue( self.group_list.get_group('test_group_12').notifications) self.assertEqual(len(self.group_list), len(self.group_names) + 1)
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)