|
@@ -4,7 +4,6 @@ from unittest import mock
|
|
|
|
|
|
from django.urls import reverse
|
|
|
from django.utils import timezone
|
|
|
-from freezegun import freeze_time
|
|
|
|
|
|
from sentry.testutils import APITestCase
|
|
|
from sentry.testutils.helpers import Feature
|
|
@@ -211,27 +210,80 @@ class OrganizationDynamicSamplingSDKVersionsTest(APITestCase):
|
|
|
user = self.create_user("foo@example.com")
|
|
|
self.login_as(user)
|
|
|
with Feature({"organizations:server-side-sampling": True}):
|
|
|
- response = self.client.get(f"{self.endpoint}?project={self.project.id}")
|
|
|
+ response = self.client.get(
|
|
|
+ f"{self.endpoint}?project={self.project.id}&"
|
|
|
+ f"start=2022-08-06T00:02:00+00:00&"
|
|
|
+ f"end=2022-08-07T00:00:02+00:00"
|
|
|
+ )
|
|
|
assert response.status_code == 403
|
|
|
|
|
|
def test_feature_flag_disabled(self):
|
|
|
self.login_as(self.user)
|
|
|
- response = self.client.get(self.endpoint)
|
|
|
+ response = self.client.get(
|
|
|
+ f"{self.endpoint}?project={self.project.id}&"
|
|
|
+ f"start=2022-08-06T00:02:00+00:00&"
|
|
|
+ f"end=2022-08-07T00:00:02+00:00"
|
|
|
+ )
|
|
|
assert response.status_code == 404
|
|
|
|
|
|
def test_no_project_ids_filter_requested(self):
|
|
|
self.login_as(self.user)
|
|
|
with Feature({"organizations:server-side-sampling": True}):
|
|
|
- response = self.client.get(self.endpoint)
|
|
|
+ response = self.client.get(
|
|
|
+ f"{self.endpoint}?"
|
|
|
+ f"start=2022-08-06T00:02:00+00:00&"
|
|
|
+ f"end=2022-08-07T00:00:02+00:00"
|
|
|
+ )
|
|
|
assert response.status_code == 200
|
|
|
assert response.data == []
|
|
|
|
|
|
+ def test_no_query_start_or_no_query_end(self):
|
|
|
+ self.login_as(self.user)
|
|
|
+ with Feature({"organizations:server-side-sampling": True}):
|
|
|
+ response = self.client.get(
|
|
|
+ f"{self.endpoint}?project={self.project.id}&end=2022-08-07T00:00:02+00:00"
|
|
|
+ )
|
|
|
+ assert response.status_code == 400
|
|
|
+ assert response.json()["detail"] == "'start' and 'end' are required"
|
|
|
+
|
|
|
+ response = self.client.get(
|
|
|
+ f"{self.endpoint}?project={self.project.id}&start=2022-08-06T00:02:00+00:00"
|
|
|
+ )
|
|
|
+ assert response.status_code == 400
|
|
|
+ assert response.json()["detail"] == "'start' and 'end' are required"
|
|
|
+
|
|
|
+ def test_query_start_is_before_query_end(self):
|
|
|
+ self.login_as(self.user)
|
|
|
+ with Feature({"organizations:server-side-sampling": True}):
|
|
|
+ response = self.client.get(
|
|
|
+ f"{self.endpoint}?project="
|
|
|
+ f"{self.project.id}&start=2022-08-10T00:02:00+00:00&end=2022-08-07T00:00:02+00:00"
|
|
|
+ )
|
|
|
+ assert response.status_code == 400
|
|
|
+ assert response.json()["detail"] == "'start' has to be before 'end'"
|
|
|
+
|
|
|
+ def test_query_start_and_query_end_are_atmost_one_day_apart(self):
|
|
|
+ self.login_as(self.user)
|
|
|
+ with Feature({"organizations:server-side-sampling": True}):
|
|
|
+ response = self.client.get(
|
|
|
+ f"{self.endpoint}?project="
|
|
|
+ f"{self.project.id}&start=2022-08-05T00:02:00+00:00&end=2022-08-07T00:00:02+00:00"
|
|
|
+ )
|
|
|
+ assert response.status_code == 400
|
|
|
+ assert (
|
|
|
+ response.json()["detail"] == "'start' and 'end' have to be a maximum of 1 day apart"
|
|
|
+ )
|
|
|
+
|
|
|
@mock.patch("sentry.api.endpoints.organization_dynamic_sampling_sdk_versions.discover.query")
|
|
|
def test_successful_response(self, mock_query):
|
|
|
self.login_as(self.user)
|
|
|
mock_query.return_value = mocked_discover_query()
|
|
|
with Feature({"organizations:server-side-sampling": True}):
|
|
|
- response = self.client.get(f"{self.endpoint}?project={self.project.id}")
|
|
|
+ response = self.client.get(
|
|
|
+ f"{self.endpoint}?project={self.project.id}&"
|
|
|
+ f"start=2022-08-06T00:02:00+00:00&"
|
|
|
+ f"end=2022-08-07T00:00:02+00:00"
|
|
|
+ )
|
|
|
assert response.json() == [
|
|
|
{
|
|
|
"project": "wind",
|
|
@@ -288,17 +340,20 @@ class OrganizationDynamicSamplingSDKVersionsTest(APITestCase):
|
|
|
self.login_as(self.user)
|
|
|
mock_query.return_value = {"data": []}
|
|
|
with Feature({"organizations:server-side-sampling": True}):
|
|
|
- response = self.client.get(f"{self.endpoint}?project={self.project.id}")
|
|
|
+ response = self.client.get(
|
|
|
+ f"{self.endpoint}?project={self.project.id}&"
|
|
|
+ f"start=2022-08-06T00:02:00+00:00&"
|
|
|
+ f"end=2022-08-07T00:00:02+00:00"
|
|
|
+ )
|
|
|
assert response.json() == []
|
|
|
|
|
|
- @freeze_time("2022-07-07 03:21:34")
|
|
|
@mock.patch("sentry.api.endpoints.organization_dynamic_sampling_sdk_versions.discover.query")
|
|
|
def test_request_params_are_applied_to_discover_query(self, mock_query):
|
|
|
self.login_as(self.user)
|
|
|
mock_query.return_value = mocked_discover_query()
|
|
|
|
|
|
- end_time = datetime.datetime(2022, 7, 7, 3, 20, 0, tzinfo=timezone.utc)
|
|
|
- start_time = end_time - timedelta(hours=6)
|
|
|
+ end_time = datetime.datetime(2022, 8, 7, 0, 0, 0, tzinfo=timezone.utc)
|
|
|
+ start_time = end_time - timedelta(hours=24)
|
|
|
|
|
|
calls = [
|
|
|
mock.call(
|
|
@@ -334,6 +389,10 @@ class OrganizationDynamicSamplingSDKVersionsTest(APITestCase):
|
|
|
]
|
|
|
|
|
|
with Feature({"organizations:server-side-sampling": True}):
|
|
|
- response = self.client.get(f"{self.endpoint}?project={self.project.id}&statsPeriod=6h")
|
|
|
+ response = self.client.get(
|
|
|
+ f"{self.endpoint}?project={self.project.id}&"
|
|
|
+ f"start=2022-08-06T00:02:00+00:00&"
|
|
|
+ f"end=2022-08-07T00:00:02+00:00"
|
|
|
+ )
|
|
|
assert response.status_code == 200
|
|
|
assert mock_query.mock_calls == calls
|