Created
January 19, 2017 08:50
-
-
Save evanunderscore/1971d984fe6cb593a14e5e9c43227753 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/supervisor/tests/fixtures/hello.sh b/supervisor/tests/fixtures/hello.sh | |
new file mode 100644 | |
index 0000000..4f3aafd | |
--- /dev/null | |
+++ b/supervisor/tests/fixtures/hello.sh | |
@@ -0,0 +1,7 @@ | |
+#!/bin/bash | |
+n=0 | |
+while :; do | |
+ let n=n+1 | |
+ echo "The Øresund bridge ends in Malmö - $n" | |
+ sleep 1; | |
+done | |
diff --git a/supervisor/tests/fixtures/issue-565.conf b/supervisor/tests/fixtures/issue-565.conf | |
new file mode 100644 | |
index 0000000..4ad290a | |
--- /dev/null | |
+++ b/supervisor/tests/fixtures/issue-565.conf | |
@@ -0,0 +1,22 @@ | |
+[supervisord] | |
+loglevel=info ; log level; default info; others: debug,warn,trace | |
+logfile=/tmp/supervisord.log ; main log file; default $CWD/supervisord.log | |
+pidfile=/tmp/supervisord.pid ; supervisord pidfile; default supervisord.pid | |
+nodaemon=true ; start in foreground if true; default false | |
+ | |
+[rpcinterface:supervisor] | |
+supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface | |
+ | |
+[unix_http_server] | |
+file=/tmp/supervisor.sock ; the path to the socket file | |
+ | |
+[supervisorctl] | |
+serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket | |
+ | |
+[program:hello] | |
+command=bash supervisor/tests/fixtures/hello.sh | |
+stdout_events_enabled=true | |
+ | |
+[eventlistener:listener] | |
+command=python supervisor/tests/fixtures/listener.py | |
+events=PROCESS_LOG | |
diff --git a/supervisor/tests/fixtures/listener.py b/supervisor/tests/fixtures/listener.py | |
new file mode 100644 | |
index 0000000..f69915c | |
--- /dev/null | |
+++ b/supervisor/tests/fixtures/listener.py | |
@@ -0,0 +1,38 @@ | |
+ | |
+import sys | |
+ | |
+def write_and_flush(stream, s): | |
+ stream.write(s) | |
+ stream.flush() | |
+ | |
+def write_stdout(s): | |
+ # only eventlistener protocol messages may be sent to stdout | |
+ sys.stdout.write(s) | |
+ sys.stdout.flush() | |
+ | |
+def write_stderr(s): | |
+ sys.stderr.write(s) | |
+ sys.stderr.flush() | |
+ | |
+def main(): | |
+ stdin = sys.stdin | |
+ stdout = sys.stdout | |
+ stderr = sys.stderr | |
+ while True: | |
+ # transition from ACKNOWLEDGED to READY | |
+ write_and_flush(stdout, 'READY\n') | |
+ | |
+ # read header line and print it to stderr | |
+ line = stdin.readline() | |
+ write_and_flush(stderr, line) | |
+ | |
+ # read event payload and print it to stderr | |
+ headers = dict([ x.split(':') for x in line.split() ]) | |
+ data = stdin.read(int(headers['len'])) | |
+ write_and_flush(stderr, data) | |
+ | |
+ # transition from READY to ACKNOWLEDGED | |
+ write_and_flush(stdout, 'RESULT 2\nOK') | |
+ | |
+if __name__ == '__main__': | |
+ main() | |
diff --git a/supervisor/tests/test_end_to_end.py b/supervisor/tests/test_end_to_end.py | |
new file mode 100644 | |
index 0000000..9e8f479 | |
--- /dev/null | |
+++ b/supervisor/tests/test_end_to_end.py | |
@@ -0,0 +1,25 @@ | |
+# ~*~ coding: utf-8 ~*~ | |
+from __future__ import unicode_literals | |
+ | |
+import sys | |
+import unittest | |
+ | |
+import pexpect | |
+ | |
+ | |
+class TestEndToEnd(unittest.TestCase): | |
+ def test_issue_565(self): | |
+ args = '-m supervisor.supervisord -c supervisor/tests/fixtures/issue-565.conf'.split() | |
+ supervisord = pexpect.spawn(sys.executable, args, encoding='utf-8') | |
+ supervisord.expect_exact('success: hello entered RUNNING state') | |
+ | |
+ args = '-m supervisor.supervisorctl -c supervisor/tests/fixtures/issue-565.conf tail -f hello'.split() | |
+ supervisorctl = pexpect.spawn(sys.executable, args, encoding='utf-8') | |
+ | |
+ for i in range(1, 4): | |
+ line = 'The Øresund bridge ends in Malmö - {}'.format(i) | |
+ supervisorctl.expect_exact(line, timeout=2) | |
+ | |
+ | |
+if __name__ == '__main__': | |
+ unittest.main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment