def test_relation_default_service(self):
        self.get_config_services.return_value = {
            None: {
                "service_name": "service",
                },
            "service": {
                "service_name": "service",
                },
            }
        self.relations_of_type.return_value = [
            {"port": 4242,
             "hostname": "backend.1",
             "private-address": "1.2.3.4",
             "__unit__": "foo/0"},
        ]

        expected = {
            'service': {
                'service_name': 'service',
                'service_host': '0.0.0.0',
                'service_port': 10002,
                'servers': [('foo-0-4242', '1.2.3.4', 4242, [])],
                },
            }
        self.assertEqual(expected, hooks.create_services())
        self.write_service_config.assert_called_with(expected)
    def test_with_sitenames_no_match_but_unit_name(self):
        self.get_config_services.return_value = {
            None: {
                "service_name": "service",
                },
            "foo": {
                "service_name": "foo",
                "server_options": ["maxconn 4"],
                },
            }
        self.relations_of_type.return_value = [
            {"port": 4242,
             "hostname": "backend.1",
             "sitenames": "bar_service baz_service",
             "private-address": "1.2.3.4",
             "__unit__": "foo/0"},
        ]

        expected = {
            'foo': {
                'service_name': 'foo',
                'service_host': '0.0.0.0',
                'service_port': 10002,
                'server_options': ["maxconn 4"],
                'servers': [('foo-0-4242', '1.2.3.4',
                             4242, ["maxconn 4"])],
                },
            }
        self.assertEqual(expected, hooks.create_services())
        self.write_service_config.assert_called_with(expected)
Ejemplo n.º 3
0
    def test_with_sitenames_no_match_but_unit_name(self):
        self.get_config_services.return_value = {
            None: {
                "service_name": "service",
            },
            "foo": {
                "service_name": "foo",
                "server_options": ["maxconn 4"],
            },
        }
        self.relations_of_type.return_value = [
            {
                "port": 4242,
                "hostname": "backend.1",
                "sitenames": "bar_service baz_service",
                "private-address": "1.2.3.4",
                "__unit__": "foo/0"
            },
        ]

        expected = {
            'foo': {
                'service_name': 'foo',
                'service_host': '0.0.0.0',
                'service_port': 10002,
                'server_options': ["maxconn 4"],
                'servers': [('foo-0-4242', '1.2.3.4', 4242, ["maxconn 4"])],
            },
        }
        self.assertEqual(expected, hooks.create_services())
        self.write_service_config.assert_called_with(expected)
    def test_no_relation_but_has_servers_from_config(self):
        self.get_config_services.return_value = {
            None: {
                "service_name": "service",
                },
            "service": {
                "service_name": "service",
                "servers": [
                    ("legacy-backend", "1.2.3.1", 4242, ["maxconn 42"]),
                    ]
                },
            }
        self.relations_of_type.return_value = []

        expected = {
            'service': {
                'service_name': 'service',
                'service_host': '0.0.0.0',
                'service_port': 10002,
                'servers': [
                    ("legacy-backend", "1.2.3.1", 4242, ["maxconn 42"]),
                    ],
                },
            }
        self.assertEqual(expected, hooks.create_services())
        self.write_service_config.assert_called_with(expected)
Ejemplo n.º 5
0
    def test_relation_default_service(self):
        self.get_config_services.return_value = {
            None: {
                "service_name": "service",
            },
            "service": {
                "service_name": "service",
            },
        }
        self.relations_of_type.return_value = [
            {
                "port": 4242,
                "hostname": "backend.1",
                "private-address": "1.2.3.4",
                "__unit__": "foo/0"
            },
        ]

        expected = {
            'service': {
                'service_name': 'service',
                'service_host': '0.0.0.0',
                'service_port': 10002,
                'servers': [('foo-0-4242', '1.2.3.4', 4242, [])],
            },
        }
        self.assertEqual(expected, hooks.create_services())
        self.write_service_config.assert_called_with(expected)
Ejemplo n.º 6
0
    def test_no_relation_but_has_servers_from_config(self):
        self.get_config_services.return_value = {
            None: {
                "service_name": "service",
            },
            "service": {
                "service_name": "service",
                "servers": [
                    ("legacy-backend", "1.2.3.1", 4242, ["maxconn 42"]),
                ]
            },
        }
        self.relations_of_type.return_value = []

        expected = {
            'service': {
                'service_name': 'service',
                'service_host': '0.0.0.0',
                'service_port': 10002,
                'servers': [
                    ("legacy-backend", "1.2.3.1", 4242, ["maxconn 42"]),
                ],
            },
        }
        self.assertEqual(expected, hooks.create_services())
        self.write_service_config.assert_called_with(expected)
Ejemplo n.º 7
0
    def test_with_multiple_units_in_relation_scaleout(self):
        """
        Test multiple units in scaleout mode.
        Ensure no indirection layer gets created.
        """
        self.config_get.return_value["peering_mode"] = "active-active"
        self.get_config_services.return_value = {
            None: {
                "service_name": "service",
            },
        }
        unit_get = self.patch_hook("unit_get")
        unit_get.return_value = "1.2.4.5"
        self.relations_of_type.return_value = [
            {
                "port":
                4242,
                "private-address":
                "1.2.4.4",
                "__unit__":
                "foo/0",
                "services":
                yaml.safe_dump([{
                    "service_name":
                    "service",
                    "servers": [('foo-0', '1.2.3.4', 4242, ["maxconn 4"])]
                }])
            },
            {
                "__unit__":
                "foo/1",
                "hostname":
                "foo-1",
                "private-address":
                "1.2.4.4",
                "all_services":
                yaml.dump([
                    {
                        "service_name": "service",
                        "service_host": "0.0.0.0",
                        "service_options": ["balance leastconn"],
                        "service_port": 4242
                    },
                ])
            },
        ]

        expected = {
            'service': {
                'service_name': 'service',
                'service_host': '0.0.0.0',
                'service_port': 10002,
                'servers': [
                    ['foo-0', '1.2.3.4', 4242, ["maxconn 4"]],
                ]
            },
        }
        self.assertEqual(expected, hooks.create_services())
        self.write_service_config.assert_called_with(expected)
Ejemplo n.º 8
0
 def test_relation_data_returns_no_relations(self):
     self.get_config_services.return_value = {
         "service": {
             "service_name": "service",
         },
     }
     self.relations_of_type.return_value = []
     self.assertIs(None, hooks.create_services())
     self.log.assert_called_once_with("No backend servers, exiting.")
     self.write_service_config.assert_not_called()
 def test_relation_data_returns_no_relations(self):
     self.get_config_services.return_value = {
         "service": {
             "service_name": "service",
             },
         }
     self.relations_of_type.return_value = []
     self.assertIs(None, hooks.create_services())
     self.log.assert_called_once_with("No backend servers, exiting.")
     self.write_service_config.assert_not_called()
Ejemplo n.º 10
0
    def test_with_multiple_units_in_relation(self):
        """
        Have multiple units specifying "services" in the relation.
        Make sure data is created correctly with create_services()
        """
        self.get_config_services.return_value = {
            None: {
                "service_name": "service",
            },
        }
        self.relations_of_type.return_value = [
            {
                "port":
                4242,
                "private-address":
                "1.2.3.4",
                "__unit__":
                "foo/0",
                "services":
                yaml.safe_dump([{
                    "service_name":
                    "service",
                    "servers": [('foo-0', '1.2.3.4', 4242, ["maxconn 4"])]
                }])
            },
            {
                "port":
                4242,
                "private-address":
                "1.2.3.5",
                "__unit__":
                "foo/1",
                "services":
                yaml.safe_dump([{
                    "service_name":
                    "service",
                    "servers": [('foo-0', '1.2.3.5', 4242, ["maxconn 4"])]
                }])
            },
        ]

        expected = {
            'service': {
                'service_name':
                'service',
                'service_host':
                '0.0.0.0',
                'service_port':
                10002,
                'servers': [['foo-0', '1.2.3.4', 4242, ["maxconn 4"]],
                            ['foo-0', '1.2.3.5', 4242, ["maxconn 4"]]]
            },
        }
        self.assertEqual(expected, hooks.create_services())
        self.write_service_config.assert_called_with(expected)
Ejemplo n.º 11
0
 def test_relation_no_services(self):
     self.get_config_services.return_value = {}
     self.relations_of_type.return_value = [
         {"port": 4242,
          "__unit__": "foo/0",
          "hostname": "backend.1",
          "private-address": "1.2.3.4"},
     ]
     self.assertIs(None, hooks.create_services())
     self.log.assert_called_once_with("No services configured, exiting.")
     self.write_service_config.assert_not_called()
Ejemplo n.º 12
0
 def test_relation_no_services(self):
     self.get_config_services.return_value = {}
     self.relations_of_type.return_value = [
         {
             "port": 4242,
             "__unit__": "foo/0",
             "hostname": "backend.1",
             "private-address": "1.2.3.4"
         },
     ]
     self.assertIs(None, hooks.create_services())
     self.log.assert_called_once_with("No services configured, exiting.")
     self.write_service_config.assert_not_called()
Ejemplo n.º 13
0
 def test_no_private_address_in_relation_data(self):
     self.get_config_services.return_value = {
         "service": {
             "service_name": "service",
             },
         }
     self.relations_of_type.return_value = [
         {"port": 4242,
          "__unit__": "foo/0"},
     ]
     self.assertIs(None, hooks.create_services())
     self.log.assert_has_calls([call.log(
         "No private-address in relation data for 'foo/0', skipping.")])
     self.write_service_config.assert_not_called()
Ejemplo n.º 14
0
    def test_with_multiple_units_in_relation_scaleout(self):
        """
        Test multiple units in scaleout mode.
        Ensure no indirection layer gets created.
        """
        self.config_get.return_value["peering_mode"] = "active-active"
        self.get_config_services.return_value = {
            None: {
                "service_name": "service",
                },
            }
        unit_get = self.patch_hook("unit_get")
        unit_get.return_value = "1.2.4.5"
        self.relations_of_type.return_value = [
            {"port": 4242,
             "private-address": "1.2.4.4",
             "__unit__": "foo/0",
             "services": yaml.safe_dump([{
                 "service_name": "service",
                 "servers": [('foo-0', '1.2.3.4',
                              4242, ["maxconn 4"])]
                 }])
             },

            {"__unit__": "foo/1",
             "hostname": "foo-1",
             "private-address": "1.2.4.4",
             "all_services": yaml.dump([
                 {"service_name": "service",
                  "service_host": "0.0.0.0",
                  "service_options": ["balance leastconn"],
                  "service_port": 4242},
                 ])
             },
        ]

        expected = {
            'service': {
                'service_name': 'service',
                'service_host': '0.0.0.0',
                'service_port': 10002,
                'servers': [
                    ['foo-0', '1.2.3.4', 4242, ["maxconn 4"]],
                    ]
                },
            }
        self.assertEqual(expected, hooks.create_services())
        self.write_service_config.assert_called_with(expected)
Ejemplo n.º 15
0
 def test_no_port_in_relation_data(self):
     self.get_config_services.return_value = {
         "service": {
             "service_name": "service",
         },
     }
     self.relations_of_type.return_value = [
         {
             "private-address": "1.2.3.4",
             "__unit__": "foo/0"
         },
     ]
     self.assertIs(None, hooks.create_services())
     self.log.assert_has_calls(
         [call.log("No port in relation data for 'foo/0', skipping.")])
     self.write_service_config.assert_not_called()
Ejemplo n.º 16
0
 def test_relation_unknown_service(self):
     self.get_config_services.return_value = {
         "service": {
             "service_name": "service",
             },
         }
     self.relations_of_type.return_value = [
         {"port": 4242,
          "hostname": "backend.1",
          "service_name": "invalid",
          "private-address": "1.2.3.4",
          "__unit__": "foo/0"},
     ]
     self.assertIs(None, hooks.create_services())
     self.log.assert_has_calls([call.log(
         "Service 'invalid' does not exist.")])
     self.write_service_config.assert_not_called()
Ejemplo n.º 17
0
    def test_with_multiple_units_in_relation(self):
        """
        Have multiple units specifying "services" in the relation.
        Make sure data is created correctly with create_services()
        """
        self.get_config_services.return_value = {
            None: {
                "service_name": "service",
                },
            }
        self.relations_of_type.return_value = [
            {"port": 4242,
             "private-address": "1.2.3.4",
             "__unit__": "foo/0",
             "services": yaml.safe_dump([{
                 "service_name": "service",
                 "servers": [('foo-0', '1.2.3.4',
                              4242, ["maxconn 4"])]
                 }])
             },
            {"port": 4242,
             "private-address": "1.2.3.5",
             "__unit__": "foo/1",
             "services": yaml.safe_dump([{
                 "service_name": "service",
                 "servers": [('foo-0', '1.2.3.5',
                              4242, ["maxconn 4"])]
                 }])
             },
        ]

        expected = {
            'service': {
                'service_name': 'service',
                'service_host': '0.0.0.0',
                'service_port': 10002,
                'servers': [
                    ['foo-0', '1.2.3.4', 4242, ["maxconn 4"]],
                    ['foo-0', '1.2.3.5', 4242, ["maxconn 4"]]
                    ]
                },
            }
        self.assertEqual(expected, hooks.create_services())
        self.write_service_config.assert_called_with(expected)
Ejemplo n.º 18
0
 def test_relation_unknown_service(self):
     self.get_config_services.return_value = {
         "service": {
             "service_name": "service",
         },
     }
     self.relations_of_type.return_value = [
         {
             "port": 4242,
             "hostname": "backend.1",
             "service_name": "invalid",
             "private-address": "1.2.3.4",
             "__unit__": "foo/0"
         },
     ]
     self.assertIs(None, hooks.create_services())
     self.log.assert_has_calls(
         [call.log("Service 'invalid' does not exist.")])
     self.write_service_config.assert_not_called()