from pyrfc import Server, Connection, RFCError, RFCLibError, \ ABAPApplicationError, ABAPRuntimeError, \ 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."
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()
def test_func_desc_auto(self): test = _Testing() func_desc = self.conn.get_function_description("STFC_STRUCTURE") func_desc2 = test.fill_and_wrap_function_description(func_desc) self.assertEqual(pickle.dumps(func_desc), pickle.dumps(func_desc2))
from pyrfc import Server, Connection, RFCError, RFCLibError, \ ABAPApplicationError, ABAPRuntimeError, \ ExternalRuntimeError from pyrfc._pyrfc import _Testing 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)