Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions client-java/controller-api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@
<groupId>org.evomaster</groupId>
<artifactId>evomaster-client-java-sql-dto</artifactId>
</dependency>
<dependency>
<groupId>org.evomaster</groupId>
<artifactId>evomaster-client-java-instrumentation-shared</artifactId>
</dependency>
<dependency>
<groupId>org.evomaster</groupId>
<artifactId>evomaster-test-utils-java</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,16 @@ public class SutRunDto {
*/
public String methodReplacementCategories;

/**
* Whether to enable Dynamosa graphs generation in the Java agent
*/
public Boolean enableDynamosaGraphs;

/**
* Whether to write generated graphs (DOT/PNGs) to disk on the agent side
*/
public Boolean writeCfg;


public SutRunDto() {
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package org.evomaster.client.java.controller.api.dto;

import org.evomaster.client.java.instrumentation.shared.dto.ControlDependenceGraphDto;

import java.util.ArrayList;
import java.util.List;

Expand All @@ -14,4 +16,9 @@ public class TestResultsDto {
public List<AdditionalInfoDto> additionalInfoList = new ArrayList<>();

public List<ExtraHeuristicsDto> extraHeuristics = new ArrayList<>();

/**
* Incremental DynaMOSA control-dependence graphs discovered since the last handshake.
*/
public List<ControlDependenceGraphDto> dynamosaCdgs = new ArrayList<>();
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import org.evomaster.client.java.controller.api.dto.problem.rpc.ScheduleTaskInvocationDto;
import org.evomaster.client.java.controller.internal.SutController;
import org.evomaster.client.java.instrumentation.*;
import org.evomaster.client.java.instrumentation.external.DynamosaControlDependenceSnapshot;
import org.evomaster.client.java.instrumentation.shared.dto.ControlDependenceGraphDto;
import org.evomaster.client.java.instrumentation.object.ClassToSchema;
import org.evomaster.client.java.instrumentation.staticstate.ExecutionTracer;
import org.evomaster.client.java.instrumentation.staticstate.ObjectiveRecorder;
Expand All @@ -31,6 +33,8 @@
*/
public abstract class EmbeddedSutController extends SutController {

private int dynamosaCdgIndex = 0;

@Override
public final void setupForGeneratedTest(){
//In the past, we configured P6Spy here
Expand Down Expand Up @@ -138,4 +142,21 @@ public final void getJvmDtoSchema(List<String> dtoNames) {
public final void bootingSut(boolean bootingSut) {
ObjectiveRecorder.setBooting(bootingSut);
}

@Override
public List<ControlDependenceGraphDto> getDynamosaControlDependenceGraphs() {
DynamosaControlDependenceSnapshot snapshot = InstrumentationController.getControlDependenceSnapshot(dynamosaCdgIndex);
dynamosaCdgIndex = snapshot.getNextIndex();
return snapshot.getGraphs();
}

@Override
public void setDynamosaGraphsEnabled(boolean enableGraphs) {
InstrumentationController.setDynamosaGraphsEnabled(enableGraphs);
}

@Override
public void setWriteCfgEnabled(boolean writeCfg) {
InstrumentationController.setWriteCfgEnabled(writeCfg);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
import org.evomaster.client.java.controller.internal.SutController;
import org.evomaster.client.java.instrumentation.external.JarAgentLocator;
import org.evomaster.client.java.instrumentation.external.ServerController;
import org.evomaster.client.java.instrumentation.external.DynamosaConfigDto;
import org.evomaster.client.java.instrumentation.shared.dto.ControlDependenceGraphDto;

import java.io.BufferedReader;
import java.io.IOException;
Expand Down Expand Up @@ -447,6 +449,15 @@ public BootTimeInfoDto getBootTimeInfoDto() {
return getBootTimeInfoDto(serverController.handleBootTimeObjectiveInfo());
}

@Override
public List<ControlDependenceGraphDto> getDynamosaControlDependenceGraphs() {
if (!isInstrumentationActivated()){
return Collections.emptyList();
}
List<ControlDependenceGraphDto> graphs = serverController.getDynamosaControlDependenceGraphs();
return graphs != null ? graphs : Collections.emptyList();
}

@Override
public final void newActionSpecificHandler(ActionDto dto) {
if (isInstrumentationActivated()) {
Expand Down Expand Up @@ -522,6 +533,28 @@ public final void setExecutingInitMongo(boolean executingInitMongo) {
ExecutionTracer.setExecutingInitMongo(executingInitMongo);
}

/**
* Send Dynamosa configuration to the Java Agent.
*/
public final void setDynamosaGraphsEnabled(boolean enableGraphs) {
checkInstrumentation();
DynamosaConfigDto dto = new DynamosaConfigDto();
dto.enableGraphs = enableGraphs;
dto.writeCfg = null;
serverController.setDynamosaConfig(dto);
}

/**
* Control whether the agent writes DOT/PNG graphs to disk.
*/
public final void setWriteCfgEnabled(boolean writeCfg) {
checkInstrumentation();
DynamosaConfigDto dto = new DynamosaConfigDto();
dto.enableGraphs = null;
dto.writeCfg = writeCfg;
serverController.setDynamosaConfig(dto);
}

@Override
public final void setExecutingAction(boolean executingAction){
checkInstrumentation();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import org.evomaster.client.java.sql.SqlScriptRunner;
import org.evomaster.client.java.controller.problem.rpc.schema.LocalAuthSetupSchema;
import org.evomaster.client.java.instrumentation.*;
import org.evomaster.client.java.instrumentation.shared.dto.ControlDependenceGraphDto;
import org.evomaster.client.java.instrumentation.shared.StringSpecializationInfo;
import org.evomaster.client.java.instrumentation.staticstate.ExecutionTracer;
import org.evomaster.client.java.utils.SimpleLogger;
Expand Down Expand Up @@ -254,7 +255,6 @@ public Response getSutInfo(@Context HttpServletRequest httpServletRequest) {
return Response.status(500).entity(WrappedResponseDto.withError(msg)).build();
}


return Response.status(200).entity(WrappedResponseDto.withData(dto)).build();
}

Expand Down Expand Up @@ -377,6 +377,11 @@ public Response runSut(SutRunDto dto, @Context HttpServletRequest httpServletReq
if (!noKillSwitch(() -> sutController.isSutRunning())) {
noKillSwitch(() -> sutController.bootingSut(true));
baseUrlOfSUT = noKillSwitch(() -> sutController.startSut());
// Configure Dynamosa graphs on the agent, if requested by core
Boolean enableGraphs = dto.enableDynamosaGraphs;
if (enableGraphs != null) noKillSwitch(() -> sutController.setDynamosaGraphsEnabled(enableGraphs));
Boolean writeCfg = dto.writeCfg;
if (writeCfg != null) noKillSwitch(() -> sutController.setWriteCfgEnabled(writeCfg));
noKillSwitch(() -> sutController.bootingSut(false));
if (baseUrlOfSUT == null) {
//there has been an internal failure in starting the SUT
Expand Down Expand Up @@ -588,6 +593,12 @@ public Response getTestResults(
SimpleLogger.error(msg);
return Response.status(500).entity(WrappedResponseDto.withError(msg)).build();
}

List<ControlDependenceGraphDto> dynamosaCdgs =
noKillSwitch(() -> sutController.getDynamosaControlDependenceGraphs());
if (dynamosaCdgs != null && !dynamosaCdgs.isEmpty()) {
dto.dynamosaCdgs.addAll(dynamosaCdgs);
}
// }
// else {
// // there is still some data that we need during minimization
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
import org.evomaster.client.java.instrumentation.AdditionalInfo;
import org.evomaster.client.java.instrumentation.BootTimeObjectiveInfo;
import org.evomaster.client.java.instrumentation.TargetInfo;
import org.evomaster.client.java.instrumentation.shared.dto.ControlDependenceGraphDto;
import org.evomaster.client.java.instrumentation.staticstate.UnitsInfoRecorder;
import org.evomaster.client.java.utils.SimpleLogger;
import org.glassfish.jersey.jackson.JacksonFeature;
Expand Down Expand Up @@ -1564,6 +1565,22 @@ public abstract List<TargetInfo> getTargetInfos(Collection<Integer> ids,

public abstract void setExecutingAction(boolean executingAction);

/**
* Enable/disable Dynamosa graphs generation in the Java agent.
* Default no-op; external controllers can override to send to agent.
*/
public void setDynamosaGraphsEnabled(boolean enableGraphs){
// no-op by default
}

/**
* Enable/disable writing graphs to disk in the Java agent.
* Default no-op; external controllers can override to send to agent.
*/
public void setWriteCfgEnabled(boolean writeCfg){
// no-op by default
}


/**
* specify whether the SUT is booting (ie starting up), or not.
Expand All @@ -1576,6 +1593,10 @@ public abstract List<TargetInfo> getTargetInfos(Collection<Integer> ids,

public abstract BootTimeInfoDto getBootTimeInfoDto();

public List<ControlDependenceGraphDto> getDynamosaControlDependenceGraphs(){
return Collections.emptyList();
}

protected BootTimeInfoDto getBootTimeInfoDto(BootTimeObjectiveInfo info){
if (info == null)
return null;
Expand Down
Loading