1
# Copyright 2012 Canonical Ltd. This software is licensed under the
2
# GNU Affero General Public License version 3 (see the file LICENSE).
4
"""Test maasserver messages."""
6
from __future__ import (
16
from maasserver.messages import (
21
from maasserver.models import Node
22
from maasserver.testing.factory import factory
23
from maasserver.testing.testcase import TestModelTestCase
24
from maasserver.tests.models import MessagesTestModel
28
"""A fake RabbitProducer that simply records published messages."""
33
def publish(self, message):
34
self.messages.append(message)
37
class TestMessenger(MessengerBase):
39
def create_msg(self, event_name, instance):
40
return [event_name, instance]
43
class MessengerBaseTest(TestModelTestCase):
45
app = 'maasserver.tests'
47
def test_update_obj_publishes_message_if_created(self):
48
producer = FakeProducer()
49
messenger = TestMessenger(MessagesTestModel, producer)
50
instance = factory.getRandomString()
51
messenger.update_obj(MessagesTestModel, instance, True)
53
[[MESSENGER_EVENT.CREATED, instance]], producer.messages)
55
def test_update_obj_publishes_message_if_not_created(self):
56
producer = FakeProducer()
57
messenger = TestMessenger(MessagesTestModel, producer)
58
instance = factory.getRandomString()
59
messenger.update_obj(MessagesTestModel, instance, False)
61
[[MESSENGER_EVENT.UPDATED, instance]], producer.messages)
63
def test_delete_obj_publishes_message(self):
64
producer = FakeProducer()
65
messenger = TestMessenger(MessagesTestModel, producer)
66
instance = factory.getRandomString()
67
messenger.delete_obj(MessagesTestModel, instance)
69
[[MESSENGER_EVENT.DELETED, instance]], producer.messages)
71
def test_register_registers_update_signal(self):
72
producer = FakeProducer()
73
messenger = TestMessenger(MessagesTestModel, producer)
74
obj = MessagesTestModel(name=factory.getRandomString())
79
[[MESSENGER_EVENT.UPDATED, obj]], producer.messages)
81
def test_register_registers_created_signal(self):
82
producer = FakeProducer()
83
messenger = TestMessenger(MessagesTestModel, producer)
85
obj = MessagesTestModel(name=factory.getRandomString())
88
[[MESSENGER_EVENT.CREATED, obj]], producer.messages)
90
def test_register_registers_delete_signal(self):
91
obj = MessagesTestModel(name=factory.getRandomString())
93
producer = FakeProducer()
94
messenger = TestMessenger(MessagesTestModel, producer)
98
[[MESSENGER_EVENT.DELETED, obj]], producer.messages)
101
class MaaSMessengerTest(TestModelTestCase):
103
app = 'maasserver.tests'
105
def test_event_key(self):
106
producer = FakeProducer()
107
event_name = factory.getRandomString()
108
obj = MessagesTestModel(name=factory.getRandomString())
109
messenger = MaaSMessenger(MessagesTestModel, producer)
111
'%s.%s' % ('MessagesTestModel', event_name),
112
messenger.event_key(event_name, obj))
114
def test_create_msg(self):
115
producer = FakeProducer()
116
messenger = MaaSMessenger(Node, producer)
117
event_name = factory.getRandomString()
118
obj_name = factory.getRandomString()
119
obj = MessagesTestModel(name=obj_name)
121
msg = messenger.create_msg(event_name, obj)
122
decoded_msg = json.loads(msg)
123
self.assertItemsEqual(['instance', 'event_key'], list(decoded_msg))
124
self.assertItemsEqual(
125
['id', 'name'], list(decoded_msg['instance']))
127
obj_name, decoded_msg['instance']['name'])