def test_version(): p = subprocess.Popen( ["ddtrace-run", "-v"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) p.wait() assert p.returncode == 0 # For some reason argparse prints the version to stderr # in Python 2 and stdout in Python 3 if PY3: assert p.stdout.read() == six.b("ddtrace-run %s\n" % ddtrace.__version__) else: assert six.b("ddtrace-run %s" % ddtrace.__version__) in p.stderr.read() p = subprocess.Popen( ["ddtrace-run", "--version"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) p.wait() assert p.returncode == 0 if PY3: assert p.stdout.read() == six.b("ddtrace-run %s\n" % ddtrace.__version__) else: assert six.b("ddtrace-run %s" % ddtrace.__version__) in p.stderr.read()
def test_traced_session_no_patch_all(tmpdir): f = tmpdir.join("test.py") f.write( """ import mock import ddtrace from ddtrace.contrib.requests import TracedSession # disable tracer writing to agent ddtrace.tracer.writer.flush_queue = mock.Mock(return_value=None) session = TracedSession() session.get("http://httpbin.org/status/200") """.lstrip() ) p = subprocess.Popen( [sys.executable, "test.py"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=str(tmpdir), ) p.wait() assert p.stderr.read() == six.b("") assert p.stdout.read() == six.b("") assert p.returncode == 0
def test_debug_mode(): p = subprocess.Popen( ["ddtrace-run", "--debug", "python", "-c", "''"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) p.wait() assert p.returncode == 0 assert p.stdout.read() == six.b("") assert six.b("ddtrace.sampler") in p.stderr.read()
def test_output(tmpdir): f = tmpdir.join("test.py") f.write(""" import ddtrace """.lstrip()) p = subprocess.Popen( ["ddtrace-run", sys.executable, "test.py"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=str(tmpdir), ) p.wait() assert p.stderr.read() == six.b("") assert p.stdout.read() == six.b("") assert p.returncode == 0
def test_no_args(): p = subprocess.Popen( ["ddtrace-run"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) p.wait() assert p.returncode == 1 assert six.b("usage:") in p.stdout.read()
def test_info(): p = subprocess.Popen( ["ddtrace-run", "--info"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) p.wait() assert p.returncode == 0 stdout = p.stdout.read() assert six.b("agent_url") in stdout
def test_bad_executable(): p = subprocess.Popen( ["ddtrace-run", "executable-does-not-exist"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) p.wait() assert p.returncode == 1 assert p.stdout.read() == six.b( "ddtrace-run: failed to find executable 'executable-does-not-exist'.\n\n" "usage: ddtrace-run <your usual python command>\n")
def test_executable_no_perms(): fd, path = tempfile.mkstemp(suffix=".py") p = subprocess.Popen( ["ddtrace-run", path], stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) p.wait() assert p.returncode == 1 assert p.stdout.read() == six.b( "ddtrace-run: executable '%s' does not have executable permissions.\n\n" "usage: ddtrace-run <your usual python command>\n" % path)
def do_test(tmpdir, es_version): f = tmpdir.join("test.py") f.write(code % es_version) env = os.environ.copy() # ddtrace-run patches sqlite3 which is used by coverage to store coverage # results. This generates sqlite3 spans during the test run which interfere # with the snapshot. So disable sqlite3. env.update({"DD_TRACE_SQLITE3_ENABLED": "false"}) p = subprocess.Popen( ["ddtrace-run", sys.executable, "test.py"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=str(tmpdir), env=env, ) p.wait() stderr = p.stderr.read() stdout = p.stdout.read() assert stderr == six.b(""), stderr assert stdout == six.b(""), stdout assert p.returncode == 0
def test_start_in_thread(tmpdir): f = tmpdir.join("test.py") f.write(""" import threading def target(): import ddtrace t = threading.Thread(target=target) t.start() t.join() """.lstrip()) p = subprocess.Popen( ["ddtrace-run", sys.executable, "test.py"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=str(tmpdir), ) p.wait() assert p.stderr.read() == six.b("") assert p.stdout.read() == six.b("") assert p.returncode == 0
def application(environ, start_response): if environ["PATH_INFO"] == "/error": raise Exception("Oops!") elif environ["PATH_INFO"] == "/chunked": return chunked_response(start_response) elif environ["PATH_INFO"] == "/generatorError": return chunked_response_generator_error(start_response) else: body = six.b("<html><body><h1>Hello World</h1></body></html>") headers = [ ("Content-Type", "text/html; charset=utf8"), ("Content-Length", str(len(body))), ("my-response-header", "test_response_value"), ] start_response("200 OK", headers) return [body]
def test_command_flags(): out = subprocess.check_output( ["ddtrace-run", "python", "-c", "print('test!')"]) assert out.strip() == six.b("test!")