summaryrefslogtreecommitdiffstats
path: root/documentapi
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2022-04-14 07:42:04 +0200
committerjonmv <venstad@gmail.com>2022-04-19 15:39:23 +0200
commit6f7cac65ca194a46ee3c52bb7fab2094a96954cb (patch)
treecd91fb4582749ecd8e03f4469a1aa48bae73cd99 /documentapi
parent202dabc7226f6dfa2c71cc76dfd69c7ddb5d1853 (diff)
Add retries to broken message bus test setup
Diffstat (limited to 'documentapi')
-rw-r--r--documentapi/src/test/java/com/yahoo/documentapi/messagebus/Destination.java5
-rw-r--r--documentapi/src/test/java/com/yahoo/documentapi/messagebus/MessageBusDocumentApiTestCase.java30
-rw-r--r--documentapi/src/test/java/com/yahoo/documentapi/test/AbstractDocumentApiTestCase.java1
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();
}
}
+
}