|
4 | 4 | from django.urls import NoReverseMatch, reverse
|
5 | 5 |
|
6 | 6 | from sentry.testutils.helpers.datetime import before_now
|
| 7 | +from tests.sentry.uptime.endpoints.test_base import UptimeResultEAPTestCase |
7 | 8 | from tests.snuba.api.endpoints.test_organization_events_trace import (
|
8 | 9 | OrganizationEventsTraceEndpointBase,
|
9 | 10 | )
|
@@ -61,6 +62,7 @@ def test_bad_ids(self) -> None:
|
61 | 62 | assert data["performance_issues"] == 0
|
62 | 63 | assert data["span_count"] == 0
|
63 | 64 | assert data["span_count_map"] == {}
|
| 65 | + assert "uptime_checks" not in data # Should not be present without include_uptime param |
64 | 66 |
|
65 | 67 | # Invalid trace id
|
66 | 68 | with pytest.raises(NoReverseMatch):
|
@@ -146,3 +148,98 @@ def test_with_invalid_date(self) -> None:
|
146 | 148 | format="json",
|
147 | 149 | )
|
148 | 150 | assert response.status_code == 400, response.content
|
| 151 | + |
| 152 | + |
| 153 | +class OrganizationTraceMetaUptimeTest(OrganizationEventsTraceEndpointBase, UptimeResultEAPTestCase): |
| 154 | + url_name = "sentry-api-0-organization-trace-meta" |
| 155 | + FEATURES = ["organizations:trace-spans-format"] |
| 156 | + |
| 157 | + def create_uptime_check(self, trace_id=None, **kwargs): |
| 158 | + defaults = { |
| 159 | + "trace_id": trace_id or self.trace_id, |
| 160 | + "scheduled_check_time": self.day_ago, |
| 161 | + } |
| 162 | + defaults.update(kwargs) |
| 163 | + return self.create_eap_uptime_result(**defaults) |
| 164 | + |
| 165 | + def test_trace_meta_without_uptime_param(self) -> None: |
| 166 | + """Test that uptime_checks field is NOT present when include_uptime is not set""" |
| 167 | + self.load_trace(is_eap=True) |
| 168 | + uptime_result = self.create_uptime_check() |
| 169 | + self.store_uptime_results([uptime_result]) |
| 170 | + with self.feature(self.FEATURES): |
| 171 | + response = self.client.get( |
| 172 | + self.url, |
| 173 | + data={"project": -1}, |
| 174 | + format="json", |
| 175 | + ) |
| 176 | + |
| 177 | + assert response.status_code == 200 |
| 178 | + data = response.data |
| 179 | + assert "uptime_checks" not in data |
| 180 | + assert data["errors"] == 0 |
| 181 | + assert data["performance_issues"] == 2 |
| 182 | + assert data["span_count"] == 19 |
| 183 | + |
| 184 | + def test_trace_meta_with_uptime_param(self) -> None: |
| 185 | + """Test that uptime_checks shows correct count when include_uptime=1""" |
| 186 | + self.load_trace(is_eap=True) |
| 187 | + |
| 188 | + uptime_results = [ |
| 189 | + self.create_uptime_check(check_status="success"), |
| 190 | + self.create_uptime_check(check_status="failure"), |
| 191 | + self.create_uptime_check(check_status="success"), |
| 192 | + ] |
| 193 | + self.store_uptime_results(uptime_results) |
| 194 | + |
| 195 | + with self.feature(self.FEATURES): |
| 196 | + response = self.client.get( |
| 197 | + self.url, |
| 198 | + data={"project": "-1", "include_uptime": "1"}, |
| 199 | + format="json", |
| 200 | + ) |
| 201 | + |
| 202 | + assert response.status_code == 200 |
| 203 | + data = response.data |
| 204 | + assert "uptime_checks" in data |
| 205 | + assert data["uptime_checks"] == 3 |
| 206 | + assert data["errors"] == 0 |
| 207 | + assert data["performance_issues"] == 2 |
| 208 | + assert data["span_count"] == 19 |
| 209 | + |
| 210 | + def test_trace_meta_no_uptime_results(self) -> None: |
| 211 | + """Test that uptime_checks is 0 when there are no uptime results""" |
| 212 | + self.load_trace(is_eap=True) |
| 213 | + |
| 214 | + with self.feature(self.FEATURES): |
| 215 | + response = self.client.get( |
| 216 | + self.url, |
| 217 | + data={"project": "-1", "include_uptime": "1"}, |
| 218 | + format="json", |
| 219 | + ) |
| 220 | + |
| 221 | + assert response.status_code == 200 |
| 222 | + data = response.data |
| 223 | + assert "uptime_checks" in data |
| 224 | + assert data["uptime_checks"] == 0 |
| 225 | + assert data["errors"] == 0 |
| 226 | + assert data["performance_issues"] == 2 |
| 227 | + assert data["span_count"] == 19 |
| 228 | + |
| 229 | + def test_trace_meta_different_trace_id(self) -> None: |
| 230 | + """Test that uptime results from different traces are not counted""" |
| 231 | + self.load_trace(is_eap=True) |
| 232 | + other_trace_id = uuid4().hex |
| 233 | + uptime_result = self.create_uptime_check(trace_id=other_trace_id) |
| 234 | + self.store_uptime_results([uptime_result]) |
| 235 | + |
| 236 | + with self.feature(self.FEATURES): |
| 237 | + response = self.client.get( |
| 238 | + self.url, |
| 239 | + data={"project": "-1", "include_uptime": "1"}, |
| 240 | + format="json", |
| 241 | + ) |
| 242 | + assert response.status_code == 200 |
| 243 | + data = response.data |
| 244 | + assert "uptime_checks" in data |
| 245 | + assert data["uptime_checks"] == 0 |
0 commit comments