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 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
|
#
# Copyright (c) ZeroC, Inc. All rights reserved.
#
import Ice, sys, threading
Ice.loadSlice('Test.ice')
import Test
def test(b):
if not b:
raise RuntimeError('test assertion failed')
class CallbackBase:
def __init__(self):
self._called = False
self._cond = threading.Condition()
def check(self):
with self._cond:
while not self._called:
self._cond.wait()
self._called = False
def called(self):
with self._cond:
self._called = True
self._cond.notify()
class Callback(CallbackBase):
def opPidI(self, f):
try:
self._pid = f.result()
self.called()
except:
test(False)
def opShutdownI(self, f):
test(f.exception() is None)
self.called()
def exceptAbortI(self, f):
test(f.exception() is not None)
try:
f.result()
except Ice.ConnectionLostException:
pass
except Ice.ConnectFailedException:
pass
except Ice.Exception as ex:
print(ex)
test(False)
self.called()
def pid(self):
return self._pid
def allTests(helper, communicator, ports):
sys.stdout.write("testing stringToProxy... ")
sys.stdout.flush()
ref = "test"
for i in range(len(ports)):
ref += ":{0}".format(helper.getTestEndpoint(num=i))
base = communicator.stringToProxy(ref)
test(base)
print("ok")
sys.stdout.write("testing checked cast... ")
sys.stdout.flush()
obj = Test.TestIntfPrx.checkedCast(base)
test(obj)
test(obj == base)
print("ok")
oldPid = 0
ami = False
i = 1
j = 0
while i <= len(ports):
if j > 3:
j = 0
ami = not ami
if not ami:
sys.stdout.write("testing server #%d... " % i)
sys.stdout.flush()
pid = obj.pid()
test(pid != oldPid)
print("ok")
oldPid = pid
else:
sys.stdout.write("testing server #%d with AMI... " % i)
sys.stdout.flush()
cb = Callback()
obj.pidAsync().add_done_callback(cb.opPidI)
cb.check()
pid = cb.pid()
test(pid != oldPid)
print("ok")
oldPid = pid
if j == 0:
if not ami:
sys.stdout.write("shutting down server #%d... " % i)
sys.stdout.flush()
obj.shutdown()
print("ok")
else:
sys.stdout.write("shutting down server #%d with AMI... " % i)
sys.stdout.flush()
cb = Callback()
obj.shutdownAsync().add_done_callback(cb.opShutdownI)
cb.check()
print("ok")
elif j == 1 or i + 1 > len(ports):
if not ami:
sys.stdout.write("aborting server #%d... " % i)
sys.stdout.flush()
try:
obj.abort()
test(False)
except Ice.ConnectionLostException:
print("ok")
except Ice.ConnectFailedException:
print("ok")
else:
sys.stdout.write("aborting server #%d with AMI... " % i)
sys.stdout.flush()
cb = Callback()
obj.abortAsync().add_done_callback(cb.exceptAbortI)
cb.check()
print("ok")
elif j == 2 or j == 3:
if not ami:
sys.stdout.write("aborting server #%d and #%d with idempotent call... " % (i, i + 1))
sys.stdout.flush()
try:
obj.idempotentAbort()
test(False)
except Ice.ConnectionLostException:
print("ok")
except Ice.ConnectFailedException:
print("ok")
else:
sys.stdout.write("aborting server #%d and #%d with idempotent AMI call... " % (i, i + 1))
sys.stdout.flush()
cb = Callback()
obj.idempotentAbortAsync().add_done_callback(cb.exceptAbortI)
cb.check()
print("ok")
i = i + 1
else:
assert(False)
i = i + 1
j = j + 1
sys.stdout.write("testing whether all servers are gone... ")
sys.stdout.flush()
try:
obj.ice_ping()
test(False)
except Ice.LocalException:
print("ok")
|