aboutsummaryrefslogtreecommitdiffstats
path: root/configserver/src/test/java/com
diff options
context:
space:
mode:
authorHarald Musum <musum@yahooinc.com>2023-08-28 12:46:45 +0200
committerHarald Musum <musum@yahooinc.com>2023-08-28 12:46:45 +0200
commit12bba1e9531d8237e103a8850969baf99da950df (patch)
treef650614988367e99255f01f4463f24c646910ed6 /configserver/src/test/java/com
parentfce91af952e5a5e2fe21c319bc259e0dd4ae5640 (diff)
Support reading and writing application data as json
Controlled by feature flags. Also write last deployed session when preparing a session
Diffstat (limited to 'configserver/src/test/java/com')
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/application/ApplicationCuratorDatabaseTest.java74
1 files changed, 73 insertions, 1 deletions
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/application/ApplicationCuratorDatabaseTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/application/ApplicationCuratorDatabaseTest.java
index cbdb462c35e..8d1b22c94c5 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/application/ApplicationCuratorDatabaseTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/application/ApplicationCuratorDatabaseTest.java
@@ -3,13 +3,17 @@ package com.yahoo.vespa.config.server.application;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.vespa.curator.mock.MockCurator;
+import com.yahoo.vespa.curator.transaction.CuratorTransaction;
import org.junit.Test;
import java.time.Instant;
import java.util.Optional;
+import java.util.OptionalLong;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
/**
* @author jonmv
@@ -35,4 +39,72 @@ public class ApplicationCuratorDatabaseTest {
assertEquals(reindexing, db.readReindexingStatus(id).orElseThrow());
}
+ @Test
+ public void testReadingAndWritingApplicationData() {
+ ApplicationId id = ApplicationId.defaultId();
+ MockCurator curator = new MockCurator();
+ ApplicationCuratorDatabase db = new ApplicationCuratorDatabase(id.tenant(), curator);
+
+ assertEquals(Optional.empty(), db.applicationData(id));
+
+ db.createApplication(id, false);
+ assertEquals(Optional.empty(), db.applicationData(id)); // still empty, as no data has been written to node
+
+ db.createApplication(id, true);
+ try {
+ Optional<ApplicationData> applicationData = db.applicationData(id);
+ fail("Expected exception, got " + applicationData);
+ } catch (NumberFormatException e) {
+ // expected
+ }
+
+ // Can be read as json, but no active session or last deployed session
+ Optional<ApplicationData> applicationData = db.applicationData(id, true);
+ assertTrue(applicationData.isPresent());
+ assertEquals(id, applicationData.get().applicationId());
+ assertFalse(applicationData.get().activeSession().isPresent());
+ assertFalse(applicationData.get().lastDeployedSession().isPresent());
+
+ // Prepare session 2, no active session
+ try (var t = db.createWritePrepareTransaction(new CuratorTransaction(curator), id, 2, OptionalLong.empty(), false)) {
+ t.commit();
+ }
+ // Activate session 2, last deployed session not present (not writing json)
+ try (var t = db.createWriteActiveTransaction(new CuratorTransaction(curator), id, 2, false)) {
+ t.commit();
+ }
+ // Can be read as session id only
+ applicationData = db.applicationData(id, false);
+ assertTrue(applicationData.isPresent());
+ assertEquals(id, applicationData.get().applicationId());
+ assertTrue(applicationData.get().activeSession().isPresent());
+ assertEquals(2, applicationData.get().activeSession().getAsLong());
+ assertFalse(applicationData.get().lastDeployedSession().isPresent());
+
+ // Prepare session 3, last deployed session is still 2
+ try (var t = db.createWritePrepareTransaction(new CuratorTransaction(curator), id, 3, OptionalLong.of(2), true)) {
+ t.commit();
+ }
+ // Can be read as json, active session is still 2 and last deployed session is 3
+ applicationData = db.applicationData(id, true);
+ assertTrue(applicationData.isPresent());
+ assertEquals(id, applicationData.get().applicationId());
+ assertTrue(applicationData.get().activeSession().isPresent());
+ assertEquals(2, applicationData.get().activeSession().getAsLong());
+ assertTrue(applicationData.get().lastDeployedSession().isPresent());
+ assertEquals(3, applicationData.get().lastDeployedSession().getAsLong());
+
+ try (var t = db.createWriteActiveTransaction(new CuratorTransaction(curator), id, 3, true)) {
+ t.commit();
+ }
+ // Can be read as json, active session and last deployed session present
+ applicationData = db.applicationData(id, true);
+ assertTrue(applicationData.isPresent());
+ assertEquals(id, applicationData.get().applicationId());
+ assertTrue(applicationData.get().activeSession().isPresent());
+ assertEquals(3, applicationData.get().activeSession().getAsLong());
+ assertTrue(applicationData.get().lastDeployedSession().isPresent());
+ assertEquals(3, applicationData.get().lastDeployedSession().getAsLong());
+ }
+
}