def test_should_load_backend_statuses_from_varnish_4_1(self): varnish_api_mock = Mock() varnish_api_mock.fetch.return_value = (None, BACKEND_LIST_RAW_RESPONSE_V4_1) varnish_api_provider_mock = Mock() varnish_api_provider_mock.get_connected_varnish_api.return_value = iter([varnish_api_mock]) with patch('vaas.monitor.health.VarnishApiProvider', return_value=varnish_api_provider_mock): assert_equals(EXPECTED_BACKEND_TO_STATUS_MAP, BackendStatusManager().load_from_varnish())
def test_should_store_backend_statuses(self): backend_to_status_map = { '192.168.199.11:80': 'Sick', '192.168.199.12:80': 'Healthy' } BackendStatusManager().store_backend_statuses(backend_to_status_map) statuses = BackendStatus.objects.all() assert_equals(2, len(statuses)) self.assert_status('192.168.199.11', 80, 'Sick', statuses[0]) self.assert_status('192.168.199.12', 80, 'Healthy', statuses[1])
def test_should_refresh_backend_statuses(self): backend_to_status_map = { '192.168.199.11:80': 'Sick', '192.168.199.12:80': 'Healthy' } with patch('vaas.monitor.health.BackendStatusManager.load_from_varnish', return_value=backend_to_status_map): BackendStatusManager().refresh_statuses() statuses = BackendStatus.objects.all() assert_equals(2, len(statuses)) self.assert_status('192.168.199.11', 80, 'Sick', statuses[0]) self.assert_status('192.168.199.12', 80, 'Healthy', statuses[1])
def _generic_load_backend_statuses_from_varnish(self, backend_list_response, expected_result): timeout = 0.1 varnish_server_mock = Mock() varnish_api_mock = Mock() varnish_api_mock.fetch.return_value = (None, backend_list_response) varnish_api_provider_mock = Mock() varnish_api_provider_mock.get_api.return_value = varnish_api_mock assert_equals( expected_result, BackendStatusManager(varnish_api_provider_mock, [varnish_server_mock], timeout).load_from_varnish() ) varnish_api_provider_mock.get_api.assert_called_once_with(varnish_server_mock, timeout)
def test_should_merge_backend_statuses_from_multiple_varnishes(self): timeout = 0.1 servers = { 'first': Mock(fetch=Mock(return_value=(None, BACKEND_LIST_RAW_RESPONSE_V4_1))), 'second': Mock(fetch=Mock(return_value=(None, BACKEND_LIST_RAW_RESPONSE_V6))) } varnish_api_provider_mock = Mock() varnish_api_provider_mock.get_api = Mock(side_effect=lambda s, _: servers[s]) assert_equals( EXPECTED_MERGED_STATUS_MAP, BackendStatusManager(varnish_api_provider_mock, servers.keys(), timeout).load_from_varnish() )
def test_should_load_backend_statuses_from_varnish(self): backend_list_raw_response = 'Backend name Refs Admin Probe\n' backend_list_raw_response += 'default(127.0.0.1,,80) 1 probe Sick (no probe)\n' backend_list_raw_response += 'default(127.0.0.4,,80) 1 probe Healthy (no probe)\n' varnish_api_mock = Mock() varnish_api_mock.fetch.return_value = (None, backend_list_raw_response) varnish_api_provider_mock = Mock() varnish_api_provider_mock.get_varnish_api.return_value = iter( [varnish_api_mock]) expected_backend_to_status_map = { '127.0.0.1:80': 'Sick', '127.0.0.4:80': 'Healthy' } with patch('vaas.monitor.health.VarnishApiProvider', return_value=varnish_api_provider_mock): assert_equals(expected_backend_to_status_map, BackendStatusManager().load_from_varnish())
def handle(self, *args, **options): BackendStatusManager().refresh_statuses()