def test_error_from_exc(sdk): nsdk = get_nsdk(sdk) def check_exc(func): err_code, err_msg = exec_with_dummy_node(sdk, func).err_info assert err_code == ValueError.__module__ + '.ValueError' assert err_msg == 'test' def do_raise_auto(tracer): try: raise ValueError('test') except ValueError: util.error_from_exc(nsdk, tracer.handle) def do_raise_val_only(tracer): util.error_from_exc(nsdk, tracer.handle, ValueError('test')) def do_raise_val_ty(tracer): util.error_from_exc(nsdk, tracer.handle, ValueError('test'), ValueError) def do_raise_val_other_ty(tracer): util.error_from_exc( nsdk, tracer.handle, ValueError(), RuntimeError) check_exc(do_raise_auto) check_exc(do_raise_val_only) check_exc(do_raise_val_ty) err_code, err_msg = exec_with_dummy_node( sdk, do_raise_val_other_ty).err_info assert err_code == RuntimeError.__module__ + '.RuntimeError' assert err_msg == ''
def test_trace_in_remote_call(sdk): with sdk.trace_incoming_remote_call('a', 'b', 'c'): pass nsdk = get_nsdk(sdk) assert len(nsdk.finished_paths) == 1 root = nsdk.finished_paths[0] assert isinstance(root, sdkmockiface.InRemoteCallHandle) assert root.vals == ('a', 'b', 'c')
def test_error_from_unicode_exc(sdk): nsdk = get_nsdk(sdk) def check_exc(func): err_code, _ = exec_with_dummy_node(sdk, func).err_info assert err_code == __name__ + '.' + DifficultClass.__name__ def do_raise(tracer): util.error_from_exc(nsdk, tracer.handle, DifficultClass('test')) check_exc(do_raise)
def test_trace_iwr_minimal(sdk): with sdk.create_web_application_info('a', 'b', '/b') as wapp: wreq = sdk.trace_incoming_web_request(wapp, DUMMY_URL, 'GET') with wreq: pass nsdk = get_nsdk(sdk) assert len(nsdk.finished_paths) == 1 root = nsdk.finished_paths[0] assert isinstance(root, sdkmockiface.InWebReqHandle) assert root.vals[1:] == (DUMMY_URL, 'GET') assert root.vals[0].vals == ('a', 'b', '/b')
def test_threading(sdk): """Regression test for bug where the paththread local was only created on the thread where the constructor of the mock sdk was called.""" err = [] thread = threading.Thread(target=thread_worker, args=(err, sdk)) thread.start() with create_dummy_entrypoint(sdk): pass thread.join() if err: raise RuntimeError('Exception on ' + thread.name + ': ' + err[0]) assert len(get_nsdk(sdk).finished_paths) == 2
def test_trace_error(sdk): try: with sdk.trace_incoming_remote_call('a', 'b', 'c'): raise RuntimeError('bla') except RuntimeError: pass else: assert not 'Exception seems to have been swallowed!' nsdk = get_nsdk(sdk) assert len(nsdk.finished_paths) == 1 root = nsdk.finished_paths[0] assert isinstance(root, sdkmockiface.InRemoteCallHandle) assert root.vals == ('a', 'b', 'c') assert root.err_info == (RTERR_QNAME, 'bla')
def test_trace_iwr_autocount(sdk): with sdk.create_web_application_info('a', 'b', '/b') as wapp: wreq = sdk.trace_incoming_web_request(wapp, DUMMY_URL, 'GET', headers=(['x', 'y'], ['xv', 'yv'])) with wreq: wreq.add_response_headers(['u'], ['uv']) nsdk = get_nsdk(sdk) assert len(nsdk.finished_paths) == 1 root = nsdk.finished_paths[0] assert root.req_hdrs == [('x', 'xv'), ('y', 'yv')] assert root.resp_hdrs == [('u', 'uv')]
def test_trace_sql_database_request(sdk): with create_dummy_entrypoint(sdk): dbi = sdk.create_database_info( 'dbn', 'dbv', onesdk.Channel(onesdk.ChannelType.OTHER, 'ce')) hdbi = dbi.handle with dbi: tracer = sdk.trace_sql_database_request(dbi, DUMMY_SQL) with tracer: tracer.set_round_trip_count(1) tracer.set_rows_returned(42) nsdk = get_nsdk(sdk) assert len(nsdk.finished_paths) == 1 _, root = nsdk.finished_paths[0].children[0] # Strip dummy entrypoint assert isinstance(root, sdkmockiface.DbRequestHandle) assert root.vals[0] is hdbi assert root.vals[1] == DUMMY_SQL assert root.round_trip_count == 1 assert root.returned_row_count == 42
def test_trace_out_remote_call(sdk): print('SDK:', sdk) with create_dummy_entrypoint(sdk): print('SDK2:', sdk) tracer = sdk.trace_outgoing_remote_call('a', 'b', 'c', onesdk.Channel( onesdk.ChannelType.OTHER, 'e'), protocol_name='foo') tracer.start() tracer.end() nsdk = get_nsdk(sdk) assert len(nsdk.finished_paths) == 1 _, root = nsdk.finished_paths[0].children[0] assert isinstance(root, sdkmockiface.OutRemoteCallHandle) assert root.vals == ('a', 'b', 'c', onesdk.ChannelType.OTHER, 'e') assert root.protocol_name == 'foo'
def test_trace_iwr_full(sdk): '''Tests an incoming web request with all optional properties (excluding tag) set.''' dummy_hdrs = {'X-MyHeader': 'my-value', 'X-MyOtherHeader': 'another value'} dummy_len = 2 dummy_params = ( ['username', 'password', 'csrf'], ('heinz', 'seb2009', 'dummy', 'overlong'), dummy_len # Skip additional ) dummy_params_x = (iter(dummy_params[0]), dummy_params[1], 2) with sdk.create_web_application_info('a', 'b', '/b') as wapp: wreq = sdk.trace_incoming_web_request(wapp, DUMMY_URL, 'GET', headers=dummy_hdrs, remote_address='127.0.0.1') with wreq: wreq.add_parameters(*dummy_params) wreq.add_parameter('p2', 'vp2') wreq.add_response_header('Location', DUMMY_URL) wreq.add_response_headers(*dummy_params) wreq.set_status_code(200) nsdk = get_nsdk(sdk) assert len(nsdk.finished_paths) == 1 root = nsdk.finished_paths[0] assert isinstance(root, sdkmockiface.InWebReqHandle) assert root.vals[1:] == (DUMMY_URL, 'GET') assert root.vals[0].vals == ('a', 'b', '/b') assert root.req_hdrs == list(dummy_hdrs.items()) assert root.params == [('username', 'heinz'), ('password', 'seb2009'), ('p2', 'vp2')] assert root.resp_hdrs == [('Location', DUMMY_URL), ('username', 'heinz'), ('password', 'seb2009')] assert root.resp_code == 200 assert root.remote_addr == '127.0.0.1'