[ 
https://issues.apache.org/jira/browse/LUCENE-8146?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16347232#comment-16347232
 ] 

Dawid Weiss commented on LUCENE-8146:
-------------------------------------

{code}
+  /**
+   * Get a Random instance, seeded with the external seed if available.
+   */
+  public static Random getSeededRandom() {
+    String seed = SeedProvider.getExternalSeed();
+    Random random;
+    if (seed == null) {
+      random = new Random();
+    } else {
+      random = new Random(seed.hashCode());
+    }
+    return random;
+  }
+}
{code}

Please, don't. The Random instance to be used should be acquired from 
{{RandomizedContext}} and this context is initialized based on the system 
property (and much earlier before the tests or Lucene code is first entered). 
There are things that depend on the seed (such as the order of tests) that this 
property controls.

A better patch would be to replace surefire with the runner from 
{{randomizedtesting}} package; this would make the tests consistent with ANT.

> Unit tests using StringHelper fail with ExceptionInInitializerError for maven 
> surefire >= 2.18
> ----------------------------------------------------------------------------------------------
>
>                 Key: LUCENE-8146
>                 URL: https://issues.apache.org/jira/browse/LUCENE-8146
>             Project: Lucene - Core
>          Issue Type: Bug
>    Affects Versions: 7.2.1
>            Reporter: Julien Massenet
>            Priority: Minor
>         Attachments: LUCENE-8146-seed_issue.tar.gz, LUCENE-8146_v1.patch
>
>
> This happens when multiple conditions are met:
>  * The client code is built with Maven
>  * To execute its unit tests, the client code relies on the 
> {{maven-surefire-plugin}}, with a version greater than 2.17 (last working 
> version)
>  * The client code uses the {{org.apache.lucene.util.StringHelper}} class 
> (even transitively)
>  * The client is configured as with the standard Lucene maven build (i.e. it 
> is possible to fix the test seed using the {{tests.seed}} property)
> There was a change in Surefire's behavior starting with 2.18: when a property 
> is empty, instead of not sending it to the test runner, it will be sent with 
> an empty value.
> This behavior can be observed with the attached sample project:
>  * {{mvn test}}: fails with a {{java.lang.ExceptionInInitializerError}}
>  * {{mvn test -Dtests.seed=123456}}: succeeds because the property is set to 
> a real value
>  * {{mvn test -Dsurefire.version=2.17}}: succeeds because the surefire 
> version is lower than 2.18
> Attached is a patch (built against \{{branch_7x}}) that centralizes accesses 
> to the {{tests.seed}} system property; it also makes sure that if it is 
> empty, it is treated as absent.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to