1
0
mirror of synced 2026-01-10 09:04:48 -05:00
Files
airbyte/airbyte-integrations/connectors/source-datadog/unit_tests/test_streams.py
Mal Hancock 9641d33773 Source Datadog: Multiple query streams and datadog site parameter (#27804)
* Source Datadog - Multiple query streams

* Source Datadog - Multiple query streams

* Source Datadog - Multiple query streams

* Source Datadog - Start date changes

* Source Datadog - Query date changes

* Source Datadog - Docs update

* Source Datadog - Review comment changes

* Source Datadog - Review comment changes

* formatting fixes

---------

Co-authored-by: richa-rochna <rochna.richa@gmail.com>
Co-authored-by: richar_backbase <richar@backbase.com>
Co-authored-by: Richa Rochna <99747757+richa-rochna@users.noreply.github.com>
2023-06-28 10:57:57 -07:00

206 lines
6.2 KiB
Python

#
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
#
import json
from unittest.mock import MagicMock, patch
import pytest
import requests
import requests_mock as req_mock
from airbyte_cdk.models import SyncMode
from source_datadog.source import SourceDatadog
from source_datadog.streams import (
AuditLogs,
Dashboards,
DatadogStream,
Downtimes,
Incidents,
IncidentTeams,
Logs,
Metrics,
SeriesStream,
SyntheticTests,
Users,
)
@pytest.mark.parametrize(
"stream",
[AuditLogs, Dashboards, Downtimes, Incidents, IncidentTeams, Logs, Metrics, SyntheticTests, Users],
)
def test_task_stream(requests_mock, stream, config, mock_responses):
requests_mock.get(req_mock.ANY, json=mock_responses.get(stream.__name__))
requests_mock.post(req_mock.ANY, json=mock_responses.get(stream.__name__))
args = SourceDatadog().connector_config(config)
instance = stream(**args)
stream_slice = instance.stream_slices(sync_mode=SyncMode.full_refresh)
record = next(instance.read_records(sync_mode=SyncMode.full_refresh, stream_slice=stream_slice))
assert record
@patch.multiple(DatadogStream, __abstractmethods__=set())
def test_next_page_token(config):
stream = DatadogStream(
site=config["site"],
query=config["query"],
max_records_per_request=config["max_records_per_request"],
start_date=config["start_date"],
end_date=config["end_date"],
query_start_date=config["start_date"],
query_end_date=config["end_date"],
)
inputs = {"response": MagicMock()}
assert stream.next_page_token(**inputs) is None
def test_site_config(config):
assert config['site'] == 'datadoghq.com'
def test_site_config_eu(config_eu):
assert config_eu['site'] == 'datadoghq.eu'
@pytest.mark.parametrize(
"stream",
[AuditLogs, Dashboards, Downtimes, Incidents, IncidentTeams, Logs, Metrics, SyntheticTests, Users],
)
def test_next_page_token_empty_response(stream, config):
expected_token = None
args = SourceDatadog().connector_config(config)
instance = stream(**args)
response = requests.Response()
response._content = json.dumps({}).encode("utf-8")
assert instance.next_page_token(response=response) == expected_token
@pytest.mark.parametrize(
"stream",
[AuditLogs, Logs],
)
def test_next_page_token_inc(stream, config):
args = SourceDatadog().connector_config(config)
instance = stream(**args)
response = requests.Response()
body_content = {"meta": {"page": {"after": "test_cursor"}}}
response._content = json.dumps(body_content).encode("utf-8")
result = instance.next_page_token(response=response)
assert result.get("page").get("cursor") == "test_cursor"
@pytest.mark.parametrize(
"stream",
[Incidents, IncidentTeams],
)
def test_next_page_token_paginated(stream, config):
args = SourceDatadog().connector_config(config)
instance = stream(**args)
response = requests.Response()
body_content = {
"meta": {
"pagination": {
"offset": 998,
"next_offset": 999,
}
}
}
response._content = json.dumps(body_content).encode("utf-8")
result = instance.next_page_token(response=response)
assert result.get("offset") == 999
@patch.multiple(DatadogStream, __abstractmethods__=set())
def test_site_parameter_is_set(config):
site = "example.com"
stream = DatadogStream(
site=site,
query=config["query"],
max_records_per_request=config["max_records_per_request"],
start_date=config["start_date"],
end_date=config["end_date"],
query_start_date=config["start_date"],
query_end_date=config["end_date"],
)
url_base = stream.url_base
expected_url_base = f"https://api.{site}/api"
assert url_base == expected_url_base
@patch.multiple(DatadogStream, __abstractmethods__=set())
def test_site_parameter_is_not_set(config):
stream = DatadogStream(
site=config["site"],
query=config["query"],
max_records_per_request=config["max_records_per_request"],
start_date=config["start_date"],
end_date=config["end_date"],
query_start_date=config["start_date"],
query_end_date=config["end_date"],
)
url_base = stream.url_base
expected_url_base = "https://api.datadoghq.com/api"
assert url_base == expected_url_base
@patch.multiple(SeriesStream, __abstractmethods__=set())
def test_request_body_json(config):
stream = SeriesStream(
site=config["site"],
query=config["query"],
max_records_per_request=config["max_records_per_request"],
start_date=config["start_date"],
end_date=config["end_date"],
query_start_date="2023-01-01T00:00:00Z",
query_end_date="2023-02-01T00:00:00Z",
name="test_stream",
data_source="metrics",
query_string="test_query"
)
stream_state = {
"stream_state_key": "value"
}
expected_payload = {
"data": {
"type": "timeseries_request",
"attributes": {
"to": 1675209600000,
"from": 1672531200000,
"queries": [
{
"data_source": "metrics",
"query": "test_query",
"name": "test_stream"
}
]
}
}
}
payload = stream.request_body_json(stream_state)
assert payload == expected_payload
@patch.multiple(SeriesStream, __abstractmethods__=set())
def test_get_json_schema(config):
stream = SeriesStream(
site=config["site"],
query=config["query"],
max_records_per_request=config["max_records_per_request"],
start_date=config["start_date"],
end_date=config["end_date"],
query_start_date=config["start_date"],
query_end_date=config["end_date"],
name="test_stream",
data_source="metrics",
query_string="test_query"
)
expected_schema = {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {},
"additionalProperties": True
}
assert stream.get_json_schema() == expected_schema