Skip to content

NPE from Fuzzing providers for static code block with File operations #2001

Closed
@alisevych

Description

@alisevych

Description

NPE from Fuzzing providers for static code block with File operations

To Reproduce

  1. Run the 'utbot' project in IntelliJ Idea 2022.2.4 Ultimate
  2. Install plugin built from unit-test-bot/rc3102023 branch
  3. Set Fuzzing 100% in Settings -> Tools -> UnitTestBot
  4. Generate tests for read method in the following code:
public class SecurityCheck {
    public int read(A a)  {
        return 10;
    }
}

class A {
    static {
        new File("a.txt").renameTo(new File("b.txt"));
    }
}

Expected behavior

Tests are supposed to be generated.

Actual behavior

No tests are generated.
NPE is present in utbot-engine logs.

Visual proofs (screenshots, logs, images)

image

NPE in utbot-engine-current.log

15:21:40.952 | INFO  | EngineProcessMain         | -----------------------------------------------------------------------
15:21:40.954 | INFO  | EngineProcessMain         | -------------------NEW ENGINE PROCESS STARTED--------------------------
15:21:40.954 | INFO  | EngineProcessMain         | -----------------------------------------------------------------------
15:21:40.991 | INFO  | EngineProcessMain         | RdCategory: RdCoroutineScope          | RdCoroutineHost overridden 
15:21:41.234 | INFO  | EngineProcessMain         | RdCategory: ClientProtocolBuilder     | pid - 29656, port - 56685 
15:21:41.234 | INFO  | EngineProcessMain         | RdCategory: ClientProtocolBuilder     | isJvm8 - true, isJvm9Plus - false, isWindows - true 
15:21:41.361 | INFO  | EngineProcessMain         | RdCategory: ClientProtocolBuilder     | signalled 
15:21:41.436 | INFO  | AnalyticsConfigureUtil    | PathSelectorType: INHERITORS_SELECTOR
15:21:45.473 | INFO  | TestCaseGenerator         | Resuming method SecurityCheck.read
15:21:46.355 | INFO  | JavaLanguage              | Starting fuzzing for method: SecurityCheck.read
15:21:46.356 | INFO  | JavaLanguage              | 	use thisInstance = true
15:21:46.356 | INFO  | JavaLanguage              | 	parameters = [A]
15:21:46.374 | INFO  | JavaLanguage              | Fuzzing is stopped because of an error
java.lang.NullPointerException: null
	at org.utbot.fuzzing.providers.ObjectsKt.isAccessible(Objects.kt:189) ~[utbot-fuzzers-2023.3.jar:?]
	at org.utbot.fuzzing.providers.ObjectsKt.isAccessible(Objects.kt:180) ~[utbot-fuzzers-2023.3.jar:?]
	at org.utbot.fuzzing.providers.ObjectValueProvider$findTypesOfNonRecursiveConstructor$1.invoke(Objects.kt:109) ~[utbot-fuzzers-2023.3.jar:?]
	at org.utbot.fuzzing.providers.ObjectValueProvider$findTypesOfNonRecursiveConstructor$1.invoke(Objects.kt:109) ~[utbot-fuzzers-2023.3.jar:?]
	at kotlin.sequences.FilteringSequence$iterator$1.calcNext(Sequences.kt:171) ~[kotlin-stdlib-1.8.0.jar:1.8.0-release-345(1.8.0)]
	at kotlin.sequences.FilteringSequence$iterator$1.hasNext(Sequences.kt:194) ~[kotlin-stdlib-1.8.0.jar:1.8.0-release-345(1.8.0)]
	at kotlin.sequences.FilteringSequence$iterator$1.calcNext(Sequences.kt:169) ~[kotlin-stdlib-1.8.0.jar:1.8.0-release-345(1.8.0)]
	at kotlin.sequences.FilteringSequence$iterator$1.hasNext(Sequences.kt:194) ~[kotlin-stdlib-1.8.0.jar:1.8.0-release-345(1.8.0)]
	at kotlin.sequences.SequencesKt___SequencesKt.toCollection(_Sequences.kt:787) ~[kotlin-stdlib-1.8.0.jar:1.8.0-release-345(1.8.0)]
	at kotlin.sequences.SequencesKt___SequencesKt.toMutableList(_Sequences.kt:817) ~[kotlin-stdlib-1.8.0.jar:1.8.0-release-345(1.8.0)]
	at kotlin.sequences.SequencesKt___SequencesKt.toList(_Sequences.kt:808) ~[kotlin-stdlib-1.8.0.jar:1.8.0-release-345(1.8.0)]
	at org.utbot.fuzzing.providers.ObjectValueProvider.findTypesOfNonRecursiveConstructor(Objects.kt:112) ~[utbot-fuzzers-2023.3.jar:?]
	at org.utbot.fuzzing.providers.ObjectValueProvider.access$findTypesOfNonRecursiveConstructor(Objects.kt:17) ~[utbot-fuzzers-2023.3.jar:?]
	at org.utbot.fuzzing.providers.ObjectValueProvider$generate$1.invokeSuspend(Objects.kt:34) ~[utbot-fuzzers-2023.3.jar:?]
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) ~[kotlin-stdlib-1.8.0.jar:1.8.0-release-345(1.8.0)]
	at kotlin.sequences.SequenceBuilderIterator.hasNext(SequenceBuilder.kt:129) ~[kotlin-stdlib-1.8.0.jar:1.8.0-release-345(1.8.0)]
	at org.utbot.fuzzing.ValueProvider$Combined$generate$1.invokeSuspend(Providers.kt:191) ~[utbot-fuzzing-2023.3.jar:?]
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) ~[kotlin-stdlib-1.8.0.jar:1.8.0-release-345(1.8.0)]
	at kotlin.sequences.SequenceBuilderIterator.hasNext(SequenceBuilder.kt:129) ~[kotlin-stdlib-1.8.0.jar:1.8.0-release-345(1.8.0)]
	at kotlin.sequences.FlatteningSequence$iterator$1.ensureItemIterator(Sequences.kt:316) ~[kotlin-stdlib-1.8.0.jar:1.8.0-release-345(1.8.0)]
	at kotlin.sequences.FlatteningSequence$iterator$1.hasNext(Sequences.kt:303) ~[kotlin-stdlib-1.8.0.jar:1.8.0-release-345(1.8.0)]
	at kotlin.sequences.SequencesKt___SequencesKt.toCollection(_Sequences.kt:787) ~[kotlin-stdlib-1.8.0.jar:1.8.0-release-345(1.8.0)]
	at kotlin.sequences.SequencesKt___SequencesKt.toMutableList(_Sequences.kt:817) ~[kotlin-stdlib-1.8.0.jar:1.8.0-release-345(1.8.0)]
	at kotlin.sequences.SequencesKt___SequencesKt.toList(_Sequences.kt:808) ~[kotlin-stdlib-1.8.0.jar:1.8.0-release-345(1.8.0)]
	at org.utbot.fuzzing.FuzzingApi$produce$candidates$1.apply(Api.kt:371) ~[utbot-fuzzing-2023.3.jar:?]
	at org.utbot.fuzzing.FuzzingApi$produce$candidates$1.apply(Api.kt:371) ~[utbot-fuzzing-2023.3.jar:?]
	at java.util.HashMap.computeIfAbsent(HashMap.java:1128) ~[?:1.8.0_345]
	at org.utbot.fuzzing.FuzzingApi.produce(Api.kt:371) ~[utbot-fuzzing-2023.3.jar:?]
	at org.utbot.fuzzing.FuzzingApi.fuzz(Api.kt:354) ~[utbot-fuzzing-2023.3.jar:?]
	at org.utbot.fuzzing.FuzzingApi.fuzz$fuzzOne(Api.kt:277) ~[utbot-fuzzing-2023.3.jar:?]
	at org.utbot.fuzzing.FuzzingApi.access$fuzz$fuzzOne(Api.kt:1) ~[utbot-fuzzing-2023.3.jar:?]
	at org.utbot.fuzzing.FuzzingApi$fuzz$2$1.invokeSuspend(Api.kt:294) ~[utbot-fuzzing-2023.3.jar:?]
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) ~[kotlin-stdlib-1.8.0.jar:1.8.0-release-345(1.8.0)]
	at kotlin.sequences.SequenceBuilderIterator.hasNext(SequenceBuilder.kt:129) ~[kotlin-stdlib-1.8.0.jar:1.8.0-release-345(1.8.0)]
	at org.utbot.fuzzing.FuzzingApi.fuzz(Api.kt:707) ~[utbot-fuzzing-2023.3.jar:?]
	at org.utbot.fuzzing.ProvidersKt.runFuzzing(Providers.kt:18) ~[utbot-fuzzing-2023.3.jar:?]
	at org.utbot.fuzzing.JavaLanguageKt.runJavaFuzzing(JavaLanguage.kt:114) [utbot-fuzzers-2023.3.jar:?]
	at org.utbot.engine.UtBotSymbolicEngine$fuzzing$2.invokeSuspend(UtBotSymbolicEngine.kt:353) [utbot-framework-2023.3.jar:?]
	at org.utbot.engine.UtBotSymbolicEngine$fuzzing$2.invoke(UtBotSymbolicEngine.kt) [utbot-framework-2023.3.jar:?]
	at org.utbot.engine.UtBotSymbolicEngine$fuzzing$2.invoke(UtBotSymbolicEngine.kt) [utbot-framework-2023.3.jar:?]
	at kotlinx.coroutines.flow.SafeFlow.collectSafely(Builders.kt:61) [utbot-instrumentation-2023.3.jar:?]
	at kotlinx.coroutines.flow.AbstractFlow.collect(Flow.kt:230) [utbot-instrumentation-2023.3.jar:?]
	at kotlinx.coroutines.flow.FlowKt__ErrorsKt.catchImpl(Errors.kt:156) [utbot-instrumentation-2023.3.jar:?]
	at kotlinx.coroutines.flow.FlowKt.catchImpl(Unknown Source) [utbot-instrumentation-2023.3.jar:?]
	at kotlinx.coroutines.flow.FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1.collect(SafeCollector.common.kt:113) [utbot-instrumentation-2023.3.jar:?]
	at org.utbot.framework.plugin.api.TestCaseGenerator$generate$3$1$1.invokeSuspend(TestCaseGenerator.kt:181) [utbot-framework-2023.3.jar:?]
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) [kotlin-stdlib-1.8.0.jar:1.8.0-release-345(1.8.0)]
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) [utbot-instrumentation-2023.3.jar:?]
	at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:284) [utbot-instrumentation-2023.3.jar:?]
	at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:85) [utbot-instrumentation-2023.3.jar:?]
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:59) [utbot-instrumentation-2023.3.jar:?]
	at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source) [utbot-instrumentation-2023.3.jar:?]
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:38) [utbot-instrumentation-2023.3.jar:?]
	at kotlinx.coroutines.BuildersKt.runBlocking$default(Unknown Source) [utbot-instrumentation-2023.3.jar:?]
	at org.utbot.common.ConcurrencyKt.runBlockingWithCancellationPredicate(Concurrency.kt:38) [utbot-core-2023.3.jar:?]
	at org.utbot.framework.plugin.api.TestCaseGenerator$generate$3.invoke(TestCaseGenerator.kt:156) [utbot-framework-2023.3.jar:?]
	at org.utbot.framework.plugin.api.TestCaseGenerator$generate$3.invoke(TestCaseGenerator.kt:155) [utbot-framework-2023.3.jar:?]
	at org.utbot.common.ConcurrencyKt.runIgnoringCancellationException(Concurrency.kt:47) [utbot-core-2023.3.jar:?]
	at org.utbot.framework.plugin.api.TestCaseGenerator.generate(TestCaseGenerator.kt:155) [utbot-framework-2023.3.jar:?]
	at org.utbot.framework.process.EngineProcessMainKt$setup$3.invoke(EngineProcessMain.kt:111) [utbot-framework-2023.3.jar:?]
	at org.utbot.framework.process.EngineProcessMainKt$setup$3.invoke(EngineProcessMain.kt:97) [utbot-framework-2023.3.jar:?]
	at org.utbot.rd.IdleWatchdog$measureTimeForActiveCall$1$2$1.invoke(ClientProcessUtil.kt:113) [utbot-rd-2023.3.jar:?]
	at org.utbot.rd.IdleWatchdog.wrapActive(ClientProcessUtil.kt:86) [utbot-rd-2023.3.jar:?]
	at org.utbot.rd.IdleWatchdog$measureTimeForActiveCall$1.invoke(ClientProcessUtil.kt:112) [utbot-rd-2023.3.jar:?]
	at com.jetbrains.rd.framework.IRdEndpoint$set$1.invoke(TaskInterfaces.kt:182) [rd-framework-2022.2.1.jar:?]
	at com.jetbrains.rd.framework.IRdEndpoint$set$1.invoke(TaskInterfaces.kt:173) [rd-framework-2022.2.1.jar:?]
	at com.jetbrains.rd.framework.impl.RdCall.onWireReceived(RdTask.kt:360) [rd-framework-2022.2.1.jar:?]
	at com.jetbrains.rd.framework.MessageBroker$invoke$2$2.invoke(MessageBroker.kt:57) [rd-framework-2022.2.1.jar:?]
	at com.jetbrains.rd.framework.MessageBroker$invoke$2$2.invoke(MessageBroker.kt:12) [rd-framework-2022.2.1.jar:?]
	at com.jetbrains.rd.framework.impl.ProtocolContexts.readMessageContextAndInvoke(ProtocolContexts.kt:151) [rd-framework-2022.2.1.jar:?]
	at com.jetbrains.rd.framework.MessageBroker$invoke$2.invoke(MessageBroker.kt:56) [rd-framework-2022.2.1.jar:?]
	at com.jetbrains.rd.framework.MessageBroker$invoke$2.invoke(MessageBroker.kt:12) [rd-framework-2022.2.1.jar:?]
	at com.jetbrains.rd.util.threading.SingleThreadSchedulerBase$queue$1.run(SingleThreadScheduler.kt:41) [rd-core-2022.2.1.jar:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_345]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_345]
	at java.lang.Thread.run(Thread.java:750) [?:1.8.0_345]
15:21:46.386 | INFO  | Summarization             | Started: ----------------------------------------------------------------------------------------
-------------------Summarization started for 1 test cases--------------------
----------------------------------------------------------------------------------------
15:21:46.386 | INFO  | Summarization             | Started: Summarization for SecurityCheck.read
15:21:46.389 | INFO  | Summarization             | Diversity execution path percentage: 100
15:21:46.395 | INFO  | Summarization             | No execution traces found in test case for method SecurityCheck,     public int read(A)
    {
        A r1;
        SecurityCheck r0;

        r0 := @this: SecurityCheck;

        r1 := @parameter0: A;

        return 10;
    }

15:21:46.396 | INFO  | Summarization             | Finished (in 0.009 sec): Summarization for SecurityCheck.read <Nothing>
15:21:46.397 | INFO  | Summarization             | Finished (in 0.011 sec): ----------------------------------------------------------------------------------------
-------------------Summarization started for 1 test cases--------------------

Environment

Windows 10 Pro
IntelliJ IDEA 2022.2.4 Ultimate
IntelliJ project
JDK 1.8

Additional context

Used code from:

Same results with/without:

  • mocks
  • parameterization
  • sandbox.policy file with permission to read files

Metadata

Metadata

Assignees

Labels

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

Type

No type

Projects

Status

Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions