runner.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import argparse
  2. import json
  3. import sys
  4. import subprocess
  5. import urlparse
  6. from twisted.python import log
  7. from twisted.internet import reactor
  8. from twisted.web.server import Site
  9. from twisted.web.static import File
  10. from autobahntestsuite.fuzzing import FuzzingServerFactory
  11. from autobahn.websocket import listenWS
  12. class jsondict(dict):
  13. def __init__(self, json_value):
  14. if isinstance(json_value, dict):
  15. dict.__init__(self, json_value)
  16. else:
  17. dict.__init__(self, json.loads(json_value))
  18. def append(self, other):
  19. self.update(jsondict(other))
  20. def __repr__(self):
  21. return "'%s'" % json.dumps(self)
  22. def parse_opts(s):
  23. return dict(s.split('='))
  24. def main():
  25. parser = argparse.ArgumentParser()
  26. parser.add_argument('-u', '--url', default='ws://localhost:9001', help='Listen URL [default: %(default)s]')
  27. parser.add_argument('-O', '--options', default=jsondict({'failByDrop':False}), type=jsondict, action='append', help='extra options (overwrites existing) [default: %(default)s]')
  28. parser.add_argument('-p', '--webport', default=9090, type=int)
  29. parser.add_argument('-i', '--listen-interface', default='localhost', help='interface to listen on')
  30. parser.add_argument('-w', '--webdir', default='.')
  31. parser.add_argument('-d', '--debug', default=False, action='store_true', help='Debug Mode [default: %(default)s]')
  32. parser.add_argument('-o', '--outdir', default='./pages/results', metavar='DIR', help='Output Directory [default: %(default)s]')
  33. parser.add_argument('-c', '--cases', default=['*'], nargs='+', help='test cases [default: %(default)s]')
  34. parser.add_argument('-x', '--exclude-cases', default=[], nargs='+', help='test cases to exclude [default: %(default)s]')
  35. parser.add_argument('-l', '--logfile', type=argparse.FileType('w'), default=sys.stdout, help='logging file [default: stdout]')
  36. parser.add_argument('-t', '--exit-timeout', metavar='SECONDS', default=None, type=float, help='Will automatically exit after %(metavar)s seconds [default: %(default)s]')
  37. args = parser.parse_args()
  38. spec = args.__dict__
  39. log.startLogging(args.logfile)
  40. ## fuzzing server
  41. fuzzer = FuzzingServerFactory(spec)
  42. listenWS(fuzzer, interface=args.listen_interface)
  43. ## web server
  44. webdir = File(args.webdir)
  45. web = Site(webdir)
  46. reactor.listenTCP(args.webport, web, interface=args.listen_interface)
  47. log.msg("Using Twisted reactor class %s" % str(reactor.__class__))
  48. if args.exit_timeout:
  49. def exit_callback():
  50. log.msg("Exiting due to timeout (--exit-timeout/-t)")
  51. reactor.fireSystemEvent('shutdown')
  52. #reactor.stop()
  53. sys.exit(12)
  54. reactor.callLater(args.exit_timeout, exit_callback)
  55. reactor.run()