package core.log.service;
import core.framework.api.search.ElasticSearchType;
import core.framework.api.search.GetRequest;
import core.framework.api.util.Lists;
import core.framework.api.util.Maps;
import core.framework.impl.log.queue.ActionLogMessage;
import core.framework.impl.log.queue.PerformanceStatMessage;
import core.log.IntegrationTest;
import core.log.domain.ActionDocument;
import core.log.domain.TraceDocument;
import org.junit.Test;
import javax.inject.Inject;
import java.time.Instant;
import java.time.LocalDate;
import java.time.Month;
import static org.junit.Assert.assertEquals;
/**
* @author neo
*/
public class ActionServiceTest extends IntegrationTest {
@Inject
ActionService actionService;
@Inject
ElasticSearchType<ActionDocument> actionType;
@Inject
ElasticSearchType<TraceDocument> traceType;
@Test
public void index() throws Exception {
ActionLogMessage message1 = new ActionLogMessage();
message1.id = "1";
message1.date = Instant.now();
message1.result = "OK";
message1.context = Maps.newHashMap("key", "value");
message1.stats = Maps.newHashMap("count", 1d);
PerformanceStatMessage stat = new PerformanceStatMessage();
stat.count = 1;
stat.totalElapsed = 10L;
message1.performanceStats = Maps.newHashMap("redis", stat);
ActionLogMessage message2 = new ActionLogMessage();
message2.id = "2";
message2.date = Instant.now();
message2.result = "WARN";
message2.traceLog = "trace";
LocalDate now = LocalDate.of(2016, Month.JANUARY, 15);
actionService.index(Lists.newArrayList(message1, message2), now);
GetRequest request = new GetRequest();
request.index = IndexName.name("action", now);
request.id = message1.id;
ActionDocument action = actionType.get(request).orElseThrow(() -> new Error("not found"));
assertEquals(message1.result, action.result);
request = new GetRequest();
request.index = IndexName.name("trace", now);
request.id = message2.id;
TraceDocument trace = traceType.get(request).orElseThrow(() -> new Error("not found"));
assertEquals(message2.id, trace.id);
assertEquals(message2.traceLog, trace.content);
}
}