Changeset 210da5c in trunk
- Timestamp:
- 2009-01-22T22:38:18Z (16 years ago)
- Branches:
- master
- Children:
- 967102e
- Parents:
- fafdd2ce
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified src/allmydata/test/test_runner.py ¶
rfafdd2ce r210da5c 4 4 from cStringIO import StringIO 5 5 from twisted.python import usage, runtime 6 from twisted.internet import defer 6 from twisted.internet import defer, utils 7 7 import os.path, re 8 8 from allmydata.scripts import runner 9 9 from allmydata.util import fileutil, pollmixin 10 10 11 class CreateNode(unittest.TestCase): 11 from allmydata.test import common_util 12 13 class CreateNode(unittest.TestCase, common_util.SignalMixin): 12 14 def workdir(self, name): 13 15 basedir = os.path.join("test_runner", "CreateNode", name) … … 18 20 basedir = self.workdir("test_client") 19 21 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) 38 46 39 47 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 49 68 50 69 def test_introducer(self): 51 70 basedir = self.workdir("test_introducer") 52 71 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) 72 97 73 98 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 131 class RunNode(unittest.TestCase, pollmixin.PollMixin, common_util.SignalMixin): 97 132 def workdir(self, name): 98 133 basedir = os.path.join("test_runner", "RunNode", name) … … 106 141 basedir = self.workdir("test_introducer") 107 142 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 will113 # exit. This insures that even if the test fails (and the 'stop'114 # command doesn't work), the client should still terminate.115 143 HOTLINE_FILE = os.path.join(c1, "suicide_prevention_hotline") 116 open(HOTLINE_FILE, "w").write("")117 # now it's safe to start the node118 119 144 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) 132 170 133 171 # the parent (twistd) has exited. However, twistd writes the pid … … 139 177 # remove the twistd.pid file. So wait until it does something 140 178 # 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 145 181 def _node_has_started(): 146 182 return os.path.exists(INTRODUCER_FURL_FILE) … … 152 188 # rm this so we can detect when the second incarnation is ready 153 189 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) 163 191 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) 164 201 165 202 # again, the second incarnation of the node might not be ready yet, … … 173 210 open(HOTLINE_FILE, "w").write("") 174 211 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 178 218 open(HOTLINE_FILE, "w").write("") 179 219 # 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) 185 224 # the parent was supposed to poll and wait until it sees 186 225 # twistd.pid go away before it exits, so twistd.pid should be 187 226 # gone by now. 188 227 self.failIf(os.path.exists(TWISTD_PID_FILE)) 189 d.addCallback(_stop) 228 d.addCallback(_after_stopping) 229 190 230 def _remove_hotline(res): 191 231 os.unlink(HOTLINE_FILE) … … 200 240 basedir = self.workdir("test_client") 201 241 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 insures207 # that even if the 'stop' command doesn't work (and the test fails), the client should208 # still terminate.209 242 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 node213 214 243 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 217 258 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) 227 269 228 270 # the parent (twistd) has exited. However, twistd writes the pid … … 234 276 # remove the twistd.pid file. So wait until it does something 235 277 # 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 240 280 def _node_has_started(): 241 281 return os.path.exists(PORTNUMFILE) … … 247 287 # rm this so we can detect when the second incarnation is ready 248 288 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) 258 291 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) 259 302 260 303 # again, the second incarnation of the node might not be ready yet, … … 268 311 open(HOTLINE_FILE, "w").write("") 269 312 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 273 319 open(HOTLINE_FILE, "w").write("") 274 320 # 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) 280 325 # the parent was supposed to poll and wait until it sees 281 326 # twistd.pid go away before it exits, so twistd.pid should be 282 327 # gone by now. 283 328 self.failIf(os.path.exists(TWISTD_PID_FILE)) 284 d.addCallback(_ stop)329 d.addCallback(_cb4) 285 330 def _remove_hotline(res): 286 331 os.unlink(HOTLINE_FILE) … … 292 337 basedir = self.workdir("test_baddir") 293 338 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 299 348 300 349 argv = ["--quiet", "stop", "--basedir", basedir] … … 319 368 basedir = self.workdir("test_keygen") 320 369 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 326 370 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 329 379 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) 338 389 339 390 # the parent (twistd) has exited. However, twistd writes the pid … … 345 396 # remove the twistd.pid file. So wait until it does something 346 397 # 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 351 400 def _node_has_started(): 352 401 return os.path.exists(KEYGEN_FURL_FILE) … … 357 406 # rm this so we can detect when the second incarnation is ready 358 407 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) 367 409 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) 368 418 369 419 # again, the second incarnation of the node might not be ready yet, … … 376 426 def _stop(res): 377 427 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 381 433 # 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) 387 438 # the parent was supposed to poll and wait until it sees 388 439 # twistd.pid go away before it exits, so twistd.pid should be 389 440 # gone by now. 390 441 self.failIf(os.path.exists(TWISTD_PID_FILE)) 391 d.addCallback(_ stop)442 d.addCallback(_cb4) 392 443 return d
Note: See TracChangeset
for help on using the changeset viewer.