def test_get_space_name(http_mock, _, __, ___, instance, space_v2, space_v3): check = CloudFoundryApiCheck('cloud_foundry_api', {}, [instance]) with mock.patch.object(check, "get_oauth_token"), mock.patch.object( check, "log") as log_mock: # Cache access assert check._spaces["space_guid"] == "space_name" assert check.get_space_name("space_guid") == "space_name" http_mock.get.assert_not_called() # Cache miss # v2 http_mock.get.return_value = mock.MagicMock(json=mock.MagicMock( return_value=space_v2)) check._api_version = "v2" assert check.get_space_name("new_id") == "space_1" assert check._spaces["new_id"] == "space_1" http_mock.get.assert_called_once_with( "https://api.sys.domain.com/v2/spaces/new_id", headers={"Authorization": "Bearer {}".format(check._oauth_token)}, ) # v3 http_mock.get.reset_mock() http_mock.get.return_value = mock.MagicMock(json=mock.MagicMock( return_value=space_v3)) check._api_version = "v3" assert check.get_space_name("new_id_2") == "space_1" assert check._spaces["new_id_2"] == "space_1" http_mock.get.assert_called_once_with( "https://api.sys.domain.com/v3/spaces/new_id_2", headers={"Authorization": "Bearer {}".format(check._oauth_token)}, ) # Error http_mock.get.side_effect = RequestException assert check.get_space_name("id_error") is None log_mock.exception.assert_called_once()
def test_get_spaces(_, __, instance, spaces_v2_p1, spaces_v2_p2, spaces_v3_p1, spaces_v3_p2): expected_spaces = { "417b893e-291e-48ec-94c7-7b2348604365": "space_1", "1b8dcf2e-ed92-4daa-b9fb-0fa5a97b9289": "space_2", "d5d005a4-0320-4daa-ac0a-81f8dcd00fe0": "space_3", "8c7e64bb-0bf8-4a7a-92e1-2fe06e7ec793": "space_4", } with mock.patch.object(CloudFoundryApiCheck, "scroll_api_pages", return_value=[spaces_v2_p1, spaces_v2_p2]), mock.patch.object( CloudFoundryApiCheck, "get_oauth_token"): check = CloudFoundryApiCheck('cloud_foundry_api', {}, [instance]) check._api_version = "v2" assert check.get_spaces() == expected_spaces with mock.patch.object(CloudFoundryApiCheck, "scroll_api_pages", return_value=[spaces_v3_p1, spaces_v3_p2]), mock.patch.object( CloudFoundryApiCheck, "get_oauth_token"): check = CloudFoundryApiCheck('cloud_foundry_api', {}, [instance]) check._api_version = "v3" assert check.get_spaces() == expected_spaces
def test_get_orgs(_, __, instance, orgs_v2_p1, orgs_v2_p2, orgs_v3_p1, orgs_v3_p2): expected_orgs = { "671557cf-edcd-49df-9863-ee14513d13c7": "org_1", "8c19a50e-7974-4c67-adea-9640fae21526": "org_2", "321c58b0-777b-472f-812e-c08c53817074": "org_3", "0ba4c8cb-9e71-4d6e-b6ff-74e301ed6467": "org_4", } with mock.patch.object(CloudFoundryApiCheck, "scroll_api_pages", return_value=[orgs_v2_p1, orgs_v2_p2]), mock.patch.object( CloudFoundryApiCheck, "get_oauth_token"): check = CloudFoundryApiCheck('cloud_foundry_api', {}, [instance]) check._api_version = "v2" assert check.get_orgs() == expected_orgs with mock.patch.object(CloudFoundryApiCheck, "scroll_api_pages", return_value=[orgs_v3_p1, orgs_v3_p2]), mock.patch.object( CloudFoundryApiCheck, "get_oauth_token"): check = CloudFoundryApiCheck('cloud_foundry_api', {}, [instance]) check._api_version = "v3" assert check.get_orgs() == expected_orgs
def test_get_events(_, __, ___, instance, dd_events): scroll_events_mock = mock.MagicMock(return_value=dd_events) with mock.patch.object(CloudFoundryApiCheck, "scroll_events", scroll_events_mock), mock.patch.object( CloudFoundryApiCheck, "get_oauth_token" ) as get_oauth_token_mock: check_v2 = CloudFoundryApiCheck('cloud_foundry_api', {}, [instance]) check_v2._api_version = "v2" check_v3 = CloudFoundryApiCheck('cloud_foundry_api', {}, [instance]) check_v3._api_version = "v3" def side_effect(): check_v2._oauth_token = "oauth_token_v2" check_v3._oauth_token = "oauth_token_v3" get_oauth_token_mock.side_effect = side_effect events_v2 = check_v2.get_events() assert events_v2 == dd_events scroll_events_mock.assert_called_once_with( "https://api.sys.domain.com/v2/events", {"q": "type IN audit1,audit2", "results-per-page": 45, "order-by": "timestamp", "order-direction": "desc"}, {"Authorization": "Bearer oauth_token_v2"}, ) scroll_events_mock.reset_mock() events_v3 = check_v3.get_events() assert events_v3 == dd_events scroll_events_mock.assert_called_once_with( "https://api.sys.domain.com/v3/audit_events", {"types": "audit1,audit2", "per_page": 45, "order_by": "-created_at"}, {"Authorization": "Bearer oauth_token_v3"}, )
def test_parse_event(build_dd_event_mock, _, __, ___, ____, event_v2, event_v3, instance): check = CloudFoundryApiCheck('cloud_foundry_api', {}, [instance]) # v2 check._api_version = "v2" _, event_guid, event_ts = check.parse_event(event_v2) assert event_guid == "event_guid" assert event_ts == FREEZE_TIME build_dd_event_mock.assert_called_once_with( "event_type", "event_guid", FREEZE_TIME, "actor_type", "actor_name", "actor_guid", "target_type", "target_name", "target_guid", "space_guid", "org_guid", {"some": "metadata"}, ) # v3 check._api_version = "v3" build_dd_event_mock.reset_mock() _, event_guid, event_ts = check.parse_event(event_v3) assert event_guid == "event_guid" assert event_ts == FREEZE_TIME build_dd_event_mock.assert_called_once_with( "event_type", "event_guid", FREEZE_TIME, "actor_type", "actor_name", "actor_guid", "target_type", "target_name", "target_guid", "space_guid", "org_guid", {"some": "metadata"}, )