showuon opened a new pull request #9942:
URL: https://github.com/apache/kafka/pull/9942


   ```
   java.lang.NullPointerException at 
org.apache.kafka.connect.mirror.MirrorSourceConnector.listTopics(MirrorSourceConnector.java:348)
 at 
org.apache.kafka.connect.mirror.MirrorSourceConnector.findSourceTopicPartitions(MirrorSourceConnector.java:192)
 at 
org.apache.kafka.connect.mirror.MirrorSourceConnectorTest.testRefreshTopicPartitionsTopicOnTargetFirst(MirrorSourceConnectorTest.java:222)
   ```
   After days of investigation, I finally found the root cause of the test 
failure reason: **class loader**.
   The issue is quite weird, we mocked the method, but still call the real 
method, and cause the NPE. Digging into the Mockito, found it's not about JUnit 
5, it's because of the class loader. In Mockito, we relies on the class loader 
to generate the proxy instance 
([source](https://github.com/mockito/mockito/blob/release/3.x/src/main/java/org/mockito/internal/creation/bytebuddy/SubclassBytecodeGenerator.java#L91)),
 and if the class loader is not expected, we'll generate the wrong proxy 
instance (with wrong class path). We set the class loader during connector 
start to resolve conflicting dependencies (KIP-146), so we should set it back 
to the original class loader after connector stop in tests 
(`EmbeddedConnectCluster` is only used in tests) for Mockito works as expected.
   
   
   ### Committer Checklist (excluded from commit message)
   - [ ] Verify design and implementation 
   - [ ] Verify test coverage and CI build status
   - [ ] Verify documentation (including upgrade notes)
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


Reply via email to