1# 2# Copyright (c) ZeroC, Inc. All rights reserved. 3# 4 5import Ice 6import sys 7import os 8import traceback 9import importlib 10 11 12class TestHelper: 13 14 def __init__(self): 15 self._communicator = None 16 17 def getTestEndpoint(self, properties=None, num=0, protocol=""): 18 19 if properties is None: 20 properties = self._communicator.getProperties() 21 22 if protocol == "": 23 protocol = properties.getPropertyWithDefault("Ice.Default.Protocol", "default") 24 25 port = properties.getPropertyAsIntWithDefault("Test.BasePort", 12010) + num 26 27 return "{0} -p {1}".format(protocol, port) 28 29 def getTestHost(self, properties=None): 30 31 if properties is None: 32 properties = self._communicator.getProperties() 33 34 return properties.getPropertyWithDefaul("Ice.Default.Host", "127.0.0.1") 35 36 def getTestProtocol(self, properties=None): 37 38 if properties is None: 39 properties = self._communicator.getProperties() 40 41 return properties.getPropertyWithDefault("Ice.Default.Protocol", "tcp") 42 43 def getTestPort(self, properties=None, num=0): 44 45 if properties is None: 46 properties = self._communicator.getProperties() 47 48 return properties.getPropertyAsIntWithDefault("Test.BasePort", 12010) + num 49 50 def createTestProperties(self, args=[]): 51 52 properties = Ice.createProperties(args) 53 args = properties.parseCommandLineOptions("Test", args) 54 return properties 55 56 def initialize(self, initData=None, properties=None, args=[]): 57 58 if initData is None: 59 initData = Ice.InitializationData() 60 if properties: 61 initData.properties = properties 62 else: 63 initData.properties = self.createTestProperties(args) 64 65 communicator = Ice.initialize(initData) 66 67 if self._communicator is None: 68 self._communicator = communicator 69 70 return communicator 71 72 def communicator(self): 73 return self._communicator 74 75 def shutdown(self): 76 if self._communicator: 77 self._communicator.shutdown() 78 79 @classmethod 80 def loadSlice(self, args): 81 sliceDir = Ice.getSliceDir() 82 if not sliceDir: 83 print(sys.argv[0] + ': Slice directory not found.') 84 sys.exit(1) 85 Ice.loadSlice("'-I{0}' {1}".format(sliceDir, args)) 86 87 @classmethod 88 def run(self): 89 try: 90 moduleName = os.path.splitext(sys.argv[1])[0] 91 module = importlib.import_module(moduleName) 92 cls = getattr(module, moduleName) 93 helper = cls() 94 helper.run(sys.argv[2:]) 95 return 0 96 except Exception: 97 traceback.print_exc() 98 return 1 99 100 101if __name__ == '__main__': 102 sys.exit(TestHelper.run()) 103