You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ec...@apache.org on 2020/04/13 17:17:55 UTC
[geode] branch develop updated: GEODE-7852: Create simple CQ over
SNI test. (#4942)
This is an automated email from the ASF dual-hosted git repository.
echobravo pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/develop by this push:
new ce157ec GEODE-7852: Create simple CQ over SNI test. (#4942)
ce157ec is described below
commit ce157ece58d2b91a5f998a11deacfe4f066d1027
Author: Ernie Burghardt <eb...@pivotal.io>
AuthorDate: Mon Apr 13 10:17:27 2020 -0700
GEODE-7852: Create simple CQ over SNI test. (#4942)
---
.../geode/client/sni/ClientSNIAcceptanceTest.java | 4 +-
...nceTest.java => ClientSNICQAcceptanceTest.java} | 109 ++++++++++++++++++---
.../geode/client/sni/scripts/geode-starter.gfsh | 3 +-
3 files changed, 96 insertions(+), 20 deletions(-)
diff --git a/geode-assembly/src/acceptanceTest/java/org/apache/geode/client/sni/ClientSNIAcceptanceTest.java b/geode-assembly/src/acceptanceTest/java/org/apache/geode/client/sni/ClientSNIAcceptanceTest.java
index 8c8f397..348216b 100644
--- a/geode-assembly/src/acceptanceTest/java/org/apache/geode/client/sni/ClientSNIAcceptanceTest.java
+++ b/geode-assembly/src/acceptanceTest/java/org/apache/geode/client/sni/ClientSNIAcceptanceTest.java
@@ -100,8 +100,6 @@ public class ClientSNIAcceptanceTest {
region.destroy("hello");
region.put("hello", "world");
assertThat(region.get("hello")).isEqualTo("world");
- // the geode-starter.gfsh script put an entry named "foo" into the region with the
- // value "bar"
- assertThat(region.get("foo")).isEqualTo("bar");
+
}
}
diff --git a/geode-assembly/src/acceptanceTest/java/org/apache/geode/client/sni/ClientSNIAcceptanceTest.java b/geode-assembly/src/acceptanceTest/java/org/apache/geode/client/sni/ClientSNICQAcceptanceTest.java
similarity index 55%
copy from geode-assembly/src/acceptanceTest/java/org/apache/geode/client/sni/ClientSNIAcceptanceTest.java
copy to geode-assembly/src/acceptanceTest/java/org/apache/geode/client/sni/ClientSNICQAcceptanceTest.java
index 8c8f397..5d129a5 100644
--- a/geode-assembly/src/acceptanceTest/java/org/apache/geode/client/sni/ClientSNIAcceptanceTest.java
+++ b/geode-assembly/src/acceptanceTest/java/org/apache/geode/client/sni/ClientSNICQAcceptanceTest.java
@@ -28,6 +28,7 @@ import static org.assertj.core.api.Assertions.assertThat;
import java.io.IOException;
import java.net.URL;
import java.util.Properties;
+import java.util.concurrent.atomic.AtomicInteger;
import com.palantir.docker.compose.DockerComposeRule;
import org.junit.Before;
@@ -36,17 +37,27 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestRule;
+import org.apache.geode.cache.Operation;
import org.apache.geode.cache.Region;
import org.apache.geode.cache.client.ClientCache;
import org.apache.geode.cache.client.ClientCacheFactory;
import org.apache.geode.cache.client.ClientRegionShortcut;
import org.apache.geode.cache.client.proxy.ProxySocketFactories;
+import org.apache.geode.cache.query.CqAttributes;
+import org.apache.geode.cache.query.CqAttributesFactory;
+import org.apache.geode.cache.query.CqEvent;
+import org.apache.geode.cache.query.CqException;
+import org.apache.geode.cache.query.CqExistsException;
+import org.apache.geode.cache.query.CqListener;
+import org.apache.geode.cache.query.CqQuery;
+import org.apache.geode.cache.query.QueryService;
+import org.apache.geode.cache.query.RegionNotFoundException;
import org.apache.geode.test.junit.rules.IgnoreOnWindowsRule;
-public class ClientSNIAcceptanceTest {
+public class ClientSNICQAcceptanceTest {
private static final URL DOCKER_COMPOSE_PATH =
- ClientSNIAcceptanceTest.class.getResource("docker-compose.yml");
+ ClientSNICQAcceptanceTest.class.getResource("docker-compose.yml");
// Docker compose does not work on windows in CI. Ignore this test on windows
// Using a RuleChain to make sure we ignore the test before the rule comes into play
@@ -57,22 +68,48 @@ public class ClientSNIAcceptanceTest {
public DockerComposeRule docker = DockerComposeRule.builder()
.file(DOCKER_COMPOSE_PATH.getPath())
.build();
+ private CqQuery cqTracker;
+ AtomicInteger eventCreateCounter = new AtomicInteger(0);
+ AtomicInteger eventUpdateCounter = new AtomicInteger(0);
+
+ class SNICQListener implements CqListener {
+
+
+ @Override
+ public void onEvent(CqEvent cqEvent) {
+ Operation queryOperation = cqEvent.getQueryOperation();
+
+
+ if (queryOperation.isUpdate()) {
+ eventUpdateCounter.incrementAndGet();
+ } else if (queryOperation.isCreate()) {
+ eventCreateCounter.incrementAndGet();
+ }
+ }
+
+ @Override
+ public void onError(CqEvent aCqEvent) {
+ System.out.println("We had an ERROR....");
+ }
+ }
private String trustStorePath;
@Before
public void before() throws IOException, InterruptedException {
trustStorePath =
- createTempFileFromResource(ClientSNIAcceptanceTest.class,
+ createTempFileFromResource(ClientSNICQAcceptanceTest.class,
"geode-config/truststore.jks")
.getAbsolutePath();
docker.exec(options("-T"), "geode",
arguments("gfsh", "run", "--file=/geode/scripts/geode-starter.gfsh"));
+
}
@Test
- public void connectToSNIProxyDocker() {
+ public void performSimpleCQOverSNIProxy()
+ throws CqException, CqExistsException, RegionNotFoundException {
Properties gemFireProps = new Properties();
gemFireProps.setProperty(SSL_ENABLED_COMPONENTS, "all");
gemFireProps.setProperty(SSL_KEYSTORE_TYPE, "jks");
@@ -90,18 +127,60 @@ public class ClientSNIAcceptanceTest {
.addPoolLocator("locator", 10334)
.setPoolSocketFactory(ProxySocketFactories.sni("localhost",
proxyPort))
+ .setPoolSubscriptionEnabled(true)
.create();
- // the geode-starter.gfsh script has created a Region named "jellyfish" on the
- // server sitting behind the haproxy gateway. Show that an empty client cache can
- // put something in that region and then retrieve it.
- Region<String, String> region =
- cache.<String, String>createClientRegionFactory(ClientRegionShortcut.PROXY)
+ Region<String, Integer> region =
+ cache.<String, Integer>createClientRegionFactory(ClientRegionShortcut.PROXY)
.create("jellyfish");
- region.destroy("hello");
- region.put("hello", "world");
- assertThat(region.get("hello")).isEqualTo("world");
- // the geode-starter.gfsh script put an entry named "foo" into the region with the
- // value "bar"
- assertThat(region.get("foo")).isEqualTo("bar");
+
+ startCQ(region);
+
+ populateRegion(region);
+ assertThat(region.get("key0")).isEqualTo(0);
+ assertThat(region.get("key1")).isEqualTo(1);
+ assertThat(region.get("key2")).isEqualTo(2);
+ assertThat(region.get("key99")).isEqualTo(99);
+
+
+ assertThat(eventCreateCounter.get()).isEqualTo(62);
+
+ updateRegion(region);
+ assertThat(region.get("key0")).isEqualTo(10);
+ assertThat(region.get("key1")).isEqualTo(11);
+ assertThat(region.get("key2")).isEqualTo(12);
+ assertThat(region.get("key99")).isEqualTo(109);
+
+ assertThat(eventUpdateCounter.get()).isEqualTo(62);
+
+ }
+
+ public void updateRegion(Region<String, Integer> region) {
+ for (Integer i = 0; i < 100; ++i) {
+ String key = "key" + i;
+ region.put(key, (i + 10));
+ }
+ }
+
+ public void populateRegion(Region<String, Integer> region) {
+ for (Integer i = 0; i < 100; ++i) {
+ String key = "key" + i;
+ region.put(key, i);
+ }
}
+
+ public void startCQ(Region<String, Integer> region)
+ throws CqExistsException, CqException, RegionNotFoundException {
+ CqAttributesFactory cqf = new CqAttributesFactory();
+ cqf.addCqListener(new SNICQListener());
+ CqAttributes cqa = cqf.create();
+
+ String cqName = "jellyTracker";
+
+ String queryStr = "SELECT * FROM /jellyfish i where i > 37";
+
+ QueryService queryService = region.getRegionService().getQueryService();
+ cqTracker = queryService.newCq(cqName, queryStr, cqa);
+ cqTracker.execute();
+ }
+
}
diff --git a/geode-assembly/src/acceptanceTest/resources/org/apache/geode/client/sni/scripts/geode-starter.gfsh b/geode-assembly/src/acceptanceTest/resources/org/apache/geode/client/sni/scripts/geode-starter.gfsh
index 5b9fc80..6a0350e 100644
--- a/geode-assembly/src/acceptanceTest/resources/org/apache/geode/client/sni/scripts/geode-starter.gfsh
+++ b/geode-assembly/src/acceptanceTest/resources/org/apache/geode/client/sni/scripts/geode-starter.gfsh
@@ -19,5 +19,4 @@ start locator --name=locator --hostname-for-clients=locator --properties-file=/g
start server --name=server --hostname-for-clients=server --locators=localhost[10334] --properties-file=/geode/config/gemfire.properties --security-properties-file=/geode/config/gfsecurity.properties --J=-Dgemfire.ssl-keystore=/geode/config/server-keystore.jks
connect --locator=localhost[10334] --use-ssl=true --security-properties-file=/geode/config/gfsecurity.properties
create region --name=jellyfish --type=REPLICATE
-put --key=foo --value=bar --region=jellyfish
-get --key=foo --region=jellyfish
+