datafaker icon indicating copy to clipboard operation
datafaker copied to clipboard

🐞 Random service has a bug with boundaring values

Open ylazakovich opened this issue 1 year ago • 1 comments

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 avatar Oct 17 '24 10:10 ylazakovich

@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();

asolntsev avatar Oct 17 '24 10:10 asolntsev