[ https://issues.apache.org/jira/browse/MBUILDCACHE-88?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17840995#comment-17840995 ]
ASF GitHub Bot commented on MBUILDCACHE-88: ------------------------------------------- kbuntrock commented on code in PR #147: URL: https://github.com/apache/maven-build-cache-extension/pull/147#discussion_r1580192169 ########## 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: Yes, it is used internally by the static `java.nio.file.Files#exists` method. Implementation differs from jdk versions. > 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)