datafaker
datafaker copied to clipboard
🐞 Random service has a bug with boundaring values
Describe the bug
After bumping to 2.4.0 started reproducing an issue with using the following method
random().nextInt(1, Integer.MAX_VALUE)
2.3.1 - works fine 2.4.0 - has a bug
To Reproduce
❌ FAILED
@Test
void testFaker() {
assertThat(faker.random().nextInt(1, Integer.MAX_VALUE)).isNotNull();
}
✅ PASSED
@Test
void testFaker() {
assertThat(faker.random().nextInt(1, Integer.MAX_VALUE - 1)).isNotNull();
}
Versions:
- JDK
21-coretto - Faker Version
2.4.0
Details
java.lang.RuntimeException: java.lang.IllegalArgumentException: bound must be greater than origin
at org.testng.internal.invokers.MethodInvocationHelper.invokeMethodNoCheckedException(MethodInvocationHelper.java:57)
at org.testng.internal.invokers.MethodInvocationHelper.invokeDataProvider(MethodInvocationHelper.java:157)
at org.testng.internal.Parameters.handleParameters(Parameters.java:803)
at org.testng.internal.Parameters.handleParameters(Parameters.java:728)
at org.testng.internal.invokers.ParameterHandler.handleParameters(ParameterHandler.java:72)
at org.testng.internal.invokers.ParameterHandler.createParameters(ParameterHandler.java:51)
at org.testng.internal.invokers.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:911)
at org.testng.internal.invokers.TestInvoker.invokeTestMethods(TestInvoker.java:200)
at org.testng.internal.invokers.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:148)
at org.testng.internal.invokers.TestMethodWorker.run(TestMethodWorker.java:128)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.lang.IllegalArgumentException: bound must be greater than origin
at java.base/jdk.internal.util.random.RandomSupport.checkRange(RandomSupport.java:236)
at java.base/java.util.random.RandomGenerator.nextInt(RandomGenerator.java:678)
at net.datafaker.service.RandomService.nextInt(RandomService.java:36)
@ylazakovich Thank you for reporting the issue. Yes, we made a tiny change that caused it (commit 4087649dae1d42c, file RandomService.java).
We can easily fix it, BUT it still will not work for extreme boundaries.
For example, this line did never work:
assertThat(faker.random().nextInt(Integer.MIN_VALUE, Integer.MAX_VALUE)).isNotNull();