[ https://issues.apache.org/jira/browse/MBUILDCACHE-88?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17840936#comment-17840936 ]
ASF GitHub Bot commented on MBUILDCACHE-88: ------------------------------------------- AlexanderAshitkin commented on code in PR #147: URL: https://github.com/apache/maven-build-cache-extension/pull/147#discussion_r1580025685 ########## src/test/java/org/apache/maven/buildcache/xml/CacheConfigImplTest.java: ########## @@ -122,11 +126,30 @@ private static void deepMockConfigFile(File mockFile, boolean exists) throws IOE when(mockPath.getFileSystem()).thenReturn(mockFileSystem); FileSystemProvider mockProvider = mock(FileSystemProvider.class); when(mockFileSystem.provider()).thenReturn(mockProvider); + + // Mock for java < 20. if (!exists) { doThrow(new IOException("mock IOException")) .when(mockProvider) .checkAccess(ArgumentMatchers.eq(mockPath), ArgumentMatchers.any(AccessMode.class)); } + + // Mock for java >= 20. Since the FileSystemProvider.exists method does not exist before v20, we use reflection + // to create the mock + Optional<Method> methodToMock = Arrays.stream(FileSystemProvider.class.getDeclaredMethods()) + .filter(method -> "exists".equals(method.getName())) + .findAny(); + if (methodToMock.isPresent()) { + Class<?>[] paramTypes = methodToMock.get().getParameterTypes(); + Object[] params = Arrays.stream(paramTypes) + .map(paramType -> Mockito.any(paramType)) + .toArray(); + try { + Mockito.when(methodToMock.get().invoke(mockProvider, params)).thenReturn(exists); Review Comment: Looks correct, but why need to Mock it at all? If it is not present in java 17, we are not using it in code. Is it used by JDK 20 internally? > Tests in failure when ran on jdk21 > ---------------------------------- > > Key: MBUILDCACHE-88 > URL: https://issues.apache.org/jira/browse/MBUILDCACHE-88 > Project: Maven Build Cache Extension > Issue Type: Bug > Affects Versions: 1.1.0 > Reporter: Kevin Buntrock > Priority: Minor > Labels: pull-request-available > > The project tests cannot be run on jdk21. Result is : > {code:java} > [INFO] > [INFO] Results: > [INFO] > [ERROR] Failures: > [ERROR] CacheConfigImplTest.testInitializationDisabledInXML:234 expected: > <DISABLED> but was: <INITIALIZED> > [ERROR] > CacheConfigImplTest.testRemoteDisableByUserPropertyOverride:330->assertDefaults:137->assertDefaults:201->lambda$testRemoteDisableByUserPropertyOverride$39:330 > expected: <dummy.url.xyz> but was: <null> > [ERROR] > CacheConfigImplTest.testRemoteEnableByUserPropertyOverrideWithURL:313->assertDefaults:137->assertDefaults:201->lambda$testRemoteEnableByUserPropertyOverrideWithURL$38:315 > expected: <true> but was: <false> > [ERROR] > CacheConfigImplTest.testRemoteEnableInXMLWithURL:288->assertDefaults:137->assertDefaults:201->lambda$testRemoteEnableInXMLWithURL$36:290 > expected: <true> but was: <false> > [ERROR] > CacheConfigImplTest.testRemoteSaveIgnoredWhenRemoteDisabledByUserPropertyOverride:420->assertDefaults:137->assertDefaults:201->lambda$testRemoteSaveIgnoredWhenRemoteDisabledByUserPropertyOverride$48:420 > expected: <dummy.url.xyz> but was: <null> > [ERROR] > CacheConfigImplTest.testRemoveSaveDisabledByUserProperty:381->assertDefaults:137->assertDefaults:201->lambda$testRemoveSaveDisabledByUserProperty$47:383 > expected: <true> but was: <false> > [ERROR] > CacheConfigImplTest.testRemoveSaveEnabledByUserProperty:362->assertDefaults:137->assertDefaults:201->lambda$testRemoveSaveEnabledByUserProperty$45:365 > expected: <true> but was: <false> > [ERROR] > CacheConfigImplTest.testRemoveSaveEnabledInXML:344->assertDefaults:137->assertDefaults:201->lambda$testRemoveSaveEnabledInXML$42:347 > expected: <true> but was: <false> > [ERROR] > CacheConfigImplTest.testRemoveSaveFinalEnabledByUserProperty:436->assertDefaults:137->assertDefaults:201->lambda$testRemoveSaveFinalEnabledByUserProperty$51:439 > expected: <true> but was: <false> > [ERROR] > CacheConfigImplTest.testRemoveSaveFinalIgnoredWhenRemoteSaveDisabled:455->assertDefaults:137->assertDefaults:201->lambda$testRemoveSaveFinalIgnoredWhenRemoteSaveDisabled$54:457 > expected: <true> but was: <false> > [INFO] > [ERROR] Tests run: 71, Failures: 10, Errors: 0, Skipped: 4 > [INFO] > [INFO] > ------------------------------------------------------------------------ > [INFO] BUILD FAILURE > [INFO] > ------------------------------------------------------------------------{code} > In class "CacheConfigImplTest", a method "deepMockConfigFile" mocks the > result of the call to java.nio.file.Files.exists (via > "FileSystemProvider.checkAccess"). > In jdk21 version, "Files.exists" does not rely on the same underlying > "FileSystemProvider" method, therefore breaking the mocking purpose. -- This message was sent by Atlassian Jira (v8.20.10#820010)