1# -*- coding: utf-8 -*-
2#
3# Copyright (c) ZeroC, Inc. All rights reserved.
4#
5
6class IceGridAdminTestCase(IceGridTestCase):
7
8    def __init__(self):
9        self.glacier2router = Glacier2Router(props=routerProps, waitForShutdown=False)
10        IceGridTestCase.__init__(self, application=None, server=self.glacier2router)
11
12    def runClientSide(self, current):
13
14        current.write("testing login with username/password... ")
15
16        admin=IceGridAdmin()
17
18        admin.start(current)
19        admin.expect(current, '>>> ')
20        admin.sendline(current, "server list")
21        admin.expect(current, '>>> ')
22        admin.sendline(current, 'exit')
23        admin.stop(current, True)
24
25        defaultRouterProps = { "Ice.Default.Router" : self.glacier2router.getClientProxy(current) }
26
27        admin.start(current, props=defaultRouterProps)
28        admin.expect(current, '>>> ')
29        admin.sendline(current, "server list")
30        admin.expect(current, '>>> ')
31        admin.sendline(current, 'exit')
32        admin.stop(current, True)
33
34        current.writeln("ok")
35
36        if current.config.protocol == "ssl":
37
38            current.write("testing login with ssl... ")
39
40            # Direct registry connection with SSL
41            admin.start(current, args=["--ssl"])
42            admin.expect(current, '>>> ')
43            admin.sendline(current, "server list")
44            admin.expect(current, '>>> ')
45            admin.sendline(current, 'exit')
46            admin.stop(current, True)
47
48            # Glacier2 connection with username/password
49            admin.start(current, args=["--ssl"], props=defaultRouterProps)
50            admin.expect(current, '>>> ')
51            admin.sendline(current, "server list")
52            admin.expect(current, '>>> ')
53            admin.sendline(current, 'exit')
54            admin.stop(current, True)
55
56            current.writeln("ok")
57
58        current.write("testing commands... ")
59        admin.start(current)
60        try:
61            serverDir = current.getBuildDir("server")
62
63            admin.expect(current, '>>> ')
64            admin.sendline(current, 'application add application.xml server.dir=%s' % serverDir)
65            admin.expect(current, '>>> ')
66            admin.sendline(current, 'application list')
67            admin.expect(current, 'Test')
68            admin.sendline(current, 'application describe Test')
69            admin.expect(current, 'application `Test\'')
70            admin.expect(current, '\{.*\}')
71            admin.expect(current, '>>> ')
72            admin.sendline(current, 'application diff application.xml server.dir=%s' % serverDir)
73            admin.expect(current, 'application `Test\'\n\{.*\}')
74            admin.expect(current, '>>> ')
75            admin.sendline(current, 'application update application.xml server.dir=%s' % serverDir)
76            admin.expect(current, '>>> ')
77            admin.sendline(current, 'application patch Test')
78            admin.expect(current, '>>> ')
79            admin.sendline(current, 'server list')
80            admin.expect(current, 'server')
81            admin.expect(current, '>>> ')
82            admin.sendline(current, 'server describe server')
83            admin.expect(current, 'server `server\'\n\{.*\}')
84            admin.expect(current, '>>> ')
85            admin.sendline(current, 'server start server')
86            admin.expect(current, '>>> ')
87            admin.sendline(current, 'server state server')
88            admin.expect(current, '^active \(.*\)')
89            admin.expect(current, '>>> ')
90            admin.sendline(current, 'server pid server')
91            admin.expect(current, '[0-9]+')
92            admin.expect(current, '>>> ')
93            admin.sendline(current, 'server properties server')
94            admin.expect(current, '>>> ')
95            admin.sendline(current, 'server property server Ice.Admin.ServerId')
96            admin.expect(current, "^server")
97            admin.expect(current, '>>> ')
98            admin.sendline(current, 'server patch server')
99            admin.expect(current, '>>> ')
100            admin.sendline(current, 'server disable server')
101            admin.expect(current, '>>> ')
102            admin.sendline(current, 'server enable server')
103            admin.expect(current, '>>> ')
104            admin.sendline(current, 'adapter list')
105            admin.expect(current, 'TestAdapter')
106            admin.expect(current, '>>> ')
107            admin.sendline(current, 'adapter endpoints TestAdapter')
108            admin.expect(current, ['tcp', 'ssl', 'ws', 'wss'])
109            admin.expect(current, '>>> ')
110            admin.sendline(current, 'object list')
111            admin.expect(current, 'test')
112            admin.expect(current, '>>> ')
113            admin.sendline(current, 'object describe')
114            admin.expect(current, 'proxy = `.*\' type = `.*\'')
115            admin.expect(current, '>>> ')
116            admin.sendline(current, 'object find Test')
117            admin.expect(current, 'test')
118            admin.expect(current, '>>> ')
119            admin.sendline(current, 'server stop server')
120            admin.expect(current, '>>> ')
121            admin.sendline(current, 'application remove Test')
122            admin.expect(current, '>>> ')
123            admin.sendline(current, 'registry list')
124            admin.expect(current, 'Master')
125            admin.expect(current, '>>> ')
126            admin.sendline(current, 'registry ping Master')
127            admin.expect(current, 'registry is up')
128            admin.expect(current, '>>> ')
129            admin.sendline(current, 'registry describe Master')
130            admin.expect(current, 'registry `Master\'\n{.*}')
131            admin.expect(current, '>>> ')
132            admin.sendline(current, 'node list')
133            admin.expect(current, 'localnode')
134            admin.expect(current, '>>> ')
135            admin.sendline(current, 'node describe localnode')
136            admin.expect(current, 'node `localnode\'\n{.*}')
137            admin.expect(current, '>>> ')
138            admin.sendline(current, 'node load localnode')
139            admin.expect(current, 'load average.*\n')
140            admin.expect(current, '>>> ')
141            admin.sendline(current, 'node ping localnode')
142            admin.expect(current, 'node is up')
143            admin.expect(current, '>>> ')
144            admin.sendline(current, 'exit')
145            admin.stop(current, True)
146            current.writeln("ok")
147        except Exception as e:
148            admin.stop(current, False)
149            raise RuntimeError("failed!\n" + str(e))
150
151routerProps= lambda process, current: {
152    'Glacier2.SessionTimeout' : 5,
153    'Glacier2.SessionManager' : 'TestIceGrid/AdminSessionManager',
154    'Glacier2.PermissionsVerifier' : 'Glacier2/NullPermissionsVerifier',
155    'Glacier2.SSLSessionManager' : 'TestIceGrid/AdminSSLSessionManager',
156    'Glacier2.SSLPermissionsVerifier' : 'Glacier2/NullSSLPermissionsVerifier',
157    'Ice.Default.Locator' : current.testcase.getLocator(current),
158    'IceSSL.VerifyPeer' : 1
159}
160
161if isinstance(platform, Windows) or os.getuid() != 0:
162    TestSuite(__file__, [ IceGridAdminTestCase() ], multihost=False)
163