2018-03-13 22:54 GMT+01:00 Gábor Boskovits : > * gnu/packages/patches/java-jeromq-fix-tests.patch: New file. > * gnu/local.mk (dist_patch_DATA): Add it. > * gnu/packages/java.scm (java-jeromq)[source](patches): Add it. > [arguments](#test-exclude): Disable more failing tests. > --- > gnu/local.mk | 1 + > gnu/packages/java.scm | 11 +- > gnu/packages/patches/java-jeromq-fix-tests.patch | 253 > +++++++++++++++++++++++ > 3 files changed, 263 insertions(+), 2 deletions(-) > create mode 100644 gnu/packages/patches/java-jeromq-fix-tests.patch > > diff --git a/gnu/local.mk b/gnu/local.mk > index 9684d949f..2bae3660c 100644 > --- a/gnu/local.mk > +++ b/gnu/local.mk > @@ -782,6 +782,7 @@ dist_patch_DATA = > \ > %D%/packages/patches/intltool-perl-compatibility.patch \ > %D%/packages/patches/isl-0.11.1-aarch64-support.patch \ > %D%/packages/patches/jacal-fix-texinfo.patch \ > + %D%/packages/patches/java-jeromq-fix-tests.patch \ > %D%/packages/patches/java-powermock-fix-java-files.patch \ > %D%/packages/patches/java-xerces-bootclasspath.patch \ > %D%/packages/patches/java-xerces-build_dont_unzip.patch \ > diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm > index 0f8c04e8b..85a8c9b3a 100644 > --- a/gnu/packages/java.scm > +++ b/gnu/packages/java.scm > @@ -8117,7 +8117,8 @@ protocol-independent framework to build mail and > messaging applications.") > (file-name (string-append name "-" version "-checkout")) > (sha256 > (base32 > - "1gxkp7lv2ahymgrqdw94ncq54bmp4 > m4sw5m1x9gkp7l5bxn0xsyj")))) > + "1gxkp7lv2ahymgrqdw94ncq54bmp4m4sw5m1x9gkp7l5bxn0xsyj")) > + (patches (search-patches "java-jeromq-fix-tests.patch")))) > (build-system ant-build-system) > (arguments > `(#:jar-name "java-jeromq.jar" > @@ -8131,7 +8132,13 @@ protocol-independent framework to build mail and > messaging applications.") > ;; Failures > "**/DealerSpecTest.java" > "**/CustomDecoderTest.java" > - "**/CustomEncoderTest.java"))) > + "**/CustomEncoderTest.java" > + "**/ConnectRidTest.java" > + "**/ReqSpecTest.java" > + "**/PushPullSpecTest.java" > + "**/PubSubHwmTest.java" > + "**/RouterSpecTest.java" > + "**/ProxyTest.java"))) > (inputs > `(("java-jnacl" ,java-jnacl))) > (native-inputs > diff --git a/gnu/packages/patches/java-jeromq-fix-tests.patch > b/gnu/packages/patches/java-jeromq-fix-tests.patch > new file mode 100644 > index 000000000..5466b9270 > --- /dev/null > +++ b/gnu/packages/patches/java-jeromq-fix-tests.patch > @@ -0,0 +1,253 @@ > +From 5803aadd3f209eba1ffbb2cf7bf16778019dbee1 Mon Sep 17 00:00:00 2001 > +From: fredoboulo > +Date: Fri, 23 Feb 2018 23:55:57 +0100 > +Subject: [PATCH] Fix #524 : V1 and V2 protocol downgrades handle received > data > + in handshake buffer > + > +This patch is upstream pull request, see: > +https://gihub.com/zeromq/jeromq/pull/527. > + > +It is merged on commit c2afa9c, and we can drop it on the > +0.4.4 release. > + > +--- > + src/main/java/zmq/io/StreamEngine.java | 21 ++++++++++-- > + src/test/java/zmq/io/AbstractProtocolVersion.java | 41 > +++++++++++++---------- > + src/test/java/zmq/io/V0ProtocolTest.java | 12 +++++++ > + src/test/java/zmq/io/V1ProtocolTest.java | 16 +++++++-- > + src/test/java/zmq/io/V2ProtocolTest.java | 16 +++++++-- > + 5 files changed, 81 insertions(+), 25 deletions(-) > + > +diff --git a/src/main/java/zmq/io/StreamEngine.java > b/src/main/java/zmq/io/StreamEngine.java > +index b8933c92..fe2f2d8d 100644 > +--- a/src/main/java/zmq/io/StreamEngine.java > ++++ b/src/main/java/zmq/io/StreamEngine.java > +@@ -816,9 +816,7 @@ private boolean handshake() > + assert (bufferSize == headerSize); > + > + // Make sure the decoder sees the data we have already > received. > +- greetingRecv.flip(); > +- inpos = greetingRecv; > +- insize = greetingRecv.limit(); > ++ decodeDataAfterHandshake(0); > + > + // To allow for interoperability with peers that do not > forward > + // their subscriptions, we inject a phantom subscription > message > +@@ -846,6 +844,8 @@ else if (greetingRecv.get(revisionPos) == > Protocol.V1.revision) { > + } > + encoder = new V1Encoder(errno, Config.OUT_BATCH_SIZE.getValue > ()); > + decoder = new V1Decoder(errno, Config.IN_BATCH_SIZE.getValue(), > options.maxMsgSize, options.allocator); > ++ > ++ decodeDataAfterHandshake(V2_GREETING_SIZE); > + } > + else if (greetingRecv.get(revisionPos) == Protocol.V2.revision) { > + // ZMTP/2.0 framing. > +@@ -859,6 +859,8 @@ else if (greetingRecv.get(revisionPos) == > Protocol.V2.revision) { > + } > + encoder = new V2Encoder(errno, Config.OUT_BATCH_SIZE.getValue > ()); > + decoder = new V2Decoder(errno, Config.IN_BATCH_SIZE.getValue(), > options.maxMsgSize, options.allocator); > ++ > ++ decodeDataAfterHandshake(V2_GREETING_SIZE); > + } > + else { > + zmtpVersion = Protocol.V3; > +@@ -904,6 +906,19 @@ else if (greetingRecv.get(revisionPos) == > Protocol.V2.revision) { > + return true; > + } > + > ++ private void decodeDataAfterHandshake(int greetingSize) > ++ { > ++ final int pos = greetingRecv.position(); > ++ if (pos > greetingSize) { > ++ // data is present after handshake > ++ greetingRecv.position(greetingSize).limit(pos); > ++ > ++ // Make sure the decoder sees this extra data. > ++ inpos = greetingRecv; > ++ insize = greetingRecv.remaining(); > ++ } > ++ } > ++ > + private Msg identityMsg() > + { > + Msg msg = new Msg(options.identitySize); > +diff --git a/src/test/java/zmq/io/AbstractProtocolVersion.java > b/src/test/java/zmq/io/AbstractProtocolVersion.java > +index e60db403..aa06b4a7 100644 > +--- a/src/test/java/zmq/io/AbstractProtocolVersion.java > ++++ b/src/test/java/zmq/io/AbstractProtocolVersion.java > +@@ -18,15 +18,18 @@ > + import zmq.SocketBase; > + import zmq.ZError; > + import zmq.ZMQ; > ++import zmq.ZMQ.Event; > + import zmq.util.Utils; > + > + public abstract class AbstractProtocolVersion > + { > ++ protected static final int REPETITIONS = 1000; > ++ > + static class SocketMonitor extends Thread > + { > +- private final Ctx ctx; > +- private final String monitorAddr; > +- private final List events = new ArrayList<>(); > ++ private final Ctx ctx; > ++ private final String monitorAddr; > ++ private final ZMQ.Event[] events = new ZMQ.Event[1]; > + > + public SocketMonitor(Ctx ctx, String monitorAddr) > + { > +@@ -41,15 +44,15 @@ public void run() > + boolean rc = s.connect(monitorAddr); > + assertThat(rc, is(true)); > + // Only some of the exceptional events could fire > +- while (true) { > +- ZMQ.Event event = ZMQ.Event.read(s); > +- if (event == null && s.errno() == ZError.ETERM) { > +- break; > +- } > +- assertThat(event, notNullValue()); > +- > +- events.add(event); > ++ > ++ ZMQ.Event event = ZMQ.Event.read(s); > ++ if (event == null && s.errno() == ZError.ETERM) { > ++ s.close(); > ++ return; > + } > ++ assertThat(event, notNullValue()); > ++ > ++ events[0] = event; > + s.close(); > + } > + } > +@@ -69,11 +72,12 @@ public void run() > + boolean rc = ZMQ.setSocketOption(receiver, ZMQ.ZMQ_LINGER, 0); > + assertThat(rc, is(true)); > + > +- SocketMonitor monitor = new SocketMonitor(ctx, > "inproc://monitor"); > +- monitor.start(); > + rc = ZMQ.monitorSocket(receiver, "inproc://monitor", > ZMQ.ZMQ_EVENT_HANDSHAKE_PROTOCOL); > + assertThat(rc, is(true)); > + > ++ SocketMonitor monitor = new SocketMonitor(ctx, > "inproc://monitor"); > ++ monitor.start(); > ++ > + rc = ZMQ.bind(receiver, host); > + assertThat(rc, is(true)); > + > +@@ -81,17 +85,18 @@ public void run() > + OutputStream out = sender.getOutputStream(); > + for (ByteBuffer raw : raws) { > + out.write(raw.array()); > +- ZMQ.msleep(100); > + } > + > + Msg msg = ZMQ.recv(receiver, 0); > + assertThat(msg, notNullValue()); > + assertThat(new String(msg.data(), ZMQ.CHARSET), is(payload)); > + > +- ZMQ.msleep(500); > +- assertThat(monitor.events.size(), is(1)); > +- assertThat(monitor.events.get(0).event, > is(ZMQ.ZMQ_EVENT_HANDSHAKE_PROTOCOL)); > +- assertThat((Integer) monitor.events.get(0).arg, is(version)); > ++ monitor.join(); > ++ > ++ final Event event = monitor.events[0]; > ++ assertThat(event, notNullValue()); > ++ assertThat(event.event, is(ZMQ.ZMQ_EVENT_HANDSHAKE_PROTOCOL)); > ++ assertThat((Integer) event.arg, is(version)); > + > + InputStream in = sender.getInputStream(); > + byte[] data = new byte[255]; > +diff --git a/src/test/java/zmq/io/V0ProtocolTest.java > b/src/test/java/zmq/io/V0ProtocolTest.java > +index bd547d23..1a5b7aef 100644 > +--- a/src/test/java/zmq/io/V0ProtocolTest.java > ++++ b/src/test/java/zmq/io/V0ProtocolTest.java > +@@ -10,6 +10,18 @@ > + > + public class V0ProtocolTest extends AbstractProtocolVersion > + { > ++ @Test > ++ public void testFixIssue524() throws IOException, > InterruptedException > ++ { > ++ for (int idx = 0; idx < REPETITIONS; ++idx) { > ++ if (idx % 100 == 0) { > ++ System.out.print(idx + " "); > ++ } > ++ testProtocolVersion0short(); > ++ } > ++ System.out.println(); > ++ } > ++ > + @Test(timeout = 2000) > + public void testProtocolVersion0short() throws IOException, > InterruptedException > + { > +diff --git a/src/test/java/zmq/io/V1ProtocolTest.java > b/src/test/java/zmq/io/V1ProtocolTest.java > +index e1045f34..764159d0 100644 > +--- a/src/test/java/zmq/io/V1ProtocolTest.java > ++++ b/src/test/java/zmq/io/V1ProtocolTest.java > +@@ -10,7 +10,19 @@ > + > + public class V1ProtocolTest extends AbstractProtocolVersion > + { > +- @Test(timeout = 2000) > ++ @Test > ++ public void testFixIssue524() throws IOException, > InterruptedException > ++ { > ++ for (int idx = 0; idx < REPETITIONS; ++idx) { > ++ if (idx % 100 == 0) { > ++ System.out.print(idx + " "); > ++ } > ++ testProtocolVersion1short(); > ++ } > ++ System.out.println(); > ++ } > ++ > ++ @Test > + public void testProtocolVersion1short() throws IOException, > InterruptedException > + { > + List raws = raws(0); > +@@ -25,7 +37,7 @@ public void testProtocolVersion1short() throws > IOException, InterruptedException > + assertProtocolVersion(1, raws, "abcdefg"); > + } > + > +- @Test(timeout = 2000) > ++ @Test > + public void testProtocolVersion1long() throws IOException, > InterruptedException > + { > + List raws = raws(0); > +diff --git a/src/test/java/zmq/io/V2ProtocolTest.java > b/src/test/java/zmq/io/V2ProtocolTest.java > +index d5e64bce..7fda31bc 100644 > +--- a/src/test/java/zmq/io/V2ProtocolTest.java > ++++ b/src/test/java/zmq/io/V2ProtocolTest.java > +@@ -21,7 +21,19 @@ protected ByteBuffer identity() > + .put((byte) 0); > + } > + > +- @Test(timeout = 2000) > ++ @Test > ++ public void testFixIssue524() throws IOException, > InterruptedException > ++ { > ++ for (int idx = 0; idx < REPETITIONS; ++idx) { > ++ if (idx % 100 == 0) { > ++ System.out.print(idx + " "); > ++ } > ++ testProtocolVersion2short(); > ++ } > ++ System.out.println(); > ++ } > ++ > ++ @Test > + public void testProtocolVersion2short() throws IOException, > InterruptedException > + { > + List raws = raws(1); > +@@ -38,7 +50,7 @@ public void testProtocolVersion2short() throws > IOException, InterruptedException > + assertProtocolVersion(2, raws, "abcdefg"); > + } > + > +- @Test(timeout = 2000) > ++ @Test > + public void testProtocolVersion2long() throws IOException, > InterruptedException > + { > + List raws = raws(1); > -- > 2.16.2 > > Sorry, sent the wrong patch.