@@ -107,16 +107,14 @@ public void startChildSpan() {
107107 assertThat (rootSpan .getContext ().isValid ()).isTrue ();
108108 assertThat (rootSpan .getOptions ().contains (Options .RECORD_EVENTS )).isTrue ();
109109 assertThat (rootSpan .getContext ().getTraceOptions ().isSampled ()).isTrue ();
110- assertThat (((SpanImpl ) rootSpan ).toSpanData ().getHasRemoteParent ())
111- .isNull ();
110+ assertThat (((SpanImpl ) rootSpan ).toSpanData ().getHasRemoteParent ()).isNull ();
112111 Span childSpan =
113112 SpanBuilderImpl .createWithParent (SPAN_NAME , rootSpan , spanBuilderOptions ).startSpan ();
114113 assertThat (childSpan .getContext ().isValid ()).isTrue ();
115114 assertThat (childSpan .getContext ().getTraceId ()).isEqualTo (rootSpan .getContext ().getTraceId ());
116115 assertThat (((SpanImpl ) childSpan ).toSpanData ().getParentSpanId ())
117116 .isEqualTo (rootSpan .getContext ().getSpanId ());
118- assertThat (((SpanImpl ) childSpan ).toSpanData ().getHasRemoteParent ())
119- .isFalse ();
117+ assertThat (((SpanImpl ) childSpan ).toSpanData ().getHasRemoteParent ()).isFalse ();
120118 assertThat (((SpanImpl ) childSpan ).getTimestampConverter ())
121119 .isEqualTo (((SpanImpl ) rootSpan ).getTimestampConverter ());
122120 }
@@ -164,6 +162,95 @@ public void startRemoteSpan() {
164162 assertThat (spanData .getHasRemoteParent ()).isTrue ();
165163 }
166164
165+ @ Test
166+ public void startRootSpan_WithSpecifiedSampler () {
167+ // Apply given sampler before default sampler for root spans.
168+ Span rootSpan =
169+ SpanBuilderImpl .createWithParent (SPAN_NAME , null , spanBuilderOptions )
170+ .setSampler (Samplers .neverSample ())
171+ .startSpan ();
172+ assertThat (rootSpan .getContext ().isValid ()).isTrue ();
173+ assertThat (rootSpan .getContext ().getTraceOptions ().isSampled ()).isFalse ();
174+ }
175+
176+ @ Test
177+ public void startRootSpan_WithoutSpecifiedSampler () {
178+ // Apply default sampler (always true in the tests) for root spans.
179+ Span rootSpan =
180+ SpanBuilderImpl .createWithParent (SPAN_NAME , null , spanBuilderOptions ).startSpan ();
181+ assertThat (rootSpan .getContext ().isValid ()).isTrue ();
182+ assertThat (rootSpan .getContext ().getTraceOptions ().isSampled ()).isTrue ();
183+ }
184+
185+ @ Test
186+ public void startRemoteChildSpan_WithSpecifiedSampler () {
187+ Span rootSpan =
188+ SpanBuilderImpl .createWithParent (SPAN_NAME , null , spanBuilderOptions )
189+ .setSampler (Samplers .alwaysSample ())
190+ .startSpan ();
191+ assertThat (rootSpan .getContext ().isValid ()).isTrue ();
192+ assertThat (rootSpan .getContext ().getTraceOptions ().isSampled ()).isTrue ();
193+ // Apply given sampler before default sampler for spans with remote parent.
194+ Span childSpan =
195+ SpanBuilderImpl .createWithRemoteParent (SPAN_NAME , rootSpan .getContext (), spanBuilderOptions )
196+ .setSampler (Samplers .neverSample ())
197+ .startSpan ();
198+ assertThat (childSpan .getContext ().isValid ()).isTrue ();
199+ assertThat (childSpan .getContext ().getTraceId ()).isEqualTo (rootSpan .getContext ().getTraceId ());
200+ assertThat (childSpan .getContext ().getTraceOptions ().isSampled ()).isFalse ();
201+ }
202+
203+ @ Test
204+ public void startRemoteChildSpan_WithoutSpecifiedSampler () {
205+ Span rootSpan =
206+ SpanBuilderImpl .createWithParent (SPAN_NAME , null , spanBuilderOptions )
207+ .setSampler (Samplers .neverSample ())
208+ .startSpan ();
209+ assertThat (rootSpan .getContext ().isValid ()).isTrue ();
210+ assertThat (rootSpan .getContext ().getTraceOptions ().isSampled ()).isFalse ();
211+ // Apply default sampler (always true in the tests) for spans with remote parent.
212+ Span childSpan =
213+ SpanBuilderImpl .createWithRemoteParent (SPAN_NAME , rootSpan .getContext (), spanBuilderOptions )
214+ .startSpan ();
215+ assertThat (childSpan .getContext ().isValid ()).isTrue ();
216+ assertThat (childSpan .getContext ().getTraceId ()).isEqualTo (rootSpan .getContext ().getTraceId ());
217+ assertThat (childSpan .getContext ().getTraceOptions ().isSampled ()).isTrue ();
218+ }
219+
220+ @ Test
221+ public void startChildSpan_WithSpecifiedSampler () {
222+ Span rootSpan =
223+ SpanBuilderImpl .createWithParent (SPAN_NAME , null , spanBuilderOptions )
224+ .setSampler (Samplers .alwaysSample ())
225+ .startSpan ();
226+ assertThat (rootSpan .getContext ().isValid ()).isTrue ();
227+ assertThat (rootSpan .getContext ().getTraceOptions ().isSampled ()).isTrue ();
228+ // Apply the given sampler for child spans.
229+ Span childSpan =
230+ SpanBuilderImpl .createWithParent (SPAN_NAME , rootSpan , spanBuilderOptions )
231+ .setSampler (Samplers .neverSample ())
232+ .startSpan ();
233+ assertThat (childSpan .getContext ().isValid ()).isTrue ();
234+ assertThat (childSpan .getContext ().getTraceId ()).isEqualTo (rootSpan .getContext ().getTraceId ());
235+ assertThat (childSpan .getContext ().getTraceOptions ().isSampled ()).isFalse ();
236+ }
237+
238+ @ Test
239+ public void startChildSpan_WithoutSpecifiedSampler () {
240+ Span rootSpan =
241+ SpanBuilderImpl .createWithParent (SPAN_NAME , null , spanBuilderOptions )
242+ .setSampler (Samplers .neverSample ())
243+ .startSpan ();
244+ assertThat (rootSpan .getContext ().isValid ()).isTrue ();
245+ assertThat (rootSpan .getContext ().getTraceOptions ().isSampled ()).isFalse ();
246+ // Don't apply the default sampler (always true) for child spans.
247+ Span childSpan =
248+ SpanBuilderImpl .createWithParent (SPAN_NAME , rootSpan , spanBuilderOptions ).startSpan ();
249+ assertThat (childSpan .getContext ().isValid ()).isTrue ();
250+ assertThat (childSpan .getContext ().getTraceId ()).isEqualTo (rootSpan .getContext ().getTraceId ());
251+ assertThat (childSpan .getContext ().getTraceOptions ().isSampled ()).isFalse ();
252+ }
253+
167254 private static final class FakeRandomHandler extends RandomHandler {
168255 private final Random random ;
169256
0 commit comments