Example #1
0
class LoadBalancingServerTest(TestCase):
    """
    Test cases for the LoadBalancingServer model.
    """
    def setUp(self):
        self.load_balancer = LoadBalancingServerFactory()

    def test_get_configuration(self):
        """
        Test that the configuration gets rendered correctly.
        """
        with mock_instances():
            backend_map, backend_conf = self.load_balancer.get_configuration()
            self.assertCountEqual(
                [line for line in backend_map.splitlines(False) if line],
                [
                    "test1.lb.opencraft.hosting first-backend" + self.load_balancer.fragment_name_postfix,
                    "test2.lb.opencraft.hosting first-backend" + self.load_balancer.fragment_name_postfix,
                    "test3.lb.opencraft.hosting second-backend" + self.load_balancer.fragment_name_postfix,
                ],
            )
            backends = [match.group(1) for match in re.finditer(r"^backend (\S*)", backend_conf, re.MULTILINE)]
            self.assertCountEqual(backends, [
                "first-backend" + self.load_balancer.fragment_name_postfix,
                "second-backend" + self.load_balancer.fragment_name_postfix,
            ])

    @patch("instance.ansible.poll_streams")
    @patch("instance.ansible.run_playbook")
    def test_reconfigure(self, mock_run_playbook, mock_poll_streams):
        """
        Test that the reconfigure() method triggers a playbook run.
        """
        mock_run_playbook.return_value.__enter__.return_value.returncode = 0
        with mock_instances():
            self.load_balancer.reconfigure()
            self.assertEqual(mock_run_playbook.call_count, 1)
            self.load_balancer.delete()
            self.assertEqual(mock_run_playbook.call_count, 2)

    @patch("instance.ansible.poll_streams")
    @patch("instance.ansible.run_playbook")
    def test_reconfigure_fails(self, mock_run_playbook, mock_poll_streams):
        """
        Test that the reconfigure() method raises an exception if the playbook fails.
        """
        mock_run_playbook.return_value.__enter__.return_value.returncode = 1
        with mock_instances(), self.assertRaises(ReconfigurationFailed):
            self.load_balancer.reconfigure()

    @patch("instance.ansible.poll_streams")
    @patch("instance.ansible.run_playbook")
    def test_deconfigure(self, mock_run_playbook, mock_poll_streams):
        """
        Test that the deconfigure() method triggers a playbook run.
        """
        mock_run_playbook.return_value.__enter__.return_value.returncode = 0
        with mock_instances():
            self.load_balancer.deconfigure()
            self.assertEqual(mock_run_playbook.call_count, 1)
Example #2
0
    def test_reconfigure_dirty_load_balancers(self, mock_reconfigure):
        """
        `reconfigure_dirty_load_balancers` calls `reconfigure` on all dirty load balancers, and no others.
        """
        # Dirty load balancers.
        for dummy in range(3):
            LoadBalancingServerFactory(configuration_version=10, deployed_configuration_version=1)

        # This is impossible.
        LoadBalancingServerFactory(configuration_version=1, deployed_configuration_version=10)
        # Clean load balancer.
        LoadBalancingServerFactory(configuration_version=2, deployed_configuration_version=2)

        tasks.reconfigure_dirty_load_balancers()
        self.assertEqual(mock_reconfigure.call_count, 3)
Example #3
0
 def setUp(self):
     self.load_balancer = LoadBalancingServerFactory()
Example #4
0
class LoadBalancingServerTest(TestCase):
    """
    Test cases for the LoadBalancingServer model.
    """

    def setUp(self):
        self.load_balancer = LoadBalancingServerFactory()

    @patch('instance.models.load_balancer.LoadBalancingServer.get_instances', return_value=mock_instances())
    @override_settings(DISABLE_LOAD_BALANCER_CONFIGURATION=False)
    def test_get_configuration(self, mock_get_instances):
        """
        Test that the configuration gets rendered correctly.
        """
        backend_map, backend_conf = self.load_balancer.get_configuration()
        self.assertCountEqual(
            [line for line in backend_map.splitlines(False) if line],
            [
                "test1.lb.opencraft.hosting first-backend" + self.load_balancer.fragment_name_postfix,
                "test2.lb.opencraft.hosting first-backend" + self.load_balancer.fragment_name_postfix,
                "test3.lb.opencraft.hosting second-backend" + self.load_balancer.fragment_name_postfix,
            ],
        )
        backends = [match.group(1) for match in re.finditer(r"^backend (\S*)", backend_conf, re.MULTILINE)]
        self.assertCountEqual(backends, [
            "first-backend" + self.load_balancer.fragment_name_postfix,
            "second-backend" + self.load_balancer.fragment_name_postfix,
        ])

    @patch("instance.ansible.poll_streams")
    @patch("instance.ansible.run_playbook")
    @patch('instance.models.load_balancer.LoadBalancingServer.get_instances', return_value=mock_instances())
    def test_reconfigure(self, mock_get_instances, mock_run_playbook, mock_poll_streams):
        """
        Test that the reconfigure() method triggers a playbook run.
        """
        mock_run_playbook.return_value.__enter__.return_value.returncode = 0
        self.load_balancer.reconfigure()
        self.assertEqual(mock_run_playbook.call_count, 1)
        self.assertEqual(self.load_balancer.configuration_version, 2)
        self.assertEqual(self.load_balancer.deployed_configuration_version, 2)
        self.load_balancer.delete()
        self.assertEqual(mock_run_playbook.call_count, 2)

    @patch("instance.ansible.poll_streams")
    @patch("instance.ansible.run_playbook")
    @patch('instance.models.load_balancer.LoadBalancingServer.get_instances', return_value=mock_instances())
    @override_settings(DISABLE_LOAD_BALANCER_CONFIGURATION=False)
    def test_reconfigure_fails(self, mock_get_instances, mock_run_playbook, mock_poll_streams):
        """
        Test that the reconfigure() method gives us a dirty LB if the playbook fails.
        """
        with self.assertRaises(ReconfigurationFailed):
            mock_run_playbook.return_value.__enter__.return_value.returncode = 1
            self.load_balancer.reconfigure()
            self.assertEqual(self.load_balancer.configuration_version, 2)
            self.assertEqual(self.load_balancer.deployed_configuration_version, 1)

    @patch("instance.ansible.poll_streams")
    @patch("instance.ansible.run_playbook")
    @patch('instance.models.load_balancer.LoadBalancingServer.get_instances', return_value=mock_instances())
    @override_settings(DISABLE_LOAD_BALANCER_CONFIGURATION=False)
    def test_deconfigure(self, mock_get_instances, mock_run_playbook, mock_poll_streams):
        """
        Test that the deconfigure() method triggers a playbook run.
        """
        mock_run_playbook.return_value.__enter__.return_value.returncode = 0
        self.load_balancer.deconfigure()
        self.assertEqual(mock_run_playbook.call_count, 1)
 def setUp(self):
     self.load_balancer = LoadBalancingServerFactory()