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.")])