40
41
class NotificationsTestCase(test.TestCase):
44
super(NotificationsTestCase, self).setUp()
46
self.net_info = fake_network.fake_get_instance_nw_info(self.stubs, 1,
44
49
def fake_get_nw_info(cls, ctxt, instance):
45
50
self.assertTrue(ctxt.is_admin)
46
return fake_network.fake_get_instance_nw_info(self.stubs, 1, 1,
49
super(NotificationsTestCase, self).setUp()
50
53
self.stubs.Set(nova.network.API, 'get_instance_nw_info',
53
56
self.flags(compute_driver='nova.virt.fake.FakeDriver',
55
notification_driver='nova.notifier.test_notifier',
58
notification_driver=['nova.openstack.common.notifier.test_notifier'],
56
59
network_manager='nova.network.manager.FlatManager',
57
60
notify_on_state_change="vm_and_task_state",
82
92
# test config disable of the notifcations
83
93
self.flags(notify_on_state_change=None)
94
self.flags(notify_on_any_change=False)
85
96
old = copy.copy(self.instance)
86
97
self.instance["vm_state"] = vm_states.ACTIVE
99
old_vm_state = old['vm_state']
100
new_vm_state = self.instance["vm_state"]
101
old_task_state = old['task_state']
102
new_task_state = self.instance["task_state"]
104
notifications.send_update_with_states(self.context, self.instance,
105
old_vm_state, new_vm_state, old_task_state, new_task_state,
88
108
notifications.send_update(self.context, old, self.instance)
89
109
self.assertEquals(0, len(test_notifier.NOTIFICATIONS))
97
117
old = copy.copy(self.instance)
98
118
self.instance["task_state"] = task_states.SPAWNING
100
notifications.send_update(self.context, old, self.instance)
120
old_vm_state = old['vm_state']
121
new_vm_state = self.instance["vm_state"]
122
old_task_state = old['task_state']
123
new_task_state = self.instance["task_state"]
125
notifications.send_update_with_states(self.context, self.instance,
126
old_vm_state, new_vm_state, old_task_state, new_task_state,
101
129
self.assertEquals(0, len(test_notifier.NOTIFICATIONS))
103
131
# ok now enable task state notifcations and re-try
109
137
def test_send_no_notif(self):
111
139
# test notification on send no initial vm state:
112
notifications.send_update(self.context, self.instance, self.instance)
140
old_vm_state = self.instance['vm_state']
141
new_vm_state = self.instance['vm_state']
142
old_task_state = self.instance['task_state']
143
new_task_state = self.instance['task_state']
145
notifications.send_update_with_states(self.context, self.instance,
146
old_vm_state, new_vm_state, old_task_state, new_task_state,
147
service="compute", host=None, verify_states=True)
113
149
self.assertEquals(0, len(test_notifier.NOTIFICATIONS))
115
151
def test_send_on_vm_change(self):
139
175
notifications.send_update_with_states(self.context, self.instance,
140
176
vm_states.BUILDING, vm_states.BUILDING, task_states.SPAWNING,
141
task_states.SPAWNING)
177
task_states.SPAWNING, verify_states=True)
142
178
self.assertEquals(0, len(test_notifier.NOTIFICATIONS))
144
180
def test_vm_update_with_states(self):
146
182
notifications.send_update_with_states(self.context, self.instance,
147
183
vm_states.BUILDING, vm_states.ACTIVE, task_states.SPAWNING,
148
task_states.SPAWNING)
184
task_states.SPAWNING, verify_states=True)
149
185
self.assertEquals(1, len(test_notifier.NOTIFICATIONS))
150
186
notif = test_notifier.NOTIFICATIONS[0]
151
187
payload = notif["payload"]
188
access_ip_v4 = self.instance["access_ip_v4"]
189
access_ip_v6 = self.instance["access_ip_v6"]
190
display_name = self.instance["display_name"]
153
192
self.assertEquals(vm_states.BUILDING, payload["old_state"])
154
193
self.assertEquals(vm_states.ACTIVE, payload["state"])
155
194
self.assertEquals(task_states.SPAWNING, payload["old_task_state"])
156
195
self.assertEquals(task_states.SPAWNING, payload["new_task_state"])
196
self.assertEquals(payload["access_ip_v4"], access_ip_v4)
197
self.assertEquals(payload["access_ip_v6"], access_ip_v6)
198
self.assertEquals(payload["display_name"], display_name)
158
200
def test_task_update_with_states(self):
201
self.flags(notify_on_state_change="vm_and_task_state")
160
203
notifications.send_update_with_states(self.context, self.instance,
161
204
vm_states.BUILDING, vm_states.BUILDING, task_states.SPAWNING,
205
None, verify_states=True)
163
206
self.assertEquals(1, len(test_notifier.NOTIFICATIONS))
164
207
notif = test_notifier.NOTIFICATIONS[0]
165
208
payload = notif["payload"]
209
access_ip_v4 = self.instance["access_ip_v4"]
210
access_ip_v6 = self.instance["access_ip_v6"]
211
display_name = self.instance["display_name"]
167
213
self.assertEquals(vm_states.BUILDING, payload["old_state"])
168
214
self.assertEquals(vm_states.BUILDING, payload["state"])
169
215
self.assertEquals(task_states.SPAWNING, payload["old_task_state"])
170
216
self.assertEquals(None, payload["new_task_state"])
217
self.assertEquals(payload["access_ip_v4"], access_ip_v4)
218
self.assertEquals(payload["access_ip_v6"], access_ip_v6)
219
self.assertEquals(payload["display_name"], display_name)
172
221
def test_update_no_service_name(self):
173
222
notifications.send_update_with_states(self.context, self.instance,
198
247
# service name should default to 'compute'
199
248
notif = test_notifier.NOTIFICATIONS[0]
200
249
self.assertEquals('compute.someotherhost', notif['publisher_id'])
251
def test_payload_has_fixed_ip_labels(self):
252
info = notifications.info_from_instance(self.context, self.instance,
254
self.assertTrue("fixed_ips" in info)
255
self.assertEquals(info["fixed_ips"][0]["label"], "test1")
257
def test_send_access_ip_update(self):
258
notifications.send_update(self.context, self.instance, self.instance)
259
self.assertEquals(1, len(test_notifier.NOTIFICATIONS))
260
notif = test_notifier.NOTIFICATIONS[0]
261
payload = notif["payload"]
262
access_ip_v4 = self.instance["access_ip_v4"]
263
access_ip_v6 = self.instance["access_ip_v6"]
265
self.assertEquals(payload["access_ip_v4"], access_ip_v4)
266
self.assertEquals(payload["access_ip_v6"], access_ip_v6)
268
def test_send_name_update(self):
269
notifications.send_update(self.context, self.instance, self.instance)
270
self.assertEquals(1, len(test_notifier.NOTIFICATIONS))
271
notif = test_notifier.NOTIFICATIONS[0]
272
payload = notif["payload"]
273
display_name = self.instance["display_name"]
275
self.assertEquals(payload["display_name"], display_name)
277
def test_send_no_state_change(self):
280
def sending_no_state_change(context, instance, **kwargs):
282
self.stubs.Set(notifications, '_send_instance_update_notification',
283
sending_no_state_change)
284
notifications.send_update(self.context, self.instance, self.instance)
285
self.assertTrue(called[0])
287
def test_fail_sending_update(self):
288
def fail_sending(context, instance, **kwargs):
289
raise Exception('failed to notify')
290
self.stubs.Set(notifications, '_send_instance_update_notification',
293
notifications.send_update(self.context, self.instance, self.instance)
294
self.assertEquals(0, len(test_notifier.NOTIFICATIONS))