def _invoke(socket, timeout, request, response=None, xid=None): oa = OutputArchive() if xid: oa.write_int(xid, 'xid') if request.type: oa.write_int(request.type, 'type') request.serialize(oa, 'NA') timeout = _write(socket, struct.pack('!i', len(oa.buffer)), timeout) timeout = _write(socket, oa.buffer, timeout) msg, timeout = _read(socket, 4, timeout) length = struct.unpack_from('!i', msg, 0)[0] msg, _ = _read(socket, length, timeout) ia = InputArchive(msg) zxid = None if xid: header = ReplyHeader(None, None, None) header.deserialize(ia, 'header') if header.xid != xid: raise RuntimeError('xids do not match, expected %r received %r', xid, header.xid) if header.zxid > 0: zxid = header.zxid if header.err: callback_exception = EXCEPTIONS[header.err]() LOGGER.debug('Received error %r', callback_exception) raise callback_exception if response: response.deserialize(ia, 'NA') LOGGER.debug('Read response %r', response) return zxid
def test_int(): oa = OutputArchive() for b in range(256): oa.write_int(b, 'tag_' + str(b)) ia = InputArchive(str(oa.buffer)) for b in range(256): r = ia.read_int('tag_' + str(b)) assert type(r) == int assert b == r
def _submit(socket, request, timeout, xid=None): oa = OutputArchive() oa.write_int(xid, 'xid') if request.type: oa.write_int(request.type, 'type') request.serialize(oa, 'NA') timeout = _write(socket, struct.pack('!i', len(oa.buffer)), timeout) _write(socket, oa.buffer, timeout)
def test_vector(): oa = OutputArchive() v = [1, 2, 3, 4, 5] oa.start_vector(v, 'tag') for i in range(len(v)): oa.write_int(v[i], 'tag_' + str(i)) oa.end_vector(v, 'tag') ia = InputArchive(str(oa.buffer)) l = ia.start_vector('tag') vv = [] for i in range(l): vv.append(ia.read_int('tag_' + str(i))) ia.end_vector('tag') assert v == vv