def test_instruction_invalid_element_separator(self): """ Instruction with invalid element separator. """ instruction_str = '3args,8.hostname,4.port;' with self.assertRaises(InvalidInstruction): Instruction.load(instruction_str)
def test_instruction_invalid_arg_separator(self): """ Instruction with invalid arg separator. """ instruction_str = '3.args8.hostname,4.port;' with self.assertRaises(InvalidInstruction): Instruction.load(instruction_str)
def test_instruction_invalid_termination(self): """ Instruction with invalid terminator. """ instruction_str = '4.args,8.hostname,4.port' with self.assertRaises(InvalidInstruction): Instruction.load(instruction_str)
def test_instruction_invalid_arg_length_large(self): """ Instruction with invalid large arg length. """ instruction_str = '1000.args,8.hostname,4.port;' with self.assertRaises(InvalidInstruction): Instruction.load(instruction_str)
def test_instruction_valid_decode(self): """ Test valid instruction decoding. """ instruction_str = '4.args,8.hostname,4.port,4.1984;' instruction_opcode = 'args' instruction_args = ('hostname', 'port', '1984') instruction = Instruction.load(instruction_str) self.assertEqual(instruction_str, instruction.encode()) self.assertEqual(instruction_opcode, instruction.opcode) self.assertEqual(instruction_args, instruction.args)
def test_instruction_valid_decode_with_protocol_chars(self): """ Test valid instruction decoding with arg containing protocol characters. """ # arg includes ARG_SEP, ELEM_SEP, INST_TERM and a white space. arg_protocol_chars = 'p,.; t' instruction_str = '4.args,8.hostname,%s.%s;' %\ (len(arg_protocol_chars), arg_protocol_chars) instruction_opcode = 'args' instruction_args = ('hostname', arg_protocol_chars) instruction = Instruction.load(instruction_str) self.assertEqual(instruction_str, instruction.encode()) self.assertEqual(instruction_opcode, instruction.opcode) self.assertEqual(instruction_args, instruction.args)
def test_instruction_valid_decode_unicode(self): """ Test valid instruction decoding with unicode characters. """ # messing up by passing unicode instruction (with valid arg length!) instruction_str_u = u'4.args,8.hostname,%s.%s;' %\ (self.u_arg_len, self.u_arg) # instruction str for validation! instruction_str = '4.args,8.hostname,%s.%s;' %\ (self.u_arg_len, self.u_arg_utf8) instruction_opcode = 'args' instruction_args = ('hostname', self.u_arg_utf8) # Instruction.load should handle unicode string! instruction = Instruction.load(instruction_str_u) self.assertEqual(instruction_str, instruction.encode()) self.assertEqual(instruction_opcode, instruction.opcode) self.assertEqual(instruction_args, instruction.args)
def read_instruction(self): """ Read and decode instruction. """ self.logger.debug('Reading instruction.') return Instruction.load(self.receive())