1
from testtools import TestCase
2
from mock import patch, call
7
class WebsiteRelationTest(TestCase):
10
super(WebsiteRelationTest, self).setUp()
11
self.notify_website = self.patch_hook("notify_website")
13
def patch_hook(self, hook_name):
14
mock_controller = patch.object(hooks, hook_name)
15
mock = mock_controller.start()
16
self.addCleanup(mock_controller.stop)
19
def test_website_interface_none(self):
20
self.assertEqual(None, hooks.website_interface(hook_name=None))
21
self.notify_website.assert_not_called()
23
def test_website_interface_joined(self):
24
hooks.website_interface(hook_name="joined")
25
self.notify_website.assert_called_once_with(
26
changed=False, relation_ids=(None,))
28
def test_website_interface_changed(self):
29
hooks.website_interface(hook_name="changed")
30
self.notify_website.assert_called_once_with(
31
changed=True, relation_ids=(None,))
34
class NotifyRelationTest(TestCase):
37
super(NotifyRelationTest, self).setUp()
39
self.relations_for_id = self.patch_hook("relations_for_id")
40
self.relation_set = self.patch_hook("relation_set")
41
self.config_get = self.patch_hook("config_get")
42
self.get_relation_ids = self.patch_hook("get_relation_ids")
43
self.get_hostname = self.patch_hook("get_hostname")
44
self.log = self.patch_hook("log")
45
self.get_config_services = self.patch_hook("get_config_service")
47
def patch_hook(self, hook_name):
48
mock_controller = patch.object(hooks, hook_name)
49
mock = mock_controller.start()
50
self.addCleanup(mock_controller.stop)
53
def test_notify_website_relation_no_relation_ids(self):
54
hooks.notify_relation("website")
55
self.get_relation_ids.return_value = ()
56
self.relation_set.assert_not_called()
57
self.get_relation_ids.assert_called_once_with("website")
59
def test_notify_website_relation_with_default_relation(self):
60
self.get_relation_ids.return_value = ()
61
self.get_hostname.return_value = "foo.local"
62
self.relations_for_id.return_value = [{}]
63
self.config_get.return_value = {"services": ""}
65
hooks.notify_relation("website", relation_ids=(None,))
67
self.get_hostname.assert_called_once_with()
68
self.relations_for_id.assert_called_once_with(None)
69
self.relation_set.assert_called_once_with(
70
relation_id=None, port="80", hostname="foo.local",
72
self.get_relation_ids.assert_not_called()
74
def test_notify_website_relation_with_relations(self):
75
self.get_relation_ids.return_value = ("website:1",
77
self.get_hostname.return_value = "foo.local"
78
self.relations_for_id.return_value = [{}]
79
self.config_get.return_value = {"services": ""}
81
hooks.notify_relation("website")
83
self.get_hostname.assert_called_once_with()
84
self.get_relation_ids.assert_called_once_with("website")
85
self.relations_for_id.assert_has_calls([
90
self.relation_set.assert_has_calls([
91
call(relation_id="website:1", port="80", hostname="foo.local",
93
call(relation_id="website:2", port="80", hostname="foo.local",
97
def test_notify_website_relation_with_different_sitenames(self):
98
self.get_relation_ids.return_value = ("website:1",)
99
self.get_hostname.return_value = "foo.local"
100
self.relations_for_id.return_value = [{"service_name": "foo"},
101
{"service_name": "bar"}]
102
self.config_get.return_value = {"services": ""}
104
hooks.notify_relation("website")
106
self.get_hostname.assert_called_once_with()
107
self.get_relation_ids.assert_called_once_with("website")
108
self.relations_for_id.assert_has_calls([
112
self.relation_set.assert_has_calls([
114
relation_id="website:1", port="80", hostname="foo.local",
117
self.log.assert_called_once_with(
118
"Remote units requested than a single service name."
119
"Falling back to default host/port.")
121
def test_notify_website_relation_with_same_sitenames(self):
122
self.get_relation_ids.return_value = ("website:1",)
123
self.get_hostname.side_effect = ["foo.local", "bar.local"]
124
self.relations_for_id.return_value = [{"service_name": "bar"},
125
{"service_name": "bar"}]
126
self.config_get.return_value = {"services": ""}
127
self.get_config_services.return_value = {"service_host": "bar.local",
128
"service_port": "4242"}
130
hooks.notify_relation("website")
132
self.get_hostname.assert_has_calls([
135
self.get_relation_ids.assert_called_once_with("website")
136
self.relations_for_id.assert_has_calls([
140
self.relation_set.assert_has_calls([
142
relation_id="website:1", port="4242", hostname="bar.local",
145
self.log.assert_not_called()