You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by dh...@apache.org on 2019/07/22 22:09:25 UTC
[geode] 12/18: Fix partitioned region test to assert total entry
count
This is an automated email from the ASF dual-hosted git repository.
dhemery pushed a commit to branch GEODE-7001-region-entry-count
in repository https://gitbox.apache.org/repos/asf/geode.git
commit 63d33eb2427402957ad330dab71fd471656658d6
Author: Dale Emery <de...@pivotal.io>
AuthorDate: Thu Jul 18 15:29:35 2019 -0700
Fix partitioned region test to assert total entry count
In each test:
- Parse the function result to extract the number of entries on each
server.
For the partitioned region test:
- Sum the number of entries on each server.
- Assert that the total is as expected.
For the replicate region test:
- Assert that *each* server has the expected number of entries.
Co-Authored-By: Mark Hanson <mh...@pivotal.io>
---
.../geode/metrics/RegionEntriesGaugeTest.java | 60 ++++++++++++++++------
1 file changed, 43 insertions(+), 17 deletions(-)
diff --git a/geode-assembly/src/acceptanceTest/java/org/apache/geode/metrics/RegionEntriesGaugeTest.java b/geode-assembly/src/acceptanceTest/java/org/apache/geode/metrics/RegionEntriesGaugeTest.java
index c66065f..3f2ca8d 100644
--- a/geode-assembly/src/acceptanceTest/java/org/apache/geode/metrics/RegionEntriesGaugeTest.java
+++ b/geode-assembly/src/acceptanceTest/java/org/apache/geode/metrics/RegionEntriesGaugeTest.java
@@ -16,15 +16,20 @@
package org.apache.geode.metrics;
import static java.util.Arrays.asList;
+import static java.util.stream.Collectors.toList;
import static org.apache.geode.cache.RegionShortcut.PARTITION;
import static org.apache.geode.cache.RegionShortcut.REPLICATE;
import static org.apache.geode.cache.client.ClientRegionShortcut.PROXY;
import static org.apache.geode.test.awaitility.GeodeAwaitility.await;
import static org.assertj.core.api.Assertions.assertThat;
+import java.io.BufferedReader;
import java.io.File;
+import java.io.StringReader;
import java.util.List;
-import java.util.concurrent.TimeUnit;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Stream;
import io.micrometer.core.instrument.Gauge;
import org.junit.After;
@@ -43,6 +48,7 @@ import org.apache.geode.internal.AvailablePortHelper;
import org.apache.geode.metrics.rules.MetricsPublishingServiceJarRule;
import org.apache.geode.metrics.rules.SingleFunctionJarRule;
import org.apache.geode.test.junit.categories.MetricsTest;
+import org.apache.geode.test.junit.rules.gfsh.GfshExecution;
import org.apache.geode.test.junit.rules.gfsh.GfshRule;
@Category(MetricsTest.class)
@@ -158,18 +164,21 @@ public class RegionEntriesGaugeTest {
"--id=" + GetMemberRegionEntriesGaugeFunction.ID,
"--arguments=" + regionName);
- await().atMost(1, TimeUnit.MINUTES).untilAsserted(() -> {
- String output =
- gfshRule.execute(connectToLocatorCommand, executeFunctionCommand).getOutputText();
+ await().untilAsserted(() -> {
+ GfshExecution execution = gfshRule.execute(connectToLocatorCommand, executeFunctionCommand);
+ List<Integer> entryCounts = linesOf(execution.getOutputText())
+ .filter(s -> s.startsWith("server"))
+ .map(RegionEntriesGaugeTest::extractEntryCount)
+ .collect(toList());
- assertThat(output.trim())
- .as("Returned gauge of region entries.")
- .endsWith("[" + expectedNumberOfEntries + ".0]");
+ assertThat(entryCounts)
+ .as("Number of entries reported by each server")
+ .allMatch(i -> i == expectedNumberOfEntries, "equals " + expectedNumberOfEntries);
});
}
@Test
- public void regionEntriesGaugeShowsCountOfPartitionedRegionValuesInServer() {
+ public void regionEntriesGaugeShowsCountOfPartitionedRegionValuesInEachServer() {
String regionName = "partitionedRegion";
Region<String, String> region = createRegion(PARTITION.name(), regionName);
@@ -183,22 +192,39 @@ public class RegionEntriesGaugeTest {
int expectedNumberOfEntries = keys.size() - 1;
- assertThat(region.sizeOnServer()).isEqualTo(expectedNumberOfEntries);
-
String connectToLocatorCommand = "connect --locator=" + locatorString;
String executeFunctionCommand = String.join(SPACE,
"execute function",
"--id=" + GetMemberRegionEntriesGaugeFunction.ID,
"--arguments=" + regionName);
- // await().untilAsserted(() -> {
- String output =
- gfshRule.execute(connectToLocatorCommand, executeFunctionCommand).getOutputText();
+ await().untilAsserted(() -> {
+ GfshExecution execution = gfshRule.execute(connectToLocatorCommand, executeFunctionCommand);
+ int sum = linesOf(execution.getOutputText())
+ .filter(s -> s.startsWith("server"))
+ .mapToInt(RegionEntriesGaugeTest::extractEntryCount)
+ .sum();
+
+ assertThat(sum)
+ .as("total number of entries on all servers")
+ .isEqualTo(expectedNumberOfEntries);
+ });
+ }
+
+ private static int extractEntryCount(String serverEntryCountLine) {
+ String entryCountExtractor = ".*\\[(\\d+).*].*";
+ Pattern entryCountPattern = Pattern.compile(entryCountExtractor);
+ Matcher matcher = entryCountPattern.matcher(serverEntryCountLine);
+ assertThat(matcher.matches())
+ .as(serverEntryCountLine)
+ .withFailMessage("does not match " + entryCountExtractor)
+ .isTrue();
+ String matchedGroup = matcher.group(1);
+ return Integer.valueOf(matchedGroup);
+ }
- assertThat(output.trim())
- .as("Returned gauge of region entries.")
- .endsWith("[" + expectedNumberOfEntries + ".0]");
- // });
+ private static Stream<String> linesOf(String text) {
+ return new BufferedReader(new StringReader(text)).lines();
}
private Region<String, String> createRegion(String regionType, String regionName) {