5
4
from twisted.internet.defer import inlineCallbacks, Deferred
7
6
from juju.rapi.transport.ws import WebSocketAPIFactory
8
7
from juju.providers.dummy import MachineProvider
9
from juju.state.auth import make_ace
10
from juju.state.topology import InternalTopology
11
from juju.state.security import Principal
10
13
from juju.rapi.tests.common import ContextTestBase
11
from juju.state.topology import InternalTopology
12
14
from juju.state.tests.common import StateTestBase
13
15
from juju.tests.common import get_test_zookeeper_address
145
150
yield self.context.deploy("precise/mysql")
146
151
yield self.context.update_annotations(
147
152
"mysql", {'gui.x': 21, 'gui.y': 64})
148
154
yield self.stream_manager.pump()
149
155
yield self.stream_manager.pump()
151
157
d = self.transport.watch_kv('op', 'delta')
152
158
self.ws.connectionMade()
159
self.ws.context.authenticated = True
154
162
delta = self.transport.stream[-1]
155
163
self.assertEqual(
182
def test_delta_after_login(self):
183
"""No delta events are sent till after login.
185
# Setup for login and service deploy
186
u, p = "admin", "cekret"
187
self.client.create("/login")
188
yield self.mock_store_charms(["precise/wordpress"])
191
self.ws.connectionMade()
192
yield self.context.deploy("precise/wordpress")
194
# Even if we pump the delta stream now, the connected client
195
# sees nothing till after login.
196
yield self.stream_manager.pump()
198
greeting = self.transport.stream[-1]
199
self.assertEqual(greeting,
200
{u'state': u'login-required',
204
u'default_series': u'precise',
205
u'provider_type': u'dummy'})
207
login_d = self.transport.watch_kv('op', 'login')
208
delta_d = self.transport.watch_kv('op', 'delta')
210
self.ws.dataReceived(json.dumps(dict(
211
op='login', user=u, password=p)))
216
delta = self.transport.stream[-1]
217
self.assertEqual(delta['op'], 'delta')
174
220
def test_delta_stream(self):
175
221
yield self.mock_store_charms(["precise/wordpress", "precise/mysql"])
176
222
self.mocker.replay()
178
224
# There's always an implicit initial pump of current state made
179
225
# on connection. But no initial state for this test.
180
226
self.ws.connectionMade()
227
self.ws.context.authenticated = True
182
229
# Modify state and send events out.
183
230
yield self.context.deploy("precise/mysql")
186
233
yield self.stream_manager.pump()
188
235
delta = self.transport.stream[-1]
189
237
self.assertEqual(delta['op'], 'delta')
190
238
self.assertEqual(delta['result'], [
191
239
[u'service', u'add', {u'id': 'wordpress',