Skip to content

Commit d80d827

Browse files
authored
Merge 1c7d553 into bdbe1f4
2 parents bdbe1f4 + 1c7d553 commit d80d827

File tree

2 files changed

+209
-0
lines changed

2 files changed

+209
-0
lines changed

sentry/src/main/java/io/sentry/util/DebugMetaPropertiesApplier.java

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public static void apply(
1717
if (debugMetaProperties != null) {
1818
applyToOptions(options, debugMetaProperties);
1919
applyBuildTool(options, debugMetaProperties);
20+
applyDistributionOptions(options, debugMetaProperties);
2021
}
2122
}
2223

@@ -89,4 +90,79 @@ private static void applyBuildTool(
8990
final @NotNull Properties debugMetaProperties) {
9091
return debugMetaProperties.getProperty("io.sentry.build-tool-version");
9192
}
93+
94+
private static void applyDistributionOptions(
95+
final @NotNull SentryOptions options, final @NotNull List<Properties> debugMetaProperties) {
96+
for (Properties properties : debugMetaProperties) {
97+
final @Nullable String orgSlug = getDistributionOrgSlug(properties);
98+
final @Nullable String projectSlug = getDistributionProjectSlug(properties);
99+
final @Nullable String orgAuthToken = getDistributionOrgAuthToken(properties);
100+
final @Nullable String buildConfiguration = getDistributionBuildConfiguration(properties);
101+
102+
if (orgSlug != null
103+
|| projectSlug != null
104+
|| orgAuthToken != null
105+
|| buildConfiguration != null) {
106+
final @NotNull SentryOptions.DistributionOptions distributionOptions =
107+
options.getDistribution();
108+
109+
if (orgSlug != null && !orgSlug.isEmpty() && distributionOptions.orgSlug.isEmpty()) {
110+
options.getLogger().log(SentryLevel.DEBUG, "Distribution org slug found: %s", orgSlug);
111+
distributionOptions.orgSlug = orgSlug;
112+
}
113+
114+
if (projectSlug != null
115+
&& !projectSlug.isEmpty()
116+
&& distributionOptions.projectSlug.isEmpty()) {
117+
options
118+
.getLogger()
119+
.log(SentryLevel.DEBUG, "Distribution project slug found: %s", projectSlug);
120+
distributionOptions.projectSlug = projectSlug;
121+
}
122+
123+
if (orgAuthToken != null
124+
&& !orgAuthToken.isEmpty()
125+
&& distributionOptions.orgAuthToken.isEmpty()) {
126+
options.getLogger().log(SentryLevel.DEBUG, "Distribution org auth token found");
127+
distributionOptions.orgAuthToken = orgAuthToken;
128+
}
129+
130+
if (buildConfiguration != null
131+
&& !buildConfiguration.isEmpty()
132+
&& distributionOptions.buildConfiguration == null) {
133+
options
134+
.getLogger()
135+
.log(
136+
SentryLevel.DEBUG,
137+
"Distribution build configuration found: %s",
138+
buildConfiguration);
139+
distributionOptions.buildConfiguration = buildConfiguration;
140+
}
141+
142+
// We only process the first properties file that contains distribution options
143+
// to maintain consistency with other properties like proguardUuid
144+
break;
145+
}
146+
}
147+
}
148+
149+
private static @Nullable String getDistributionOrgSlug(
150+
final @NotNull Properties debugMetaProperties) {
151+
return debugMetaProperties.getProperty("io.sentry.distribution.org-slug");
152+
}
153+
154+
private static @Nullable String getDistributionProjectSlug(
155+
final @NotNull Properties debugMetaProperties) {
156+
return debugMetaProperties.getProperty("io.sentry.distribution.project-slug");
157+
}
158+
159+
private static @Nullable String getDistributionOrgAuthToken(
160+
final @NotNull Properties debugMetaProperties) {
161+
return debugMetaProperties.getProperty("io.sentry.distribution.org-auth-token");
162+
}
163+
164+
private static @Nullable String getDistributionBuildConfiguration(
165+
final @NotNull Properties debugMetaProperties) {
166+
return debugMetaProperties.getProperty("io.sentry.distribution.build-configuration");
167+
}
92168
}
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
package io.sentry.util
2+
3+
import io.sentry.SentryOptions
4+
import java.util.Properties
5+
import kotlin.test.Test
6+
import kotlin.test.assertEquals
7+
import kotlin.test.assertNull
8+
9+
class DebugMetaPropertiesApplierTest {
10+
11+
@Test
12+
fun `applies distribution options from properties`() {
13+
val properties = Properties()
14+
properties.setProperty("io.sentry.distribution.org-slug", "test-org")
15+
properties.setProperty("io.sentry.distribution.project-slug", "test-project")
16+
properties.setProperty("io.sentry.distribution.org-auth-token", "test-token")
17+
properties.setProperty("io.sentry.distribution.build-configuration", "debug")
18+
19+
val options = SentryOptions()
20+
DebugMetaPropertiesApplier.apply(options, listOf(properties))
21+
22+
assertEquals("test-org", options.distribution.orgSlug)
23+
assertEquals("test-project", options.distribution.projectSlug)
24+
assertEquals("test-token", options.distribution.orgAuthToken)
25+
assertEquals("debug", options.distribution.buildConfiguration)
26+
}
27+
28+
@Test
29+
fun `applies partial distribution options from properties`() {
30+
val properties = Properties()
31+
properties.setProperty("io.sentry.distribution.org-slug", "test-org")
32+
properties.setProperty("io.sentry.distribution.project-slug", "test-project")
33+
34+
val options = SentryOptions()
35+
DebugMetaPropertiesApplier.apply(options, listOf(properties))
36+
37+
assertEquals("test-org", options.distribution.orgSlug)
38+
assertEquals("test-project", options.distribution.projectSlug)
39+
assertEquals("", options.distribution.orgAuthToken)
40+
assertNull(options.distribution.buildConfiguration)
41+
}
42+
43+
@Test
44+
fun `does not override existing distribution options`() {
45+
val properties = Properties()
46+
properties.setProperty("io.sentry.distribution.org-slug", "properties-org")
47+
properties.setProperty("io.sentry.distribution.project-slug", "properties-project")
48+
properties.setProperty("io.sentry.distribution.org-auth-token", "properties-token")
49+
properties.setProperty("io.sentry.distribution.build-configuration", "properties-config")
50+
51+
val options = SentryOptions()
52+
options.distribution.orgSlug = "existing-org"
53+
options.distribution.projectSlug = "existing-project"
54+
options.distribution.orgAuthToken = "existing-token"
55+
options.distribution.buildConfiguration = "existing-config"
56+
57+
DebugMetaPropertiesApplier.apply(options, listOf(properties))
58+
59+
assertEquals("existing-org", options.distribution.orgSlug)
60+
assertEquals("existing-project", options.distribution.projectSlug)
61+
assertEquals("existing-token", options.distribution.orgAuthToken)
62+
assertEquals("existing-config", options.distribution.buildConfiguration)
63+
}
64+
65+
@Test
66+
fun `applies distribution options from first properties file with values`() {
67+
val properties1 = Properties()
68+
val properties2 = Properties()
69+
properties2.setProperty("io.sentry.distribution.org-slug", "org-from-second")
70+
properties2.setProperty("io.sentry.distribution.project-slug", "project-from-second")
71+
72+
val options = SentryOptions()
73+
DebugMetaPropertiesApplier.apply(options, listOf(properties1, properties2))
74+
75+
assertEquals("org-from-second", options.distribution.orgSlug)
76+
assertEquals("project-from-second", options.distribution.projectSlug)
77+
}
78+
79+
@Test
80+
fun `does nothing when properties list is empty`() {
81+
val options = SentryOptions()
82+
val originalOrgSlug = options.distribution.orgSlug
83+
val originalProjectSlug = options.distribution.projectSlug
84+
85+
DebugMetaPropertiesApplier.apply(options, emptyList())
86+
87+
assertEquals(originalOrgSlug, options.distribution.orgSlug)
88+
assertEquals(originalProjectSlug, options.distribution.projectSlug)
89+
}
90+
91+
@Test
92+
fun `does nothing when properties list is null`() {
93+
val options = SentryOptions()
94+
val originalOrgSlug = options.distribution.orgSlug
95+
val originalProjectSlug = options.distribution.projectSlug
96+
97+
DebugMetaPropertiesApplier.apply(options, null)
98+
99+
assertEquals(originalOrgSlug, options.distribution.orgSlug)
100+
assertEquals(originalProjectSlug, options.distribution.projectSlug)
101+
}
102+
103+
@Test
104+
fun `applies buildConfiguration only when it is the only property set`() {
105+
val properties = Properties()
106+
properties.setProperty("io.sentry.distribution.build-configuration", "debug")
107+
108+
val options = SentryOptions()
109+
DebugMetaPropertiesApplier.apply(options, listOf(properties))
110+
111+
assertEquals("debug", options.distribution.buildConfiguration)
112+
assertEquals("", options.distribution.orgSlug)
113+
assertEquals("", options.distribution.projectSlug)
114+
assertEquals("", options.distribution.orgAuthToken)
115+
}
116+
117+
@Test
118+
fun `does not apply empty string values`() {
119+
val properties = Properties()
120+
properties.setProperty("io.sentry.distribution.org-slug", "")
121+
properties.setProperty("io.sentry.distribution.project-slug", "")
122+
properties.setProperty("io.sentry.distribution.org-auth-token", "")
123+
properties.setProperty("io.sentry.distribution.build-configuration", "")
124+
125+
val options = SentryOptions()
126+
DebugMetaPropertiesApplier.apply(options, listOf(properties))
127+
128+
assertEquals("", options.distribution.orgSlug)
129+
assertEquals("", options.distribution.projectSlug)
130+
assertEquals("", options.distribution.orgAuthToken)
131+
assertNull(options.distribution.buildConfiguration)
132+
}
133+
}

0 commit comments

Comments
 (0)