def test_lifecycle2(self): """Run through a different ref counting cycle with a copy.""" for i in range(5, 16): # 32, 64,..., 65536 s = (2 ** i) * x rc = 2 self.assertEqual(grc(s), rc) m = zmq.Frame(s, copy=False) rc += 2 self.assertEqual(grc(s), rc) m2 = copy.copy(m) rc += 1 self.assertEqual(grc(s), rc) # no increase in refcount for accessing buffer # which references m directly buf = m.buffer self.assertEqual(grc(s), rc) self.assertEqual(s, b(str(m))) self.assertEqual(s, bytes(m2)) self.assertEqual(s, m2.bytes) self.assertEqual(s, m.bytes) self.assertEqual(s, bytes(buf)) # self.assertTrue(s is str(m)) # self.assertTrue(s is str(m2)) del buf self.assertEqual(grc(s), rc) del m rc -= 1 self.assertEqual(grc(s), rc) del m2 rc -= 2 await_gc(s, rc) self.assertEqual(grc(s), rc) self.assertEqual(rc, 2) del s
def sendto(self, socket, prefix=None): """ Send this Message to a socket. Parameters ---------- prefix : bytes Additional frame to insert at the beginning of the message. Usually used for the identity. """ # For PUB sockets we add the graph id to the first frame for # subscriptions to match against # FIXME: always add the graph_id to the first frame, because this lets # us route the message without deserializing the payload. if is_socket_type(socket, zmq.PUB): assert self.graph_id is not None # FIXME: we may need to encode the graph_id if it's unicode key = join(self.protocol, self.graph_id) else: key = self.protocol frames = [bytes(key), bytes(self.command), self.raw_payload, self.id] if prefix: frames.insert(0, prefix) if self.revision is not None: frames.append(bytes(self.revision)) socket.send_multipart(frames)
def watch_graph(self, graph, message_id, sync=True): """ Receive update messages for a graph. Sends [SUBSCRIBE][graph] to the agent """ self.graph = graph # FIXME: we should probably just use json here self.pipe.send_multipart( [b"SUBSCRIBE", bytes(graph), bytes(message_id), bytes(int(sync))])
def test_lifecycle2(self): """Run through a different ref counting cycle with a copy.""" for i in range(5, 16): # 32, 64,..., 65536 s = (2**i) * x rc = 2 self.assertEqual(grc(s), rc) m = zmq.Frame(s) rc += 2 self.assertEqual(grc(s), rc) m2 = copy.copy(m) rc += 1 self.assertEqual(grc(s), rc) buf = m.buffer rc += view_rc self.assertEqual(grc(s), rc) self.assertEqual(s, b(str(m))) self.assertEqual(s, bytes(m2)) self.assertEqual(s, m2.bytes) self.assertEqual(s, m.bytes) # self.assert_(s is str(m)) # self.assert_(s is str(m2)) del buf self.assertEqual(grc(s), rc) del m # m.buffer is kept until m is del'd rc -= view_rc rc -= 1 self.assertEqual(grc(s), rc) del m2 rc -= 2 await_gc(s, rc) self.assertEqual(grc(s), rc) self.assertEqual(rc, 2) del s
def test_lifecycle1(self): """Run through a ref counting cycle with a copy.""" for i in range(5, 16): # 32, 64,..., 65536 s = (2 ** i) * x rc = 2 self.assertEqual(grc(s), rc) m = zmq.Frame(s, copy=False) rc += 2 self.assertEqual(grc(s), rc) m2 = copy.copy(m) rc += 1 self.assertEqual(grc(s), rc) buf = m2.buffer rc += view_rc self.assertEqual(grc(s), rc) self.assertEqual(s, b(str(m))) self.assertEqual(s, bytes(m2)) self.assertEqual(s, m.bytes) # self.assertTrue(s is str(m)) # self.assertTrue(s is str(m2)) del m2 rc -= 1 self.assertEqual(grc(s), rc) rc -= view_rc del buf self.assertEqual(grc(s), rc) del m rc -= 2 await_gc(s, rc) self.assertEqual(grc(s), rc) self.assertEqual(rc, 2) del s
def test_lifecycle2(self): """Run through a different ref counting cycle with a copy.""" for i in range(5, 16): # 32, 64,..., 65536 s = (2**i)*x rc = 2 self.assertEqual(grc(s), rc) m = zmq.Frame(s) rc += 2 self.assertEqual(grc(s), rc) m2 = copy.copy(m) rc += 1 self.assertEqual(grc(s), rc) buf = m.buffer rc += view_rc self.assertEqual(grc(s), rc) self.assertEqual(s, b(str(m))) self.assertEqual(s, bytes(m2)) self.assertEqual(s, m2.bytes) self.assertEqual(s, m.bytes) # self.assert_(s is str(m)) # self.assert_(s is str(m2)) del buf self.assertEqual(grc(s), rc) del m # m.buffer is kept until m is del'd rc -= view_rc rc -= 1 self.assertEqual(grc(s), rc) del m2 rc -= 2 await_gc(s, rc) self.assertEqual(grc(s), rc) self.assertEqual(rc, 2) del s
def test_lifecycle1(self): """Run through a ref counting cycle with a copy.""" for i in range(5, 16): # 32, 64,..., 65536 s = (2**i)*x rc = 2 self.assertEquals(grc(s), rc) m = zmq.Frame(s) rc += 2 self.assertEquals(grc(s), rc) m2 = copy.copy(m) rc += 1 self.assertEquals(grc(s), rc) buf = m2.buffer rc += view_rc self.assertEquals(grc(s), rc) self.assertEquals(s, b(str(m))) self.assertEquals(s, bytes(m2)) self.assertEquals(s, m.bytes) # self.assert_(s is str(m)) # self.assert_(s is str(m2)) del m2 rc -= 1 self.assertEquals(grc(s), rc) rc -= view_rc del buf self.assertEquals(grc(s), rc) del m rc -= 2 self.assertEquals(grc(s), rc) self.assertEquals(rc, 2) del s
def test_noncopying_recv(self): """check for clobbering message buffers""" null = b'\0' * 64 sa, sb = self.create_bound_pair(zmq.PAIR, zmq.PAIR) for i in range(32): # try a few times sb.send(null, copy=False) m = sa.recv(copy=False) mb = m.bytes # buf = view(m) buf = m.buffer del m for i in range(5): ff = b'\xff' * (40 + i * 10) sb.send(ff, copy=False) m2 = sa.recv(copy=False) if view.__name__ == 'buffer': b = bytes(buf) else: b = buf.tobytes() self.assertEqual(b, null) self.assertEqual(mb, null) self.assertEqual(m2.bytes, ff)
def test_noncopying_recv(self): """check for clobbering message buffers""" null = asbytes('\0'*64) sa,sb = self.create_bound_pair(zmq.PAIR, zmq.PAIR) for i in range(32): # try a few times sb.send(null, copy=False) m = sa.recv(copy=False) mb = m.bytes # buf = view(m) buf = m.buffer del m for i in range(5): ff=asbytes('\xff'*(40 + i*10)) sb.send(ff, copy=False) m2 = sa.recv(copy=False) if view.__name__ == 'buffer': b = bytes(buf) else: b = buf.tobytes() self.assertEquals(b, null) self.assertEquals(mb, null) self.assertEquals(m2.bytes, ff)