Fix test_non_numeric_pid (and put it in a better place too)

This commit is contained in:
Jean-Paul Calderone 2020-12-17 09:11:29 -05:00
parent bb495b6dc5
commit a363c8de67
3 changed files with 42 additions and 35 deletions

View File

@ -182,7 +182,7 @@ class DaemonizeTahoeNodePlugin(object):
return DaemonizeTheRealService(self.nodetype, self.basedir, so) return DaemonizeTheRealService(self.nodetype, self.basedir, so)
def run(config): def run(config, runApp=twistd.runApp):
""" """
Runs a Tahoe-LAFS node in the foreground. Runs a Tahoe-LAFS node in the foreground.
@ -202,10 +202,7 @@ def run(config):
if not nodetype: if not nodetype:
print("%s is not a recognizable node directory" % quoted_basedir, file=err) print("%s is not a recognizable node directory" % quoted_basedir, file=err)
return 1 return 1
# Now prepare to turn into a twistd process. This os.chdir is the point twistd_args = ["--nodaemon", "--rundir", basedir]
# of no return.
os.chdir(basedir)
twistd_args = ["--nodaemon"]
twistd_args.extend(config.twistd_args) twistd_args.extend(config.twistd_args)
twistd_args.append("DaemonizeTahoeNode") # point at our DaemonizeTahoeNodePlugin twistd_args.append("DaemonizeTahoeNode") # point at our DaemonizeTahoeNodePlugin
@ -229,5 +226,5 @@ def run(config):
# We always pass --nodaemon so twistd.runApp does not daemonize. # We always pass --nodaemon so twistd.runApp does not daemonize.
print("running node in %s" % (quoted_basedir,), file=out) print("running node in %s" % (quoted_basedir,), file=out)
twistd.runApp(twistd_config) runApp(twistd_config)
return 0 return 0

View File

@ -2,10 +2,8 @@ import os.path
from six.moves import cStringIO as StringIO from six.moves import cStringIO as StringIO
import urllib import urllib
import re import re
from mock import patch
from twisted.trial import unittest from twisted.trial import unittest
from twisted.python.filepath import FilePath
from twisted.internet.testing import ( from twisted.internet.testing import (
MemoryReactor, MemoryReactor,
) )
@ -1308,30 +1306,3 @@ class Options(ReallyEqualMixin, unittest.TestCase):
["--node-directory=there", "run", some_twistd_option]) ["--node-directory=there", "run", some_twistd_option])
self.failUnlessRaises(usage.UsageError, self.parse, self.failUnlessRaises(usage.UsageError, self.parse,
["run", "--basedir=here", some_twistd_option]) ["run", "--basedir=here", some_twistd_option])
class Run(unittest.TestCase):
@patch('allmydata.scripts.tahoe_run.os.chdir')
@patch('allmydata.scripts.tahoe_run.twistd')
def test_non_numeric_pid(self, mock_twistd, chdir):
"""
If the pidfile exists but does not contain a numeric value, a complaint to
this effect is written to stderr.
"""
basedir = FilePath(self.mktemp().decode("ascii"))
basedir.makedirs()
basedir.child(u"twistd.pid").setContent(b"foo")
basedir.child(u"tahoe-client.tac").setContent(b"")
config = tahoe_run.RunOptions()
config.stdout = StringIO()
config.stderr = StringIO()
config['basedir'] = basedir.path
config.twistd_args = []
result_code = tahoe_run.run(config)
self.assertIn("invalid PID file", config.stderr.getvalue())
self.assertTrue(len(mock_twistd.mock_calls), 1)
self.assertEqual(mock_twistd.mock_calls[0][0], 'runApp')
self.assertEqual(0, result_code)

View File

@ -9,6 +9,7 @@ from six.moves import (
from testtools.matchers import ( from testtools.matchers import (
Contains, Contains,
Equals, Equals,
HasLength,
) )
from twisted.python.filepath import ( from twisted.python.filepath import (
@ -23,6 +24,8 @@ from twisted.internet.test.modulehelpers import (
from ...scripts.tahoe_run import ( from ...scripts.tahoe_run import (
DaemonizeTheRealService, DaemonizeTheRealService,
RunOptions,
run,
) )
from ...scripts.runner import ( from ...scripts.runner import (
@ -125,3 +128,39 @@ class DaemonizeTheRealServiceTests(SyncTestCase):
""", """,
"Privacy requested", "Privacy requested",
) )
class RunTests(SyncTestCase):
"""
Tests for ``run``.
"""
def test_non_numeric_pid(self):
"""
If the pidfile exists but does not contain a numeric value, a complaint to
this effect is written to stderr.
"""
basedir = FilePath(self.mktemp().decode("ascii"))
basedir.makedirs()
basedir.child(u"twistd.pid").setContent(b"foo")
basedir.child(u"tahoe-client.tac").setContent(b"")
config = RunOptions()
config.stdout = StringIO()
config.stderr = StringIO()
config['basedir'] = basedir.path
config.twistd_args = []
runs = []
result_code = run(config, runApp=runs.append)
self.assertThat(
config.stderr.getvalue(),
Contains("found invalid PID file in"),
)
self.assertThat(
runs,
HasLength(1),
)
self.assertThat(
result_code,
Equals(0),
)