Mohsen Dehghankar created IGNITE-18080: ------------------------------------------
Summary: Fix flaky test failure in ConfigurationAsmGeneratorTest#testPolymorphicErrors Key: IGNITE-18080 URL: https://issues.apache.org/jira/browse/IGNITE-18080 Project: Ignite Issue Type: Bug Reporter: Mohsen Dehghankar h3. What is the purpose of this PR - This PR fixes the flaky test `org.apache.ignite.internal.configuration.asm.ConfigurationAsmGeneratorTest.testPolymorphicErrors` - The mentioned test may fail or pass without changes made to the source code when it is run in different JVMs due to `Class#getDeclaredFields`'s non-deterministic output order. h3. Why the test fails - According to [Java documentation|(https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getDeclaredFields--)] about `getDeclaredFields`, returned array are not sorted and are not in any particular order. - `ConfigurationUtil#schemaFields()` uses `getDeclaredFields` to return the list of schema fields. This list is passed to `ConfigurationAsmGenerator#createNodeClass()` and then passed to `ConfigurationAsmGenerator#addNodeTraverseChildrenMethod()`. In this method at line 1249, there is an assertion to check if `schemaFields.get(0)` is PolymorphicId, but due to the non-deterministic order of this list, the first index of the list might not be PolymorphicId and assertion fails. h3. Reproduce the test failure - Run the test with 'NonDex' maven plugin. The command to recreate the flaky test failure is `mvn edu.illinois:nondex-maven-plugin:2.1-SNAPSHOT:nondex -pl modules/configuration -Dtest=ConfigurationAsmGeneratorTest#testPolymorphicErrors` - Fixing the flaky test now, will prevent flaky test failures in future Java versions. h3. Expected Result - The tests should run successfully when run with 'NonDex' maven with the same command for recreating the flaky test. h3. Actual Result - We get the following error: ``` [INFO] Running org.apache.ignite.internal.configuration.asm.ConfigurationAsmGeneratorTest [ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.107 s <<< FAILURE! - in org.apache.ignite.internal.configuration.asm.ConfigurationAsmGeneratorTest [ERROR] org.apache.ignite.internal.configuration.asm.ConfigurationAsmGeneratorTest.testPolymorphicErrors Time elapsed: 0.085 s <<< FAILURE! java.lang.AssertionError: org.apache.ignite.internal.configuration.asm.ConfigurationAsmGeneratorTest$PolymorphicNamedTestConfigurationSchema at org.apache.ignite.internal.configuration.asm.ConfigurationAsmGeneratorTest.beforeEach(ConfigurationAsmGeneratorTest.java:110) ``` h3. Fix - Instead of checking `ConfigurationUtil#isPolymorphicId` on the first element of `schemaFields`, use `schemaFields.stream().anyMatch` to check the whole list. -- This message was sent by Atlassian Jira (v8.20.10#820010)