/unit_tests/test_twisted.py

https://bitbucket.org/jpellerin/nose/ · Python · 93 lines · 57 code · 14 blank · 22 comment · 3 complexity · 82f670955e64366798f9b32f13c5fd31 MD5 · raw file

  1. from nose.exc import SkipTest
  2. from nose.tools import *
  3. from nose.twistedtools import *
  4. try:
  5. from twisted.internet.defer import Deferred
  6. from twisted.internet.error import DNSLookupError
  7. except ImportError:
  8. raise SkipTest('twisted not available; skipping')
  9. _multiprocess_ = False
  10. def teardown():
  11. # print "stopping reactor"
  12. stop_reactor()
  13. class CustomError(Exception):
  14. pass
  15. # FIXME move all dns-using tests to functional
  16. # Should succeed unless google is down
  17. #@deferred
  18. def test_resolve():
  19. return reactor.resolve("www.google.com")
  20. test_resolve = deferred()(test_resolve)
  21. # Raises TypeError because the function does not return a Deferred
  22. #@raises(TypeError)
  23. #@deferred()
  24. def test_raises_bad_return():
  25. print reactor
  26. reactor.resolve("www.python.org")
  27. test_raises_bad_return = raises(TypeError)(deferred()(test_raises_bad_return))
  28. # Check we propagate twisted Failures as Exceptions
  29. # (XXX this test might take some time: find something better?)
  30. #@raises(DNSLookupError)
  31. #@deferred()
  32. def test_raises_twisted_error():
  33. return reactor.resolve("x.y.z")
  34. test_raises_twisted_error = raises(DNSLookupError)(
  35. deferred()(test_raises_twisted_error))
  36. # Check we detect Exceptions inside the callback chain
  37. #@raises(CustomError)
  38. #@deferred(timeout=1.0)
  39. def test_raises_callback_error():
  40. d = Deferred()
  41. def raise_error(_):
  42. raise CustomError()
  43. def finish():
  44. d.callback(None)
  45. d.addCallback(raise_error)
  46. reactor.callLater(0.01, finish)
  47. return d
  48. test_raises_callback_error = raises(CustomError)(
  49. deferred(timeout=1.0)(test_raises_callback_error))
  50. # Check we detect Exceptions inside the test body
  51. #@raises(CustomError)
  52. #@deferred(timeout=1.0)
  53. def test_raises_plain_error():
  54. raise CustomError
  55. test_raises_plain_error = raises(CustomError)(
  56. deferred(timeout=1.0)(test_raises_plain_error))
  57. # The deferred is triggered before the timeout: ok
  58. #@deferred(timeout=1.0)
  59. def test_timeout_ok():
  60. d = Deferred()
  61. def finish():
  62. d.callback(None)
  63. reactor.callLater(0.01, finish)
  64. return d
  65. test_timeout_ok = deferred(timeout=1.0)(test_timeout_ok)
  66. # The deferred is triggered after the timeout: failure
  67. #@raises(TimeExpired)
  68. #@deferred(timeout=0.1)
  69. def test_timeout_expired():
  70. d = Deferred()
  71. def finish():
  72. d.callback(None)
  73. reactor.callLater(1.0, finish)
  74. return d
  75. test_timeout_expired = raises(TimeExpired)(
  76. deferred(timeout=0.1)(test_timeout_expired))
  77. if __name__ == '__main__':
  78. from nose import runmodule
  79. runmodule()