def test_get_load_balancer_configuration(self, mocks): """ Test that the load balancer configuration gets generated correctly. """ instance = OpenEdXInstanceFactory(sub_domain='test.load_balancer', use_ephemeral_databases=True) domain_names = [ "test.load_balancer.example.com", "preview-test.load_balancer.example.com", "studio-test.load_balancer.example.com", ] # Test configuration for preliminary page backend_map, config = instance.get_load_balancer_configuration() self._check_load_balancer_configuration( backend_map, config, domain_names, settings.PRELIMINARY_PAGE_SERVER_IP ) # Test configuration for active appserver appserver_id = instance.spawn_appserver() instance.set_appserver_active(appserver_id) backend_map, config = instance.get_load_balancer_configuration() self._check_load_balancer_configuration( backend_map, config, domain_names, instance.active_appserver.server.public_ip ) # Test configuration in case an active appserver doesn't have a public IP address anymore. # This might happen if the OpenStack server dies or gets modified from the outside, but it # is not expected to happen under normal circumstances. We deconfigure the backend and log # an error in this case. with patch('instance.openstack.get_server_public_address', return_value=None), \ self.assertLogs("instance.models.instance", "ERROR"): self.assertEqual(instance.get_load_balancer_configuration(), ([], []))
def test_set_appserver_active(self, mocks, mock_enable_monitoring): """ Check that monitoring is enabled when an appserver is activated. """ instance = OpenEdXInstanceFactory() appserver_id = instance.spawn_appserver() instance.set_appserver_active(appserver_id) self.assertEqual(mock_enable_monitoring.call_count, 1)
def test_reconfigure_load_balancer(self, mock_run_playbook): """ Test that reconfigure_load_balancer reconfigures the load balancer and logs to the instance. """ instance = OpenEdXInstanceFactory(sub_domain='test.load_balancer') appserver_id = instance.spawn_appserver() instance.set_appserver_active(appserver_id) with self.assertLogs("instance.models.instance") as logs: instance.reconfigure_load_balancer() annotation = instance.get_log_message_annotation() for log_line in logs.output: self.assertIn(annotation, log_line) self.assertEqual(len(logs.output), 2) self.assertIn("Triggering reconfiguration of the load balancing server", logs.output[0]) self.assertIn("New load-balancer configuration", logs.output[1])
def test_set_appserver_active(self, mocks): """ Test set_appserver_active() """ instance = OpenEdXInstanceFactory(internal_lms_domain='test.activate.opencraft.co.uk', use_ephemeral_databases=True) appserver_id = instance.spawn_appserver() instance.set_appserver_active(appserver_id) instance.refresh_from_db() self.assertEqual(instance.active_appserver.pk, appserver_id) self.assertEqual(mocks.mock_load_balancer_run_playbook.call_count, 2) instance.set_appserver_inactive() instance.refresh_from_db() self.assertIsNone(instance.active_appserver) self.assertEqual(mocks.mock_load_balancer_run_playbook.call_count, 3)