/**
* Copyright 2015-2017 The OpenZipkin 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 zipkin.internal;
import com.twitter.zipkin.thriftjava.Annotation;
import com.twitter.zipkin.thriftjava.Endpoint;
import com.twitter.zipkin.thriftjava.Span;
import java.net.Inet6Address;
import java.net.UnknownHostException;
import org.apache.thrift.TDeserializer;
import org.apache.thrift.TException;
import org.apache.thrift.TSerializer;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.junit.Test;
import zipkin.Codec;
import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
import static zipkin.Constants.SERVER_RECV;
import static zipkin.Constants.SERVER_SEND;
public class ThriftCodecInteropTest {
TSerializer serializer = new TSerializer(new TBinaryProtocol.Factory());
TDeserializer deserializer = new TDeserializer(new TBinaryProtocol.Factory());
@Test
public void spanSerializationIsCompatible() throws UnknownHostException, TException {
zipkin.Endpoint.Builder builder = zipkin.Endpoint.builder().serviceName("web").port(80);
builder.parseIp("124.13.90.3");
builder.parseIp("2001:db8::c001");
zipkin.Endpoint zipkinEndpoint = builder.build();
zipkin.Span zipkinSpan = zipkin.Span.builder().traceId(1L).traceIdHigh(2L).id(1L).name("get")
.addAnnotation(zipkin.Annotation.create(1000, SERVER_RECV, zipkinEndpoint))
.addAnnotation(zipkin.Annotation.create(1350, SERVER_SEND, zipkinEndpoint))
.build();
Endpoint thriftEndpoint = new Endpoint()
.setService_name("web")
.setIpv4(124 << 24 | 13 << 16 | 90 << 8 | 3)
.setIpv6(Inet6Address.getByName("2001:db8::c001").getAddress())
.setPort((short) 80);
Span thriftSpan = new Span(1L, "get", 1L, asList(
new Annotation(1000, SERVER_RECV).setHost(thriftEndpoint),
new Annotation(1350, SERVER_SEND).setHost(thriftEndpoint)), asList()).setTrace_id_high(2L);
assertThat(serializer.serialize(thriftSpan))
.isEqualTo(Codec.THRIFT.writeSpan(zipkinSpan));
assertThat(Codec.THRIFT.writeSpan(zipkinSpan))
.isEqualTo(serializer.serialize(thriftSpan));
Span deserializedThrift = new Span();
deserializer.deserialize(deserializedThrift, Codec.THRIFT.writeSpan(zipkinSpan));
assertThat(deserializedThrift)
.isEqualTo(thriftSpan);
assertThat(Codec.THRIFT.readSpan(serializer.serialize(thriftSpan)))
.isEqualTo(zipkinSpan);
}
}