package org.skywalking.apm.collector.worker.span.persistence;
import com.google.gson.JsonObject;
import org.elasticsearch.action.get.GetResponse;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PowerMockIgnore;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.powermock.reflect.Whitebox;
import org.skywalking.apm.collector.actor.ClusterWorkerContext;
import org.skywalking.apm.collector.actor.LocalWorkerContext;
import org.skywalking.apm.collector.actor.selector.RollingSelector;
import org.skywalking.apm.collector.worker.Const;
import org.skywalking.apm.collector.worker.segment.SegmentIndex;
import org.skywalking.apm.collector.worker.segment.mock.SegmentMock;
import org.skywalking.apm.collector.worker.storage.GetResponseFromEs;
import org.skywalking.apm.trace.Span;
import org.skywalking.apm.trace.TraceSegment;
import java.util.TimeZone;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
/**
* @author pengys5
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest( {GetResponseFromEs.class})
@PowerMockIgnore( {"javax.management.*"})
public class SpanSearchWithIdTestCase {
private GetResponseFromEs getResponseFromEs;
@Before
public void init() {
System.setProperty("user.timezone", "UTC");
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
getResponseFromEs = PowerMockito.mock(GetResponseFromEs.class);
Whitebox.setInternalState(GetResponseFromEs.class, "INSTANCE", getResponseFromEs);
}
@Test
public void testRole() {
Assert.assertEquals(SpanSearchWithId.class.getSimpleName(), SpanSearchWithId.WorkerRole.INSTANCE.roleName());
Assert.assertEquals(RollingSelector.class.getSimpleName(), SpanSearchWithId.WorkerRole.INSTANCE.workerSelector().getClass().getSimpleName());
}
@Test
public void testFactory() {
SpanSearchWithId.Factory factory = new SpanSearchWithId.Factory();
Assert.assertEquals(SpanSearchWithId.class.getSimpleName(), factory.role().roleName());
Assert.assertEquals(SpanSearchWithId.class.getSimpleName(), factory.workerInstance(null).getClass().getSimpleName());
}
@Test
public void testOnWork() throws Exception {
ClusterWorkerContext clusterWorkerContext = new ClusterWorkerContext(null);
LocalWorkerContext localWorkerContext = new LocalWorkerContext();
SpanSearchWithId spanSearchWithId = new SpanSearchWithId(SpanSearchWithId.WorkerRole.INSTANCE, clusterWorkerContext, localWorkerContext);
SegmentMock mock = new SegmentMock();
String sourceString = mock.loadJsonFile("/json/span/persistence/segment.json");
GetResponse getResponse = mock(GetResponse.class);
when(getResponseFromEs.get(SegmentIndex.INDEX, SegmentIndex.TYPE_RECORD, "1")).thenReturn(getResponse);
when(getResponse.getSourceAsString()).thenReturn(sourceString);
SpanSearchWithId.RequestEntity request = new SpanSearchWithId.RequestEntity("1", "0");
JsonObject response = new JsonObject();
spanSearchWithId.onWork(request, response);
JsonObject spanJsonObj = response.get(Const.RESULT).getAsJsonObject();
String value = spanJsonObj.get("operationName").getAsString();
Assert.assertEquals("/portal/", value);
}
private TraceSegment create() {
TraceSegment segment = new TraceSegment();
Span span = new Span();
span.setTag("Tag", "VALUE");
span.finish(segment);
segment.finish();
return segment;
}
}