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)
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)
def setUp(self): self.load_balancer = LoadBalancingServerFactory()
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)