From ac88ec301ef6fb47818971880318a7f77c052e9b Mon Sep 17 00:00:00 2001 From: Vittorio Date: Thu, 26 Oct 2017 16:03:01 +0200 Subject: [PATCH] HRCPP-424 Updated test suite to 9.1.1.Final --- jni/pom.xml | 9 ++- .../infinispan/client/hotrod/RemoteCache.java | 2 + .../client/hotrod/impl/RemoteCacheImpl.java | 74 +++++++++++++++++++ jni/src/main/swig/java.i | 5 +- .../infinispan/client/jni/hotrod/JniTest.java | 21 ++---- 5 files changed, 96 insertions(+), 15 deletions(-) diff --git a/jni/pom.xml b/jni/pom.xml index d340f7d7..aeef22ee 100644 --- a/jni/pom.xml +++ b/jni/pom.xml @@ -17,7 +17,7 @@ Infinispan HotRod JNI Wrapper - 9.0.0.Final + 9.1.1.Final 1.2.1.Final 4.17.13.Final 6.8 @@ -62,6 +62,13 @@ tests test + + org.infinispan + infinispan-server-core + ${version.org.infinispan} + tests + test + org.infinispan infinispan-server-hotrod diff --git a/jni/src/main/java/org/infinispan/client/hotrod/RemoteCache.java b/jni/src/main/java/org/infinispan/client/hotrod/RemoteCache.java index 35264103..390c781f 100644 --- a/jni/src/main/java/org/infinispan/client/hotrod/RemoteCache.java +++ b/jni/src/main/java/org/infinispan/client/hotrod/RemoteCache.java @@ -65,6 +65,8 @@ public interface RemoteCache { Map getBulk(); Map getBulk(int size); + + Map getAll(Set keySet); boolean isEmpty(); diff --git a/jni/src/main/java/org/infinispan/client/hotrod/impl/RemoteCacheImpl.java b/jni/src/main/java/org/infinispan/client/hotrod/impl/RemoteCacheImpl.java index 20e5b1cb..b40eeeda 100644 --- a/jni/src/main/java/org/infinispan/client/hotrod/impl/RemoteCacheImpl.java +++ b/jni/src/main/java/org/infinispan/client/hotrod/impl/RemoteCacheImpl.java @@ -10,6 +10,7 @@ import java.math.BigInteger; import java.net.SocketAddress; +import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -34,6 +35,7 @@ import org.infinispan.client.hotrod.jni.MetadataPairReturn; import org.infinispan.client.hotrod.jni.RelayBytes; import org.infinispan.client.hotrod.jni.RemoteCache_jb_jb; +import org.infinispan.client.hotrod.jni.SetArgs; import org.infinispan.client.hotrod.jni.SetReturn; import org.infinispan.client.hotrod.jni.StringVectorReturn; import org.infinispan.client.hotrod.jni.VectorReturn; @@ -483,6 +485,41 @@ public Object invoke(RelayBytes... rbs) { return result; } + @Override + public Map getAll(Set keySet) { + return relayedInvoker(new RelayedMethod() { + @Override + public Object invoke(RelayBytes... rbs) { + SetArgs s = new SetArgs(); + for (RelayBytes r : rbs) { + s.insert(r); + } + MapReturn mr = jniRemoteCache.getAll(s); + final VectorReturn vectorReturn = Hotrod.keySet(mr); + Map ret = new HashMap(); + for (int i = 0; i < vectorReturn.size(); i++) { + final RelayBytes k = Hotrod.dereference(vectorReturn.get(i)); + final RelayBytes v = Hotrod.dereference(mr.get(vectorReturn.get(i))); + K key = relayedInvoker(new RelayedMethod() { + @Override + public Object invoke(RelayBytes... rbs) { + return k; + } + }); + V value = relayedInvoker(new RelayedMethod() { + @Override + public Object invoke(RelayBytes... rbs) { + return v; + } + }); + + ret.put(key, value); + } + return ret; + } + }, (Collection) keySet); + } + @Override public RemoteCache withFlags(Flag... flags) { int result = 0; @@ -495,6 +532,43 @@ public RemoteCache withFlags(Flag... flags) { return this; } + private R relayedInvoker(RelayedMethod m, Collection oc) { + RelayBytes rb[] = new RelayBytes[oc.size()]; + byte bytes[][] = new byte[oc.size()][]; + try { + int i = 0; + for (Object o : oc) { + rb[i] = new RelayBytes(); + bytes[i] = marshaller.objectToByteBuffer(o); + setJvmBytes(rb[i], bytes[i]); + ++i; + } + Object ret = m.invoke(rb); + if (ret == null) { + return null; + } else if (ret instanceof RelayBytes) { + RelayBytes retrb = (RelayBytes) ret; + byte[] jcopy = new byte[(int) retrb.getLength()]; + readNative(retrb, jcopy); + try { + return (R) marshaller.objectFromByteBuffer(jcopy); + } finally { + dispose(retrb); + } + } else { + return (R) ret; + } + } catch (RuntimeException e) { + throw e; + } catch (Throwable t) { + throw new RuntimeException(t); + } finally { + for (int i = 0; i < oc.size(); i++) { + releaseJvmBytes(rb[i], bytes[i]); + } + } + } + private R relayedInvoker(RelayedMethod m, Object... o) { RelayBytes rb[] = new RelayBytes[o.length]; byte bytes[][] = new byte[o.length][]; diff --git a/jni/src/main/swig/java.i b/jni/src/main/swig/java.i index d224a04d..b844f3b2 100644 --- a/jni/src/main/swig/java.i +++ b/jni/src/main/swig/java.i @@ -178,6 +178,8 @@ class RelayBytes { size_t getLength () const {return length; } jbyteArray getJarray() const { return jarray; } bool isNull() const { return !bytes; } + bool operator< (const RelayBytes &b) const { return std::memcmp(bytes, b.bytes, std::min(length, b.length))<0; } + private: char *bytes; size_t length; @@ -186,11 +188,12 @@ class RelayBytes { %} -//%template(RelayShrPointer) std::shared_ptr; +%template(RelayShrPointer) std::shared_ptr; %template(MetadataPairReturn) std::pair, infinispan::hotrod::MetadataValue>; %template(VersionPairReturn) std::pair, infinispan::hotrod::VersionedValue>; %template(MapReturn) std::map, std::shared_ptr >; %template(SetReturn) std::set >; +%template(SetArgs) std::set; %template(VectorReturn) std::vector >; %template(StringVectorReturn) std::vector; %template(IntegerVectorReturn) std::vector; diff --git a/jni/src/test/java/org/infinispan/client/jni/hotrod/JniTest.java b/jni/src/test/java/org/infinispan/client/jni/hotrod/JniTest.java index 7e2aaaf1..74ea515d 100644 --- a/jni/src/test/java/org/infinispan/client/jni/hotrod/JniTest.java +++ b/jni/src/test/java/org/infinispan/client/jni/hotrod/JniTest.java @@ -39,11 +39,9 @@ public static void main(String[] args) { CrossLanguageHotRodTest.class, /* package org.infinispan.client.hotrod */ // ApacheCommonsPoolTest.class, // omitting - BulkGetKeysDistTest.class, - BulkGetKeysReplTest.class, - BulkGetKeysSimpleTest.class, - BulkGetReplTest.class, - BulkGetSimpleTest.class, + GetAllLocalTest.class, + GetAllReplTest.class, + GetAllDistTest.class, // CacheContainerTest.class, // not relevant CacheManagerNotStartedTest.class, CacheManagerStoppedTest.class, @@ -80,21 +78,18 @@ public static void main(String[] args) { // SslTest.class, // SSL not implemented // TransportObjectFactoryTest.class, // omitting }); - testng.addListener(tr); testng.setGroups("unit,functional"); testng.run(); Set expectedTestFailures = new TreeSet(Arrays.asList( - "BulkGetKeysDistTest.testBulkGetAfterLifespanExpire", // unstable, ISPN-4017 "HotRodIntegrationTest.testReplaceWithVersionWithLifespanAsync", // async not implemented "ClientSocketReadTimeoutTest.testPutTimeout", // TODO: TransportException not marshalled correctly - "BulkGetKeysReplTest.testBulkGetAfterLifespanExpire", - "BulkGetKeysSimpleTest.testBulkGetAfterLifespanExpire", - "BulkGetReplTest.testBulkGetAfterLifespanExpire", - "BulkGetSimpleTest.testBulkGetAfterLifespanExpire", - "ForceReturnValuesTest.testSameInstanceForSameForceReturnValues", - "HotRodIntegrationTest.testGetWithMetadata" + "HotRodIntegrationTest.testGetWithMetadata", + "RemoteCacheManagerTest.testStartStopAsync", + "GetAllDistTest.testBulkGetAfterLifespanExpire", + "GetAllLocalTest.testBulkGetAfterLifespanExpire", + "GetAllReplTest.testBulkGetAfterLifespanExpire" )); Set expectedSkips = Collections.emptySet();