diff options
author | jonmv <venstad@gmail.com> | 2022-04-14 07:42:04 +0200 |
---|---|---|
committer | jonmv <venstad@gmail.com> | 2022-04-19 15:39:23 +0200 |
commit | 6f7cac65ca194a46ee3c52bb7fab2094a96954cb (patch) | |
tree | cd91fb4582749ecd8e03f4469a1aa48bae73cd99 /documentapi | |
parent | 202dabc7226f6dfa2c71cc76dfd69c7ddb5d1853 (diff) |
Add retries to broken message bus test setup
Diffstat (limited to 'documentapi')
3 files changed, 23 insertions, 13 deletions
diff --git a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/Destination.java b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/Destination.java index e08d9b14ee5..a3c63772af2 100644 --- a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/Destination.java +++ b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/Destination.java @@ -27,11 +27,12 @@ import com.yahoo.messagebus.network.Identity; import com.yahoo.messagebus.network.rpc.RPCNetworkParams; import java.util.Arrays; +import java.util.List; /** * Mock-up destination used for testing. * - * @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a> + * @author Einar M R Rosenvinge */ public class Destination implements MessageHandler { @@ -46,7 +47,7 @@ public class Destination implements MessageHandler { params.setDocumentManagerConfigId(documentManagerConfigId); access = new LocalDocumentAccess(params); local = access.createSyncSession(new SyncParameters.Builder().build()); - bus = new RPCMessageBus(Arrays.asList((Protocol)new DocumentProtocol(access.getDocumentTypeManager())), + bus = new RPCMessageBus(List.of(new DocumentProtocol(access.getDocumentTypeManager())), new RPCNetworkParams().setNumNetworkThreads(1) .setIdentity(new Identity("test/destination")) .setSlobrokConfigId(slobrokConfigId), diff --git a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/MessageBusDocumentApiTestCase.java b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/MessageBusDocumentApiTestCase.java index db7ab0ea238..d1e0d7685c6 100644 --- a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/MessageBusDocumentApiTestCase.java +++ b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/MessageBusDocumentApiTestCase.java @@ -12,6 +12,7 @@ import com.yahoo.documentapi.DocumentAccess; import com.yahoo.documentapi.DocumentOperationParameters; import com.yahoo.documentapi.ProgressToken; import com.yahoo.documentapi.Response; +import com.yahoo.documentapi.Response.Outcome; import com.yahoo.documentapi.VisitorParameters; import com.yahoo.documentapi.VisitorSession; import com.yahoo.documentapi.messagebus.protocol.CreateVisitorReply; @@ -119,17 +120,24 @@ public class MessageBusDocumentApiTestCase extends AbstractDocumentApiTestCase { AsyncSession session = access().createAsyncSession(new AsyncParameters()); DocumentType type = access().getDocumentTypeManager().getDocumentType("music"); Document doc1 = new Document(type, new DocumentId("id:ns:music::1")); - assertTrue(session.put(new DocumentPut(doc1), - DocumentOperationParameters.parameters() - .withResponseHandler(result -> { - response.set(result); - latch.countDown(); - }) - .withDeadline(Instant.now().minusSeconds(1))) - .isSuccess()); - assertTrue(latch.await(60, TimeUnit.SECONDS)); - assertNotNull(response.get()); - assertEquals(Response.Outcome.TIMEOUT, response.get().outcome()); + + // The setup is broken. Zero or negative timeout has semantics in messagebus, so ensuring a timeout is impossible,as negative + // remaining time is converted to 1 ms further down. We therefore try tenfold, and accept > 0 timeouts as success ... (;☉_☉) + // We could return a timeout from the destination, but then we're not testing what we want, namely that the sender times out. + int attempts = 10; + for (int i = 0; ++i <= attempts; ) { + assertTrue(session.put(new DocumentPut(doc1), + DocumentOperationParameters.parameters() + .withResponseHandler(result -> { + response.set(result); + latch.countDown(); + }) + .withDeadline(Instant.now().plusMillis(40))) + .isSuccess()); + assertTrue(latch.await(60, TimeUnit.SECONDS)); + if (response.get().outcome() == Outcome.TIMEOUT) break; + if (i == attempts) assertEquals(Response.Outcome.TIMEOUT, response.get().outcome()); + } session.destroy(); } diff --git a/documentapi/src/test/java/com/yahoo/documentapi/test/AbstractDocumentApiTestCase.java b/documentapi/src/test/java/com/yahoo/documentapi/test/AbstractDocumentApiTestCase.java index a004ad368e0..001a5d284e2 100644 --- a/documentapi/src/test/java/com/yahoo/documentapi/test/AbstractDocumentApiTestCase.java +++ b/documentapi/src/test/java/com/yahoo/documentapi/test/AbstractDocumentApiTestCase.java @@ -173,4 +173,5 @@ public abstract class AbstractDocumentApiTestCase { latch.countDown(); } } + } |