EvoMaster icon indicating copy to clipboard operation
EvoMaster copied to clipboard

EvoMaster Instrumentation Agent Error while running Evomaster controller class using cmd line

Open naveensabavath opened this issue 10 months ago • 5 comments

In intelli J it is running fine without errors but while running cmd line please check below

command :

java -Djdk.attach.allowAttachSelf=true --add-opens java.base/java.util.regex=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED -jar target/test-jar.jar

but while running with command line getting below error

15:18:27.892 [main] INFO org.testcontainers.utility.ImageNameSubstitutor -- Image name substitution will be performed by: DefaultImageNameSubstitutor (composite of 'ConfigurationFileImageNameSubstitutor' and 'PrefixingImageNameSubstitutor') WARNING: A Java agent has been loaded dynamically (/tmp/javaagent.org.evomaster.client.java.instrumentation.InstrumentingAgent17940319427532506921.jar) WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warning WARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more information WARNING: Dynamic loading of agents will be disallowed by default in a future release Exception in thread "Attach Listener" java.lang.ClassNotFoundException: org.evomaster.client.java.instrumentation.InstrumentingAgent at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:504) at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndCallAgentmain(InstrumentationImpl.java:582) *** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message Outstanding error when calling method in invokeJavaAgentMainMethod at ./src/java.instrument/share/native/libinstrument/JPLISAgent.c line: 627 *** java.lang.instrument ASSERTION FAILED ***: "success" with message invokeJavaAgentMainMethod failed at ./src/java.instrument/share/native/libinstrument/JPLISAgent.c line: 466 *** java.lang.instrument ASSERTION FAILED ***: "success" with message startJavaAgent failed at ./src/java.instrument/share/native/libinstrument/InvocationAdapter.c line: 444 Agent failed to start! Exception in thread "main" java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:118) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49) at org.springframework.boot.loader.Launcher.launch(Launcher.java:95) at org.springframework.boot.loader.Launcher.launch(Launcher.java:58) at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65) Caused by: java.lang.RuntimeException: Failed to apply bytecode instrumentation with JavaAgent. If you are using JDK 11 or above, are you sure you added the following JVM option? -Djdk.attach.allowAttachSelf=true Also, if you are using JDK 17 or above, you also need the following: --add-opens java.base/java.util.regex=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED This can also be set globally with the JDK_JAVA_OPTIONS environment variable. See documentation at https://github.com/EMResearch/EvoMaster/blob/master/docs/jdks.md at org.evomaster.client.java.controller.InstrumentedSutStarter.loadAgent(InstrumentedSutStarter.java:48) at org.evomaster.client.java.controller.InstrumentedSutStarter.(InstrumentedSutStarter.java:71) at com.aidtaas.mobius.content.services.EmbeddedEvoMasterController.main(EmbeddedEvoMasterController.java:177) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ... 5 more Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException at shaded.com.ea.agentloader.AgentLoader$1.loadAgent(AgentLoader.java:244) at shaded.com.ea.agentloader.AgentLoader.loadAgent(AgentLoader.java:77) at shaded.com.ea.agentloader.AgentLoader.loadAgentClass(AgentLoader.java:148) at shaded.com.ea.agentloader.AgentLoader.loadAgentClass(AgentLoader.java:102) at org.evomaster.client.java.controller.InstrumentedSutStarter.loadAgent(InstrumentedSutStarter.java:46) ... 8 more Caused by: java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:118) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at shaded.com.ea.agentloader.AgentLoader$1.loadAgent(AgentLoader.java:240) ... 12 more Caused by: java.lang.RuntimeException: Can't attach to this jvm. Add -javaagent:/tmp/javaagent.org.evomaster.client.java.instrumentation.InstrumentingAgent17940319427532506921.jar to the commandline at shaded.com.ea.agentloader.AgentLoaderHotSpot.loadAgent(AgentLoaderHotSpot.java:74) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ... 14 more Caused by: com.sun.tools.attach.AgentInitializationException: Agent JAR loaded but agent failed to initialize at jdk.attach/sun.tools.attach.HotSpotVirtualMachine.loadAgent(HotSpotVirtualMachine.java:170) at shaded.com.ea.agentloader.AgentLoaderHotSpot.loadAgent(AgentLoaderHotSpot.java:65) ... 15 more

naveensabavath avatar Feb 21 '25 16:02 naveensabavath

this seems related to #1177 I am not sure what you are trying to do and achieve here... are you just trying to run the generated test cases on the command-line? in that case, why not using surefire plugin and just execute mvn test?

arcuri82 avatar Feb 21 '25 21:02 arcuri82

the -Djdk.attach.allowAttachSelf=true --add-opens are not needed when running the generated tests

arcuri82 avatar Feb 21 '25 21:02 arcuri82

Hi @arcuri82 , this is not related to Genrate test cases …

Am doing-white box testing using Java So in Intelli J i can run ……….but i wanna run using cmd line while am doing am getting InstrumentingAgent error

Caused by: java.lang.RuntimeException: Can't attach to this jvm. Add -javaagent:/tmp/javaagent.org.evomaster.client.java.instrumentation.InstrumentingAgent1794031942753250692

Though am attaching evomasterInstrument jar path from .m2 repo to command am getting Some Null pointer exception can u correct me in this matter ?

naveensabavath avatar Feb 22 '25 03:02 naveensabavath

do you mean running the EM driver/controller on the command line? if so, should rather use an External driver, and not an Embedded one... however, we have currently no documentation written for it :( but you can look at some examples in the EMB repository (search for classes called ExternalEvoMasterController)

arcuri82 avatar Feb 24 '25 11:02 arcuri82

hi @arcuri82 ,

I tried to use ExternalEvomasterController instead of EmbeddedEvomasterController i build it....when i ran

am getting

java.lang.IllegalStateException: Instrumentation is not active

when i used EmbeddedEvomasterController i got " InstrumentationAgent Error Not found Error "

Now like u said i tried ExternalEvomasterController getting " Instrumentation is not active " Error

help me with this Issue

please check the code below

package library; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import org.evomaster.client.java.controller.ExternalSutController; import org.evomaster.client.java.controller.InstrumentedSutStarter; import org.evomaster.client.java.controller.api.dto.auth.AuthenticationDto; import org.evomaster.client.java.controller.api.dto.SutInfoDto; import org.evomaster.client.java.controller.api.dto.auth.HeaderDto; import org.evomaster.client.java.sql.DbSpecification; import org.evomaster.client.java.controller.problem.ProblemInfo; import org.evomaster.client.java.controller.problem.RestProblem; import org.testcontainers.containers.GenericContainer;

import java.sql.Connection; import java.util.Collections; import java.util.List;

public class ExternalEvoMasterController extends ExternalSutController {

private static final int DEFAULT_CONTROLLER_PORT = 40100;

private static final int DEFAULT_SUT_PORT = 12345;

private static final int DEFAULT_DB_PORT = 27017; private static final int MONGODB_PORT = 27017;

private static final String MONGODB_VERSION = "7.0.16";

private static final String MONGODB_DATABASE_NAME = "library_service";

public static void main(String[] args) {

int controllerPort = DEFAULT_CONTROLLER_PORT;
if (args.length > 0) {
    controllerPort = Integer.parseInt(args[0]);
}
int sutPort = DEFAULT_SUT_PORT;
if (args.length > 1) {
    sutPort = Integer.parseInt(args[1]);
}
String jarLocation = "/home/chowhan/Desktop/Naveen/library/library-content-service/target";
if (args.length > 2) {
    jarLocation = args[2];
}
if (!jarLocation.endsWith(".jar")) {
    jarLocation += "/library-content-service.jar";
}

int timeoutSeconds = 120;
if (args.length > 3) {
    timeoutSeconds = Integer.parseInt(args[3]);
}

String command = "java";
if (args.length > 4) {
    command = args[4];
}

ExternalEvoMasterController controller =
        new ExternalEvoMasterController(controllerPort, jarLocation, sutPort, timeoutSeconds, command);
InstrumentedSutStarter starter = new InstrumentedSutStarter(controller);

starter.start();

}

private final int timeoutSeconds;

private final int sutPort;

private String jarLocation; private Connection sqlConnection; private List<DbSpecification> dbSpecification;

private MongoClient mongoClient;

private final GenericContainer<?> mongodb;

public ExternalEvoMasterController() { this(DEFAULT_CONTROLLER_PORT, "/home/chowhan/Desktop/Naveen/library/library-content-service/target/library-content-service.jar", DEFAULT_SUT_PORT, 120, "java"); }

public ExternalEvoMasterController(String jarLocation) { this(); this.jarLocation = jarLocation; }

public ExternalEvoMasterController(int controllerPort, String jarLocation, int sutPort, int timeoutSeconds, String command) { this.sutPort = sutPort; this.jarLocation = jarLocation; this.timeoutSeconds = timeoutSeconds; setControllerPort(controllerPort); this.mongodb = new GenericContainer<>("mongo:" + MONGODB_VERSION) .withTmpFs(Collections.singletonMap("/data/db", "rw")) .withExposedPorts(DEFAULT_DB_PORT); setJavaCommand(command); }

@Override public String[] getInputParameters() { return new String[]{ "--server.port=" + sutPort, "--liquibase.enabled=false", "--spring.data.mongodb.uri=mongodb://" + mongodb.getContainerIpAddress() + ":" + mongodb.getMappedPort(DEFAULT_DB_PORT) + "/" + MONGODB_DATABASE_NAME, "--spring.datasource.username=sa", "--spring.datasource.password", "--dg-toolkit.derby.port=0", "--spring.cache.type=NONE" }; }

private String dbUrl() { return null; }

@Override public String[] getJVMParameters() { return new String[]{ }; }

@Override public String getBaseURL() { return "http://localhost:" + sutPort; }

@Override public String getPathToExecutableJar() { return jarLocation; }

@Override public String getLogMessageOfInitializedServer() { return "Started library-content-service-Application in "; }

@Override public long getMaxAwaitForInitializationInSeconds() { return timeoutSeconds; }

@Override public void preStart() {

mongodb.start();

try {
    mongoClient = MongoClients.create("mongodb://" + mongodb.getContainerIpAddress() + ":" + mongodb.getMappedPort(DEFAULT_DB_PORT));
} catch (Exception e) {
    System.out.println("ERROR: " + e.getMessage());
    throw new RuntimeException(e);
}

}

@Override public void postStart() {

}

@Override public void preStop() {

}

@Override public void postStop() { mongodb.stop(); }

@Override public String getPackagePrefixesToCover() { return "com.stats.library."; }

public void resetStateOfSUT() { mongoClient.getDatabase(MONGODB_DATABASE_NAME).drop(); }

@Override public ProblemInfo getProblemInfo() { return new RestProblem( getBaseURL() + "/library-content-service/v3/api-docs", null ); }

@Override public SutInfoDto.OutputFormat getPreferredOutputFormat() { return SutInfoDto.OutputFormat.JAVA_JUNIT_4; }

@Override public List<AuthenticationDto> getInfoForAuthentication() { String value = "Bearer ";

AuthenticationDto auth = new AuthenticationDto("BearerAuth"); // Name can be anything meaningful
auth.fixedHeaders.add(new HeaderDto("Authorization", value));

return List.of(auth);

}

@Override public List<DbSpecification> getDbSpecifications() { return dbSpecification; }

@Override public Object getMongoConnection() { return mongoClient; } }

i build jar and then ran ExternalControllerClass in I ntelli J and hitting below command

java -jar evomaster_Updated.jar --maxTime 10m --outputFolder "src/test/java/Evomaster"

giving below Error

Started controller server on: http://localhost:40100/controller/api Going to start the SUT WARN - Failed to find Agent jar in current classloader. URLs of classloader: Going to start SUT with command: java -Devomaster.javaagent.external.port=38555 -Devomaster.javaagent.replacement_categories=BASE,SQL,EXT_0,MONGO -javaagent:/home/gaian/Desktop/Naveen/Mobius/TestsValidation/EvomasterExternalDriver/target/evomaster-external-runner.jar=com.aidtaas.mobius. -Xmx2G -Xms1G -jar /home/gaian/Desktop/Naveen/Mobius/mobius-content-service/target/mobius-content-service.jar --server.port=12345 --liquibase.enabled=false --spring.data.mongodb.uri=mongodb://localhost:32769/content_service --spring.datasource.username=sa --spring.datasource.password --dg-toolkit.derby.port=0 --spring.cache.type=NONE SUT: Exception in thread "main" java.lang.reflect.InvocationTargetException SUT: at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) SUT: at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) SUT: at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) SUT: at java.base/java.lang.reflect.Method.invoke(Method.java:569) SUT: at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:491) SUT: at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:503) SUT: Caused by: java.lang.ExceptionInInitializerError SUT: at org.evomaster.client.java.instrumentation.InstrumentingAgent.agentmain(InstrumentingAgent.java:63) SUT: at org.evomaster.client.java.instrumentation.InstrumentingAgent.premain(InstrumentingAgent.java:49) SUT: ... 6 more SUT: Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.findLoadedClass(java.lang.String) accessible: module java.base does not "opens java.lang" to unnamed module @2a84aee7 SUT: at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354) SUT: at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297) SUT: at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:200) SUT: at java.base/java.lang.reflect.Method.setAccessible(Method.java:194) SUT: at org.evomaster.client.java.instrumentation.InstrumentingAgent$TransformerForTests.(InstrumentingAgent.java:122) SUT: ... 8 more SUT: *** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message Outstanding error when calling method in invokeJavaAgentMainMethod at ./src/java.instrument/share/native/libinstrument/JPLISAgent.c line: 619 SUT: *** java.lang.instrument ASSERTION FAILED ***: "success" with message invokeJavaAgentMainMethod failed at ./src/java.instrument/share/native/libinstrument/JPLISAgent.c line: 459 SUT: *** java.lang.instrument ASSERTION FAILED *: "result" with message agent load/premain call failed at ./src/java.instrument/share/native/libinstrument/JPLISAgent.c line: 422 SUT: FATAL ERROR in native method: processing of -javaagent failed, processJavaStart failed SUT: Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) SUT: V [libjvm.so+0x8c4012] jni_FatalError+0xc2 SUT: V [libjvm.so+0xa4c48f] JvmtiExport::post_vm_initialized()+0xcf SUT: V [libjvm.so+0xec3f62] Threads::create_vm(JavaVMInitArgs, bool)+0x922 SUT: V [libjvm.so+0x8d2ab6] JNI_CreateJavaVM+0x56 SUT: C [libjli.so+0x3d43] JavaMain+0x93 SUT: C [libjli.so+0x7fdd] ThreadJavaMain+0xd SUT: WARN - SUT is still alive, but its output was closed before producing the initialization message. ERROR - Could not establish connection to retrieve code metrics Going to stop the SUT ERROR - Instrumentation is not active java.lang.IllegalStateException: Instrumentation is not active at org.evomaster.client.java.controller.ExternalSutController.checkInstrumentation(ExternalSutController.java:546) at org.evomaster.client.java.controller.ExternalSutController.bootingSut(ExternalSutController.java:514) at org.evomaster.client.java.controller.internal.EMController.lambda$runSut$21(EMController.java:367) at org.evomaster.client.java.controller.internal.EMController.noKillSwitch(EMController.java:126) at org.evomaster.client.java.controller.internal.EMController.runSut(EMController.java:367) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at shaded.org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52) at shaded.org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:124) at shaded.org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:167) at shaded.org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:176) at shaded.org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:79) at shaded.org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:475) at shaded.org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:397) at shaded.org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:81) at shaded.org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:255) at shaded.org.glassfish.jersey.internal.Errors$1.call(Errors.java:248) at shaded.org.glassfish.jersey.internal.Errors$1.call(Errors.java:244) at shaded.org.glassfish.jersey.internal.Errors.process(Errors.java:292) at shaded.org.glassfish.jersey.internal.Errors.process(Errors.java:274) at shaded.org.glassfish.jersey.internal.Errors.process(Errors.java:244) at shaded.org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265) at shaded.org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:234) at shaded.org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:680) at shaded.org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:394) at shaded.org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346) at shaded.org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:366) at shaded.org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:319) at shaded.org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205) at shaded.org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:763) at shaded.org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:551) at shaded.org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) at shaded.org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1369) at shaded.org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) at shaded.org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:489) at shaded.org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) at shaded.org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1284) at shaded.org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at shaded.org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at shaded.org.eclipse.jetty.server.Server.handle(Server.java:501) at shaded.org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383) at shaded.org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:556) at shaded.org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375) at shaded.org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:273) at shaded.org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) at shaded.org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103) at shaded.org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) at shaded.org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336) at shaded.org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313) at shaded.org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171) at shaded.org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:135) at shaded.org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806) at shaded.org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938) at java.base/java.lang.Thread.run(Thread.java:1583)

For your Information am using Java 21

naveensabavath avatar Feb 28 '25 05:02 naveensabavath