|
| 1 | +#!/usr/bin/env python |
| 2 | +import time |
| 3 | +import re |
| 4 | +import subprocess |
| 5 | +import signal |
| 6 | +import sys |
| 7 | + |
| 8 | +def run(cmd, verbose=False, **kwargs): |
| 9 | + if verbose: |
| 10 | + print " [s] Running %r" % (cmd,) |
| 11 | + p = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE, **kwargs) |
| 12 | + p.wait() |
| 13 | + |
| 14 | + if verbose: |
| 15 | + for line in p.stdout: |
| 16 | + line = p.stdout.readline().strip() |
| 17 | + if line: |
| 18 | + print ' [s] %s' % (line,) |
| 19 | + print " [s] Done" |
| 20 | + time.sleep(0.1) |
| 21 | + |
| 22 | + |
| 23 | +def spawn(cmd, verbose=False, **kwargs): |
| 24 | + if verbose: |
| 25 | + print " [r] Waiting for %r" % (cmd,) |
| 26 | + p = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE, **kwargs) |
| 27 | + time.sleep(0.4) |
| 28 | + return p |
| 29 | + |
| 30 | +def wait(p, match, verbose=False): |
| 31 | + p.send_signal(signal.SIGINT) |
| 32 | + p.wait() |
| 33 | + r = False |
| 34 | + for line in p.stdout: |
| 35 | + if re.search(match, line): |
| 36 | + r = True |
| 37 | + if verbose: |
| 38 | + print " [r] %s" % (line.strip(),) |
| 39 | + if verbose: |
| 40 | + print " [r] Done" |
| 41 | + return r |
| 42 | + |
| 43 | + |
| 44 | + |
| 45 | +def gen(prog, arg="", **kwargs): |
| 46 | + Prog = ''.join([w.capitalize() for w in prog.split('_')]) |
| 47 | + ctx = { |
| 48 | + 'python': kwargs.get('python', prog), |
| 49 | + 'erlang': kwargs.get('erlang', prog), |
| 50 | + 'java': kwargs.get('java', Prog), |
| 51 | + 'dotnet': kwargs.get('dotnet', Prog), |
| 52 | + 'ruby': kwargs.get('ruby', prog), |
| 53 | + 'php': kwargs.get('php', prog), |
| 54 | + 'arg': arg, |
| 55 | + } |
| 56 | + return [ |
| 57 | + ('python', './venv/bin/python %(python)s.py %(arg)s' % ctx), |
| 58 | + ('erlang', './%(python)s.erl %(arg)s' % ctx), |
| 59 | + ('java', 'java -cp .:commons-io-1.2.jar:commons-cli-1.1.jar:' |
| 60 | + 'rabbitmq-client.jar %(java)s %(arg)s' % ctx), |
| 61 | + ('dotnet', 'env MONO_PATH=lib/bin mono %(dotnet)s.exe %(arg)s' % ctx), |
| 62 | + # ('ruby', 'env RUBYOPT=-rubygems GEM_HOME=gems/gems RUBYLIB=gems/lib ' |
| 63 | + # 'ruby1.8 %(ruby)s.rb %(arg)s' % ctx), |
| 64 | + ('php', 'php %(php)s.php %(arg)s' % ctx), |
| 65 | + ] |
| 66 | + |
| 67 | +tests = { |
| 68 | + 'tut1': (gen('send'), gen('receive', java='Recv'), 'Hello World!'), |
| 69 | + 'tut2': (gen('new_task', arg='xxxxxx'), gen('worker'), 'xxxxxx'), |
| 70 | + 'tut3': (gen('emit_log', arg='123456'), gen('receive_logs'), '123456'), |
| 71 | + } |
| 72 | + |
| 73 | + |
| 74 | +verbose = len(sys.argv) > 1 |
| 75 | + |
| 76 | +for test in sorted(tests.keys()): |
| 77 | + (send_progs, recv_progs, mask) = tests[test] |
| 78 | + for scwd, scmd in send_progs: |
| 79 | + for rcwd, rcmd in recv_progs: |
| 80 | + p = spawn(rcmd, verbose=verbose, cwd=rcwd) |
| 81 | + run(scmd, verbose=verbose, cwd=scwd) |
| 82 | + if wait(p, mask, verbose=verbose): |
| 83 | + print " [+] %s %-20s ok" % (test, scwd+'/'+rcwd) |
| 84 | + else: |
| 85 | + print " [!] %s %-20s FAILED %r %r" % (test, scwd+'/'+rcwd, rcmd, scmd) |
0 commit comments