def test_process_with_body_frame_partial(self): obj = channel.ContentFrameDispatcher() value = frame.Header(1, 100, spec.BasicProperties) obj.process(value) value = frame.Method(1, spec.Basic.Deliver()) obj.process(value) value = frame.Body(1, 'abc123') obj.process(value) self.assertEqual(obj._body_fragments, [value.fragment])
def test_process_with_full_message(self): obj = channel.ContentFrameDispatcher() method_frame = frame.Method(1, spec.Basic.Deliver()) obj.process(method_frame) header_frame = frame.Header(1, 6, spec.BasicProperties) obj.process(header_frame) body_frame = frame.Body(1, 'abc123') response = obj.process(body_frame) self.assertEqual(response, (method_frame, header_frame, 'abc123'))
def test_ascii_body_instance(self): obj = channel.ContentFrameDispatcher() method_frame = frame.Method(1, spec.Basic.Deliver()) obj.process(method_frame) header_frame = frame.Header(1, 11, spec.BasicProperties) obj.process(header_frame) body_frame = frame.Body(1, 'foo-bar-baz') method_frame, header_frame, body_value = obj.process(body_frame) self.assertIsInstance(body_value, str)
def test_utf8_body_instance(self): obj = channel.ContentFrameDispatcher() method_frame = frame.Method(1, spec.Basic.Deliver()) obj.process(method_frame) header_frame = frame.Header(1, 14, spec.BasicProperties) obj.process(header_frame) body_frame = frame.Body(1, 'utf8_value=\xe2\x9c\x93') method_frame, header_frame, body_value = obj.process(body_frame) self.assertIsInstance(body_value, unicode)
def test_reset_header_frame(self): method_frame = frame.Method(1, spec.Basic.Deliver()) self.obj.process(method_frame) header_frame = frame.Header(1, 10, spec.BasicProperties) self.obj.process(header_frame) body_frame = frame.Body(1, b'abc123') self.obj.process(body_frame) self.obj._reset() self.assertEqual(self.obj._header_frame, None)
def test_reset_method_frame(self): obj = channel.ContentFrameDispatcher(False) method_frame = frame.Method(1, spec.Basic.Deliver()) obj.process(method_frame) header_frame = frame.Header(1, 10, spec.BasicProperties) obj.process(header_frame) body_frame = frame.Body(1, 'abc123') obj.process(body_frame) obj._reset() self.assertEqual(obj._method_frame, None)
def test_binary_non_unicode_value(self): expectation =('a', 0.8) obj = channel.ContentFrameDispatcher(False) method_frame = frame.Method(1, spec.Basic.Deliver()) obj.process(method_frame) header_frame = frame.Header(1, 20, spec.BasicProperties) obj.process(header_frame) body_frame = frame.Body(1, marshal.dumps(expectation)) method_frame, header_frame, body_value = obj.process(body_frame) self.assertEqual(marshal.loads(body_value), expectation)
def test_utf8_body_value(self): expectation = u'utf8_value=✓' obj = channel.ContentFrameDispatcher(False) method_frame = frame.Method(1, spec.Basic.Deliver()) obj.process(method_frame) header_frame = frame.Header(1, 14, spec.BasicProperties) obj.process(header_frame) body_frame = frame.Body(1, 'utf8_value=\xe2\x9c\x93') method_frame, header_frame, body_value = obj.process(body_frame) self.assertEqual(body_value, expectation)
def test_ascii_body_value(self): expectation = b'foo-bar-baz' self.obj = channel.ContentFrameAssembler() method_frame = frame.Method(1, spec.Basic.Deliver()) self.obj.process(method_frame) header_frame = frame.Header(1, 11, spec.BasicProperties) self.obj.process(header_frame) body_frame = frame.Body(1, b'foo-bar-baz') method_frame, header_frame, body_value = self.obj.process(body_frame) self.assertEqual(body_value, expectation) self.assertIsInstance(body_value, bytes)
def test_binary_non_unicode_value(self): expectation = ('a', 0.8) self.obj = channel.ContentFrameAssembler() method_frame = frame.Method(1, spec.Basic.Deliver()) self.obj.process(method_frame) marshalled_body = marshal.dumps(expectation) header_frame = frame.Header(1, len(marshalled_body), spec.BasicProperties) self.obj.process(header_frame) body_frame = frame.Body(1, marshalled_body) method_frame, header_frame, body_value = self.obj.process(body_frame) self.assertEqual(marshal.loads(body_value), expectation)
def _send_message(self, channel_number, method, content=None): length = len(content[1]) self.connection.send_frame( frame.Method(channel_number, method).marshal()) self.connection.send_frame( frame.Header(channel_number, length, content[0])) if content[1]: body_max_length = (self.connection.frame_max - spec.FRAME_HEADER_SIZE - spec.FRAME_END_SIZE) chunks = int(math.ceil(float(length) / body_max_length)) for chunk in xrange(0, chunks): start = chunk * body_max_length end = start + body_max_length if end > length: end = length self.connection.send_frame( frame.Body(channel_number, content[1][start:end]))
def _send_method(self, channel_number, method_frame, content=None): """Constructs a RPC method frame and then sends it to the broker. :param int channel_number: The channel number for the frame :param pika.object.Method method_frame: The method frame to send :param tuple content: If set, is a content frame, is tuple of properties and body. """ LOGGER.debug('Sending on channel %i: %r', channel_number, method_frame) self._send_frame(frame.Method(channel_number, method_frame)) if isinstance(content, tuple): self._send_frame(frame.Header(channel_number, len(content[1]), content[0])) if content[1]: body_buf = simplebuffer.SimpleBuffer(content[1]) while body_buf: piece_len = min(len(body_buf), self._body_max_length) piece = body_buf.read_and_consume(piece_len) self._send_frame(frame.Body(channel_number, piece))
def body_marshal_test(self): body = frame.Body(1, b'I like it that sound') self.assertEqual(body.marshal(), self.BODY_FRAME)