Exemplo n.º 1
0
    def _process_data(self, bdata):
        """Internal helper function that processes what should be a server request."""
         
        try:
            data = bdata.decode()

            if Protocol.is_message_id_list_request(data):
                
                tc = Protocol.parse_message_id_list_request(data)
                tc, msgs = self._db.messages_since(tc)
                response_str = Protocol.create_message_id_list(tc, msgs)
                self._write(response_str.encode()) 

            elif Protocol.is_message_list_request(data):
                msgids = Protocol.parse_message_list_request(data)
                msgs = self._db.get_messages(msgids)
                response_str = Protocol.create_message_list(msgs)
                self._write(response_str.encode())

            else:
                raise ProtocolParseError
        
        except (ProtocolParseError, ValueError, TypeError):
            #print("SERVER TRANSACTION: Error processing data from client")
            raise ServerTransaction._AbortTransactionException
Exemplo n.º 2
0
    def test_parse_message_id_list_request(self):
        """Test parsing the message ID list request string"""

        tc_bin = b'\x01\x03\x03\x07'
        tc_str = dandelion.util.encode_bytes(tc_bin).decode()

        self.assertTrue(
            Protocol.is_message_id_list_request(
                'GETMESSAGELIST {0}\n'.format(tc_str)))
        tc = Protocol.parse_message_id_list_request(
            'GETMESSAGELIST {0}\n'.format(tc_str))
        self.assertEqual(tc, tc_bin)

        self.assertTrue(
            Protocol.is_message_id_list_request('GETMESSAGELIST\n'))
        tc = Protocol.parse_message_id_list_request('GETMESSAGELIST\n')
        self.assertEqual(tc, None)
        """Testing bad input"""
        self.assertRaises(ValueError, Protocol.parse_message_id_list_request,
                          None)
        self.assertRaises(TypeError, Protocol.parse_message_id_list_request,
                          1337)
        self.assertRaises(TypeError, Protocol.parse_message_id_list_request,
                          [])

        self.assertRaises(ProtocolParseError,
                          Protocol.parse_message_id_list_request, '')

        self.assertRaises(ProtocolParseError,
                          Protocol.parse_message_id_list_request, 'BAD\n')

        self.assertRaises(ProtocolParseError,
                          Protocol.parse_message_id_list_request, 'BAD BAD\n')

        self.assertRaises(ProtocolParseError,
                          Protocol.parse_message_id_list_request,
                          'GETMESSAGELIST ???\n')

        self.assertRaises(ProtocolParseError,
                          Protocol.parse_message_id_list_request,
                          'GETMESSAGELIST 01030307 01030307\n')

        self.assertRaises(ProtocolParseError,
                          Protocol.parse_message_id_list_request,
                          'GETMESSAGELISTXXX 01030307\n')
    def test_create_message_id_list_request(self):
        """Test message ID list request creation"""

        s = Protocol.create_message_id_list_request()
        self.assertTrue('GETMESSAGELIST' in s)
        self.assertTrue(Protocol.is_message_id_list_request(s))
        
        tc = b'\x01\x03\x03\x07'
        s = Protocol.create_message_id_list_request(tc)
        self.assertTrue(' '.join(['GETMESSAGELIST', dandelion.util.encode_bytes(tc).decode()]) in s) 
        self.assertTrue(Protocol.is_message_id_list_request(s))
        
        """Testing bad input"""
        self.assertRaises(TypeError, Protocol.create_message_id_list_request, 0)
        self.assertRaises(TypeError, Protocol.create_message_id_list_request, -1337)
        self.assertRaises(TypeError, Protocol.create_message_id_list_request, [])
        self.assertRaises(TypeError, Protocol.create_message_id_list_request, "1337")
        self.assertRaises(TypeError, Protocol.create_message_id_list_request, "XXX")
    def test_parse_message_id_list_request(self):
        """Test parsing the message ID list request string"""
        
        tc_bin = b'\x01\x03\x03\x07'
        tc_str = dandelion.util.encode_bytes(tc_bin).decode()
        
        self.assertTrue(Protocol.is_message_id_list_request('GETMESSAGELIST {0}\n'.format(tc_str)))
        tc = Protocol.parse_message_id_list_request('GETMESSAGELIST {0}\n'.format(tc_str))
        self.assertEqual(tc, tc_bin)

        self.assertTrue(Protocol.is_message_id_list_request('GETMESSAGELIST\n'))
        tc = Protocol.parse_message_id_list_request('GETMESSAGELIST\n')
        self.assertEqual(tc, None)

        """Testing bad input"""
        self.assertRaises(ValueError, Protocol.parse_message_id_list_request, None)
        self.assertRaises(TypeError, Protocol.parse_message_id_list_request, 1337)
        self.assertRaises(TypeError, Protocol.parse_message_id_list_request, [])
        
        self.assertRaises(ProtocolParseError, 
                          Protocol.parse_message_id_list_request, 
                          '')
        
        self.assertRaises(ProtocolParseError, 
                          Protocol.parse_message_id_list_request, 
                          'BAD\n')
        
        self.assertRaises(ProtocolParseError, 
                          Protocol.parse_message_id_list_request, 
                          'BAD BAD\n')
        
        self.assertRaises(ProtocolParseError, 
                          Protocol.parse_message_id_list_request, 
                          'GETMESSAGELIST ???\n')
        
        self.assertRaises(ProtocolParseError, 
                          Protocol.parse_message_id_list_request, 
                          'GETMESSAGELIST 01030307 01030307\n')
        
        self.assertRaises(ProtocolParseError, 
                          Protocol.parse_message_id_list_request, 
                          'GETMESSAGELISTXXX 01030307\n')
Exemplo n.º 5
0
    def test_create_message_id_list_request(self):
        """Test message ID list request creation"""

        s = Protocol.create_message_id_list_request()
        self.assertTrue('GETMESSAGELIST' in s)
        self.assertTrue(Protocol.is_message_id_list_request(s))

        tc = b'\x01\x03\x03\x07'
        s = Protocol.create_message_id_list_request(tc)
        self.assertTrue(' '.join(
            ['GETMESSAGELIST',
             dandelion.util.encode_bytes(tc).decode()]) in s)
        self.assertTrue(Protocol.is_message_id_list_request(s))
        """Testing bad input"""
        self.assertRaises(TypeError, Protocol.create_message_id_list_request,
                          0)
        self.assertRaises(TypeError, Protocol.create_message_id_list_request,
                          -1337)
        self.assertRaises(TypeError, Protocol.create_message_id_list_request,
                          [])
        self.assertRaises(TypeError, Protocol.create_message_id_list_request,
                          "1337")
        self.assertRaises(TypeError, Protocol.create_message_id_list_request,
                          "XXX")