github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/acceptancetests/repository/trusty/haproxy/hooks/tests/test_website_hooks.py (about) 1 from testtools import TestCase 2 from mock import patch, call 3 4 import hooks 5 6 7 class WebsiteRelationTest(TestCase): 8 9 def setUp(self): 10 super(WebsiteRelationTest, self).setUp() 11 self.notify_website = self.patch_hook("notify_website") 12 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) 17 return mock 18 19 def test_website_interface_none(self): 20 self.assertEqual(None, hooks.website_interface(hook_name=None)) 21 self.notify_website.assert_not_called() 22 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,)) 27 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,)) 32 33 34 class NotifyRelationTest(TestCase): 35 36 def setUp(self): 37 super(NotifyRelationTest, self).setUp() 38 39 self.relations_of_type = self.patch_hook("relations_of_type") 40 self.relations_for_id = self.patch_hook("relations_for_id") 41 self.relation_set = self.patch_hook("relation_set") 42 self.config_get = self.patch_hook("config_get") 43 self.get_relation_ids = self.patch_hook("get_relation_ids") 44 self.get_hostname = self.patch_hook("get_hostname") 45 self.log = self.patch_hook("log") 46 self.get_config_service = self.patch_hook("get_config_service") 47 48 def patch_hook(self, hook_name): 49 mock_controller = patch.object(hooks, hook_name) 50 mock = mock_controller.start() 51 self.addCleanup(mock_controller.stop) 52 return mock 53 54 def test_notify_website_relation_no_relation_ids(self): 55 hooks.notify_relation("website") 56 self.get_relation_ids.return_value = () 57 self.relation_set.assert_not_called() 58 self.get_relation_ids.assert_called_once_with("website") 59 60 def test_notify_website_relation_with_default_relation(self): 61 self.get_relation_ids.return_value = () 62 self.get_hostname.return_value = "foo.local" 63 self.relations_for_id.return_value = [{}] 64 self.config_get.return_value = {"services": ""} 65 66 hooks.notify_relation("website", relation_ids=(None,)) 67 68 self.get_hostname.assert_called_once_with() 69 self.relations_for_id.assert_called_once_with(None) 70 self.relation_set.assert_called_once_with( 71 relation_id=None, port="80", hostname="foo.local", 72 all_services="") 73 self.get_relation_ids.assert_not_called() 74 75 def test_notify_website_relation_with_relations(self): 76 self.get_relation_ids.return_value = ("website:1", 77 "website:2") 78 self.get_hostname.return_value = "foo.local" 79 self.relations_for_id.return_value = [{}] 80 self.config_get.return_value = {"services": ""} 81 82 hooks.notify_relation("website") 83 84 self.get_hostname.assert_called_once_with() 85 self.get_relation_ids.assert_called_once_with("website") 86 self.relations_for_id.assert_has_calls([ 87 call("website:1"), 88 call("website:2"), 89 ]) 90 91 self.relation_set.assert_has_calls([ 92 call(relation_id="website:1", port="80", hostname="foo.local", 93 all_services=""), 94 call(relation_id="website:2", port="80", hostname="foo.local", 95 all_services=""), 96 ]) 97 98 def test_notify_website_relation_with_different_sitenames(self): 99 self.get_relation_ids.return_value = ("website:1",) 100 self.get_hostname.return_value = "foo.local" 101 self.relations_for_id.return_value = [{"service_name": "foo"}, 102 {"service_name": "bar"}] 103 self.config_get.return_value = {"services": ""} 104 105 hooks.notify_relation("website") 106 107 self.get_hostname.assert_called_once_with() 108 self.get_relation_ids.assert_called_once_with("website") 109 self.relations_for_id.assert_has_calls([ 110 call("website:1"), 111 ]) 112 113 self.relation_set.assert_has_calls([ 114 call.relation_set( 115 relation_id="website:1", port="80", hostname="foo.local", 116 all_services=""), 117 ]) 118 self.log.assert_has_calls([ 119 call.log( 120 "Remote units requested more than a single service name." 121 "Falling back to default host/port."), 122 call.log("No services configured, exiting."), 123 ]) 124 125 def test_notify_website_relation_with_same_sitenames(self): 126 self.get_relation_ids.return_value = ("website:1",) 127 self.get_hostname.side_effect = ["foo.local", "bar.local"] 128 self.relations_for_id.return_value = [{"service_name": "bar"}, 129 {"service_name": "bar"}] 130 self.config_get.return_value = {"services": ""} 131 self.get_config_service.return_value = {"service_host": "bar.local", 132 "service_port": "4242"} 133 134 hooks.notify_relation("website") 135 136 self.get_hostname.assert_has_calls([ 137 call(), 138 call("bar.local")]) 139 self.get_relation_ids.assert_called_once_with("website") 140 self.relations_for_id.assert_has_calls([ 141 call("website:1"), 142 ]) 143 144 self.relation_set.assert_has_calls([ 145 call.relation_set( 146 relation_id="website:1", port="4242", hostname="bar.local", 147 all_services=""), 148 ]) 149 self.log.assert_has_calls([call("No services configured, exiting.")])