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