aboutsummaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorHarald Musum <musum@yahooinc.com>2021-11-11 09:45:09 +0100
committerHarald Musum <musum@yahooinc.com>2021-11-11 09:45:09 +0100
commitf7fc73ffb5032485229e2ad3d3f97b4b9d8ed761 (patch)
tree7558bad250d4fbc67ed45b4b8eb100444189296e /config
parenta218ec7919bb0a06708c08759bda962dbad01b90 (diff)
Extend test to cover case where we get new generation, but same config
Diffstat (limited to 'config')
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/impl/MockConnection.java4
-rw-r--r--config/src/test/java/com/yahoo/config/subscription/GenericConfigSubscriberTest.java43
2 files changed, 32 insertions, 15 deletions
diff --git a/config/src/main/java/com/yahoo/config/subscription/impl/MockConnection.java b/config/src/main/java/com/yahoo/config/subscription/impl/MockConnection.java
index 640f3d0c27e..6446758a9ba 100644
--- a/config/src/main/java/com/yahoo/config/subscription/impl/MockConnection.java
+++ b/config/src/main/java/com/yahoo/config/subscription/impl/MockConnection.java
@@ -83,11 +83,13 @@ public class MockConnection implements ConnectionPool, Connection {
static class OKResponseHandler extends AbstractResponseHandler {
+ long generation = 1;
+
protected void createResponse() {
JRTServerConfigRequestV3 jrtReq = JRTServerConfigRequestV3.createFromRequest(request);
Payload payload = Payload.from(ConfigPayload.empty());
- long generation = 1;
jrtReq.addOkResponse(payload, generation, false, PayloadChecksums.fromPayload(payload));
+ generation++;
}
}
diff --git a/config/src/test/java/com/yahoo/config/subscription/GenericConfigSubscriberTest.java b/config/src/test/java/com/yahoo/config/subscription/GenericConfigSubscriberTest.java
index 6174432676c..4616630557e 100644
--- a/config/src/test/java/com/yahoo/config/subscription/GenericConfigSubscriberTest.java
+++ b/config/src/test/java/com/yahoo/config/subscription/GenericConfigSubscriberTest.java
@@ -1,25 +1,23 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.subscription;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
import com.yahoo.config.subscription.impl.GenericConfigHandle;
import com.yahoo.config.subscription.impl.GenericConfigSubscriber;
import com.yahoo.config.subscription.impl.JRTConfigRequester;
import com.yahoo.config.subscription.impl.JRTConfigRequesterTest;
import com.yahoo.config.subscription.impl.MockConnection;
import com.yahoo.vespa.config.ConfigKey;
-import com.yahoo.vespa.config.JRTConnectionPool;
+import com.yahoo.vespa.config.TimingValues;
import com.yahoo.vespa.config.protocol.CompressionType;
import org.junit.Test;
-import static org.hamcrest.CoreMatchers.is;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
/**
@@ -29,28 +27,45 @@ import static org.junit.Assert.assertTrue;
* @author Ulf Lilleengen
*/
public class GenericConfigSubscriberTest {
+ private static final TimingValues tv = JRTConfigRequesterTest.getTestTimingValues();
@Test
- public void testSubscribeGeneric() {
+ public void testSubscribeGeneric() throws InterruptedException {
Map<ConfigSourceSet, JRTConfigRequester> requesters = new HashMap<>();
ConfigSourceSet sourceSet = new ConfigSourceSet("blabla");
- requesters.put(sourceSet, new JRTConfigRequester(new MockConnection(), JRTConfigRequesterTest.getTestTimingValues()));
+ requesters.put(sourceSet, new JRTConfigRequester(new MockConnection(), tv));
GenericConfigSubscriber sub = new GenericConfigSubscriber(requesters);
final List<String> defContent = List.of("myVal int");
- GenericConfigHandle handle = sub.subscribe(new ConfigKey<>("simpletypes", "id", "config"), defContent, sourceSet, JRTConfigRequesterTest.getTestTimingValues());
+ GenericConfigHandle handle = sub.subscribe(new ConfigKey<>("simpletypes", "id", "config"),
+ defContent,
+ sourceSet,
+ tv);
assertTrue(sub.nextConfig(false));
assertTrue(handle.isChanged());
- assertThat(handle.getRawConfig().getPayload().withCompression(CompressionType.UNCOMPRESSED).toString(), is("{}")); // MockConnection returns empty string
+ // MockConnection returns empty string
+ assertEquals("{}", getConfig(handle));
+ assertEquals(1L, handle.getRawConfig().getGeneration());
assertFalse(sub.nextConfig(false));
assertFalse(handle.isChanged());
+
+ // Wait some time, config should be the same, but generation should be higher
+ Thread.sleep(tv.getFixedDelay() * 2);
+ assertEquals("{}", getConfig(handle));
+ assertTrue(handle.getRawConfig().getGeneration() > 1);
+ assertFalse(sub.nextConfig(false));
+ assertFalse(handle.isChanged());
+ }
+
+ private String getConfig(GenericConfigHandle handle) {
+ return handle.getRawConfig().getPayload().withCompression(CompressionType.UNCOMPRESSED).toString();
}
@Test
public void testGenericRequesterPooling() {
ConfigSourceSet source1 = new ConfigSourceSet("tcp/foo:78");
ConfigSourceSet source2 = new ConfigSourceSet("tcp/bar:79");
- JRTConfigRequester req1 = JRTConfigRequester.create(source1, JRTConfigRequesterTest.getTestTimingValues());
- JRTConfigRequester req2 = JRTConfigRequester.create(source2, JRTConfigRequesterTest.getTestTimingValues());
+ JRTConfigRequester req1 = JRTConfigRequester.create(source1, tv);
+ JRTConfigRequester req2 = JRTConfigRequester.create(source2, tv);
Map<ConfigSourceSet, JRTConfigRequester> requesters = new LinkedHashMap<>();
requesters.put(source1, req1);
requesters.put(source2, req2);