mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-02-01 00:45:52 +00:00
check_memory.py: preserve client.log and stats.out in _test_memory/
Put the nodes in _test_memory/test/, which is clobbered on each test. Also kill the client with SIGINT instead of SIGKILL. Also don't daemonize the client, since we're going to kill it at the end of the test anyways: this cleans up shutdown a bit.
This commit is contained in:
parent
d5ed60e4ad
commit
e9d32f14b9
@ -7,7 +7,7 @@ from twisted.application import service, internet
|
|||||||
from twisted.web.client import getPage
|
from twisted.web.client import getPage
|
||||||
from allmydata import client, introducer_and_vdrive
|
from allmydata import client, introducer_and_vdrive
|
||||||
from allmydata.scripts import create_node
|
from allmydata.scripts import create_node
|
||||||
from allmydata.util import testutil
|
from allmydata.util import testutil, fileutil
|
||||||
import foolscap
|
import foolscap
|
||||||
from foolscap import eventual
|
from foolscap import eventual
|
||||||
from twisted.python import log
|
from twisted.python import log
|
||||||
@ -19,9 +19,10 @@ class SystemFramework(testutil.PollMixin):
|
|||||||
self.basedir = basedir = os.path.abspath(basedir)
|
self.basedir = basedir = os.path.abspath(basedir)
|
||||||
if not basedir.startswith(os.path.abspath(".")):
|
if not basedir.startswith(os.path.abspath(".")):
|
||||||
raise AssertionError("safety issue: basedir must be a subdir")
|
raise AssertionError("safety issue: basedir must be a subdir")
|
||||||
if os.path.exists(basedir):
|
self.testdir = testdir = os.path.join(basedir, "test")
|
||||||
shutil.rmtree(basedir)
|
if os.path.exists(testdir):
|
||||||
os.mkdir(basedir)
|
shutil.rmtree(testdir)
|
||||||
|
fileutil.make_dirs(testdir)
|
||||||
self.sparent = service.MultiService()
|
self.sparent = service.MultiService()
|
||||||
self.sparent.startService()
|
self.sparent.startService()
|
||||||
self.proc = None
|
self.proc = None
|
||||||
@ -32,9 +33,9 @@ class SystemFramework(testutil.PollMixin):
|
|||||||
self.failed = False
|
self.failed = False
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
log.startLogging(open(os.path.join(self.basedir, "log"), "w"),
|
log.startLogging(open(os.path.join(self.testdir, "log"), "w"),
|
||||||
setStdout=False)
|
setStdout=False)
|
||||||
#logfile = open(os.path.join(self.basedir, "log"), "w")
|
#logfile = open(os.path.join(self.testdir, "log"), "w")
|
||||||
#flo = log.FileLogObserver(logfile)
|
#flo = log.FileLogObserver(logfile)
|
||||||
#log.startLoggingWithObserver(flo.emit, setStdout=False)
|
#log.startLoggingWithObserver(flo.emit, setStdout=False)
|
||||||
d = eventual.fireEventually()
|
d = eventual.fireEventually()
|
||||||
@ -57,7 +58,7 @@ class SystemFramework(testutil.PollMixin):
|
|||||||
def setUp(self):
|
def setUp(self):
|
||||||
#print "STARTING"
|
#print "STARTING"
|
||||||
self.stats = {}
|
self.stats = {}
|
||||||
self.statsfile = open(os.path.join(self.basedir, "stats.out"), "w")
|
self.statsfile = open(os.path.join(self.basedir, "stats.out"), "a")
|
||||||
d = self.make_introducer_and_vdrive()
|
d = self.make_introducer_and_vdrive()
|
||||||
def _more(res):
|
def _more(res):
|
||||||
self.make_nodes()
|
self.make_nodes()
|
||||||
@ -99,7 +100,7 @@ class SystemFramework(testutil.PollMixin):
|
|||||||
return s
|
return s
|
||||||
|
|
||||||
def make_introducer_and_vdrive(self):
|
def make_introducer_and_vdrive(self):
|
||||||
iv_basedir = os.path.join(self.basedir, "introducer_and_vdrive")
|
iv_basedir = os.path.join(self.testdir, "introducer_and_vdrive")
|
||||||
os.mkdir(iv_basedir)
|
os.mkdir(iv_basedir)
|
||||||
iv = introducer_and_vdrive.IntroducerAndVdrive(basedir=iv_basedir)
|
iv = introducer_and_vdrive.IntroducerAndVdrive(basedir=iv_basedir)
|
||||||
self.introducer_and_vdrive = self.add_service(iv)
|
self.introducer_and_vdrive = self.add_service(iv)
|
||||||
@ -112,7 +113,7 @@ class SystemFramework(testutil.PollMixin):
|
|||||||
self.vdrive_furl = q.urls["vdrive"]
|
self.vdrive_furl = q.urls["vdrive"]
|
||||||
self.nodes = []
|
self.nodes = []
|
||||||
for i in range(self.numnodes):
|
for i in range(self.numnodes):
|
||||||
nodedir = os.path.join(self.basedir, "node%d" % i)
|
nodedir = os.path.join(self.testdir, "node%d" % i)
|
||||||
os.mkdir(nodedir)
|
os.mkdir(nodedir)
|
||||||
f = open(os.path.join(nodedir, "introducer.furl"), "w")
|
f = open(os.path.join(nodedir, "introducer.furl"), "w")
|
||||||
f.write(self.introducer_furl)
|
f.write(self.introducer_furl)
|
||||||
@ -146,7 +147,7 @@ this file are ignored.
|
|||||||
def start_client(self):
|
def start_client(self):
|
||||||
# this returns a Deferred that fires with the client's control.furl
|
# this returns a Deferred that fires with the client's control.furl
|
||||||
log.msg("MAKING CLIENT")
|
log.msg("MAKING CLIENT")
|
||||||
clientdir = self.clientdir = os.path.join(self.basedir, "client")
|
clientdir = self.clientdir = os.path.join(self.testdir, "client")
|
||||||
quiet = StringIO()
|
quiet = StringIO()
|
||||||
create_node.create_client(clientdir, {}, out=quiet)
|
create_node.create_client(clientdir, {}, out=quiet)
|
||||||
log.msg("DONE MAKING CLIENT")
|
log.msg("DONE MAKING CLIENT")
|
||||||
@ -182,7 +183,7 @@ this file are ignored.
|
|||||||
pp = ClientWatcher()
|
pp = ClientWatcher()
|
||||||
self.proc_done = pp.d = defer.Deferred()
|
self.proc_done = pp.d = defer.Deferred()
|
||||||
logfile = os.path.join(self.basedir, "client.log")
|
logfile = os.path.join(self.basedir, "client.log")
|
||||||
cmd = ["twistd", "-y", "client.tac", "-l", logfile]
|
cmd = ["twistd", "-n", "-y", "client.tac", "-l", logfile]
|
||||||
env = os.environ.copy()
|
env = os.environ.copy()
|
||||||
self.proc = reactor.spawnProcess(pp, cmd[0], cmd, env, path=clientdir)
|
self.proc = reactor.spawnProcess(pp, cmd[0], cmd, env, path=clientdir)
|
||||||
log.msg("CLIENT STARTED")
|
log.msg("CLIENT STARTED")
|
||||||
@ -220,14 +221,14 @@ this file are ignored.
|
|||||||
# returns a Deferred that fires when the process exits. This may only
|
# returns a Deferred that fires when the process exits. This may only
|
||||||
# be called once.
|
# be called once.
|
||||||
try:
|
try:
|
||||||
self.proc.signalProcess("KILL")
|
self.proc.signalProcess("INT")
|
||||||
except error.ProcessExitedAlready:
|
except error.ProcessExitedAlready:
|
||||||
pass
|
pass
|
||||||
return self.proc_done
|
return self.proc_done
|
||||||
|
|
||||||
|
|
||||||
def create_data(self, name, size):
|
def create_data(self, name, size):
|
||||||
filename = os.path.join(self.basedir, name + ".data")
|
filename = os.path.join(self.testdir, name + ".data")
|
||||||
f = open(filename, "wb")
|
f = open(filename, "wb")
|
||||||
block = "a" * 8192
|
block = "a" * 8192
|
||||||
while size > 0:
|
while size > 0:
|
||||||
@ -238,6 +239,7 @@ this file are ignored.
|
|||||||
|
|
||||||
def stash_stats(self, stats, name):
|
def stash_stats(self, stats, name):
|
||||||
self.statsfile.write("%s %s: %d\n" % (self.mode, name, stats['VmPeak']))
|
self.statsfile.write("%s %s: %d\n" % (self.mode, name, stats['VmPeak']))
|
||||||
|
self.statsfile.flush()
|
||||||
self.stats[name] = stats['VmPeak']
|
self.stats[name] = stats['VmPeak']
|
||||||
|
|
||||||
def POST(self, urlpath, **fields):
|
def POST(self, urlpath, **fields):
|
||||||
@ -360,6 +362,9 @@ if __name__ == '__main__':
|
|||||||
mode = "upload"
|
mode = "upload"
|
||||||
if len(sys.argv) > 1:
|
if len(sys.argv) > 1:
|
||||||
mode = sys.argv[1]
|
mode = sys.argv[1]
|
||||||
|
# put the logfile and stats.out in _test_memory/ . These stick around.
|
||||||
|
# put the nodes and other files in _test_memory/test/ . These are
|
||||||
|
# removed each time we run.
|
||||||
sf = SystemFramework("_test_memory", mode)
|
sf = SystemFramework("_test_memory", mode)
|
||||||
sf.run()
|
sf.run()
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user