Skip to content

Concrete execution exceptions for Collection<Collection<Double>> #1020

Open
@alisevych

Description

@alisevych

Description

NoSuchElementException and NullPointerException are thrown from concrete executions by symbolic engine of a method with Collection<Collection> as input.

To Reproduce

  1. Install one of the latest plugin build from main on IntelliJ Idea 2022.1.4
  2. Symbolic execution is on
  3. Add the following method to a Java class:
public static boolean isDiagonal(Collection<Collection<Double>> matrix) {
        int cols = matrix.size();
        if (cols <= 1) {
            return false;
        }
        int i = 0;
        for (Collection<Double> col : matrix) {
            if (col.size() != cols) {
                return false;
            }
            int j = 0;
            for (Double value : col) {
                if (i == j && value == 0.0) return false;
                if (i != j && value != 0.0) return false;
                j++;
            }
            i++;
        }
        return true;
    }
  1. Generate tests with UTBot symbolic execution

Expected behavior

Tests are supposed to be generated.

Actual behavior

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

Exceptions in concrete execution logs
18:18:25.437 ERROR| java.util.NoSuchElementException
	at java.base/java.util.Vector$Itr.next(Vector.java:1280)
	at java.base/java.util.AbstractList.hashCode(AbstractList.java:566)
	at java.base/java.util.Vector.hashCode(Vector.java:1106)
	at java.base/java.util.HashMap.hash(HashMap.java:340)
	at java.base/java.util.HashMap.put(HashMap.java:608)
	at java.base/java.util.HashSet.add(HashSet.java:220)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.utbot.common.KClassUtilKt.invokeCatching(KClassUtil.kt:10)
	at org.utbot.framework.concrete.MockValueConstructor$call$1.invoke(MockValueConstructor.kt:478)
	at org.utbot.framework.concrete.MockValueConstructor$call$1.invoke(MockValueConstructor.kt:477)
	at org.utbot.instrumentation.process.SecurityKt$runSandbox$1$1.invoke(Security.kt:38)
	at org.utbot.instrumentation.process.SecurityKt$sandbox$1.invoke(Security.kt:61)
	at org.utbot.instrumentation.process.SecurityKt$sandbox$2.invoke(Security.kt:77)
	at org.utbot.instrumentation.process.SecurityKt$sandbox$3.invoke(Security.kt:82)
	at org.utbot.instrumentation.process.SecurityKt$sandbox$4.run(Security.kt:88)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at org.utbot.instrumentation.process.SecurityKt.sandbox(Security.kt:88)
	at org.utbot.instrumentation.process.SecurityKt.sandbox(Security.kt:82)
	at org.utbot.instrumentation.process.SecurityKt.sandbox(Security.kt:77)
	at org.utbot.instrumentation.process.SecurityKt.sandbox(Security.kt:61)
	at org.utbot.instrumentation.process.SecurityKt.runSandbox(Security.kt:38)
	at org.utbot.framework.concrete.MockValueConstructor.call(MockValueConstructor.kt:477)
	at org.utbot.framework.concrete.MockValueConstructor.updateWithExecutableCallModel(MockValueConstructor.kt:420)
	at org.utbot.framework.concrete.MockValueConstructor.constructFromAssembleModel(MockValueConstructor.kt:370)
	at org.utbot.framework.concrete.MockValueConstructor.construct(MockValueConstructor.kt:132)
	at org.utbot.framework.concrete.MockValueConstructor.constructMethodParameters(MockValueConstructor.kt:107)
	at org.utbot.framework.concrete.UtExecutionInstrumentation.invoke(UtExecutionInstrumentation.kt:156)
	at org.utbot.framework.concrete.UtExecutionInstrumentation.invoke(UtExecutionInstrumentation.kt:118)
	at org.utbot.instrumentation.process.ChildProcessKt$setup$2.invoke(ChildProcess.kt:211)
	at org.utbot.instrumentation.process.ChildProcessKt$setup$2.invoke(ChildProcess.kt:208)
	at org.utbot.instrumentation.process.ChildProcessKt$measureExecutionForTermination$2$1$1.invoke(ChildProcess.kt:190)
	at org.utbot.instrumentation.process.ChildProcessKt$measureExecutionForTermination$1.invokeSuspend(ChildProcess.kt:174)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
	at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:284)
	at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:85)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:59)
	at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:38)
	at kotlinx.coroutines.BuildersKt.runBlocking$default(Unknown Source)
	at org.utbot.instrumentation.process.ChildProcessKt.measureExecutionForTermination(ChildProcess.kt:171)
	at org.utbot.instrumentation.process.ChildProcessKt.access$measureExecutionForTermination(ChildProcess.kt:1)
	at org.utbot.instrumentation.process.ChildProcessKt$measureExecutionForTermination$2$1.invokeSuspend(ChildProcess.kt:188)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
	at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:284)
	at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:85)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:59)
	at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:38)
	at kotlinx.coroutines.BuildersKt.runBlocking$default(Unknown Source)
	at org.utbot.instrumentation.process.ChildProcessKt$measureExecutionForTermination$2.invoke(ChildProcess.kt:187)
	at com.jetbrains.rd.framework.IRdEndpoint$set$1.invoke(TaskInterfaces.kt:182)
	at com.jetbrains.rd.framework.IRdEndpoint$set$1.invoke(TaskInterfaces.kt:182)
	at com.jetbrains.rd.framework.impl.RdCall.onWireReceived(RdTask.kt:360)
	at com.jetbrains.rd.framework.MessageBroker$invoke$2$2.invoke(MessageBroker.kt:57)
	at com.jetbrains.rd.framework.MessageBroker$invoke$2$2.invoke(MessageBroker.kt:56)
	at com.jetbrains.rd.framework.impl.ProtocolContexts.readMessageContextAndInvoke(ProtocolContexts.kt:148)
	at com.jetbrains.rd.framework.MessageBroker$invoke$2.invoke(MessageBroker.kt:56)
	at com.jetbrains.rd.framework.MessageBroker$invoke$2.invoke(MessageBroker.kt:54)
	at com.jetbrains.rd.util.threading.SingleThreadSchedulerBase.queue$lambda-3(SingleThreadScheduler.kt:41)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:829)
WARNING: Illegal reflective access by org.utbot.framework.concrete.UtModelConstructor (file:/C:/Users/lWX1182794/AppData/Roaming/JetBrains/IntelliJIdea2022.1/plugins/utbot-intellij/lib/utbot-framework-2022.9.368.jar) to field java.util.Vector.elementData
WARNING: Illegal reflective access by org.utbot.framework.concrete.UtModelConstructor (file:/C:/Users/lWX1182794/AppData/Roaming/JetBrains/IntelliJIdea2022.1/plugins/utbot-intellij/lib/utbot-framework-2022.9.368.jar) to field java.util.Vector.elementCount
WARNING: Illegal reflective access by org.utbot.framework.concrete.UtModelConstructor (file:/C:/Users/lWX1182794/AppData/Roaming/JetBrains/IntelliJIdea2022.1/plugins/utbot-intellij/lib/utbot-framework-2022.9.368.jar) to field java.util.Vector.capacityIncrement
WARNING: Illegal reflective access by org.utbot.framework.concrete.UtModelConstructor (file:/C:/Users/lWX1182794/AppData/Roaming/JetBrains/IntelliJIdea2022.1/plugins/utbot-intellij/lib/utbot-framework-2022.9.368.jar) to field java.util.AbstractList.modCount
WARNING: Illegal reflective access by org.utbot.framework.concrete.UtModelConstructor (file:/C:/Users/lWX1182794/AppData/Roaming/JetBrains/IntelliJIdea2022.1/plugins/utbot-intellij/lib/utbot-framework-2022.9.368.jar) to field java.util.IdentityHashMap$Values.this$0
WARNING: Illegal reflective access by org.utbot.framework.concrete.UtModelConstructor (file:/C:/Users/lWX1182794/AppData/Roaming/JetBrains/IntelliJIdea2022.1/plugins/utbot-intellij/lib/utbot-framework-2022.9.368.jar) to field java.lang.ProcessEnvironment$CheckedValues.c
18:18:25.515 ERROR| java.lang.NullPointerException
	at java.base/java.util.Vector.elementData(Vector.java:762)
	at java.base/java.util.Vector$Itr.next(Vector.java:1282)
	at java.base/java.util.AbstractList.hashCode(AbstractList.java:566)
	at java.base/java.util.Vector.hashCode(Vector.java:1106)
	at java.base/java.util.HashMap.hash(HashMap.java:340)
	at java.base/java.util.HashMap.put(HashMap.java:608)
	at java.base/java.util.HashSet.add(HashSet.java:220)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.utbot.common.KClassUtilKt.invokeCatching(KClassUtil.kt:10)
	at org.utbot.framework.concrete.MockValueConstructor$call$1.invoke(MockValueConstructor.kt:478)
	at org.utbot.framework.concrete.MockValueConstructor$call$1.invoke(MockValueConstructor.kt:477)
	at org.utbot.instrumentation.process.SecurityKt$runSandbox$1$1.invoke(Security.kt:38)
	at org.utbot.instrumentation.process.SecurityKt$sandbox$1.invoke(Security.kt:61)
	at org.utbot.instrumentation.process.SecurityKt$sandbox$2.invoke(Security.kt:77)
	at org.utbot.instrumentation.process.SecurityKt$sandbox$3.invoke(Security.kt:82)
	at org.utbot.instrumentation.process.SecurityKt$sandbox$4.run(Security.kt:88)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at org.utbot.instrumentation.process.SecurityKt.sandbox(Security.kt:88)
	at org.utbot.instrumentation.process.SecurityKt.sandbox(Security.kt:82)
	at org.utbot.instrumentation.process.SecurityKt.sandbox(Security.kt:77)
	at org.utbot.instrumentation.process.SecurityKt.sandbox(Security.kt:61)
	at org.utbot.instrumentation.process.SecurityKt.runSandbox(Security.kt:38)
	at org.utbot.framework.concrete.MockValueConstructor.call(MockValueConstructor.kt:477)
	at org.utbot.framework.concrete.MockValueConstructor.updateWithExecutableCallModel(MockValueConstructor.kt:420)
	at org.utbot.framework.concrete.MockValueConstructor.constructFromAssembleModel(MockValueConstructor.kt:370)
	at org.utbot.framework.concrete.MockValueConstructor.construct(MockValueConstructor.kt:132)
	at org.utbot.framework.concrete.MockValueConstructor.constructMethodParameters(MockValueConstructor.kt:107)
	at org.utbot.framework.concrete.UtExecutionInstrumentation.invoke(UtExecutionInstrumentation.kt:156)
	at org.utbot.framework.concrete.UtExecutionInstrumentation.invoke(UtExecutionInstrumentation.kt:118)
	at org.utbot.instrumentation.process.ChildProcessKt$setup$2.invoke(ChildProcess.kt:211)
	at org.utbot.instrumentation.process.ChildProcessKt$setup$2.invoke(ChildProcess.kt:208)
	at org.utbot.instrumentation.process.ChildProcessKt$measureExecutionForTermination$2$1$1.invoke(ChildProcess.kt:190)
	at org.utbot.instrumentation.process.ChildProcessKt$measureExecutionForTermination$1.invokeSuspend(ChildProcess.kt:174)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
	at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:284)
	at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:85)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:59)
	at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:38)
	at kotlinx.coroutines.BuildersKt.runBlocking$default(Unknown Source)
	at org.utbot.instrumentation.process.ChildProcessKt.measureExecutionForTermination(ChildProcess.kt:171)
	at org.utbot.instrumentation.process.ChildProcessKt.access$measureExecutionForTermination(ChildProcess.kt:1)
	at org.utbot.instrumentation.process.ChildProcessKt$measureExecutionForTermination$2$1.invokeSuspend(ChildProcess.kt:188)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
	at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:284)
	at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:85)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:59)
	at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:38)
	at kotlinx.coroutines.BuildersKt.runBlocking$default(Unknown Source)
	at org.utbot.instrumentation.process.ChildProcessKt$measureExecutionForTermination$2.invoke(ChildProcess.kt:187)
	at com.jetbrains.rd.framework.IRdEndpoint$set$1.invoke(TaskInterfaces.kt:182)
	at com.jetbrains.rd.framework.IRdEndpoint$set$1.invoke(TaskInterfaces.kt:182)
	at com.jetbrains.rd.framework.impl.RdCall.onWireReceived(RdTask.kt:360)
	at com.jetbrains.rd.framework.MessageBroker$invoke$2$2.invoke(MessageBroker.kt:57)
	at com.jetbrains.rd.framework.MessageBroker$invoke$2$2.invoke(MessageBroker.kt:56)
	at com.jetbrains.rd.framework.impl.ProtocolContexts.readMessageContextAndInvoke(ProtocolContexts.kt:148)
	at com.jetbrains.rd.framework.MessageBroker$invoke$2.invoke(MessageBroker.kt:56)
	at com.jetbrains.rd.framework.MessageBroker$invoke$2.invoke(MessageBroker.kt:54)
	at com.jetbrains.rd.util.threading.SingleThreadSchedulerBase.queue$lambda-3(SingleThreadScheduler.kt:41)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:829)

Visual proofs (screenshots, logs, images)

///region Errors report for isDiagonal

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

    }
    ///endregion

Environment

Windows 10 Pro
JDK 11
Gradle

Additional context

In Fuzzing only mode correct tests are generated without concrete executions issues.

Found on testing #988

Metadata

Metadata

Labels

Type

No type

Projects

Status

In Progress

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions