diff --git a/test/framework/src/test/java/org/elasticsearch/test/test/ESTestCaseTests.java b/test/framework/src/test/java/org/elasticsearch/test/test/ESTestCaseTests.java index 8e5e50e0455be..9f8c910bb86dd 100644 --- a/test/framework/src/test/java/org/elasticsearch/test/test/ESTestCaseTests.java +++ b/test/framework/src/test/java/org/elasticsearch/test/test/ESTestCaseTests.java @@ -174,11 +174,77 @@ public void testRandomUniqueNormalUsageAlwayMoreThanOne() { assertThat(randomUnique(() -> randomAlphaOfLengthBetween(1, 20), 10), hasSize(greaterThan(0))); } + public void testRandomSubsetOfWithVarargs() { + List randomList = randomList(10, () -> randomIntBetween(-100, 100)); + + // 0 <= subsetSize <= listSize + int randomSubsetSize = randomInt(randomList.size()); + + // Uses the spread syntax to pass the list as an array of values (matching the var args parameter definition) + List result = ESTestCase.randomSubsetOf(randomSubsetSize, randomList.toArray(new Integer[0])); + assertEquals(randomSubsetSize, result.size()); + assertTrue(randomList.containsAll(result)); + } + + public void testRandomSubsetOfWithVarargsAndSizeTooLarge() { + List randomList = randomList(10, () -> randomIntBetween(-100, 100)); + + // listSize < subsetSize + int randomSubsetSize = randomIntBetween(randomList.size() + 1, 20); + + assertThrows(IllegalArgumentException.class, () -> ESTestCase.randomSubsetOf(randomSubsetSize, randomList.toArray(new Integer[0]))); + } + + public void testRandomSubsetOfWithVarargsAndNegativeSubsetSize() { + List randomList = randomList(10, () -> randomIntBetween(-100, 100)); + int randomNegativeSubsetSize = -1 * randomIntBetween(1, 10); + + assertThrows(IllegalArgumentException.class, () -> ESTestCase.randomSubsetOf(randomNegativeSubsetSize, randomList)); + } + + public void testRandomSubsetOfWithCollection() { + List randomList = randomList(10, () -> randomIntBetween(-100, 100)); + List result = ESTestCase.randomSubsetOf(randomList); + assertTrue(result.size() >= 0 && result.size() <= randomList.size()); + assertTrue(randomList.containsAll(result)); + } + + public void testRandomNonEmptySubsetOf() { + List randomList = randomList(1, 10, () -> randomIntBetween(-100, 100)); + List result = ESTestCase.randomNonEmptySubsetOf(randomList); + assertTrue(result.size() >= 1 && result.size() <= randomList.size()); + assertTrue(randomList.containsAll(result)); + } + public void testRandomNonEmptySubsetOfThrowsOnEmptyCollection() { final var ex = expectThrows(IllegalArgumentException.class, () -> randomNonEmptySubsetOf(Collections.emptySet())); assertThat(ex.getMessage(), equalTo("Can't pick non-empty subset of an empty collection")); } + public void testRandomSubsetOfWithCollectionAndSizeTooLarge() { + List randomList = randomList(10, () -> randomIntBetween(-100, 100)); + + // listSize < subsetSize + int randomSubsetSize = randomIntBetween(randomList.size() + 1, 20); + + assertThrows(IllegalArgumentException.class, () -> ESTestCase.randomSubsetOf(randomSubsetSize, randomList)); + } + + public void testRandomSubsetOfWithCollectionAndNegativeSubsetSize() { + List randomList = randomList(10, () -> randomIntBetween(-100, 100)); + int randomNegativeSubsetSize = -1 * randomIntBetween(1, 10); + + assertThrows(IllegalArgumentException.class, () -> ESTestCase.randomSubsetOf(randomNegativeSubsetSize, randomList)); + } + + public void testShuffledList() { + List randomList = randomList(100, () -> randomIntBetween(-100, 100)); + List result = ESTestCase.shuffledList(randomList); + assertEquals(randomList.size(), result.size()); + assertTrue(randomList.containsAll(result)); + assertTrue(result.containsAll(randomList)); + } + public void testRandomNonNegativeLong() { assertThat(randomNonNegativeLong(), greaterThanOrEqualTo(0L)); }