Title: Uncompilable tests with JDK 17 for read Files with set static field of `jdk.internal.misc.VM` · Issue #2062 · UnitTestBot/UTBotJava · GitHub
Open Graph Title: Uncompilable tests with JDK 17 for read Files with set static field of `jdk.internal.misc.VM` · Issue #2062 · UnitTestBot/UTBotJava
X Title: Uncompilable tests with JDK 17 for read Files with set static field of `jdk.internal.misc.VM` · Issue #2062 · UnitTestBot/UTBotJava
Description: Description Tests generated for read Files with JDK 17 are uncompilable. Class "jdk.internal.misc.VM" is accessed to set static field "initLevel" The class is not found in JDK 17. To Reproduce Run IntelliJ Idea Ultimate 2022.3.3 Install ...
Open Graph Description: Description Tests generated for read Files with JDK 17 are uncompilable. Class "jdk.internal.misc.VM" is accessed to set static field "initLevel" The class is not found in JDK 17. To Reproduce Run ...
X Description: Description Tests generated for read Files with JDK 17 are uncompilable. Class "jdk.internal.misc.VM" is accessed to set static field "initLevel" The class is not found in JDK 1...
Opengraph URL: https://github.com/UnitTestBot/UTBotJava/issues/2062
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Uncompilable tests with JDK 17 for read Files with set static field of `jdk.internal.misc.VM`","articleBody":"**Description**\r\n\r\nTests generated for read Files with JDK 17 are uncompilable.\r\nClass \"jdk.internal.misc.VM\" is accessed to set static field \"initLevel\"\r\nThe class is not found in JDK 17.\r\n\r\n**To Reproduce**\r\n\r\n1. Run IntelliJ Idea Ultimate 2022.3.3\r\n2. Install plugin [IU built from unit-test-bot/rc2023.3 branch](https://github.com/UnitTestBot/UTBotJava/actions/runs/4544820135)\r\n3. Open a project with JDK 17\r\n4. Add the following code \r\n\r\n```java\r\nimport java.io.File;\r\nimport java.nio.file.Files;\r\n\r\npublic class SecurityCheck {\r\n public int read(File path) throws IOException {\r\n byte[] bytes = Files.readAllBytes(path.toPath());\r\n return bytes.length;\r\n }\r\n}\r\n```\r\n5. Generate tests with **Do not mock**\r\n\r\n**Expected behavior**\r\n\r\nGenerated test are supposed to be compiled with project JDK.\r\nUnneeded reflection should be avoided.\r\n\r\n**Actual behavior**\r\n\r\nThere are tests Class \"jdk.internal.misc.VM\" is accessed to set static field \"initLevel\"\r\n\r\n**Visual proofs (screenshots, logs, images)**\r\n\r\nThe following tests are generated:\r\n\r\n~~~java\r\n ///region SYMBOLIC EXECUTION: ERROR SUITE for method read(java.io.File)\r\n\r\n /**\r\n * @utbot.classUnderTest {@link SecurityCheck}\r\n * @utbot.methodUnderTest {@link SecurityCheck#read(File)}\r\n * @utbot.invokes {@link File#toPath()}\r\n * @utbot.throwsException {@link NullPointerException} in: byte[] bytes = Files.readAllBytes(path.toPath());\r\n */\r\n @Test(description = \"read: bytes = Files.readAllBytes(path.toPath()) : True -\u003e ThrowNullPointerException\")\r\n public void testRead_FileToPath() throws IOException {\r\n SecurityCheck securityCheck = new SecurityCheck();\r\n \r\n /* This test fails because method [org.example.SecurityCheck.read] produces [java.lang.NullPointerException]\r\n org.example.SecurityCheck.read(SecurityCheck.java:19) */\r\n securityCheck.read(null);\r\n }\r\n\r\n /**\r\n * @utbot.classUnderTest {@link SecurityCheck}\r\n * @utbot.methodUnderTest {@link SecurityCheck#read(File)}\r\n * @utbot.invokes {@link File#toPath()}\r\n * @utbot.throwsException {@link NullPointerException} in: byte[] bytes = Files.readAllBytes(path.toPath());\r\n */\r\n @Test(description = \"read: bytes = Files.readAllBytes(path.toPath()) : True -\u003e ThrowNullPointerException\")\r\n public void testRead_FileToPath_1() throws Exception {\r\n Class vMClazz = Class.forName(\"jdk.internal.misc.VM\");\r\n int prevInitLevel = ((Integer) getStaticFieldValue(vMClazz, \"initLevel\"));\r\n try {\r\n setStaticField(vMClazz, \"initLevel\", 2);\r\n SecurityCheck securityCheck = new SecurityCheck();\r\n File path = ((File) createInstance(\"java.io.File\"));\r\n setField(path, \"java.io.File\", \"path\", null);\r\n setField(path, \"java.io.File\", \"filePath\", null);\r\n \r\n /* This test fails because method [org.example.SecurityCheck.read] produces [java.lang.NullPointerException]\r\n java.base/java.util.Objects.requireNonNull(Objects.java:208)\r\n java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:216)\r\n java.base/java.io.File.toPath(File.java:2387)\r\n org.example.SecurityCheck.read(SecurityCheck.java:19) */\r\n securityCheck.read(path);\r\n } finally {\r\n setStaticField(jdk.internal.misc.VM.class, \"initLevel\", prevInitLevel);\r\n }\r\n }\r\n ///endregion\r\n\r\n ///region OTHER: SECURITY for method read(java.io.File)\r\n\r\n @Test(enabled = false, description = \"Disabled due to sandbox\")\r\n public void testRead1() throws Exception {\r\n Class vMClazz = Class.forName(\"jdk.internal.misc.VM\");\r\n int prevInitLevel = ((Integer) getStaticFieldValue(vMClazz, \"initLevel\"));\r\n try {\r\n setStaticField(vMClazz, \"initLevel\", 2);\r\n SecurityCheck securityCheck = new SecurityCheck();\r\n File path = ((File) createInstance(\"java.io.File\"));\r\n String string = \"C:\\\\\";\r\n setField(path, \"java.io.File\", \"path\", string);\r\n setField(path, \"java.io.File\", \"filePath\", null);\r\n \r\n /* This test fails because method [org.example.SecurityCheck.read] produces [java.security.AccessControlException: access denied (\"java.io.FilePermission\" \"C:\\\" \"read\")]\r\n java.base/java.security.AccessControlContext.checkPermission(AccessControlContext.java:485)\r\n java.base/java.security.AccessController.checkPermission(AccessController.java:1068)\r\n java.base/java.lang.SecurityManager.checkPermission(SecurityManager.java:416)\r\n java.base/java.lang.SecurityManager.checkRead(SecurityManager.java:756)\r\n java.base/sun.nio.fs.WindowsChannelFactory.open(WindowsChannelFactory.java:300)\r\n java.base/sun.nio.fs.WindowsChannelFactory.newFileChannel(WindowsChannelFactory.java:168)\r\n java.base/sun.nio.fs.WindowsFileSystemProvider.newByteChannel(WindowsFileSystemProvider.java:231)\r\n java.base/java.nio.file.Files.newByteChannel(Files.java:380)\r\n java.base/java.nio.file.Files.newByteChannel(Files.java:432)\r\n java.base/java.nio.file.Files.readAllBytes(Files.java:3288)\r\n org.example.SecurityCheck.read(SecurityCheck.java:19) */\r\n } finally {\r\n setStaticField(jdk.internal.misc.VM.class, \"initLevel\", prevInitLevel);\r\n }\r\n }\r\n ///endregion\r\n\r\n ///region OTHER: ERROR SUITE for method read(java.io.File)\r\n\r\n @Test\r\n public void testRead2() throws Exception {\r\n Class vMClazz = Class.forName(\"jdk.internal.misc.VM\");\r\n int prevInitLevel = ((Integer) getStaticFieldValue(vMClazz, \"initLevel\"));\r\n try {\r\n setStaticField(vMClazz, \"initLevel\", 2);\r\n SecurityCheck securityCheck = new SecurityCheck();\r\n File path = ((File) createInstance(\"java.io.File\"));\r\n String string = \"c:\\u0000\";\r\n setField(path, \"java.io.File\", \"path\", string);\r\n setField(path, \"java.io.File\", \"filePath\", null);\r\n \r\n /* This test fails because method [org.example.SecurityCheck.read] produces [java.nio.file.InvalidPathException: Illegal char \u003c \u003e at index 2: c: ]\r\n java.base/sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182)\r\n java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153)\r\n java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)\r\n java.base/sun.nio.fs.WindowsPath.parse(WindowsPath.java:92)\r\n java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:232)\r\n java.base/java.io.File.toPath(File.java:2387)\r\n org.example.SecurityCheck.read(SecurityCheck.java:19) */\r\n securityCheck.read(path);\r\n } finally {\r\n setStaticField(jdk.internal.misc.VM.class, \"initLevel\", prevInitLevel);\r\n }\r\n }\r\n ///endregion\r\n~~~\r\n\r\n**Environment**\r\n\r\nWindows 10 Pro\r\nIntelliJ IDEA Ultimate 2022.3.3\r\nMaven \r\nJDK 17 (Amazon COrretto)\r\n\r\n**Additional context**\r\n\r\nWithout - #2061 \r\nthe following tests were generated:\r\n\r\n```java\r\npublic void testRead_FileToPath() throws Exception {\r\n org.mockito.MockedStatic mockedStatic = null;\r\n try {\r\n mockedStatic = mockStatic(java.nio.file.Files.class);\r\n byte[] byteArray = {(byte) 0};\r\n (mockedStatic.when(() -\u003e java.nio.file.Files.readAllBytes(any()))).thenReturn(byteArray);\r\n SecurityCheck securityCheck = new SecurityCheck();\r\n File path = ((File) createInstance(\"java.io.File\"));\r\n Path pathMock = mock(Path.class);\r\n setField(path, \"java.io.File\", \"filePath\", pathMock);\r\n\r\n int actual = securityCheck.read(path);\r\n\r\n assertEquals(1, actual);\r\n } finally {\r\n mockedStatic.close();\r\n }\r\n }\r\n```","author":{"url":"https://github.com/alisevych","@type":"Person","name":"alisevych"},"datePublished":"2023-03-28T16:49:22.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":2},"url":"https://github.com/2062/UTBotJava/issues/2062"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:10d7f012-69b7-43ed-3222-79fc2326b4c2 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | AABA:6A6BE:FCDF06:15B13A1:698E1DEE |
| html-safe-nonce | 609a758a4578aaaf9fce18b0608e6930ed6e439427b63cec096e9fce38e9de14 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBQUJBOjZBNkJFOkZDREYwNjoxNUIxM0ExOjY5OEUxREVFIiwidmlzaXRvcl9pZCI6IjMyMDg0MDM5Mzk4MzA0MDY2MzgiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | 4d867ac06a61043eebb299823929112f4cc8650e8fce26a6744e3f55e5bdd40d |
| hovercard-subject-tag | issue:1644329460 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/UnitTestBot/UTBotJava/2062/issue_layout |
| twitter:image | https://opengraph.githubassets.com/65a94835d40ccbbd05d5e943403aa4a92c36cce9c1fa989fd9d5a2ffa275d771/UnitTestBot/UTBotJava/issues/2062 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/65a94835d40ccbbd05d5e943403aa4a92c36cce9c1fa989fd9d5a2ffa275d771/UnitTestBot/UTBotJava/issues/2062 |
| og:image:alt | Description Tests generated for read Files with JDK 17 are uncompilable. Class "jdk.internal.misc.VM" is accessed to set static field "initLevel" The class is not found in JDK 17. To Reproduce Run ... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | alisevych |
| hostname | github.com |
| expected-hostname | github.com |
| None | 7d71262819a4a68a7786924c05495bfd40a7561e4258dd129ba36f53d667639a |
| turbo-cache-control | no-preview |
| go-import | github.com/UnitTestBot/UTBotJava git https://github.com/UnitTestBot/UTBotJava.git |
| octolytics-dimension-user_id | 87413538 |
| octolytics-dimension-user_login | UnitTestBot |
| octolytics-dimension-repository_id | 480810501 |
| octolytics-dimension-repository_nwo | UnitTestBot/UTBotJava |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 480810501 |
| octolytics-dimension-repository_network_root_nwo | UnitTestBot/UTBotJava |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 1d904ac995eb43f93014fbdbcc9ae5878653c932 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width