Skip to content

Commit 7d38259

Browse files
authored
test(relay): Use normalize_project_config (#70230)
Bump relay library version and use `normalize_project_config` instead of `validate_project_config` for more flexibility.
1 parent 3e90887 commit 7d38259

File tree

7 files changed

+49
-30
lines changed

7 files changed

+49
-30
lines changed

requirements-base.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ sentry-arroyo>=2.16.5
6666
sentry-kafka-schemas>=0.1.79
6767
sentry-ophio==0.2.7
6868
sentry-redis-tools>=0.1.7
69-
sentry-relay>=0.8.58
69+
sentry-relay>=0.8.60
7070
sentry-sdk==2.0.0
7171
snuba-sdk>=2.0.32
7272
simplejson>=3.17.6

requirements-dev-frozen.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ sentry-forked-djangorestframework-stubs==3.14.5.post1
183183
sentry-kafka-schemas==0.1.79
184184
sentry-ophio==0.2.7
185185
sentry-redis-tools==0.1.7
186-
sentry-relay==0.8.58
186+
sentry-relay==0.8.60
187187
sentry-sdk==2.0.0
188188
sentry-usage-accountant==0.0.10
189189
simplejson==3.17.6

requirements-frozen.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ sentry-arroyo==2.16.5
123123
sentry-kafka-schemas==0.1.79
124124
sentry-ophio==0.2.7
125125
sentry-redis-tools==0.1.7
126-
sentry-relay==0.8.58
126+
sentry-relay==0.8.60
127127
sentry-sdk==2.0.0
128128
sentry-usage-accountant==0.0.10
129129
simplejson==3.17.6

src/sentry/testutils/pytest/fixtures.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,6 @@ def dyn_sampling_data():
262262
# return a function that returns fresh config so we don't accidentally get tests interfering with each other
263263
def inner(active=True):
264264
return {
265-
"mode": "total",
266265
"rules": [
267266
{
268267
"sampleRate": 0.7,

tests/sentry/api/endpoints/test_relay_globalconfig_v3.py

Lines changed: 32 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from sentry_relay.processing import normalize_global_config
66

77
from sentry.relay.globalconfig import get_global_config
8+
from sentry.testutils.helpers.options import override_options
89
from sentry.testutils.pytest.fixtures import django_db_all
910
from sentry.utils import json
1011

@@ -31,24 +32,39 @@ def inner(version, global_):
3132

3233

3334
@pytest.mark.django_db
35+
@override_options(
36+
{
37+
# Set options to Relay's non-default values to avoid Relay skipping deserialization
38+
"relay.cardinality-limiter.error-sample-rate": 1.0,
39+
"relay.metric-stats.rollout-rate": 0.5,
40+
"feedback.ingest-topic.rollout-rate": 0.5,
41+
"profiling.profile_metrics.unsampled_profiles.enabled": True,
42+
"profiling.profile_metrics.unsampled_profiles.platforms": ["fake-platform"],
43+
"profiling.profile_metrics.unsampled_profiles.sample_rate": 1.0,
44+
"relay.span-usage-metric": True,
45+
"relay.cardinality-limiter.mode": "passive",
46+
"profiling.generic_metrics.functions_ingestion.enabled": True,
47+
"feedback.ingest-inline-attachments": True,
48+
"relay.disable_normalization.processing": True,
49+
"relay.force_full_normalization": True,
50+
"relay.metric-bucket-distribution-encodings": {
51+
"custom": "array",
52+
"metric_stats": "array",
53+
"profiles": "array",
54+
"spans": "array",
55+
"transactions": "array",
56+
},
57+
"relay.metric-bucket-set-encodings": {
58+
"custom": "base64",
59+
"metric_stats": "base64",
60+
"profiles": "base64",
61+
"spans": "base64",
62+
"transactions": "base64",
63+
},
64+
}
65+
)
3466
def test_global_config():
3567
config = get_global_config()
36-
# Set options to Relay's non-default values to avoid Relay skipping deserialization
37-
config["options"]["relay.cardinality-limiter.error-sample-rate"] = 1.0
38-
config["options"]["relay.metric-stats.rollout-rate"] = 0.5
39-
config["options"]["feedback.ingest-topic.rollout-rate"] = 0.5
40-
config["options"]["profiling.profile_metrics.unsampled_profiles.enabled"] = True
41-
config["options"]["profiling.profile_metrics.unsampled_profiles.platforms"] = ["fake-platform"]
42-
config["options"]["profiling.profile_metrics.unsampled_profiles.sample_rate"] = 1.0
43-
44-
config["options"]["relay.span-usage-metric"] = True
45-
config["options"]["relay.cardinality-limiter.mode"] = "passive"
46-
47-
config["options"]["profiling.generic_metrics.functions_ingestion.enabled"] = True
48-
49-
# Default coming from options `{}` is removed because empty in librelay
50-
del config["options"]["relay.metric-bucket-distribution-encodings"]
51-
del config["options"]["relay.metric-bucket-set-encodings"]
5268

5369
normalized = normalize_global_config(config)
5470
assert normalized == config

tests/sentry/dynamic_sampling/test_generate_rules.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from unittest.mock import MagicMock, patch
44

55
import pytest
6-
from sentry_relay.processing import validate_project_config
6+
from sentry_relay.processing import normalize_project_config
77

88
from sentry.constants import HEALTH_CHECK_GLOBS
99
from sentry.discover.models import TeamKeyTransaction
@@ -25,7 +25,6 @@
2525
from sentry.testutils.helpers import Feature
2626
from sentry.testutils.helpers.datetime import freeze_time
2727
from sentry.testutils.pytest.fixtures import django_db_all
28-
from sentry.utils import json
2928

3029

3130
@pytest.fixture
@@ -78,10 +77,9 @@ def _validate_rules(project):
7877
"sampling": {
7978
"version": 2,
8079
"rules": rules,
81-
"mode": "total",
8280
},
8381
}
84-
validate_project_config(json.dumps(project_config), strict=True)
82+
assert normalize_project_config(project_config) == project_config
8583

8684

8785
@patch("sentry.dynamic_sampling.rules.base.sentry_sdk")

tests/sentry/relay/test_config.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from unittest.mock import ANY, patch
66

77
import pytest
8-
from sentry_relay.processing import validate_project_config
8+
from sentry_relay.processing import normalize_project_config
99

1010
from sentry.constants import HEALTH_CHECK_GLOBS, ObjectStatus
1111
from sentry.discover.models import TeamKeyTransaction
@@ -29,7 +29,6 @@
2929
from sentry.testutils.helpers.options import override_options
3030
from sentry.testutils.pytest.fixtures import django_db_all
3131
from sentry.testutils.silo import region_silo_test
32-
from sentry.utils import json
3332
from sentry.utils.safe import get_path
3433

3534
PII_CONFIG = """
@@ -95,7 +94,7 @@ def _validate_project_config(config):
9594
if features := config.get("features"):
9695
config["features"] = sorted(features)
9796

98-
validate_project_config(json.dumps(config), strict=True)
97+
assert normalize_project_config(config) == config
9998

10099

101100
@django_db_all
@@ -707,7 +706,7 @@ def test_alert_metric_extraction_rules_empty(default_project):
707706

708707
with Feature(features):
709708
config = get_project_config(default_project).to_dict()["config"]
710-
validate_project_config(json.dumps(config), strict=False)
709+
_validate_project_config(config)
711710
assert "metricExtraction" not in config
712711

713712

@@ -737,7 +736,7 @@ def test_alert_metric_extraction_rules(default_project, factories):
737736

738737
with Feature(features):
739738
config = get_project_config(default_project).to_dict()["config"]
740-
validate_project_config(json.dumps(config), strict=False)
739+
741740
assert config["metricExtraction"] == {
742741
"version": 3,
743742
"metrics": [
@@ -751,6 +750,13 @@ def test_alert_metric_extraction_rules(default_project, factories):
751750
],
752751
}
753752

753+
normalized = normalize_project_config(config)
754+
del normalized["metricExtraction"]["conditionalTagsExtended"]
755+
del normalized["metricExtraction"]["spanMetricsExtended"]
756+
del config["metricExtraction"]["metrics"][0]["field"]
757+
758+
assert normalized["metricExtraction"] == config["metricExtraction"]
759+
754760

755761
@django_db_all
756762
def test_performance_calculate_score(default_project):
@@ -760,7 +766,7 @@ def test_performance_calculate_score(default_project):
760766
for profile in config["performanceScore"]["profiles"]:
761767
profile["version"] = "1"
762768

763-
validate_project_config(json.dumps(config), strict=True)
769+
assert normalize_project_config(config) == config
764770
performance_score = config["performanceScore"]["profiles"]
765771
assert performance_score[0] == {
766772
"name": "Chrome",

0 commit comments

Comments
 (0)