def test_pickle_and_back_IS_same(obj, proto): p1 = ImmutablePickler(uneven=False, protocol=proto) p2 = ImmutablePickler(uneven=True, protocol=proto) s1 = p1.dumps(obj) d2 = p2.loads(s1) s2 = p2.dumps(d2) obj_back = p1.loads(s2) assert obj is obj_back
def test_pickling_concurrently(): p1 = ImmutablePickler(uneven=False) p2 = ImmutablePickler(uneven=True) a1 = A() a1.hasattr = 42 a2 = A() s1 = p1.dumps(a1) s2 = p2.dumps(a2) other_a1 = p2.loads(s1) other_a2 = p1.loads(s2) a1_back = p1.loads(p2.dumps(other_a1))
def forked_run_report(item): # for now, we run setup/teardown in the subprocess # XXX optionally allow sharing of setup/teardown EXITSTATUS_TESTEXIT = 4 from py.__.test.dist.mypickle import ImmutablePickler ipickle = ImmutablePickler(uneven=0) ipickle.selfmemoize(item.config) # XXX workaround the issue that 2.6 cannot pickle # instances of classes defined in global conftest.py files ipickle.selfmemoize(item) def runforked(): try: reports = runtestprotocol(item, log=False) except KeyboardInterrupt: py.std.os._exit(EXITSTATUS_TESTEXIT) return ipickle.dumps(reports) ff = py.process.ForkedFunc(runforked) result = ff.waitfinish() if result.retval is not None: return ipickle.loads(result.retval) else: if result.exitstatus == EXITSTATUS_TESTEXIT: py.test.exit("forked test item %s raised Exit" % (item, )) return [report_process_crash(item, result)]
def forked_run_report(item): # for now, we run setup/teardown in the subprocess # XXX optionally allow sharing of setup/teardown EXITSTATUS_TESTEXIT = 4 from py.__.test.dist.mypickle import ImmutablePickler ipickle = ImmutablePickler(uneven=0) ipickle.selfmemoize(item.config) # XXX workaround the issue that 2.6 cannot pickle # instances of classes defined in global conftest.py files ipickle.selfmemoize(item) def runforked(): try: reports = runtestprotocol(item, log=False) except KeyboardInterrupt: py.std.os._exit(EXITSTATUS_TESTEXIT) return ipickle.dumps(reports) ff = py.process.ForkedFunc(runforked) result = ff.waitfinish() if result.retval is not None: return ipickle.loads(result.retval) else: if result.exitstatus == EXITSTATUS_TESTEXIT: py.test.exit("forked test item %s raised Exit" %(item,)) return [report_process_crash(item, result)]
class ImmutablePickleTransport: def __init__(self, request): from py.__.test.dist.mypickle import ImmutablePickler self.p1 = ImmutablePickler(uneven=0) self.p2 = ImmutablePickler(uneven=1) setglobals(request) def p1_to_p2(self, obj): return self.p2.loads(self.p1.dumps(obj)) def p2_to_p1(self, obj): return self.p1.loads(self.p2.dumps(obj)) def unifyconfig(self, config): p2config = self.p1_to_p2(config) p2config._initafterpickle(config.topdir) return p2config
def test_pickling_twice_before_unpickling(): p1 = ImmutablePickler(uneven=False) p2 = ImmutablePickler(uneven=True) a1 = A() a2 = A() a3 = A() a3.a1 = a1 a2.a1 = a1 s1 = p1.dumps(a1) a1.a3 = a3 s2 = p1.dumps(a2) other_a1 = p2.loads(s1) other_a2 = p2.loads(s2) back_a1 = p1.loads(p2.dumps(other_a1)) other_a3 = p2.loads(p1.dumps(a3)) back_a3 = p1.loads(p2.dumps(other_a3)) back_a2 = p1.loads(p2.dumps(other_a2)) back_a1 = p1.loads(p2.dumps(other_a1)) assert back_a1 is a1 assert back_a2 is a2
def forked_run_report(item, pdb=None): EXITSTATUS_TESTEXIT = 4 ipickle = ImmutablePickler(uneven=0) ipickle.selfmemoize(item.config) def runforked(): try: testrep = basic_run_report(item) except (KeyboardInterrupt, Exit): os._exit(EXITSTATUS_TESTEXIT) return ipickle.dumps(testrep) ff = py.process.ForkedFunc(runforked) result = ff.waitfinish() if result.retval is not None: return ipickle.loads(result.retval) else: if result.exitstatus == EXITSTATUS_TESTEXIT: raise Exit("forked test item %s raised Exit" %(item,)) return report_process_crash(item, result)
def test_self_memoize(): p1 = ImmutablePickler(uneven=False) a1 = A() p1.selfmemoize(a1) x = p1.loads(p1.dumps(a1)) assert x is a1