def test_server_error(self): server = Server(config={'debug': True}, **config._sections['gateway']) test = _Testing() # Install two functions func_desc_conn = self.conn.get_function_description("STFC_CONNECTION") server.install_function( func_desc_conn, my_sftc_connection_error ) with self.assertRaises(ABAPApplicationError) as run: test.invoke_srv_function("STFC_CONNECTION", REQUTEXT="EXCEPTION") self.assertEqual(run.exception.code, 5, "rc") self.assertEqual(run.exception.key, "BAD_EXCEPTION_HAPPENED") with self.assertRaises(ABAPApplicationError) as run: test.invoke_srv_function("STFC_CONNECTION", REQUTEXT="EXCEPTION_MESSAGE") self.assertEqual(run.exception.code, 5, "rc") self.assertEqual(run.exception.key, "BAD_EXCEPTION_W_MSG") self.assertEqual(run.exception.msg_class, "SR") self.assertEqual(run.exception.msg_type, "E") self.assertEqual(run.exception.msg_number, "007") self.assertEqual(run.exception.msg_v1, "V1 text") with self.assertRaises(ABAPRuntimeError) as run: test.invoke_srv_function("STFC_CONNECTION", REQUTEXT="MESSAGE") self.assertEqual(run.exception.code, 4, "rc") self.assertEqual(run.exception.msg_class, "SM") self.assertEqual(run.exception.msg_type, "E") self.assertEqual(run.exception.msg_number, "107") self.assertEqual(run.exception.msg_v1, "V1 text (ABAP_MESSAGE)") with self.assertRaises(ExternalRuntimeError) as run: test.invoke_srv_function("STFC_CONNECTION", REQUTEXT="FAILURE") self.assertEqual(run.exception.code, 15, "rc") self.assertEqual(run.exception.message[:9], "Something") with self.assertRaises(ExternalRuntimeError) as run: test.invoke_srv_function("STFC_CONNECTION", REQUTEXT="INVALID") self.assertEqual(run.exception.code, 15, "rc") self.assertEqual(run.exception.message[:7], "Invalid")
def test_server(self): server = Server(config={'debug': True}, **config._sections['gateway']) test = _Testing() # Install two functions func_desc_conn = self.conn.get_function_description("STFC_CONNECTION") server.install_function(func_desc_conn, my_stfc_connection) func_desc_chan = self.conn.get_function_description("STFC_CHANGING") server.install_function(func_desc_chan, my_stfc_changing) # Lookup test func_desc_invalid = test.get_srv_func_desc("NOT_VALID") self.assertEqual( func_desc_invalid, 17, "Return code for unknown func_desc should be RFC_NOT_FOUND (17).") func_desc_conn2 = test.get_srv_func_desc("STFC_CONNECTION") self.assertEqual(pickle.dumps(func_desc_conn), pickle.dumps(func_desc_conn2)) func_desc_chan2 = test.get_srv_func_desc("STFC_CHANGING") self.assertEqual(pickle.dumps(func_desc_chan), pickle.dumps(func_desc_chan2)) # Invocation test result = test.invoke_srv_function("STFC_CONNECTION", REQUTEXT="request_text") self.assertEqual(result['ECHOTEXT'], "request_text") self.assertEqual(result['RESPTEXT'], u"Local server here.") result = test.invoke_srv_function("STFC_CHANGING", START_VALUE=23, COUNTER=7) self.assertEqual(result['COUNTER'], 17) # COUNTER = COUNTER + 10 self.assertEqual(result['RESULT'], 40) # RESULT = START_VALUE + (COUNTER + 10) server.close()
def test_server(self): server = Server(config={'debug': True}, **config._sections['gateway']) test = _Testing() # Install two functions func_desc_conn = self.conn.get_function_description("STFC_CONNECTION") server.install_function( func_desc_conn, my_stfc_connection ) func_desc_chan = self.conn.get_function_description("STFC_CHANGING") server.install_function( func_desc_chan, my_stfc_changing ) # Lookup test func_desc_invalid = test.get_srv_func_desc("NOT_VALID") self.assertEqual(func_desc_invalid, 17, "Return code for unknown func_desc should be RFC_NOT_FOUND (17).") func_desc_conn2 = test.get_srv_func_desc("STFC_CONNECTION") self.assertEqual(pickle.dumps(func_desc_conn), pickle.dumps(func_desc_conn2)) func_desc_chan2 = test.get_srv_func_desc("STFC_CHANGING") self.assertEqual(pickle.dumps(func_desc_chan), pickle.dumps(func_desc_chan2)) # Invocation test result = test.invoke_srv_function("STFC_CONNECTION", REQUTEXT="request_text") self.assertEqual(result['ECHOTEXT'], "request_text") self.assertEqual(result['RESPTEXT'], u"Local server here.") result = test.invoke_srv_function("STFC_CHANGING", START_VALUE=23, COUNTER=7) self.assertEqual(result['COUNTER'], 17) # COUNTER = COUNTER + 10 self.assertEqual(result['RESULT'], 40) # RESULT = START_VALUE + (COUNTER + 10) server.close()
config = ConfigParser() config.read('sapnwrfc.cfg') # Callback function def my_stfc_connection(request_context, REQUTEXT=""): return { 'ECHOTEXT': REQUTEXT, 'RESPTEXT': u"Python server here. Connection attributes are: " u"User '{user}' from system '{sysId}', client '{client}', " u"host '{partnerHost}'".format( **request_context['connection_attributes']) } # Open a connection for retrieving the metadata of 'STFC_CONNECTION' params_connection = config._sections['connection'] conn = Connection(**params_connection) func_desc_stfc_connection = conn.get_function_description("STFC_CONNECTION") # Instantiate server with gateway information for registering, and # install a function. params_gateway = config._sections['gateway'] server = Server(**params_gateway) server.install_function(func_desc_stfc_connection, my_stfc_connection) print "--- Server registration and serving ---" server.serve(20)
from tests.config import get_error def my_stfc_connection(request_context=None, REQUTEXT=""): print("stfc invoked") print("request_context", request_context) print(f"REQUTEXT: {REQUTEXT}") return {"ECHOTEXT": REQUTEXT, "RESPTEXT": "Python server here"} dir_path = os.path.dirname(os.path.realpath(__file__)) set_ini_file_directory(dir_path) server = Server({"dest": "gateway"}, {"dest": "MME"}) class TestServer: def teardown_method(self, test_method): pass def test_add_wrong_function(self): try: server.add_function("STFC_CONNECTION1", my_stfc_connection) except ABAPApplicationError as ex: error = get_error(ex) assert error["code"] == 5 assert error["key"] == "FU_NOT_FOUND" assert error["message"][ 0] == "ID:FL Type:E Number:046 STFC_CONNECTION1"
import os from pyrfc import Server, set_ini_file_directory def my_stfc_connection(request_context=None, REQUTEXT=""): print("stfc invoked") print("request_context", request_context) print(f"REQUTEXT: {REQUTEXT}") return {"ECHOTEXT": REQUTEXT, "RESPTEXT": "Python server here"} def my_auth_check(func_name=False, request_context={}): print(f"authorization check for '{func_name}'") print("request_context", request_context) return 0 dir_path = os.path.dirname(os.path.realpath(__file__)) set_ini_file_directory(dir_path) server = Server({"dest": "gateway"}, {"dest": "MME"}, { "port": 8081, "server_log": False }) # server = Server({"dest": "gateway"}, {"dest": "MME"}, {"auth_check": my_auth_check, "server_log": True}) server.add_function("STFC_CONNECTION", my_stfc_connection) server.serve()
import sys try: from ConfigParser import ConfigParser except ModuleNotFoundError as e: from configparser import ConfigParser config = ConfigParser() config.read('sapnwrfc.cfg') params_connection = config._sections['connection'] conn = Connection(**params_connection) test = _Testing() # Instantiate server params_gateway = config._sections['gateway'] # server = Server(config={'debug': True}, **params_gateway) server = Server(config={'debug': True}, **params_gateway) # Create callback functions and retrieve correspondent descriptions #def my_stfc_connection(**kwargs): # print "my_stfc_connection was called with arguments: {}".format(kwargs) # return { # 'ECHOTEXT': kwargs['REQUTEXT'], # 'RESPTEXT': u"Local server here." # } def my_stfc_connection(request_context, REQUTEXT=""): #print "my_stfc_connection was called with arguments: {}".format(kwargs) return {'ECHOTEXT': REQUTEXT, 'RESPTEXT': u"Local server here."} # func_desc_stfc_connection = conn.get_function_description("STFC_CONNECTION")
ExternalRuntimeError from pyrfc._pyrfc import _Testing from ConfigParser import ConfigParser import sys config = ConfigParser() config.read('sapnwrfc.cfg') params_connection = config._sections['connection'] conn = Connection(**params_connection) test = _Testing() # Instantiate server params_gateway = config._sections['gateway'] # server = Server(config={'debug': True}, **params_gateway) server = Server(config={'debug': True}, **params_gateway) # Create callback functions and retrieve correspondent descriptions #def my_stfc_connection(**kwargs): # print "my_stfc_connection was called with arguments: {}".format(kwargs) # return { # 'ECHOTEXT': kwargs['REQUTEXT'], # 'RESPTEXT': u"Local server here." # } def my_stfc_connection(request_context, REQUTEXT=""): #print "my_stfc_connection was called with arguments: {}".format(kwargs) return { 'ECHOTEXT': REQUTEXT, 'RESPTEXT': u"Local server here." } # func_desc_stfc_connection = conn.get_function_description("STFC_CONNECTION")
def get_gateway(self): """ Return the SAP gateway """ return Server(**self.__config._sections['gateway'])
import signal import sys config = ConfigParser() config.read('sapnwrfc.cfg') # Callback function def my_stfc_connection(request_context, REQUTEXT=""): REQUTEXT = 'wusj' return { 'ECHOTEXT': REQUTEXT, 'RESPTEXT': u"Python server here. Connection attributes are: " u"User '{user}' from system '{sysId}', client '{client}', " u"host '{partnerHost}'".format(**request_context['connection_attributes']) } # Open a connection for retrieving the metadata of 'STFC_CONNECTION' params_connection = config._sections['connection'] conn = Connection(**params_connection) func_desc_stfc_connection = conn.get_function_description("STFC_CONNECTION") # Instantiate server with gateway information for registering, and # install a function. params_gateway = config._sections['gateway'] server = Server(**params_gateway) server.install_function(func_desc_stfc_connection, my_stfc_connection) print("--- Server registration and serving ---") server.serve()# Serves for a given timeout. Note: internally this function installs a generic server function and registers the server at the gateway (if required). :param timeout: Number of seconds to serve or None (default) for no timeout. :raises: :exc:~pyrfc.RFCError or a subclass
# SPDX-FileCopyrightText: 2013 SAP SE Srdjan Boskovic <*****@*****.**> # # SPDX-License-Identifier: Apache-2.0 import os from pyrfc import Server, set_ini_file_directory def my_stfc_connection(request_context=None, REQUTEXT=""): print("stfc invoked") print("request_context", request_context) print("REQUTEXT: {REQUTEXT}") return {"ECHOTEXT": REQUTEXT, "RESPTEXT": "Python server here"} dir_path = os.path.dirname(os.path.realpath(__file__)) set_ini_file_directory(dir_path) server = Server({"dest": "gateway"}, {"dest": "MME"}) server.add_function("STFC_CONNECTION", my_stfc_connection) print("\nPress CTRL-C to skip server test...") server.serve(20)
import signal import sys config = ConfigParser() config.read('sapnwrfc.cfg') # Callback function def my_stfc_connection(request_context, REQUTEXT=""): return { 'ECHOTEXT': REQUTEXT, 'RESPTEXT': u"Python server here. Connection attributes are: " u"User '{user}' from system '{sysId}', client '{client}', " u"host '{partnerHost}'".format(**request_context['connection_attributes']) } # Open a connection for retrieving the metadata of 'STFC_CONNECTION' params_connection = config._sections['connection'] conn = Connection(**params_connection) func_desc_stfc_connection = conn.get_function_description("STFC_CONNECTION") # Instantiate server with gateway information for registering, and # install a function. params_gateway = config._sections['gateway'] server = Server(**params_gateway) server.install_function(func_desc_stfc_connection, my_stfc_connection) print "--- Server registration and serving ---" server.serve(20)