blob: 68ce1c18674a3f1c348df3b4bc9456ba658e1261 [file] [log] [blame]
/*
* Copyright 2017, OpenCensus Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.opencensus.implcore.trace.export;
import static com.google.common.truth.Truth.assertThat;
import io.opencensus.common.Duration;
import io.opencensus.implcore.common.MillisClock;
import io.opencensus.implcore.internal.SimpleEventQueue;
import io.opencensus.implcore.trace.RecordEventsSpanImpl;
import io.opencensus.implcore.trace.RecordEventsSpanImpl.StartEndHandler;
import io.opencensus.implcore.trace.StartEndHandlerImpl;
import io.opencensus.trace.SpanContext;
import io.opencensus.trace.SpanId;
import io.opencensus.trace.TraceId;
import io.opencensus.trace.TraceOptions;
import io.opencensus.trace.config.TraceParams;
import io.opencensus.trace.export.RunningSpanStore.Filter;
import java.util.Random;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
/** Unit tests for {@link InProcessRunningSpanStoreImpl}. */
@RunWith(JUnit4.class)
public class InProcessRunningSpanStoreImplTest {
private static final String SPAN_NAME_1 = "MySpanName/1";
private static final String SPAN_NAME_2 = "MySpanName/2";
private final Random random = new Random(1234);
private final SpanExporterImpl sampledSpansServiceExporter =
SpanExporterImpl.create(4, Duration.create(1, 0));
private final InProcessRunningSpanStoreImpl activeSpansExporter =
new InProcessRunningSpanStoreImpl();
private final StartEndHandler startEndHandler =
new StartEndHandlerImpl(
sampledSpansServiceExporter, activeSpansExporter, null, new SimpleEventQueue());
private RecordEventsSpanImpl createSpan(String spanName) {
final SpanContext spanContext =
SpanContext.create(
TraceId.generateRandomId(random),
SpanId.generateRandomId(random),
TraceOptions.DEFAULT);
return RecordEventsSpanImpl.startSpan(
spanContext,
spanName,
null,
SpanId.generateRandomId(random),
false,
TraceParams.DEFAULT,
startEndHandler,
null,
MillisClock.getInstance());
}
@Test
public void getSummary_SpansWithDifferentNames() {
final RecordEventsSpanImpl span1 = createSpan(SPAN_NAME_1);
final RecordEventsSpanImpl span2 = createSpan(SPAN_NAME_2);
assertThat(activeSpansExporter.getSummary().getPerSpanNameSummary().size()).isEqualTo(2);
assertThat(
activeSpansExporter
.getSummary()
.getPerSpanNameSummary()
.get(SPAN_NAME_1)
.getNumRunningSpans())
.isEqualTo(1);
assertThat(
activeSpansExporter
.getSummary()
.getPerSpanNameSummary()
.get(SPAN_NAME_2)
.getNumRunningSpans())
.isEqualTo(1);
span1.end();
assertThat(activeSpansExporter.getSummary().getPerSpanNameSummary().size()).isEqualTo(1);
assertThat(activeSpansExporter.getSummary().getPerSpanNameSummary().get(SPAN_NAME_1)).isNull();
assertThat(
activeSpansExporter
.getSummary()
.getPerSpanNameSummary()
.get(SPAN_NAME_2)
.getNumRunningSpans())
.isEqualTo(1);
span2.end();
assertThat(activeSpansExporter.getSummary().getPerSpanNameSummary().size()).isEqualTo(0);
}
@Test
public void getSummary_SpansWithSameName() {
final RecordEventsSpanImpl span1 = createSpan(SPAN_NAME_1);
final RecordEventsSpanImpl span2 = createSpan(SPAN_NAME_1);
final RecordEventsSpanImpl span3 = createSpan(SPAN_NAME_1);
assertThat(activeSpansExporter.getSummary().getPerSpanNameSummary().size()).isEqualTo(1);
assertThat(
activeSpansExporter
.getSummary()
.getPerSpanNameSummary()
.get(SPAN_NAME_1)
.getNumRunningSpans())
.isEqualTo(3);
span1.end();
assertThat(activeSpansExporter.getSummary().getPerSpanNameSummary().size()).isEqualTo(1);
assertThat(
activeSpansExporter
.getSummary()
.getPerSpanNameSummary()
.get(SPAN_NAME_1)
.getNumRunningSpans())
.isEqualTo(2);
span2.end();
assertThat(activeSpansExporter.getSummary().getPerSpanNameSummary().size()).isEqualTo(1);
assertThat(
activeSpansExporter
.getSummary()
.getPerSpanNameSummary()
.get(SPAN_NAME_1)
.getNumRunningSpans())
.isEqualTo(1);
span3.end();
assertThat(activeSpansExporter.getSummary().getPerSpanNameSummary().size()).isEqualTo(0);
}
@Test
public void getActiveSpans_SpansWithDifferentNames() {
RecordEventsSpanImpl span1 = createSpan(SPAN_NAME_1);
RecordEventsSpanImpl span2 = createSpan(SPAN_NAME_2);
assertThat(activeSpansExporter.getRunningSpans(Filter.create(SPAN_NAME_1, 0)))
.containsExactly(span1.toSpanData());
assertThat(activeSpansExporter.getRunningSpans(Filter.create(SPAN_NAME_1, 2)))
.containsExactly(span1.toSpanData());
assertThat(activeSpansExporter.getRunningSpans(Filter.create(SPAN_NAME_2, 0)))
.containsExactly(span2.toSpanData());
span1.end();
span2.end();
}
@Test
public void getActiveSpans_SpansWithSameName() {
RecordEventsSpanImpl span1 = createSpan(SPAN_NAME_1);
RecordEventsSpanImpl span2 = createSpan(SPAN_NAME_1);
RecordEventsSpanImpl span3 = createSpan(SPAN_NAME_1);
assertThat(activeSpansExporter.getRunningSpans(Filter.create(SPAN_NAME_1, 0)))
.containsExactly(span1.toSpanData(), span2.toSpanData(), span3.toSpanData());
assertThat(activeSpansExporter.getRunningSpans(Filter.create(SPAN_NAME_1, 2)).size())
.isEqualTo(2);
assertThat(activeSpansExporter.getRunningSpans(Filter.create(SPAN_NAME_1, 2)))
.containsAnyOf(span1.toSpanData(), span2.toSpanData(), span3.toSpanData());
span1.end();
span2.end();
span3.end();
}
}