/* * 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.test.junit4; import java.util.ArrayList; import java.util.List; import com.navercorp.pinpoint.common.server.bo.SpanFactory; import com.navercorp.pinpoint.profiler.sender.DataSender; import com.navercorp.pinpoint.test.ListenableDataSender; import com.navercorp.pinpoint.test.MockApplicationContext; import com.navercorp.pinpoint.test.ResettableServerMetaDataHolder; import com.navercorp.pinpoint.test.TestableServerMetaDataListener; import org.apache.thrift.TBase; import org.junit.runner.RunWith; import com.navercorp.pinpoint.bootstrap.context.ServerMetaData; import com.navercorp.pinpoint.bootstrap.context.ServerMetaDataHolder; import com.navercorp.pinpoint.common.server.bo.SpanBo; import com.navercorp.pinpoint.common.server.bo.SpanEventBo; import com.navercorp.pinpoint.profiler.context.Span; import com.navercorp.pinpoint.profiler.context.SpanEvent; import com.navercorp.pinpoint.test.TBaseRecorder; /** * @author hyungil.jeong */ @RunWith(value = PinpointJUnit4ClassRunner.class) public abstract class BasePinpointTest { private volatile TBaseRecorder<? extends TBase<?, ?>> tBaseRecorder; private volatile ServerMetaDataHolder serverMetaDataHolder; private final TestableServerMetaDataListener listener = new TestableServerMetaDataListener(); private final SpanFactory spanFactory = new SpanFactory(); protected List<SpanEventBo> getCurrentSpanEvents() { List<SpanEventBo> spanEvents = new ArrayList<SpanEventBo>(); for (TBase<?, ?> span : this.tBaseRecorder) { if (span instanceof SpanEvent) { SpanEvent spanEvent = (SpanEvent)span; SpanEventBo spanEventBo = spanFactory.buildSpanEventBo(spanEvent); spanEvents.add(spanEventBo); } } return spanEvents; } protected List<SpanBo> getCurrentRootSpans() { List<SpanBo> rootSpans = new ArrayList<SpanBo>(); for (TBase<?, ?> span : this.tBaseRecorder) { if (span instanceof Span) { SpanBo spanBo = spanFactory.buildSpanBo((Span) span); rootSpans.add(spanBo); } } return rootSpans; } protected ServerMetaData getServerMetaData() { return this.listener.getServerMetaData(); } private void setTBaseRecorder(TBaseRecorder tBaseRecorder) { this.tBaseRecorder = tBaseRecorder; } private void setServerMetaDataHolder(ServerMetaDataHolder serverMetaDataHolder) { this.serverMetaDataHolder = serverMetaDataHolder; } public void setup(TestContext testContext) { MockApplicationContext mockApplicationContext = testContext.getMockApplicationContext(); DataSender spanDataSender = mockApplicationContext.getSpanDataSender(); if (spanDataSender instanceof ListenableDataSender) { ListenableDataSender listenableDataSender = (ListenableDataSender) spanDataSender; final TBaseRecorder tBaseRecord = new TBaseRecorder(); listenableDataSender.setListener(new ListenableDataSender.Listener() { @Override public boolean handleSend(TBase<?, ?> data) { return tBaseRecord.add(data); } }); setTBaseRecorder(tBaseRecord); } ServerMetaDataHolder serverMetaDataHolder = mockApplicationContext.getTraceContext().getServerMetaDataHolder(); if (serverMetaDataHolder instanceof ResettableServerMetaDataHolder) { ResettableServerMetaDataHolder resettableServerMetaDataHolder = (ResettableServerMetaDataHolder) serverMetaDataHolder; this.setServerMetaDataHolder(resettableServerMetaDataHolder); } this.serverMetaDataHolder.addListener(this.listener); } }