messages: response batch item without 'operation'
Batch item of error response message can be without 'operation' attribute
This commit is contained in:
		| @@ -288,6 +288,7 @@ class ResponseBatchItem(Struct): | |||||||
|             self.async_correlation_value = AsynchronousCorrelationValue() |             self.async_correlation_value = AsynchronousCorrelationValue() | ||||||
|             self.async_correlation_value.read(tstream) |             self.async_correlation_value.read(tstream) | ||||||
|  |  | ||||||
|  |         if (self.operation is not None): | ||||||
|             # Dynamically create the response payload class that belongs to the |             # Dynamically create the response payload class that belongs to the | ||||||
|             # operation |             # operation | ||||||
|             expected = self.payload_factory.create(self.operation.value) |             expected = self.payload_factory.create(self.operation.value) | ||||||
|   | |||||||
| @@ -1050,6 +1050,19 @@ class TestResponseMessage(TestCase): | |||||||
|             b'\x34\x39\x61\x31\x63\x61\x38\x38\x2d\x36\x62\x65\x61\x2d\x34\x66' |             b'\x34\x39\x61\x31\x63\x61\x38\x38\x2d\x36\x62\x65\x61\x2d\x34\x66' | ||||||
|             b'\x62\x32\x2d\x62\x34\x35\x30\x2d\x37\x65\x35\x38\x38\x30\x32\x63' |             b'\x62\x32\x2d\x62\x34\x35\x30\x2d\x37\x65\x35\x38\x38\x30\x32\x63' | ||||||
|             b'\x33\x30\x33\x38\x00\x00\x00\x00') |             b'\x33\x30\x33\x38\x00\x00\x00\x00') | ||||||
|  |         self.invalid_message_response = ( | ||||||
|  |             b'\x42\x00\x7b\x01\x00\x00\x00\xb0\x42\x00\x7a\x01\x00\x00\x00\x48' | ||||||
|  |             b'\x42\x00\x69\x01\x00\x00\x00\x20\x42\x00\x6a\x02\x00\x00\x00\x04' | ||||||
|  |             b'\x00\x00\x00\x01\x00\x00\x00\x00\x42\x00\x6b\x02\x00\x00\x00\x04' | ||||||
|  |             b'\x00\x00\x00\x01\x00\x00\x00\x00\x42\x00\x92\x09\x00\x00\x00\x08' | ||||||
|  |             b'\x00\x00\x00\x00\x56\xfa\x43\xbd\x42\x00\x0d\x02\x00\x00\x00\x04' | ||||||
|  |             b'\x00\x00\x00\x01\x00\x00\x00\x00\x42\x00\x0f\x01\x00\x00\x00\x58' | ||||||
|  |             b'\x42\x00\x7f\x05\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00' | ||||||
|  |             b'\x42\x00\x7e\x05\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x00' | ||||||
|  |             b'\x42\x00\x7d\x07\x00\x00\x00\x2a\x44\x65\x66\x61\x75\x6c\x74\x20' | ||||||
|  |             b'\x72\x65\x73\x70\x6f\x6e\x73\x65\x2e\x20\x4e\x6f\x20\x6f\x70\x65' | ||||||
|  |             b'\x72\x61\x74\x69\x6f\x6e\x73\x20\x73\x75\x70\x70\x6f\x72\x74\x65' | ||||||
|  |             b'\x64\x2e\x00\x00\x00\x00\x00\x00') | ||||||
|  |  | ||||||
|     def tearDown(self): |     def tearDown(self): | ||||||
|         super(TestResponseMessage, self).tearDown() |         super(TestResponseMessage, self).tearDown() | ||||||
| @@ -1761,3 +1774,41 @@ class TestResponseMessage(TestCase): | |||||||
|                                          len_exp, len_rcv)) |                                          len_exp, len_rcv)) | ||||||
|         msg = "Bad response message write: encoding mismatch" |         msg = "Bad response message write: encoding mismatch" | ||||||
|         self.assertEqual(self.locate, result, msg) |         self.assertEqual(self.locate, result, msg) | ||||||
|  |  | ||||||
|  |     def test_message_invalid_response_write(self): | ||||||
|  |         # Batch item of 'INVALID MESSAGE' response | ||||||
|  |         # has no 'operation' attribute | ||||||
|  |         prot_ver = contents.ProtocolVersion.create(1, 1) | ||||||
|  |  | ||||||
|  |         # Time stamp Tue Mar 29 10:58:37 2016 | ||||||
|  |         time_stamp = contents.TimeStamp(0x56fa43bd) | ||||||
|  |  | ||||||
|  |         batch_count = contents.BatchCount(1) | ||||||
|  |         resp_hdr = messages.ResponseHeader(protocol_version=prot_ver, | ||||||
|  |                                            time_stamp=time_stamp, | ||||||
|  |                                            batch_count=batch_count) | ||||||
|  |  | ||||||
|  |         result_status = contents.ResultStatus( | ||||||
|  |             enums.ResultStatus.OPERATION_FAILED) | ||||||
|  |         result_reason = contents.ResultReason( | ||||||
|  |             enums.ResultReason.INVALID_MESSAGE) | ||||||
|  |         result_message = contents.ResultMessage( | ||||||
|  |             "Default response. No operations supported.") | ||||||
|  |  | ||||||
|  |         batch_item = messages.ResponseBatchItem(result_status=result_status, | ||||||
|  |                                                 result_reason=result_reason, | ||||||
|  |                                                 result_message=result_message) | ||||||
|  |  | ||||||
|  |         response_message = messages.ResponseMessage(response_header=resp_hdr, | ||||||
|  |                                                     batch_items=[batch_item]) | ||||||
|  |  | ||||||
|  |         response_message.write(self.stream) | ||||||
|  |  | ||||||
|  |         result = self.stream.read() | ||||||
|  |         len_exp = len(self.invalid_message_response) | ||||||
|  |         len_rcv = len(result) | ||||||
|  |         self.assertEqual(len_exp, len_rcv, | ||||||
|  |                          self.msg.format('response message', 'write', | ||||||
|  |                                          len_exp, len_rcv)) | ||||||
|  |         msg = "Bad response message write: encoding mismatch" | ||||||
|  |         self.assertEqual(self.invalid_message_response, result, msg) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Viktor Tarasov
					Viktor Tarasov