Skip to content

Concrete execution fails for a static method using a static field #711

Closed

Description

@alisevych

Description

Static method without input parameters is using a static field inside.
Concrete execution fails with "java.lang.IllegalArgumentException: wrong number of arguments"

To Reproduce

Steps to reproduce the behavior:

  1. IntelliJ IDEA with UTBot installed is running.
  2. Turn fuzzing on // File -> Settings -> Tools -> UTbot -> select some middle Code Analysis slider position
  3. Run test generation for the following class:
public class CheckStatic {

    public final static Integer keyValue = 420;

    public static int check() {
        if (keyValue == 0) {
            return keyValue;
        } else {
            return -keyValue;
        }
    }

}

Expected behavior

Tests are supposed to be generated without errors.

Actual behavior

An error test is generated with information about an error in the concrete executor.

Visual proofs (screenshots, logs, images)

Error report:

    public void testCheck_errors() {
        // Couldn't generate some tests. List of errors:
        // 
        // 4 occurrences of:
        // Default concrete execution failed

    }

Child process error:

Transforming: org/example/CheckStatic
java.lang.IllegalArgumentException: wrong number of arguments
signature=check()I
this=null: org.example.CheckStatic
arguments={
org.example.CheckStatic@1ad9c76c: org.example.CheckStatic
}

	at org.utbot.instrumentation.instrumentation.InvokeInstrumentation.invoke-d1pmJ48(InvokeInstrumentation.kt:77)
	at org.utbot.instrumentation.instrumentation.InvokeInstrumentation.invoke(InvokeInstrumentation.kt:17)
	at org.utbot.instrumentation.instrumentation.Instrumentation$DefaultImpls.invoke$default(Instrumentation.kt:25)
	at org.utbot.framework.concrete.UtExecutionInstrumentation$invoke$$inlined$withReflection$lambda$1$1.invoke(UtExecutionInstrumentation.kt:163)
	at org.utbot.common.ThreadBasedExecutor$invokeWithTimeout$2.invoke(ThreadUtil.kt:56)
	at org.utbot.common.ThreadBasedExecutor$invokeWithTimeout$1.invoke(ThreadUtil.kt:47)
	at org.utbot.common.ThreadBasedExecutor$invokeWithTimeout$1.invoke(ThreadUtil.kt:22)
	at kotlin.concurrent.ThreadsKt$thread$thread$1.run(Thread.kt:30)

Environment

Windows 10 Pro
Gradle 6.8
JDK 8

Additional context

The example was taken from utbot-sample/src/main/java/org/utbot/examples/mock/CommonMocksExample.java - just added "static" to the clinitMockExample() definition.

Activity

  1. moved this to Todo in UTBot Javaon Aug 11, 2022
  2. tyuldashev commented on Oct 7, 2022

    @tyuldashev
    Collaborator

    Currently in main (build 411)
    Empty test is generated and concrete executor log contains exception:

    public class CheckStaticTest {
    }
    Failed to instantiate SLF4J LoggerFactory
    Reported exception:
    java.lang.NoClassDefFoundError: org/utbot/framework/concrete/InstrumentationContext$MockGetter
    	at org.slf4j.LoggerFactory.findPossibleStaticLoggerBinderPathSet(LoggerFactory.java:296)
    	at org.slf4j.LoggerFactory.bind(LoggerFactory.java:146)
    	at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124)
    	at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:412)
    	at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:357)
    	at mu.KotlinLogging.logger(KotlinLogging.kt:43)
    	at org.utbot.framework.concrete.UtExecutionInstrumentation$invoke$1$1$concreteExecutionResult$1$concreteResult$1.invoke(UtExecutionInstrumentation.kt:342)
    	at org.utbot.common.ThreadBasedExecutor$invokeWithTimeout$2.invoke(ThreadUtil.kt:56)
    	at org.utbot.common.ThreadBasedExecutor$invokeWithTimeout$1.invoke(ThreadUtil.kt:47)
    	at org.utbot.common.ThreadBasedExecutor$invokeWithTimeout$1.invoke(ThreadUtil.kt:43)
    	at kotlin.concurrent.ThreadsKt$thread$thread$1.run(Thread.kt:30)
    Caused by: java.lang.ClassNotFoundException: org.utbot.framework.concrete.InstrumentationContext$MockGetter
    	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    	... 11 more
    
  3. added this to the 2022.10.1 Release milestone on Oct 11, 2022
  4. alisevych commented on Oct 11, 2022

    @alisevych
    MemberAuthor

    Reproducing with RC-build: build 417

  5. SBOne-Kenobi commented on Oct 12, 2022

    @SBOne-Kenobi
    Contributor

    When our fuzzer meets methods without any parameters, it tries to generate this instance and call static method from this instance as a usual method. @Markoutte, can you fix it?

  6. Repository owner moved this from Todo to Done in UTBot Javaon Oct 12, 2022
  7. self-assigned this
    on Oct 20, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

comp-fuzzingIssue is related to the fuzzingctg-bugIssue is a bug

Type

No type

Projects

Relationships

None yet

Development

No branches or pull requests

Issue actions