From f5f984c04ed65b815e7f45d5d05c2334c39d3b5a Mon Sep 17 00:00:00 2001 From: Maksim Pelevin Date: Thu, 26 Jan 2023 13:01:02 +0300 Subject: [PATCH 1/2] When enum is not accessible, it shouldn't be created by fuzzer (#1660) --- .../kotlin/org/utbot/fuzzing/providers/Enums.kt | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/utbot-fuzzers/src/main/kotlin/org/utbot/fuzzing/providers/Enums.kt b/utbot-fuzzers/src/main/kotlin/org/utbot/fuzzing/providers/Enums.kt index e7467e6b88..80bbc46b73 100644 --- a/utbot-fuzzers/src/main/kotlin/org/utbot/fuzzing/providers/Enums.kt +++ b/utbot-fuzzers/src/main/kotlin/org/utbot/fuzzing/providers/Enums.kt @@ -20,11 +20,14 @@ class EnumValueProvider( description: FuzzedDescription, type: FuzzedType ) = sequence> { - type.classId.jClass.enumConstants.filterIsInstance>().forEach { enum -> - val id = idGenerator.getOrCreateIdForValue(enum) - yield(Seed.Simple(UtEnumConstantModel(id, type.classId, enum).fuzzed { - summary = "%var% = $enum" - })) + val jClass = type.classId.jClass + if (isAccessible(jClass, description.description.packageName)) { + jClass.enumConstants.filterIsInstance>().forEach { enum -> + val id = idGenerator.getOrCreateIdForValue(enum) + yield(Seed.Simple(UtEnumConstantModel(id, type.classId, enum).fuzzed { + summary = "%var% = $enum" + })) + } } } } \ No newline at end of file From 9b00b169877efd23d0bd621df0889afa6a6121db Mon Sep 17 00:00:00 2001 From: Maksim Pelevin Date: Thu, 26 Jan 2023 13:09:12 +0300 Subject: [PATCH 2/2] Add test for enum --- .../fuzzing/samples/AccessibleObjects.java | 14 ++++++++++++++ .../kotlin/org/utbot/fuzzing/JavaFuzzingTest.kt | 17 +++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/utbot-fuzzers/src/test/java/org/utbot/fuzzing/samples/AccessibleObjects.java b/utbot-fuzzers/src/test/java/org/utbot/fuzzing/samples/AccessibleObjects.java index 3c3f92739c..5dd7bb78ec 100644 --- a/utbot-fuzzers/src/test/java/org/utbot/fuzzing/samples/AccessibleObjects.java +++ b/utbot-fuzzers/src/test/java/org/utbot/fuzzing/samples/AccessibleObjects.java @@ -16,4 +16,18 @@ public Node() { } } } + + public int ordinal(InnEn val) { + switch (val) { + case ONE: + return 0; + case TWO: + return 1; + } + return -1; + } + + private enum InnEn { + ONE, TWO + } } diff --git a/utbot-fuzzers/src/test/kotlin/org/utbot/fuzzing/JavaFuzzingTest.kt b/utbot-fuzzers/src/test/kotlin/org/utbot/fuzzing/JavaFuzzingTest.kt index 0c9993e38d..5976abe0a9 100644 --- a/utbot-fuzzers/src/test/kotlin/org/utbot/fuzzing/JavaFuzzingTest.kt +++ b/utbot-fuzzers/src/test/kotlin/org/utbot/fuzzing/JavaFuzzingTest.kt @@ -216,6 +216,23 @@ class JavaFuzzingTest { assertEquals(0, exec) { "Fuzzer should not create any values of private classes" } } + @Test + fun `fuzzing should not generate values of private enums`() { + var exec = 0 + runBlockingWithContext { + runJavaFuzzing( + TestIdentityPreservingIdGenerator, + methodUnderTest = AccessibleObjects::class.java.declaredMethods.first { it.name == "ordinal" }.executableId, + constants = emptyList(), + names = emptyList(), + ) { _, _, _ -> + exec += 1 + BaseFeedback(Trie.emptyNode(), Control.STOP) + } + } + assertEquals(0, exec) { "Fuzzer should not create any values of private classes" } + } + @Test fun `fuzzing generate single test in case of collection with fail-to-generate generic type`() { val size = 100