UnitTestBot / UTBotJava

Automated unit test generation and precise code analysis for Java
Apache License 2.0
132 stars 40 forks source link

`StandaloneCoroutine is cancelling`. `StackOverflowError` when running Contest Estimator for `guava` #1707

Open alisevych opened 1 year ago

alisevych commented 1 year ago

Description

StandaloneCoroutine is cancelling. StackOverflowError when running Contest Estimator for guava method com.google.common.collect.FilteredMultimapValues.size

To Reproduce

  1. Run the 'utbot' project in IntelliJ Idea
  2. Open utbot-junit-contest/src/main/kotlin/org/utbot/contest/ContestEstimator.kt
  3. Change javaHome property to full local path to JDK 8
  4. In fun main change: projectFilter = listOf("guava")
  5. Run fun main - make sure to set JRE in Edit Configurations to JDK 8.
  6. Check logs

Expected behavior

StackOverflowErrors from engine are not supposed to be present.

Actual behavior

The following exception was thrown for method com.google.common.collect.FilteredMultimapValues.size StandaloneCoroutine is cancelling. StackOverflowError is thrown.

Visual proofs (screenshots, logs, images)

StandaloneCoroutine is cancelling. StackOverflowError is thrown.

17:02:29.638 | INFO  | Started: method com.google.common.collect.FilteredMultimapValues.size
17:02:29.639 | INFO  |  -- Remaining time budget: 61636 ms, #remaining_methods: 5, budget for method: 12327 ms, solver timeout: 1000 ms, budget for symbolic execution: 11127 ms, budget for concrete execution: 1200 ms,  -- 
17:02:40.779 | INFO  | |> Starting concrete execution for remaining state: com.google.common.collect.FilteredMultimapValues.size
17:02:43.171 | INFO  | (X) Cancelling concrete execution: com.google.common.collect.FilteredMultimapValues.size
17:03:07.974 | INFO  | Finished (in 38.331 sec): method com.google.common.collect.FilteredMultimapValues.size :: EXCEPTION :: 
<StatsForMethod> : SUSPICIOUS
    #generatedTC=0
    WITH NO EXCEPTIONS
17:03:07.984 | ERROR | Internal job error
kotlinx.coroutines.JobCancellationException: StandaloneCoroutine is cancelling
Caused by: java.lang.StackOverflowError
    at org.utbot.engine.pc.Z3EvaluatorVisitor.eval(Z3EvaluatorVisitor.kt:55) ~[main/:?]
    at org.utbot.engine.pc.Z3EvaluatorVisitor.visit(Z3EvaluatorVisitor.kt:247) ~[main/:?]
    at org.utbot.engine.pc.Z3EvaluatorVisitor.visit(Z3EvaluatorVisitor.kt:22) ~[main/:?]
    at org.utbot.engine.pc.UtArraySelectExpression.accept(UtExpression.kt:215) ~[main/:?]
    at org.utbot.engine.pc.Z3EvaluatorVisitor.eval(Z3EvaluatorVisitor.kt:58) ~[main/:?]
    at org.utbot.engine.pc.Z3EvaluatorVisitor.visit(Z3EvaluatorVisitor.kt:247) ~[main/:?]
    at org.utbot.engine.pc.Z3EvaluatorVisitor.visit(Z3EvaluatorVisitor.kt:22) ~[main/:?]
    at org.utbot.engine.pc.UtArraySelectExpression.accept(UtExpression.kt:215) ~[main/:?]
    at org.utbot.engine.pc.Z3EvaluatorVisitor.eval(Z3EvaluatorVisitor.kt:56) ~[main/:?]
    at org.utbot.engine.pc.Z3EvaluatorVisitor.visit(Z3EvaluatorVisitor.kt:66) ~[main/:?]
    at org.utbot.engine.pc.Z3EvaluatorVisitor.visit(Z3EvaluatorVisitor.kt:22) ~[main/:?]
    at org.utbot.engine.pc.UtArraySelectExpression.accept(UtExpression.kt:215) ~[main/:?]
    at org.utbot.engine.pc.Z3EvaluatorVisitor.eval(Z3EvaluatorVisitor.kt:58) ~[main/:?]
    at org.utbot.engine.pc.Z3EvaluatorVisitor.visit(Z3EvaluatorVisitor.kt:171) ~[main/:?]
    at org.utbot.engine.pc.Z3EvaluatorVisitor.visit(Z3EvaluatorVisitor.kt:22) ~[main/:?]
    at org.utbot.engine.pc.UtAddrExpression.accept(UtExpression.kt:513) ~[main/:?]
    at org.utbot.engine.pc.Z3EvaluatorVisitor.eval(Z3EvaluatorVisitor.kt:58) ~[main/:?]
    at org.utbot.engine.pc.Z3EvaluatorVisitor.visit(Z3EvaluatorVisitor.kt:247) ~[main/:?]
    at org.utbot.engine.pc.Z3EvaluatorVisitor.visit(Z3EvaluatorVisitor.kt:22) ~[main/:?]
    at org.utbot.engine.pc.UtArraySelectExpression.accept(UtExpression.kt:215) ~[main/:?]
    at org.utbot.engine.pc.Z3EvaluatorVisitor.eval(Z3EvaluatorVisitor.kt:58) ~[main/:?]
    at org.utbot.engine.pc.Z3EvaluatorVisitor.visit(Z3EvaluatorVisitor.kt:247) ~[main/:?]
    at org.utbot.engine.pc.Z3EvaluatorVisitor.visit(Z3EvaluatorVisitor.kt:22) ~[main/:?]
    at org.utbot.engine.pc.UtArraySelectExpression.accept(UtExpression.kt:215) ~[main/:?]
    at org.utbot.engine.pc.Z3EvaluatorVisitor.eval(Z3EvaluatorVisitor.kt:56) ~[main/:?]
    at org.utbot.engine.pc.Z3EvaluatorVisitor.visit(Z3EvaluatorVisitor.kt:66) ~[main/:?]
    at org.utbot.engine.pc.Z3EvaluatorVisitor.visit(Z3EvaluatorVisitor.kt:22) ~[main/:?]
    at org.utbot.engine.pc.UtArraySelectExpression.accept(UtExpression.kt:215) ~[main/:?]
...
... 
... (same lines 60 times)
    at org.utbot.engine.pc.Z3EvaluatorVisitor.eval(Z3EvaluatorVisitor.kt:58) ~[main/:?]
    at org.utbot.engine.pc.Z3EvaluatorVisitor.visit(Z3EvaluatorVisitor.kt:171) ~[main/:?]
    at org.utbot.engine.pc.Z3EvaluatorVisitor.visit(Z3EvaluatorVisitor.kt:22) ~[main/:?]
    at org.utbot.engine.pc.UtAddrExpression.accept(UtExpression.kt:513) ~[main/:?]

Environment

Windows 10 Pro IntelliJ IDEA 2022.2.4 JDK 8

CaelmBleidd commented 1 year ago

Reproduced on the following code:

int containsItself(HashMap<Object, Object> map) {
    if (map.get(0) == map) {
        return 1;
    }

    return 0;
}