summaryrefslogtreecommitdiff
path: root/python/test/Ice/acm/TestI.py
blob: 53158e42a287843dc15554dbd6e59a167488983e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# **********************************************************************
#
# Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
#
# This copy of Ice is licensed to you under the terms described in the
# ICE_LICENSE file included in this distribution.
#
# **********************************************************************

import Ice, Test, threading

class ConnectionCallbackI():
    def __init__(self):
        self.m = threading.Condition()
        self.count = 0

    def heartbeat(self, con):
        with self.m:
            self.count += 1
            self.m.notifyAll()

    def waitForCount(self, count):
        with self.m:
            while self.count < count:
                self.m.wait()

class RemoteCommunicatorI(Test._RemoteCommunicatorDisp):
    def createObjectAdapter(self, timeout, close, heartbeat, current=None):
        com = current.adapter.getCommunicator()
        properties = com.getProperties()
        protocol = properties.getPropertyWithDefault("Ice.Default.Protocol", "tcp");

        name = Ice.generateUUID()
        if timeout >= 0:
            properties.setProperty(name + ".ACM.Timeout", str(timeout))
        if close >= 0:
            properties.setProperty(name + ".ACM.Close", str(close))
        if heartbeat >= 0:
            properties.setProperty(name + ".ACM.Heartbeat", str(heartbeat))
        properties.setProperty(name + ".ThreadPool.Size", "2")
        adapter = com.createObjectAdapterWithEndpoints(name, protocol + " -h 127.0.0.1")
        return Test.RemoteObjectAdapterPrx.uncheckedCast(current.adapter.addWithUUID(RemoteObjectAdapterI(adapter)))

    def shutdown(self, current=None):
        current.adapter.getCommunicator().shutdown()

class RemoteObjectAdapterI(Test._RemoteObjectAdapterDisp):
    def __init__(self, adapter):
        self._adapter = adapter
        self._testIntf = Test.TestIntfPrx.uncheckedCast(adapter.add(TestIntfI(),
                                                        Ice.stringToIdentity("test")))
        adapter.activate()

    def getTestIntf(self, current=None):
        return self._testIntf

    def activate(self, current=None):
        self._adapter.activate()

    def hold(self, current=None):
        self._adapter.hold()

    def deactivate(self, current=None):
        try:
            self._adapter.destroy()
        except Ice.ObjectAdapterDeactivatedException:
            pass

class TestIntfI(Test._TestIntfDisp):
    def __init__(self):
        self.m = threading.Condition()

    def sleep(self, delay, current=None):
        with self.m:
            self.m.wait(delay)

    def sleepAndHold(self, delay, current=None):
        with self.m:
            current.adapter.hold()
            self.m.wait(delay)

    def interruptSleep(self, delay, current=None):
        with self.m:
            self.m.notifyAll()

    def startHeartbeatCount(self, current=None):
        self.callback = ConnectionCallbackI()
        current.con.setHeartbeatCallback(lambda con: self.callback.heartbeat(con))

    def waitForHeartbeatCount(self, count, current=None):
        self.callback.waitForCount(2)