Skip to content

Commit 18b4f1e

Browse files
committed
added algoritm logic
1 parent 26aa643 commit 18b4f1e

48 files changed

Lines changed: 1304 additions & 3797 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

client-java/controller-api/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@
2222
<groupId>org.evomaster</groupId>
2323
<artifactId>evomaster-client-java-sql-dto</artifactId>
2424
</dependency>
25+
<dependency>
26+
<groupId>org.evomaster</groupId>
27+
<artifactId>evomaster-client-java-instrumentation-shared</artifactId>
28+
</dependency>
2529
<dependency>
2630
<groupId>org.evomaster</groupId>
2731
<artifactId>evomaster-test-utils-java</artifactId>

client-java/controller-api/src/main/java/org/evomaster/client/java/controller/api/ControllerConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,5 @@ public class ControllerConstants {
3333
public static final String POST_SEARCH_ACTION = "/postSearchAction";
3434

3535
public static final String DERIVE_PARAMS = "/deriveParams";
36+
3637
}

client-java/controller-api/src/main/java/org/evomaster/client/java/controller/api/dto/SutInfoDto.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import org.evomaster.client.java.controller.api.dto.problem.RestProblemDto;
77
import org.evomaster.client.java.controller.api.dto.problem.GraphQLProblemDto;
88
import org.evomaster.client.java.controller.api.dto.problem.WebProblemDto;
9-
109
import java.util.List;
1110

1211
public class SutInfoDto {

client-java/controller-api/src/main/java/org/evomaster/client/java/controller/api/dto/TestResultsDto.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.evomaster.client.java.controller.api.dto;
22

3+
import org.evomaster.client.java.instrumentation.shared.dto.ControlDependenceGraphDto;
4+
35
import java.util.ArrayList;
46
import java.util.List;
57

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

1618
public List<ExtraHeuristicsDto> extraHeuristics = new ArrayList<>();
19+
20+
/**
21+
* Incremental DynaMOSA control-dependence graphs discovered since the last handshake.
22+
*/
23+
public List<ControlDependenceGraphDto> dynamosaCdgs = new ArrayList<>();
1724
}

client-java/controller/src/main/java/org/evomaster/client/java/controller/EmbeddedSutController.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import org.evomaster.client.java.controller.api.dto.problem.rpc.ScheduleTaskInvocationDto;
77
import org.evomaster.client.java.controller.internal.SutController;
88
import org.evomaster.client.java.instrumentation.*;
9+
import org.evomaster.client.java.instrumentation.external.DynamosaControlDependenceSnapshot;
10+
import org.evomaster.client.java.instrumentation.shared.dto.ControlDependenceGraphDto;
911
import org.evomaster.client.java.instrumentation.object.ClassToSchema;
1012
import org.evomaster.client.java.instrumentation.staticstate.ExecutionTracer;
1113
import org.evomaster.client.java.instrumentation.staticstate.ObjectiveRecorder;
@@ -31,6 +33,8 @@
3133
*/
3234
public abstract class EmbeddedSutController extends SutController {
3335

36+
private int dynamosaCdgIndex = 0;
37+
3438
@Override
3539
public final void setupForGeneratedTest(){
3640
//In the past, we configured P6Spy here
@@ -138,4 +142,21 @@ public final void getJvmDtoSchema(List<String> dtoNames) {
138142
public final void bootingSut(boolean bootingSut) {
139143
ObjectiveRecorder.setBooting(bootingSut);
140144
}
145+
146+
@Override
147+
public List<ControlDependenceGraphDto> getDynamosaControlDependenceGraphs() {
148+
DynamosaControlDependenceSnapshot snapshot = InstrumentationController.getControlDependenceSnapshot(dynamosaCdgIndex);
149+
dynamosaCdgIndex = snapshot.getNextIndex();
150+
return snapshot.getGraphs();
151+
}
152+
153+
@Override
154+
public void setDynamosaGraphsEnabled(boolean enableGraphs) {
155+
InstrumentationController.setDynamosaGraphsEnabled(enableGraphs);
156+
}
157+
158+
@Override
159+
public void setWriteCfgEnabled(boolean writeCfg) {
160+
InstrumentationController.setWriteCfgEnabled(writeCfg);
161+
}
141162
}

client-java/controller/src/main/java/org/evomaster/client/java/controller/ExternalSutController.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.evomaster.client.java.instrumentation.external.JarAgentLocator;
1414
import org.evomaster.client.java.instrumentation.external.ServerController;
1515
import org.evomaster.client.java.instrumentation.external.DynamosaConfigDto;
16+
import org.evomaster.client.java.instrumentation.shared.dto.ControlDependenceGraphDto;
1617

1718
import java.io.BufferedReader;
1819
import java.io.IOException;
@@ -448,6 +449,15 @@ public BootTimeInfoDto getBootTimeInfoDto() {
448449
return getBootTimeInfoDto(serverController.handleBootTimeObjectiveInfo());
449450
}
450451

452+
@Override
453+
public List<ControlDependenceGraphDto> getDynamosaControlDependenceGraphs() {
454+
if (!isInstrumentationActivated()){
455+
return Collections.emptyList();
456+
}
457+
List<ControlDependenceGraphDto> graphs = serverController.getDynamosaControlDependenceGraphs();
458+
return graphs != null ? graphs : Collections.emptyList();
459+
}
460+
451461
@Override
452462
public final void newActionSpecificHandler(ActionDto dto) {
453463
if (isInstrumentationActivated()) {

client-java/controller/src/main/java/org/evomaster/client/java/controller/internal/EMController.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.evomaster.client.java.sql.SqlScriptRunner;
2020
import org.evomaster.client.java.controller.problem.rpc.schema.LocalAuthSetupSchema;
2121
import org.evomaster.client.java.instrumentation.*;
22+
import org.evomaster.client.java.instrumentation.shared.dto.ControlDependenceGraphDto;
2223
import org.evomaster.client.java.instrumentation.shared.StringSpecializationInfo;
2324
import org.evomaster.client.java.instrumentation.staticstate.ExecutionTracer;
2425
import org.evomaster.client.java.utils.SimpleLogger;
@@ -254,7 +255,6 @@ public Response getSutInfo(@Context HttpServletRequest httpServletRequest) {
254255
return Response.status(500).entity(WrappedResponseDto.withError(msg)).build();
255256
}
256257

257-
258258
return Response.status(200).entity(WrappedResponseDto.withData(dto)).build();
259259
}
260260

@@ -593,6 +593,12 @@ public Response getTestResults(
593593
SimpleLogger.error(msg);
594594
return Response.status(500).entity(WrappedResponseDto.withError(msg)).build();
595595
}
596+
597+
List<ControlDependenceGraphDto> dynamosaCdgs =
598+
noKillSwitch(() -> sutController.getDynamosaControlDependenceGraphs());
599+
if (dynamosaCdgs != null && !dynamosaCdgs.isEmpty()) {
600+
dto.dynamosaCdgs.addAll(dynamosaCdgs);
601+
}
596602
// }
597603
// else {
598604
// // there is still some data that we need during minimization

client-java/controller/src/main/java/org/evomaster/client/java/controller/internal/SutController.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import org.evomaster.client.java.instrumentation.AdditionalInfo;
5050
import org.evomaster.client.java.instrumentation.BootTimeObjectiveInfo;
5151
import org.evomaster.client.java.instrumentation.TargetInfo;
52+
import org.evomaster.client.java.instrumentation.shared.dto.ControlDependenceGraphDto;
5253
import org.evomaster.client.java.instrumentation.staticstate.UnitsInfoRecorder;
5354
import org.evomaster.client.java.utils.SimpleLogger;
5455
import org.glassfish.jersey.jackson.JacksonFeature;
@@ -1592,6 +1593,10 @@ public void setWriteCfgEnabled(boolean writeCfg){
15921593

15931594
public abstract BootTimeInfoDto getBootTimeInfoDto();
15941595

1596+
public List<ControlDependenceGraphDto> getDynamosaControlDependenceGraphs(){
1597+
return Collections.emptyList();
1598+
}
1599+
15951600
protected BootTimeInfoDto getBootTimeInfoDto(BootTimeObjectiveInfo info){
15961601
if (info == null)
15971602
return null;

client-java/instrumentation/src/main/java/org/evomaster/client/java/instrumentation/InstrumentationController.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package org.evomaster.client.java.instrumentation;
22

3-
import org.evomaster.client.java.instrumentation.object.ClassToSchema;
3+
import org.evomaster.client.java.instrumentation.dynamosa.graphs.GraphPool;
44
import org.evomaster.client.java.instrumentation.staticstate.ExecutionTracer;
55
import org.evomaster.client.java.instrumentation.staticstate.ObjectiveRecorder;
66
import org.evomaster.client.java.instrumentation.staticstate.UnitsInfoRecorder;
7+
import org.evomaster.client.java.instrumentation.dynamosa.DynamosaConfig;
8+
import org.evomaster.client.java.instrumentation.external.DynamosaControlDependenceSnapshot;
79

810
import java.util.ArrayList;
911
import java.util.Collection;
@@ -16,6 +18,7 @@ public class InstrumentationController {
1618
public static void resetForNewSearch(){
1719
ExecutionTracer.reset();
1820
ObjectiveRecorder.reset(false);
21+
GraphPool.refreshAllCdgs();
1922
}
2023

2124
/*
@@ -146,4 +149,16 @@ public static void extractSpecifiedDto(List<String> dtoNames){
146149
UnitsInfoRecorder.registerSpecifiedDtoSchema(ExtractJvmClass.extractAsSchema(dtoNames));
147150
}
148151

152+
public static DynamosaControlDependenceSnapshot getControlDependenceSnapshot(int fromIndex){
153+
return GraphPool.exportSnapshotFromIndex(fromIndex);
154+
}
155+
156+
public static void setDynamosaGraphsEnabled(boolean enableGraphs) {
157+
DynamosaConfig.setEnableGraphs(enableGraphs);
158+
}
159+
160+
public static void setWriteCfgEnabled(boolean writeCfg) {
161+
DynamosaConfig.setWriteCfgEnabled(writeCfg);
162+
}
163+
149164
}

client-java/instrumentation/src/main/java/org/evomaster/client/java/instrumentation/Instrumentator.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import org.evomaster.client.java.instrumentation.staticstate.UnitsInfoRecorder;
99
import org.evomaster.client.java.utils.SimpleLogger;
1010
import org.evomaster.client.java.instrumentation.dynamosa.DynamosaConfig;
11-
import org.evomaster.client.java.instrumentation.dynamosa.graphs.cfg.CFGClassAdapter;
11+
import org.evomaster.client.java.instrumentation.dynamosa.visitor.CFGClassVisitor;
1212
import org.objectweb.asm.ClassReader;
1313
import org.objectweb.asm.ClassVisitor;
1414
import org.objectweb.asm.ClassWriter;
@@ -67,16 +67,15 @@ public byte[] transformBytes(ClassLoader classLoader, ClassName className, Class
6767
ClassNode cn = new ClassNode();
6868
reader.accept(cn, readFlags);
6969

70-
if(canInstrumentForCoverage(className)){
70+
boolean canCollectCoverage = canInstrumentForCoverage(className);
71+
if(canCollectCoverage){
72+
if (DynamosaConfig.isGraphsEnabled()){
73+
cv = new CFGClassVisitor(classLoader, cv);
74+
}
7175
cv = new CoverageClassVisitor(cv, className);
7276
} else {
7377
cv = new ThirdPartyClassVisitor(cv, className);
74-
}
75-
76-
boolean dynamosaGraphs = DynamosaConfig.isGraphsEnabled();
77-
if (dynamosaGraphs) {
78-
cv = new CFGClassAdapter(classLoader, cv);
79-
}
78+
}
8079

8180
try {
8281
cn.accept(cv);

0 commit comments

Comments
 (0)