Changeset 210da5c in trunk


Ignore:
Timestamp:
2009-01-22T22:38:18Z (16 years ago)
Author:
Zooko O'Whielacronx <zooko@…>
Branches:
master
Children:
967102e
Parents:
fafdd2ce
Message:

setup: change test_runner to invoke "bin/tahoe" in a subprocess instead of executing runner.runner()
This is necessary because loading allmydata code now depends on PYTHONPATH manipulation which is done in the "bin/tahoe" script. Unfortunately it makes test_runner slower since it launches and waits for many subprocesses.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified src/allmydata/test/test_runner.py

    rfafdd2ce r210da5c  
    44from cStringIO import StringIO
    55from twisted.python import usage, runtime
    6 from twisted.internet import defer
     6from twisted.internet import defer, utils
    77import os.path, re
    88from allmydata.scripts import runner
    99from allmydata.util import fileutil, pollmixin
    1010
    11 class CreateNode(unittest.TestCase):
     11from allmydata.test import common_util
     12
     13class CreateNode(unittest.TestCase, common_util.SignalMixin):
    1214    def workdir(self, name):
    1315        basedir = os.path.join("test_runner", "CreateNode", name)
     
    1820        basedir = self.workdir("test_client")
    1921        c1 = os.path.join(basedir, "c1")
    20         argv = ["--quiet", "create-client", "--basedir", c1]
    21         out,err = StringIO(), StringIO()
    22         rc = runner.runner(argv, stdout=out, stderr=err)
    23         self.failUnlessEqual(err.getvalue(), "")
    24         self.failUnlessEqual(out.getvalue(), "")
    25         self.failUnlessEqual(rc, 0)
    26         self.failUnless(os.path.exists(c1))
    27         self.failUnless(os.path.exists(os.path.join(c1, "tahoe-client.tac")))
    28 
    29         # creating the client a second time should throw an exception
    30         out,err = StringIO(), StringIO()
    31         rc = runner.runner(argv, stdout=out, stderr=err)
    32         self.failIfEqual(rc, 0)
    33         self.failUnlessEqual(out.getvalue(), "")
    34         self.failUnless("is not empty." in err.getvalue())
    35 
    36         # Fail if there is a line that doesn't end with a PUNCTUATION MARK.
    37         self.failIf(re.search("[^\.!?]\n", err.getvalue()), err.getvalue())
     22        d = utils.getProcessOutputAndValue(os.path.join("..", "bin", "tahoe"), args=["--quiet", "create-client", "--basedir", c1], env=os.environ)
     23        def _cb(res):
     24            out, err, rc_or_sig = res
     25            self.failUnlessEqual(err, "")
     26            self.failUnlessEqual(out, "")
     27            self.failUnlessEqual(rc_or_sig, 0)
     28            self.failUnless(os.path.exists(c1))
     29            self.failUnless(os.path.exists(os.path.join(c1, "tahoe-client.tac")))
     30        d.addCallback(_cb)
     31
     32        def _then_try_again(unused=None):
     33            return utils.getProcessOutputAndValue(os.path.join("..", "bin", "tahoe"), args=["--quiet", "create-client", "--basedir", c1], env=os.environ)
     34        d.addCallback(_then_try_again)
     35
     36        def _cb2(res):
     37            out, err, rc_or_sig = res
     38            # creating the client a second time should throw an exception
     39            self.failIfEqual(rc_or_sig, 0, str((out, err, rc_or_sig)))
     40            self.failUnlessEqual(out, "")
     41            self.failUnless("is not empty." in err)
     42
     43            # Fail if there is a line that doesn't end with a PUNCTUATION MARK.
     44            self.failIf(re.search("[^\.!?]\n", err), err)
     45        d.addCallback(_cb2)
    3846
    3947        c2 = os.path.join(basedir, "c2")
    40         argv = ["--quiet", "create-client", c2]
    41         runner.runner(argv)
    42         self.failUnless(os.path.exists(c2))
    43         self.failUnless(os.path.exists(os.path.join(c2, "tahoe-client.tac")))
    44 
    45         self.failUnlessRaises(usage.UsageError,
    46                               runner.runner,
    47                               ["create-client", "basedir", "extraarg"],
    48                               run_by_human=False)
     48        def _then_try_new_dir(unused=None):
     49            return utils.getProcessOutputAndValue(os.path.join("..", "bin", "tahoe"), args=["--quiet", "create-client", c2], env=os.environ)
     50        d.addCallback(_then_try_new_dir)
     51
     52        def _cb3(res):
     53            out, err, rc_or_sig = res
     54            self.failUnless(os.path.exists(c2))
     55            self.failUnless(os.path.exists(os.path.join(c2, "tahoe-client.tac")))
     56        d.addCallback(_cb3)
     57
     58        def _then_try_badarg(unused=None):
     59            return utils.getProcessOutputAndValue(os.path.join("..", "bin", "tahoe"), args=["create-client", "basedir", "extraarg"], env=os.environ)
     60        d.addCallback(_then_try_badarg)
     61
     62        def _cb4(res):
     63            out, err, rc_or_sig = res
     64            self.failUnlessEqual(rc_or_sig, 1)
     65            self.failUnless(out.startswith("Usage"), out)
     66        d.addCallback(_cb4)
     67        return d
    4968
    5069    def test_introducer(self):
    5170        basedir = self.workdir("test_introducer")
    5271        c1 = os.path.join(basedir, "c1")
    53         argv = ["--quiet", "create-introducer", "--basedir", c1]
    54         out,err = StringIO(), StringIO()
    55         rc = runner.runner(argv, stdout=out, stderr=err)
    56         self.failUnlessEqual(err.getvalue(), "")
    57         self.failUnlessEqual(out.getvalue(), "")
    58         self.failUnlessEqual(rc, 0)
    59         self.failUnless(os.path.exists(c1))
    60         self.failUnless(os.path.exists(os.path.join(c1,
    61                                                     "tahoe-introducer.tac")))
    62 
    63         # creating the introducer a second time should throw an exception
    64         out,err = StringIO(), StringIO()
    65         rc = runner.runner(argv, stdout=out, stderr=err)
    66         self.failIfEqual(rc, 0)
    67         self.failUnlessEqual(out.getvalue(), "")
    68         self.failUnless("is not empty" in err.getvalue())
    69 
    70         # Fail if there is a line that doesn't end with a PUNCTUATION MARK.
    71         self.failIf(re.search("[^\.!?]\n", err.getvalue()), err.getvalue())
     72        d = utils.getProcessOutputAndValue(os.path.join("..", "bin", "tahoe"), args=["--quiet", "create-introducer", "--basedir", c1], env=os.environ)
     73        def _cb(res):
     74            out, err, rc_or_sig = res
     75            self.failUnlessEqual(err, "")
     76            self.failUnlessEqual(out, "")
     77            self.failUnlessEqual(rc_or_sig, 0)
     78            self.failUnless(os.path.exists(c1))
     79            self.failUnless(os.path.exists(os.path.join(c1,
     80                                                        "tahoe-introducer.tac")))
     81        d.addCallback(_cb)
     82
     83        def _then_try_again(unused=None):
     84            return utils.getProcessOutputAndValue(os.path.join("..", "bin", "tahoe"), args=["--quiet", "create-introducer", "--basedir", c1], env=os.environ)
     85        d.addCallback(_then_try_again)
     86
     87        def _cb2(res):
     88            out, err, rc_or_sig = res
     89            # creating the introducer a second time should throw an exception
     90            self.failIfEqual(rc_or_sig, 0)
     91            self.failUnlessEqual(out, "")
     92            self.failUnless("is not empty" in err)
     93
     94            # Fail if there is a line that doesn't end with a PUNCTUATION MARK.
     95            self.failIf(re.search("[^\.!?]\n", err), err)
     96        d.addCallback(_cb2)
    7297
    7398        c2 = os.path.join(basedir, "c2")
    74         argv = ["--quiet", "create-introducer", c2]
    75         runner.runner(argv)
    76         self.failUnless(os.path.exists(c2))
    77         self.failUnless(os.path.exists(os.path.join(c2,
    78                                                     "tahoe-introducer.tac")))
    79 
    80         self.failUnlessRaises(usage.UsageError,
    81                               runner.runner,
    82                               ["create-introducer", "basedir", "extraarg"],
    83                               run_by_human=False)
    84 
    85         self.failUnlessRaises(usage.UsageError,
    86                               runner.runner,
    87                               ["create-introducer"],
    88                               run_by_human=False)
    89 
    90     def test_subcommands(self):
    91         self.failUnlessRaises(usage.UsageError,
    92                               runner.runner,
    93                               [],
    94                               run_by_human=False)
    95 
    96 class RunNode(unittest.TestCase, pollmixin.PollMixin):
     99        def _then_try_new_dir(unused=None):
     100            return utils.getProcessOutputAndValue(os.path.join("..", "bin", "tahoe"), args=["--quiet", "create-introducer", c2], env=os.environ)
     101        d.addCallback(_then_try_new_dir)
     102
     103        def _cb3(res):
     104            out, err, rc_or_sig = res
     105            self.failUnless(os.path.exists(c2))
     106            self.failUnless(os.path.exists(os.path.join(c2,
     107                                                        "tahoe-introducer.tac")))
     108        d.addCallback(_cb3)
     109
     110        def _then_try_badarg(unused=None):
     111            return utils.getProcessOutputAndValue(os.path.join("..", "bin", "tahoe"), args=["create-introducer", "basedir", "extraarg"], env=os.environ)
     112        d.addCallback(_then_try_badarg)
     113
     114        def _cb4(res):
     115            out, err, rc_or_sig = res
     116            self.failUnlessEqual(rc_or_sig, 1)
     117            self.failUnless(out.startswith("Usage"), out)
     118        d.addCallback(_cb4)
     119
     120        def _then_try_badarg_again(unused=None):
     121            return utils.getProcessOutputAndValue(os.path.join("..", "bin", "tahoe"), args=["create-introducer"], env=os.environ)
     122        d.addCallback(_then_try_badarg_again)
     123
     124        def _cb5(res):
     125            out, err, rc_or_sig = res
     126            self.failUnlessEqual(rc_or_sig, 1)
     127            self.failUnless(out.startswith("Usage"), out)
     128        d.addCallback(_cb5)
     129        return d
     130
     131class RunNode(unittest.TestCase, pollmixin.PollMixin, common_util.SignalMixin):
    97132    def workdir(self, name):
    98133        basedir = os.path.join("test_runner", "RunNode", name)
     
    106141        basedir = self.workdir("test_introducer")
    107142        c1 = os.path.join(basedir, "c1")
    108         argv = ["--quiet", "create-introducer", "--basedir", c1]
    109         out,err = StringIO(), StringIO()
    110         rc = runner.runner(argv, stdout=out, stderr=err)
    111         self.failUnlessEqual(rc, 0)
    112         # by writing this file, we get ten seconds before the node will
    113         # exit. This insures that even if the test fails (and the 'stop'
    114         # command doesn't work), the client should still terminate.
    115143        HOTLINE_FILE = os.path.join(c1, "suicide_prevention_hotline")
    116         open(HOTLINE_FILE, "w").write("")
    117         # now it's safe to start the node
    118 
    119144        TWISTD_PID_FILE = os.path.join(c1, "twistd.pid")
    120 
    121         d = defer.succeed(None)
    122         def _start(res):
    123             argv = ["--quiet", "start", c1]
    124             out,err = StringIO(), StringIO()
    125             rc = runner.runner(argv, stdout=out, stderr=err)
    126             open(HOTLINE_FILE, "w").write("")
    127             outs = out.getvalue() ; errs = err.getvalue()
    128             errstr = "rc=%d, OUT: '%s', ERR: '%s'" % (rc, outs, errs)
    129             self.failUnlessEqual(rc, 0, errstr)
    130             self.failUnlessEqual(outs, "", errstr)
    131             self.failUnlessEqual(errs, "", errstr)
     145        INTRODUCER_FURL_FILE = os.path.join(c1, "introducer.furl")
     146
     147        d = utils.getProcessOutputAndValue(os.path.join("..", "bin", "tahoe"), args=["--quiet", "create-introducer", "--basedir", c1], env=os.environ)
     148        def _cb(res):
     149            out, err, rc_or_sig = res
     150            self.failUnlessEqual(rc_or_sig, 0)
     151            # by writing this file, we get ten seconds before the node will
     152            # exit. This insures that even if the test fails (and the 'stop'
     153            # command doesn't work), the client should still terminate.
     154            open(HOTLINE_FILE, "w").write("")
     155            # now it's safe to start the node
     156        d.addCallback(_cb)
     157
     158        def _then_start_the_node(res):
     159            return utils.getProcessOutputAndValue(os.path.join("..", "bin", "tahoe"), args=["--quiet", "start", c1], env=os.environ)
     160        d.addCallback(_then_start_the_node)
     161
     162        def _cb2(res):
     163            out, err, rc_or_sig = res
     164
     165            open(HOTLINE_FILE, "w").write("")
     166            errstr = "rc=%d, OUT: '%s', ERR: '%s'" % (rc_or_sig, out, err)
     167            self.failUnlessEqual(rc_or_sig, 0, errstr)
     168            self.failUnlessEqual(out, "", errstr)
     169            self.failUnlessEqual(err, "", errstr)
    132170
    133171            # the parent (twistd) has exited. However, twistd writes the pid
     
    139177            # remove the twistd.pid file. So wait until it does something
    140178            # that we know it won't do until after the first turn.
    141 
    142         d.addCallback(_start)
    143 
    144         INTRODUCER_FURL_FILE = os.path.join(c1, "introducer.furl")
     179        d.addCallback(_cb2)
     180
    145181        def _node_has_started():
    146182            return os.path.exists(INTRODUCER_FURL_FILE)
     
    152188            # rm this so we can detect when the second incarnation is ready
    153189            os.unlink(INTRODUCER_FURL_FILE)
    154             argv = ["--quiet", "restart", c1]
    155             out,err = StringIO(), StringIO()
    156             rc = runner.runner(argv, stdout=out, stderr=err)
    157             open(HOTLINE_FILE, "w").write("")
    158             outs = out.getvalue() ; errs = err.getvalue()
    159             errstr = "rc=%d, OUT: '%s', ERR: '%s'" % (rc, outs, errs)
    160             self.failUnlessEqual(rc, 0, errstr)
    161             self.failUnlessEqual(outs, "", errstr)
    162             self.failUnlessEqual(errs, "", errstr)
     190            return utils.getProcessOutputAndValue(os.path.join("..", "bin", "tahoe"), args=["--quiet", "restart", c1], env=os.environ)
    163191        d.addCallback(_started)
     192
     193        def _then(res):
     194            out, err, rc_or_sig = res
     195            open(HOTLINE_FILE, "w").write("")
     196            errstr = "rc=%d, OUT: '%s', ERR: '%s'" % (rc_or_sig, out, err)
     197            self.failUnlessEqual(rc_or_sig, 0, errstr)
     198            self.failUnlessEqual(out, "", errstr)
     199            self.failUnlessEqual(err, "", errstr)
     200        d.addCallback(_then)
    164201
    165202        # again, the second incarnation of the node might not be ready yet,
     
    173210            open(HOTLINE_FILE, "w").write("")
    174211            self.failUnless(os.path.exists(TWISTD_PID_FILE))
    175             argv = ["--quiet", "stop", c1]
    176             out,err = StringIO(), StringIO()
    177             rc = runner.runner(argv, stdout=out, stderr=err)
     212
     213            return utils.getProcessOutputAndValue(os.path.join("..", "bin", "tahoe"), args=["--quiet", "stop", c1], env=os.environ)
     214        d.addCallback(_stop)
     215
     216        def _after_stopping(res):
     217            out, err, rc_or_sig = res
    178218            open(HOTLINE_FILE, "w").write("")
    179219            # the parent has exited by now
    180             outs = out.getvalue() ; errs = err.getvalue()
    181             errstr = "rc=%d, OUT: '%s', ERR: '%s'" % (rc, outs, errs)
    182             self.failUnlessEqual(rc, 0, errstr)
    183             self.failUnlessEqual(outs, "", errstr)
    184             self.failUnlessEqual(errs, "", errstr)
     220            errstr = "rc=%d, OUT: '%s', ERR: '%s'" % (rc_or_sig, out, err)
     221            self.failUnlessEqual(rc_or_sig, 0, errstr)
     222            self.failUnlessEqual(out, "", errstr)
     223            self.failUnlessEqual(err, "", errstr)
    185224            # the parent was supposed to poll and wait until it sees
    186225            # twistd.pid go away before it exits, so twistd.pid should be
    187226            # gone by now.
    188227            self.failIf(os.path.exists(TWISTD_PID_FILE))
    189         d.addCallback(_stop)
     228        d.addCallback(_after_stopping)
     229
    190230        def _remove_hotline(res):
    191231            os.unlink(HOTLINE_FILE)
     
    200240        basedir = self.workdir("test_client")
    201241        c1 = os.path.join(basedir, "c1")
    202         argv = ["--quiet", "create-client", "--basedir", c1, "--webport", "0"]
    203         out,err = StringIO(), StringIO()
    204         rc = runner.runner(argv, stdout=out, stderr=err)
    205         self.failUnlessEqual(rc, 0)
    206         # By writing this file, we get forty seconds before the client will exit. This insures
    207         # that even if the 'stop' command doesn't work (and the test fails), the client should
    208         # still terminate.
    209242        HOTLINE_FILE = os.path.join(c1, "suicide_prevention_hotline")
    210         open(HOTLINE_FILE, "w").write("")
    211         open(os.path.join(c1, "introducer.furl"), "w").write("pb://xrndsskn2zuuian5ltnxrte7lnuqdrkz@127.0.0.1:55617/introducer\n")
    212         # now it's safe to start the node
    213 
    214243        TWISTD_PID_FILE = os.path.join(c1, "twistd.pid")
    215 
    216         d = defer.succeed(None)
     244        PORTNUMFILE = os.path.join(c1, "client.port")
     245
     246        d = utils.getProcessOutputAndValue(os.path.join("..", "bin", "tahoe"), args=["--quiet", "create-client", "--basedir", c1, "--webport", "0"], env=os.environ)
     247        def _cb(res):
     248            out, err, rc_or_sig = res
     249            self.failUnlessEqual(rc_or_sig, 0)
     250            # By writing this file, we get forty seconds before the client will exit. This insures
     251            # that even if the 'stop' command doesn't work (and the test fails), the client should
     252            # still terminate.
     253            open(HOTLINE_FILE, "w").write("")
     254            open(os.path.join(c1, "introducer.furl"), "w").write("pb://xrndsskn2zuuian5ltnxrte7lnuqdrkz@127.0.0.1:55617/introducer\n")
     255            # now it's safe to start the node
     256        d.addCallback(_cb)
     257
    217258        def _start(res):
    218             argv = ["--quiet", "start", c1]
    219             out,err = StringIO(), StringIO()
    220             rc = runner.runner(argv, stdout=out, stderr=err)
    221             open(HOTLINE_FILE, "w").write("")
    222             outs = out.getvalue() ; errs = err.getvalue()
    223             errstr = "rc=%d, OUT: '%s', ERR: '%s'" % (rc, outs, errs)
    224             self.failUnlessEqual(rc, 0, errstr)
    225             self.failUnlessEqual(outs, "", errstr)
    226             self.failUnlessEqual(errs, "", errstr)
     259            return utils.getProcessOutputAndValue(os.path.join("..", "bin", "tahoe"), args=["--quiet", "start", c1], env=os.environ)
     260        d.addCallback(_start)
     261
     262        def _cb2(res):
     263            out, err, rc_or_sig = res
     264            open(HOTLINE_FILE, "w").write("")
     265            errstr = "cc=%d, OUT: '%s', ERR: '%s'" % (rc_or_sig, out, err)
     266            self.failUnlessEqual(rc_or_sig, 0, errstr)
     267            self.failUnlessEqual(out, "", errstr)
     268            self.failUnlessEqual(err, "", errstr)
    227269
    228270            # the parent (twistd) has exited. However, twistd writes the pid
     
    234276            # remove the twistd.pid file. So wait until it does something
    235277            # that we know it won't do until after the first turn.
    236 
    237         d.addCallback(_start)
    238 
    239         PORTNUMFILE = os.path.join(c1, "client.port")
     278        d.addCallback(_cb2)
     279
    240280        def _node_has_started():
    241281            return os.path.exists(PORTNUMFILE)
     
    247287            # rm this so we can detect when the second incarnation is ready
    248288            os.unlink(PORTNUMFILE)
    249             argv = ["--quiet", "restart", c1]
    250             out,err = StringIO(), StringIO()
    251             rc = runner.runner(argv, stdout=out, stderr=err)
    252             open(HOTLINE_FILE, "w").write("")
    253             outs = out.getvalue() ; errs = err.getvalue()
    254             errstr = "rc=%d, OUT: '%s', ERR: '%s'" % (rc, outs, errs)
    255             self.failUnlessEqual(rc, 0, errstr)
    256             self.failUnlessEqual(outs, "", errstr)
    257             self.failUnlessEqual(errs, "", errstr)
     289
     290            return utils.getProcessOutputAndValue(os.path.join("..", "bin", "tahoe"), args=["--quiet", "restart", c1], env=os.environ)
    258291        d.addCallback(_started)
     292
     293        def _cb3(res):
     294            out, err, rc_or_sig = res
     295
     296            open(HOTLINE_FILE, "w").write("")
     297            errstr = "rc=%d, OUT: '%s', ERR: '%s'" % (rc_or_sig, out, err)
     298            self.failUnlessEqual(rc_or_sig, 0, errstr)
     299            self.failUnlessEqual(out, "", errstr)
     300            self.failUnlessEqual(err, "", errstr)
     301        d.addCallback(_cb3)
    259302
    260303        # again, the second incarnation of the node might not be ready yet,
     
    268311            open(HOTLINE_FILE, "w").write("")
    269312            self.failUnless(os.path.exists(TWISTD_PID_FILE), (TWISTD_PID_FILE, os.listdir(os.path.dirname(TWISTD_PID_FILE))))
    270             argv = ["--quiet", "stop", c1]
    271             out,err = StringIO(), StringIO()
    272             rc = runner.runner(argv, stdout=out, stderr=err)
     313            return utils.getProcessOutputAndValue(os.path.join("..", "bin", "tahoe"), args=["--quiet", "stop", c1], env=os.environ)
     314        d.addCallback(_stop)
     315
     316        def _cb4(res):
     317            out, err, rc_or_sig = res
     318
    273319            open(HOTLINE_FILE, "w").write("")
    274320            # the parent has exited by now
    275             outs = out.getvalue() ; errs = err.getvalue()
    276             errstr = "rc=%d, OUT: '%s', ERR: '%s'" % (rc, outs, errs)
    277             self.failUnlessEqual(rc, 0, errstr)
    278             self.failUnlessEqual(outs, "", errstr)
    279             self.failUnlessEqual(errs, "", errstr)
     321            errstr = "rc=%d, OUT: '%s', ERR: '%s'" % (rc_or_sig, out, err)
     322            self.failUnlessEqual(rc_or_sig, 0, errstr)
     323            self.failUnlessEqual(out, "", errstr)
     324            self.failUnlessEqual(err, "", errstr)
    280325            # the parent was supposed to poll and wait until it sees
    281326            # twistd.pid go away before it exits, so twistd.pid should be
    282327            # gone by now.
    283328            self.failIf(os.path.exists(TWISTD_PID_FILE))
    284         d.addCallback(_stop)
     329        d.addCallback(_cb4)
    285330        def _remove_hotline(res):
    286331            os.unlink(HOTLINE_FILE)
     
    292337        basedir = self.workdir("test_baddir")
    293338        fileutil.make_dirs(basedir)
    294         argv = ["--quiet", "start", "--basedir", basedir]
    295         out,err = StringIO(), StringIO()
    296         rc = runner.runner(argv, stdout=out, stderr=err)
    297         self.failUnlessEqual(rc, 1)
    298         self.failUnless("does not look like a node directory" in err.getvalue())
     339
     340        d = utils.getProcessOutputAndValue(os.path.join("..", "bin", "tahoe"), args=["--quiet", "start", "--basedir", basedir], env=os.environ)
     341        def _cb(res):
     342            out, err, rc_or_sig = res
     343            self.failUnlessEqual(rc_or_sig, 1)
     344            self.failUnless("does not look like a node directory" in err)
     345        d.addCallback(_cb)
     346
     347        d.addCallback
    299348
    300349        argv = ["--quiet", "stop", "--basedir", basedir]
     
    319368        basedir = self.workdir("test_keygen")
    320369        c1 = os.path.join(basedir, "c1")
    321         argv = ["--quiet", "create-key-generator", "--basedir", c1]
    322         out,err = StringIO(), StringIO()
    323         rc = runner.runner(argv, stdout=out, stderr=err)
    324         self.failUnlessEqual(rc, 0)
    325 
    326370        TWISTD_PID_FILE = os.path.join(c1, "twistd.pid")
    327 
    328         d = defer.succeed(None)
     371        KEYGEN_FURL_FILE = os.path.join(c1, "key_generator.furl")
     372
     373        d = utils.getProcessOutputAndValue(os.path.join("..", "bin", "tahoe"), args=["--quiet", "create-key-generator", "--basedir", c1], env=os.environ)
     374        def _cb(res):
     375            out, err, rc_or_sig = res
     376            self.failUnlessEqual(rc_or_sig, 0)
     377        d.addCallback(_cb)
     378
    329379        def _start(res):
    330             argv = ["--quiet", "start", c1]
    331             out,err = StringIO(), StringIO()
    332             rc = runner.runner(argv, stdout=out, stderr=err)
    333             outs = out.getvalue() ; errs = err.getvalue()
    334             errstr = "rc=%d, OUT: '%s', ERR: '%s'" % (rc, outs, errs)
    335             self.failUnlessEqual(rc, 0, errstr)
    336             self.failUnlessEqual(outs, "", errstr)
    337             self.failUnlessEqual(errs, "", errstr)
     380            return utils.getProcessOutputAndValue(os.path.join("..", "bin", "tahoe"), args=["--quiet", "start", c1], env=os.environ)
     381        d.addCallback(_start)
     382
     383        def _cb2(res):
     384            out, err, rc_or_sig = res
     385            errstr = "rc=%d, OUT: '%s', ERR: '%s'" % (rc_or_sig, out, err)
     386            self.failUnlessEqual(rc_or_sig, 0, errstr)
     387            self.failUnlessEqual(out, "", errstr)
     388            self.failUnlessEqual(err, "", errstr)
    338389
    339390            # the parent (twistd) has exited. However, twistd writes the pid
     
    345396            # remove the twistd.pid file. So wait until it does something
    346397            # that we know it won't do until after the first turn.
    347 
    348         d.addCallback(_start)
    349 
    350         KEYGEN_FURL_FILE = os.path.join(c1, "key_generator.furl")
     398        d.addCallback(_cb2)
     399
    351400        def _node_has_started():
    352401            return os.path.exists(KEYGEN_FURL_FILE)
     
    357406            # rm this so we can detect when the second incarnation is ready
    358407            os.unlink(KEYGEN_FURL_FILE)
    359             argv = ["--quiet", "restart", c1]
    360             out,err = StringIO(), StringIO()
    361             rc = runner.runner(argv, stdout=out, stderr=err)
    362             outs = out.getvalue() ; errs = err.getvalue()
    363             errstr = "rc=%d, OUT: '%s', ERR: '%s'" % (rc, outs, errs)
    364             self.failUnlessEqual(rc, 0, errstr)
    365             self.failUnlessEqual(outs, "", errstr)
    366             self.failUnlessEqual(errs, "", errstr)
     408            return utils.getProcessOutputAndValue(os.path.join("..", "bin", "tahoe"), args=["--quiet", "restart", c1], env=os.environ)
    367409        d.addCallback(_started)
     410
     411        def _cb3(res):
     412            out, err, rc_or_sig = res
     413            errstr = "rc=%d, OUT: '%s', ERR: '%s'" % (rc_or_sig, out, err)
     414            self.failUnlessEqual(rc_or_sig, 0, errstr)
     415            self.failUnlessEqual(out, "", errstr)
     416            self.failUnlessEqual(err, "", errstr)
     417        d.addCallback(_cb3)
    368418
    369419        # again, the second incarnation of the node might not be ready yet,
     
    376426        def _stop(res):
    377427            self.failUnless(os.path.exists(TWISTD_PID_FILE))
    378             argv = ["--quiet", "stop", c1]
    379             out,err = StringIO(), StringIO()
    380             rc = runner.runner(argv, stdout=out, stderr=err)
     428            return utils.getProcessOutputAndValue(os.path.join("..", "bin", "tahoe"), args=["--quiet", "stop", c1], env=os.environ)
     429        d.addCallback(_stop)
     430
     431        def _cb4(res):
     432            out, err, rc_or_sig = res
    381433            # the parent has exited by now
    382             outs = out.getvalue() ; errs = err.getvalue()
    383             errstr = "rc=%d, OUT: '%s', ERR: '%s'" % (rc, outs, errs)
    384             self.failUnlessEqual(rc, 0, errstr)
    385             self.failUnlessEqual(outs, "", errstr)
    386             self.failUnlessEqual(errs, "", errstr)
     434            errstr = "rc=%d, OUT: '%s', ERR: '%s'" % (rc_or_sig, out, err)
     435            self.failUnlessEqual(rc_or_sig, 0, errstr)
     436            self.failUnlessEqual(out, "", errstr)
     437            self.failUnlessEqual(err, "", errstr)
    387438            # the parent was supposed to poll and wait until it sees
    388439            # twistd.pid go away before it exits, so twistd.pid should be
    389440            # gone by now.
    390441            self.failIf(os.path.exists(TWISTD_PID_FILE))
    391         d.addCallback(_stop)
     442        d.addCallback(_cb4)
    392443        return d
Note: See TracChangeset for help on using the changeset viewer.