def test_recv_buff(self): from rospy.impl.tcpros_base import recv_buff buff = cStringIO.StringIO() try: recv_buff(MockEmptySock(), buff, 1) self.fail("recv_buff should have raised TransportTerminated") except rospy.impl.tcpros_base.TransportTerminated: self.assertEquals('', buff.getvalue()) self.assertEquals(5, recv_buff(MockSock('1234567890'), buff, 5)) self.assertEquals('12345', buff.getvalue()) buff = cStringIO.StringIO() self.assertEquals(10, recv_buff(MockSock('1234567890'), buff, 100)) self.assertEquals('1234567890', buff.getvalue())
def _read_service_error(self, sock, b): """ Read service error from sock @param sock: socket to read from @type sock: socket @param b: currently read data from sock @type b: StringIO """ buff_size = 256 #can be small given that we are just reading an error string while b.tell() < 5: recv_buff(sock, b, buff_size) bval = b.getvalue() (length,) = struct.unpack('<I', bval[1:5]) # ready in len byte while b.tell() < (5 + length): recv_buff(sock, b, buff_size) bval = b.getvalue() return struct.unpack('<%ss'%length, bval[5:5+length])[0] # ready in len byte