use of com.teamscale.report.jacoco.dump.Dump in project teamscale-jacoco-agent by cqse.
the class Agent method dumpReportUnsafe.
private void dumpReportUnsafe() {
Dump dump;
try {
dump = controller.dumpAndReset();
} catch (JacocoRuntimeController.DumpException e) {
logger.error("Dumping failed, retrying later", e);
return;
}
try (Benchmark ignored = new Benchmark("Generating the XML report")) {
File outputFile = options.createTempFile("jacoco", "xml");
CoverageFile coverageFile = generator.convert(dump, outputFile);
uploader.upload(coverageFile);
} catch (IOException e) {
logger.error("Converting binary dump to XML failed", e);
} catch (EmptyReportException e) {
logger.error("No coverage was collected. " + e.getMessage(), e);
}
}
use of com.teamscale.report.jacoco.dump.Dump in project teamscale-jacoco-agent by cqse.
the class JacocoRuntimeController method dumpAndReset.
/**
* Dumps execution data and resets it.
*
* @throws DumpException if dumping fails. This should never happen in real life. Dumping should simply be retried
* later if this ever happens.
*/
public Dump dumpAndReset() throws DumpException {
byte[] binaryData = agent.getExecutionData(true);
try (ByteArrayInputStream inputStream = new ByteArrayInputStream(binaryData)) {
ExecutionDataReader reader = new ExecutionDataReader(inputStream);
ExecutionDataStore store = new ExecutionDataStore();
reader.setExecutionDataVisitor(store::put);
SessionInfoVisitor sessionInfoVisitor = new SessionInfoVisitor();
reader.setSessionInfoVisitor(sessionInfoVisitor);
reader.read();
return new Dump(sessionInfoVisitor.sessionInfo, store);
} catch (IOException e) {
throw new DumpException("should never happen for the ByteArrayInputStream", e);
}
}
use of com.teamscale.report.jacoco.dump.Dump in project teamscale-jacoco-agent by cqse.
the class JaCoCoXmlReportGeneratorTest method createDummyDump.
/**
* Creates a dummy dump with the specified class ID. The class ID can currently be calculated with {@link
* org.jacoco.core.internal.data.CRC64#classId(byte[])}. This might change in the future, as it's considered an
* implementation detail of JaCoCo (c.f. <a href="https://www.jacoco.org/jacoco/trunk/doc/classids.html">
* https://www.jacoco.org/jacoco/trunk/doc/classids.html</a>)
*/
private static Dump createDummyDump(long classId) {
ExecutionDataStore store = new ExecutionDataStore();
store.put(new ExecutionData(classId, "TestClass", new boolean[] { true, true, true }));
SessionInfo info = new SessionInfo("session-id", 124L, 125L);
return new Dump(info, store);
}
use of com.teamscale.report.jacoco.dump.Dump in project teamscale-jacoco-agent by cqse.
the class Converter method runJaCoCoReportGeneration.
/**
* Converts one .exec binary coverage file to XML.
*/
public void runJaCoCoReportGeneration() throws IOException, AgentOptionParseException {
List<File> jacocoExecutionDataList = ReportUtils.listFiles(ETestArtifactFormat.JACOCO, arguments.getInputFiles());
ExecFileLoader loader = new ExecFileLoader();
for (File jacocoExecutionData : jacocoExecutionDataList) {
loader.load(jacocoExecutionData);
}
SessionInfo sessionInfo = loader.getSessionInfoStore().getMerged("merged");
ExecutionDataStore executionDataStore = loader.getExecutionDataStore();
Logger logger = LoggingUtils.getLogger(this);
JaCoCoXmlReportGenerator generator = new JaCoCoXmlReportGenerator(arguments.getClassDirectoriesOrZips(), getWildcardIncludeExcludeFilter(), arguments.getDuplicateClassFileBehavior(), arguments.shouldIgnoreUncoveredClasses, wrap(logger));
try (Benchmark benchmark = new Benchmark("Generating the XML report")) {
generator.convert(new Dump(sessionInfo, executionDataStore), Paths.get(arguments.outputFile).toFile());
} catch (EmptyReportException e) {
logger.warn("Converted report was emtpy.", e);
}
}
use of com.teamscale.report.jacoco.dump.Dump in project teamscale-jacoco-agent by cqse.
the class CoverageViaHttpStrategy method testEnd.
@Override
public String testEnd(String test, TestExecution testExecution) throws JacocoRuntimeController.DumpException, CoverageGenerationException {
super.testEnd(test, testExecution);
TestInfoBuilder builder = new TestInfoBuilder(test);
Dump dump = controller.dumpAndReset();
builder.setCoverage(reportGenerator.convert(dump));
if (testExecution != null) {
builder.setExecution(testExecution);
}
TestInfo testInfo = builder.build();
String testInfoJson = testInfoJsonAdapter.toJson(testInfo);
logger.debug("Generated test info {}", testInfoJson);
return testInfoJson;
}
Aggregations