Skip to content
This repository has been archived by the owner on Nov 30, 2022. It is now read-only.

Added fixture to create a new data everytime test runs. #1269

Merged
merged 3 commits into from
Sep 8, 2022
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ The types of changes are:
* Wrap up the email connector - it sends an email with erasure instructions as part of request execution [#1246](https://github.com/ethyca/fidesops/pull/1246)
* Mapping Vault environment variables in docker-compose.yml [#1275](https://github.com/ethyca/fidesops/pull/1275)
* Foundations for a new "manual_webhook" connector type [#1267](https://github.com/ethyca/fidesops/pull/1267)
* Data seeding for Datadog access tests [#1269](https://github.com/ethyca/fidesops/pull/1269)

### Docs

Expand Down
50 changes: 50 additions & 0 deletions tests/ops/fixtures/saas/datadog_fixtures.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import pydash
import pytest
import requests
from fideslib.db import session
from sqlalchemy.orm import Session

Expand All @@ -15,6 +16,7 @@
load_config_with_replacement,
load_dataset_with_replacement,
)
from tests.ops.test_helpers.saas_test_utils import poll_for_existence
from tests.ops.test_helpers.vault_client import get_secrets

secrets = get_secrets("datadog")
Expand Down Expand Up @@ -95,3 +97,51 @@ def datadog_dataset_config(
)
yield dataset
dataset.delete(db=db)


@pytest.fixture(scope="session")
def datadog_access_data(datadog_secrets, datadog_identity_email):

if not _logs_exist(datadog_identity_email, datadog_secrets):
url = "https://http-intake.logs.datadoghq.com/api/v2/logs"
payload = [
{
"ddsource": "nginx",
"ddtags": "env:staging,version:5.1",
"hostname": "i-012345678",
"message": f"2019-11-19T14:37:58,995 INFO [process.name][20081{i}] Hello {datadog_identity_email}",
"service": "payment",
}
for i in range(25)
]
headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"DD-API-KEY": datadog_secrets.get("api_key"),
}
requests.request("POST", url, headers=headers, json=payload)

poll_for_existence(
_logs_exist,
(datadog_identity_email, datadog_secrets),
)


def _logs_exist(datadog_identity_email: str, datadog_secrets):
url = "https://api.datadoghq.com/api/v2/logs/events"
params = {
"filter[from]": 0,
"filter[query]": datadog_identity_email,
"filter[to]": "now",
"page[limit]": 1000,
}
headers = {
"DD-API-KEY": datadog_secrets.get("api_key"),
"DD-APPLICATION-KEY": datadog_secrets.get("app_key"),
}
response = requests.request("GET", url, params=params, headers=headers)

if datadog_identity_email not in response.text:
return None

return response.json()
8 changes: 5 additions & 3 deletions tests/ops/integration_tests/saas/test_datadog_task.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ async def test_saas_access_request_task(
datadog_connection_config,
datadog_dataset_config,
datadog_identity_email,
datadog_access_data,
) -> None:
"""Full access request based on the Datadog SaaS config"""

Expand All @@ -51,9 +52,10 @@ async def test_saas_access_request_task(
{"email": datadog_identity_email},
db,
)
key = f"{dataset_name}:events"

assert_rows_match(
v[f"{dataset_name}:events"],
v[key],
min_size=1,
keys=[
"attributes",
Expand All @@ -62,7 +64,7 @@ async def test_saas_access_request_task(
],
)

for item in v[f"{dataset_name}:events"]:
for item in v[key]:
assert_rows_match(
[item["attributes"]],
min_size=1,
Expand All @@ -74,5 +76,5 @@ async def test_saas_access_request_task(
],
)

for item in v[f"{dataset_name}:events"]:
for item in v[key]:
assert datadog_identity_email in item["attributes"]["message"]