/*
* Copyright 2014 NAVER Corp.
*
* 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 com.navercorp.pinpoint.common.server.bo.serializer.trace.v1;
import com.navercorp.pinpoint.common.buffer.Buffer;
import com.navercorp.pinpoint.common.buffer.OffsetFixedBuffer;
import com.navercorp.pinpoint.common.server.bo.SpanBo;
import com.navercorp.pinpoint.common.trace.LoggingInfo;
import com.navercorp.pinpoint.common.util.TransactionId;
import org.apache.commons.lang3.RandomStringUtils;
import org.junit.Assert;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.navercorp.pinpoint.common.trace.ServiceType;
import java.nio.ByteBuffer;
/**
* @author emeroad
*/
public class SpanBoTest {
private Logger logger = LoggerFactory.getLogger(this.getClass());
private final SpanSerializer spanSerializer = new SpanSerializer();
private final SpanDecoder spanDecoder = new SpanDecoder();
@Test
public void testVersion() {
SpanBo spanBo = new SpanBo();
checkVersion(spanBo, 0);
checkVersion(spanBo, 254);
checkVersion(spanBo, 255);
try {
checkVersion(spanBo, 256);
Assert.fail();
} catch (Exception ignored) {
}
byte byteVersion = 2;
spanBo.setVersion(byteVersion);
Assert.assertTrue(spanBo.getRawVersion() == byteVersion);
}
private void checkVersion(SpanBo spanBo, int v) {
spanBo.setVersion(v);
int version = spanBo.getVersion();
Assert.assertEquals(v, version);
}
@Test
public void serialize_V1() {
final SpanBo spanBo = new SpanBo();
spanBo.setAgentId("agentId");
spanBo.setApplicationId("applicationId");
spanBo.setEndPoint("end");
spanBo.setRpc("rpc");
spanBo.setParentSpanId(5);
spanBo.setAgentStartTime(1);
TransactionId transactionId = new TransactionId("agentId", 2, 3);
spanBo.setTransactionId(transactionId);
spanBo.setElapsed(4);
spanBo.setStartTime(5);
spanBo.setServiceType(ServiceType.STAND_ALONE.getCode());
spanBo.setLoggingTransactionInfo(LoggingInfo.INFO.getCode());
spanBo.setExceptionInfo(1000, "Exception");
ByteBuffer bytes = spanSerializer.writeColumnValue(spanBo);
SpanBo newSpanBo = new SpanBo();
Buffer valueBuffer = new OffsetFixedBuffer(bytes.array(), bytes.arrayOffset(), bytes.remaining());
int i = spanDecoder.readSpan(newSpanBo, valueBuffer);
logger.debug("length:{}", i);
Assert.assertEquals(bytes.limit(), i);
Assert.assertEquals(newSpanBo.getAgentId(), spanBo.getAgentId());
Assert.assertEquals(newSpanBo.getApplicationId(), spanBo.getApplicationId());
Assert.assertEquals(newSpanBo.getAgentStartTime(), spanBo.getAgentStartTime());
Assert.assertEquals(newSpanBo.getElapsed(), spanBo.getElapsed());
Assert.assertEquals(newSpanBo.getEndPoint(), spanBo.getEndPoint());
Assert.assertEquals(newSpanBo.getErrCode(), spanBo.getErrCode());
Assert.assertEquals(newSpanBo.getFlag(), spanBo.getFlag());
// not included for serialization
// Assert.assertEquals(newSpanBo.getTraceAgentStartTime(), spanBo.getTraceAgentStartTime());
// Assert.assertEquals(newSpanBo.getTraceTransactionSequence(), spanBo.getTraceTransactionSequence());
Assert.assertEquals(newSpanBo.getParentSpanId(), spanBo.getParentSpanId());
Assert.assertEquals(newSpanBo.getServiceType(), spanBo.getServiceType());
Assert.assertEquals(newSpanBo.getApplicationServiceType(), spanBo.getServiceType());
Assert.assertEquals(newSpanBo.getVersion(), spanBo.getVersion());
Assert.assertEquals(newSpanBo.getLoggingTransactionInfo(), spanBo.getLoggingTransactionInfo());
Assert.assertEquals(newSpanBo.getExceptionId(), spanBo.getExceptionId());
Assert.assertEquals(newSpanBo.getExceptionMessage(), spanBo.getExceptionMessage());
}
@Test
public void serialize2_V1() {
SpanBo spanBo = new SpanBo();
spanBo.setAgentId("agent");
String service = createString(5);
spanBo.setApplicationId(service);
String endPoint = createString(127);
spanBo.setEndPoint(endPoint);
String rpc = createString(255);
spanBo.setRpc(rpc);
spanBo.setServiceType(ServiceType.STAND_ALONE.getCode());
spanBo.setApplicationServiceType(ServiceType.UNKNOWN.getCode());
final ByteBuffer bytes = spanSerializer.writeColumnValue(spanBo);
SpanBo newSpanBo = new SpanBo();
Buffer valueBuffer = new OffsetFixedBuffer(bytes.array(), bytes.arrayOffset(), bytes.remaining());
int i = spanDecoder.readSpan(newSpanBo, valueBuffer);
logger.debug("length:{}", i);
Assert.assertEquals(bytes.limit(), i);
Assert.assertEquals(spanBo.getServiceType(), spanBo.getServiceType());
Assert.assertEquals(spanBo.getApplicationServiceType(), spanBo.getApplicationServiceType());
}
private String createString(int size) {
return RandomStringUtils.random(size);
}
}