/* * 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.trace; import static com.google.common.truth.Truth.assertThat; import com.google.common.testing.EqualsTester; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; /** Unit tests for {@link SpanContext}. */ @RunWith(JUnit4.class) public class SpanContextTest { private static final byte[] firstTraceIdBytes = new byte[] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'a'}; private static final byte[] secondTraceIdBytes = new byte[] {0, 0, 0, 0, 0, 0, 0, '0', 0, 0, 0, 0, 0, 0, 0, 0}; private static final byte[] firstSpanIdBytes = new byte[] {0, 0, 0, 0, 0, 0, 0, 'a'}; private static final byte[] secondSpanIdBytes = new byte[] {'0', 0, 0, 0, 0, 0, 0, 0}; private static final Tracestate firstTracestate = Tracestate.builder().set("foo", "bar").build(); private static final Tracestate secondTracestate = Tracestate.builder().set("foo", "baz").build(); private static final SpanContext first = SpanContext.create( TraceId.fromBytes(firstTraceIdBytes), SpanId.fromBytes(firstSpanIdBytes), TraceOptions.DEFAULT, firstTracestate); private static final SpanContext second = SpanContext.create( TraceId.fromBytes(secondTraceIdBytes), SpanId.fromBytes(secondSpanIdBytes), TraceOptions.builder().setIsSampled(true).build(), secondTracestate); @Test public void invalidSpanContext() { assertThat(SpanContext.INVALID.getTraceId()).isEqualTo(TraceId.INVALID); assertThat(SpanContext.INVALID.getSpanId()).isEqualTo(SpanId.INVALID); assertThat(SpanContext.INVALID.getTraceOptions()).isEqualTo(TraceOptions.DEFAULT); } @Test public void isValid() { assertThat(SpanContext.INVALID.isValid()).isFalse(); assertThat( SpanContext.create( TraceId.fromBytes(firstTraceIdBytes), SpanId.INVALID, TraceOptions.DEFAULT) .isValid()) .isFalse(); assertThat( SpanContext.create( TraceId.INVALID, SpanId.fromBytes(firstSpanIdBytes), TraceOptions.DEFAULT) .isValid()) .isFalse(); assertThat(first.isValid()).isTrue(); assertThat(second.isValid()).isTrue(); } @Test public void getTraceId() { assertThat(first.getTraceId()).isEqualTo(TraceId.fromBytes(firstTraceIdBytes)); assertThat(second.getTraceId()).isEqualTo(TraceId.fromBytes(secondTraceIdBytes)); } @Test public void getSpanId() { assertThat(first.getSpanId()).isEqualTo(SpanId.fromBytes(firstSpanIdBytes)); assertThat(second.getSpanId()).isEqualTo(SpanId.fromBytes(secondSpanIdBytes)); } @Test public void getTraceOptions() { assertThat(first.getTraceOptions()).isEqualTo(TraceOptions.DEFAULT); assertThat(second.getTraceOptions()) .isEqualTo(TraceOptions.builder().setIsSampled(true).build()); } @Test public void getTracestate() { assertThat(first.getTracestate()).isEqualTo(firstTracestate); assertThat(second.getTracestate()).isEqualTo(secondTracestate); } @Test public void spanContext_EqualsAndHashCode() { EqualsTester tester = new EqualsTester(); tester.addEqualityGroup( first, SpanContext.create( TraceId.fromBytes(firstTraceIdBytes), SpanId.fromBytes(firstSpanIdBytes), TraceOptions.DEFAULT), SpanContext.create( TraceId.fromBytes(firstTraceIdBytes), SpanId.fromBytes(firstSpanIdBytes), TraceOptions.builder().setIsSampled(false).build(), firstTracestate)); tester.addEqualityGroup( second, SpanContext.create( TraceId.fromBytes(secondTraceIdBytes), SpanId.fromBytes(secondSpanIdBytes), TraceOptions.builder().setIsSampled(true).build(), secondTracestate)); tester.testEquals(); } @Test public void spanContext_ToString() { assertThat(first.toString()).contains(TraceId.fromBytes(firstTraceIdBytes).toString()); assertThat(first.toString()).contains(SpanId.fromBytes(firstSpanIdBytes).toString()); assertThat(first.toString()).contains(TraceOptions.DEFAULT.toString()); assertThat(second.toString()).contains(TraceId.fromBytes(secondTraceIdBytes).toString()); assertThat(second.toString()).contains(SpanId.fromBytes(secondSpanIdBytes).toString()); assertThat(second.toString()) .contains(TraceOptions.builder().setIsSampled(true).build().toString()); } }