[ 
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)

Reply via email to