summaryrefslogtreecommitdiff
path: root/cpp/demo/IceStorm/replicated2/expect.py
blob: bd896254af9df8862cf318ada00cbd3959e5296c (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
#!/usr/bin/env python
# **********************************************************************
#
# Copyright (c) 2003-2008 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 sys, os

path = [ ".", "..", "../..", "../../..", "../../../.." ]
head = os.path.dirname(sys.argv[0])
if len(head) > 0:
    path = [os.path.join(head, p) for p in path]
path = [os.path.abspath(p) for p in path if os.path.exists(os.path.join(p, "demoscript")) ]
if len(path) == 0:
    raise "can't find toplevel directory!"
sys.path.append(path[0])

from demoscript import *
import time, signal

print "cleaning databases...",
sys.stdout.flush()
Util.cleanDbDir("db1");
Util.cleanDbDir("db2")
Util.cleanDbDir("db3")
print "ok"

if Util.defaultHost:
    a1 = ' --IceBox.Service.IceStorm="IceStormService,33:createIceStorm --Ice.Config=config.s1 %s"' \
        % Util.defaultHost
    a2 = ' --IceBox.Service.IceStorm="IceStormService,33:createIceStorm --Ice.Config=config.s2 %s"' \
        % Util.defaultHost
    a3 = ' --IceBox.Service.IceStorm="IceStormService,33:createIceStorm --Ice.Config=config.s3 %s"' \
        % Util.defaultHost
else:
    a1 = ''
    a2 = ''
    a3 = ''

print "starting replicas...",
sys.stdout.flush()
ib1 = Util.spawn('%s --Ice.Config=config.ib1 --Ice.PrintAdapterReady %s' % (Util.getIceBox(), a1))
ib1.expect('.* ready')
ib2 = Util.spawn('%s --Ice.Config=config.ib2 --Ice.PrintAdapterReady %s' % (Util.getIceBox(), a2))
ib2.expect('.* ready')
ib3 = Util.spawn('%s --Ice.Config=config.ib3 --Ice.PrintAdapterReady %s' % (Util.getIceBox(), a3))
ib3.expect('.* ready')
print "ok"

ib3.expect('Election: node 2: reporting for duty in group 2:[-0-9A-Fa-f]+ as coordinator' , timeout=20)
ib2.expect('Election: node 1: reporting for duty in group 2:[-0-9A-Fa-f]+ with coordinator 2', timeout=20)
ib1.expect('Election: node 0: reporting for duty in group 2:[-0-9A-Fa-f]+ with coordinator 2', timeout=20)

print "testing pub/sub...",
sys.stdout.flush()
sub = Util.spawn('./subscriber --Ice.PrintAdapterReady')

ib1.expect('Topic: time: add replica observer: [-0-9A-Fa-f]+')
ib2.expect('Topic: time: add replica observer: [-0-9A-Fa-f]+' )
ib3.expect('Topic: time: subscribeAndGetPublisher: [-0-9A-Fa-f]+')

sub.expect('.* ready')

pub = Util.spawn('./publisher')

time.sleep(3)
sub.expect('[0-9][0-9]/[0-9][0-9].*\n[0-9][0-9]/[0-9][0-9]')
print "ok"

print "shutting down...",
sys.stdout.flush()
sub.kill(signal.SIGINT)
sub.waitTestSuccess()
pub.kill(signal.SIGINT)
pub.waitTestSuccess()

ib1.expect('Topic: time: remove replica observer: [-0-9A-Fa-f]+')
ib2.expect('Topic: time: remove replica observer: [-0-9A-Fa-f]+')
ib3.expect('Topic: time: unsubscribe: [-0-9A-Fa-f]+')

admin = Util.spawn('iceboxadmin --Ice.Config=config.ib1 shutdown')
admin.waitTestSuccess()
admin = Util.spawn('iceboxadmin --Ice.Config=config.ib2 shutdown')
admin.waitTestSuccess()
admin = Util.spawn('iceboxadmin --Ice.Config=config.ib3 shutdown')
admin.waitTestSuccess()
print "ok"