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
+