From c4cad63a4eeed83ce13b320ca69b0241efda11b0 Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Thu, 6 Jan 2022 20:24:22 +0000 Subject: [PATCH] rpc.py, test suite: close files and sockets properly --- mmgen/rpc.py | 14 +++++++++++++- test/gentest.py | 1 + test/include/common.py | 5 +++-- test/include/pexpect.py | 2 ++ test/test.py | 5 ++++- 5 files changed, 23 insertions(+), 4 deletions(-) diff --git a/mmgen/rpc.py b/mmgen/rpc.py index 0a470a6d..6f035abb 100755 --- a/mmgen/rpc.py +++ b/mmgen/rpc.py @@ -99,6 +99,9 @@ class RPCBackends: class requests(base): + def __del__(self): + self.session.close() + def __init__(self,caller): super().__init__(caller) import requests,urllib3 @@ -125,6 +128,9 @@ class RPCBackends: class httplib(base): + def __del__(self): + self.session.close() + def __init__(self,caller): super().__init__(caller) import http.client @@ -156,7 +162,13 @@ class RPCBackends: r = s.getresponse() # => http.client.HTTPResponse instance except Exception as e: raise RPCFailure(str(e)) - return (r.read(),r.status) + + if timeout: + ret = ( r.read(), r.status ) + s.close() + return ret + else: + return ( r.read(), r.status ) class curl(base): diff --git a/test/gentest.py b/test/gentest.py index 6874dda5..481c5b46 100755 --- a/test/gentest.py +++ b/test/gentest.py @@ -342,6 +342,7 @@ def dump_test(kg,ag,fh): dump = [[*(e.split()[0] for e in line.split('addr='))] for line in fh.readlines() if 'addr=' in line] if not dump: die(1,f'File {fh.name!r} appears not to be a wallet dump') + fh.close() m = 'Comparing output of address generator {!r} against wallet dump {!r}' qmsg(green(m.format(kg.desc,fh.name))) diff --git a/test/include/common.py b/test/include/common.py index 27f52735..9cb95247 100755 --- a/test/include/common.py +++ b/test/include/common.py @@ -160,13 +160,14 @@ def init_coverage(): except: pass return coverdir,acc_file -devnull_fh = open(('/dev/null','null.out')[g.platform == 'win'],'w') def silence(): if not (opt.verbose or getattr(opt,'exact_output',None)): - g.stdout = g.stderr = devnull_fh + devnull_fn = ('/dev/null','null.out')[g.platform == 'win'] + g.stdout = g.stderr = open(devnull_fn,'w') def end_silence(): if not (opt.verbose or getattr(opt,'exact_output',None)): + g.stdout.close() g.stdout = sys.stdout g.stderr = sys.stderr diff --git a/test/include/pexpect.py b/test/include/pexpect.py index b942bed8..9f114da2 100755 --- a/test/include/pexpect.py +++ b/test/include/pexpect.py @@ -81,6 +81,8 @@ class MMGenPexpect(object): self.expect('Comment: ',add_comment+'\n') def ok(self): + self.p.sendeof() + self.p.read() ret = self.p.wait() if ret != self.req_exit_val and not opt.coverage: die(1,red(f'test.py: spawned program exited with value {ret}')) diff --git a/test/test.py b/test/test.py index 8259c832..dd0de7c7 100755 --- a/test/test.py +++ b/test/test.py @@ -618,6 +618,10 @@ class CmdGroupMgr(object): class TestSuiteRunner(object): 'test suite runner' + def __del__(self): + if opt.log: + self.log_fd.close() + def __init__(self,data_dir,trash_dir): self.data_dir = data_dir @@ -949,7 +953,6 @@ class TestSuiteRunner(object): def process_retval(self,cmd,ret): if type(ret).__name__ == 'MMGenPexpect': - ret.read() ret.ok() self.cmd_total += 1 elif ret == 'ok':