summaryrefslogtreecommitdiffstats
path: root/configserver/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'configserver/src/test')
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java5
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/deploy/HostedDeployTest.java16
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/SessionHandlerTest.java5
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandlerTest.java4
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/session/LocalSessionTest.java2
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java61
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionTest.java11
7 files changed, 68 insertions, 36 deletions
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java
index 8a60a439943..5b4eca70364 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java
@@ -140,9 +140,14 @@ public class DeployTester {
PrepareParams.Builder paramsBuilder = new PrepareParams.Builder().applicationId(id);
if (vespaVersion != null)
paramsBuilder.vespaVersion(vespaVersion);
+ LocalSession activeSession = tenant.getLocalSessionRepo().getActiveSession(id);
+ Optional<com.yahoo.component.Version> currentActiveVespaVersion = Optional.empty();
+ if (activeSession != null)
+ currentActiveVespaVersion = Optional.of(activeSession.getVespaVersion());
session.prepare(new SilentDeployLogger(),
paramsBuilder.build(),
Optional.empty(),
+ currentActiveVespaVersion,
tenant.getPath(),
now);
session.createActivateTransaction().commit();
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/HostedDeployTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/HostedDeployTest.java
index 301ae63fb8c..e3f34cebd6d 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/HostedDeployTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/HostedDeployTest.java
@@ -18,6 +18,7 @@ import java.util.List;
import java.util.Optional;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -104,6 +105,21 @@ public class HostedDeployTest {
}
}
+ // If on hosted vespa and no version is given, the version for the current active application should be used
+ // This might be the case for manual/emergency deployments not coming from controller
+ @Test
+ public void deployWithoutVersionShouldUseActiveVersionOnHostedVespa() throws InterruptedException, IOException {
+ DeployTester tester = new DeployTester("src/test/apps/hosted/", createConfigserverConfig());
+ String vespaVersion = "4.5.6";
+ ApplicationId initialApplicationId = tester.deployApp("myApp", vespaVersion, Instant.now());
+ long initialSessionId = tester.tenant().getApplicationRepo().getSessionIdForApplication(initialApplicationId);
+
+ ApplicationId applicationId = tester.deployApp("myApp", Instant.now()); // no version
+ long sessionId = tester.tenant().getApplicationRepo().getSessionIdForApplication(applicationId);
+ assertNotEquals(initialSessionId, sessionId);
+ assertEquals(vespaVersion, tester.tenant().getLocalSessionRepo().getSession(sessionId).getVespaVersion().toFullString());
+ }
+
@Test
@Ignore //WIP
public void testDeployWithDockerImage() throws InterruptedException, IOException {
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/SessionHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/SessionHandlerTest.java
index 2c677441c68..8d159da84e3 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/SessionHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/SessionHandlerTest.java
@@ -104,7 +104,10 @@ public class SessionHandlerTest {
}
@Override
- public ConfigChangeActions prepare(DeployLogger logger, PrepareParams params, Optional<ApplicationSet> application, Path tenantPath, Instant now) {
+ public ConfigChangeActions prepare(DeployLogger logger, PrepareParams params,
+ Optional<ApplicationSet> applicationSet,
+ Optional<com.yahoo.component.Version> currentActiveVespaVersion,
+ Path tenantPath, Instant now) {
status = Session.Status.PREPARE;
if (doVerboseLogging) {
logger.log(LogLevel.DEBUG, "debuglog");
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandlerTest.java
index a03940ca95c..5f9d42c9ce6 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandlerTest.java
@@ -4,6 +4,7 @@ package com.yahoo.vespa.config.server.http.v2;
import com.google.common.collect.ImmutableMap;
import com.google.common.util.concurrent.UncheckedTimeoutException;
import com.yahoo.cloud.config.ConfigserverConfig;
+import com.yahoo.component.Version;
import com.yahoo.config.application.api.ApplicationFile;
import com.yahoo.config.application.api.DeployLogger;
import com.yahoo.config.model.api.ServiceInfo;
@@ -408,7 +409,8 @@ public class SessionPrepareHandlerTest extends SessionHandlerTest {
@Override
public ConfigChangeActions prepare(DeployLogger logger,
PrepareParams params,
- Optional<ApplicationSet> application,
+ Optional<ApplicationSet> applicationSet,
+ Optional<Version> currentActiveVespaVersion,
Path tenantPath,
Instant now) {
throw exception;
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/session/LocalSessionTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/session/LocalSessionTest.java
index df011dd9307..13307e5625f 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/session/LocalSessionTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/session/LocalSessionTest.java
@@ -173,7 +173,7 @@ public class LocalSessionTest {
}
private void doPrepare(LocalSession session, PrepareParams params, Instant now) {
- session.prepare(getLogger(false), params, Optional.empty(), tenantPath, now);
+ session.prepare(getLogger(false), params, Optional.empty(), Optional.empty(), tenantPath, now);
}
DeployHandlerLogger getLogger(boolean verbose) {
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java
index 5dc529e3381..06d4039b9ab 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java
@@ -21,6 +21,7 @@ import com.yahoo.vespa.config.server.*;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.vespa.config.server.application.MemoryTenantApplications;
import com.yahoo.vespa.config.server.application.PermanentApplicationPackage;
+import com.yahoo.vespa.config.server.configchange.ConfigChangeActions;
import com.yahoo.vespa.config.server.configchange.MockRestartAction;
import com.yahoo.vespa.config.server.configchange.RestartActions;
import com.yahoo.vespa.config.server.deploy.DeployHandlerLogger;
@@ -100,31 +101,24 @@ public class SessionPreparerTest extends TestWithCurator {
@Test(expected = InvalidApplicationException.class)
public void require_that_application_validation_exception_is_not_caught() throws IOException, SAXException {
- FilesApplicationPackage app = getApplicationPackage(invalidTestApp);
- preparer.prepare(getContext(app), getLogger(), new PrepareParams.Builder().build(), Optional.empty(), tenantPath, Instant.now());
+ prepare(invalidTestApp, new PrepareParams.Builder().build());
}
@Test
public void require_that_application_validation_exception_is_ignored_if_forced() throws IOException, SAXException {
- FilesApplicationPackage app = getApplicationPackage(invalidTestApp);
- preparer.prepare(getContext(app), getLogger(),
- new PrepareParams.Builder().ignoreValidationErrors(true).timeoutBudget(TimeoutBudgetTest.day()).build(),
- Optional.empty(), tenantPath, Instant.now());
+ prepare(invalidTestApp,
+ new PrepareParams.Builder().ignoreValidationErrors(true).timeoutBudget(TimeoutBudgetTest.day()).build());
}
@Test
public void require_that_zookeeper_is_not_written_to_if_dryrun() throws IOException {
- preparer.prepare(getContext(getApplicationPackage(testApp)), getLogger(),
- new PrepareParams.Builder().dryRun(true).timeoutBudget(TimeoutBudgetTest.day()).build(),
- Optional.empty(), tenantPath, Instant.now());
+ prepare(testApp, new PrepareParams.Builder().dryRun(true).timeoutBudget(TimeoutBudgetTest.day()).build());
assertFalse(configCurator.exists(sessionsPath.append(ConfigCurator.USERAPP_ZK_SUBPATH).append("services.xml").getAbsolute()));
}
@Test
public void require_that_filedistribution_is_ignored_on_dryrun() throws IOException {
- preparer.prepare(getContext(getApplicationPackage(testApp)), getLogger(),
- new PrepareParams.Builder().dryRun(true).timeoutBudget(TimeoutBudgetTest.day()).build(),
- Optional.empty(), tenantPath, Instant.now());
+ prepare(testApp, new PrepareParams.Builder().dryRun(true).timeoutBudget(TimeoutBudgetTest.day()).build());
assertThat(fileDistributionFactory.mockFileDistributionProvider.getMockFileDBHandler().sendDeployedFilesCalled, is(0));
assertThat(fileDistributionFactory.mockFileDistributionProvider.getMockFileDBHandler().limitSendingOfDeployedFilesToCalled, is(0));
assertThat(fileDistributionFactory.mockFileDistributionProvider.getMockFileDBHandler().reloadDeployFileDistributorCalled, is(0));
@@ -132,7 +126,7 @@ public class SessionPreparerTest extends TestWithCurator {
@Test
public void require_that_application_is_prepared() throws Exception {
- preparer.prepare(getContext(getApplicationPackage(testApp)), getLogger(), new PrepareParams.Builder().build(), Optional.empty(), tenantPath, Instant.now());
+ prepare(testApp, new PrepareParams.Builder().build());
assertThat(fileDistributionFactory.mockFileDistributionProvider.getMockFileDBHandler().sendDeployedFilesCalled, is(2));
// Should be called only once no matter how many model versions are built
assertThat(fileDistributionFactory.mockFileDistributionProvider.getMockFileDBHandler().reloadDeployFileDistributorCalled, is(1));
@@ -145,7 +139,7 @@ public class SessionPreparerTest extends TestWithCurator {
new TestModelFactory(Version.fromIntValues(1, 2, 3)),
new FailingModelFactory(Version.fromIntValues(3, 2, 1), new IllegalArgumentException("BOOHOO"))));
preparer = createPreparer(modelFactoryRegistry, HostProvisionerProvider.empty());
- preparer.prepare(getContext(getApplicationPackage(testApp)), getLogger(), new PrepareParams.Builder().build(), Optional.empty(), tenantPath, Instant.now());
+ prepare(testApp, new PrepareParams.Builder().build());
}
@Test(expected = InvalidApplicationException.class)
@@ -154,14 +148,14 @@ public class SessionPreparerTest extends TestWithCurator {
new TestModelFactory(Version.fromIntValues(3, 2, 3)),
new FailingModelFactory(Version.fromIntValues(1, 2, 1), new IllegalArgumentException("BOOHOO"))));
preparer = createPreparer(modelFactoryRegistry, HostProvisionerProvider.empty());
- preparer.prepare(getContext(getApplicationPackage(testApp)), getLogger(), new PrepareParams.Builder().build(), Optional.empty(), tenantPath, Instant.now());
+ prepare(testApp, new PrepareParams.Builder().build());
}
@Test(expected = InvalidApplicationException.class)
public void require_exception_for_overlapping_host() throws IOException {
SessionContext ctx = getContext(getApplicationPackage(testApp));
((HostRegistry<ApplicationId>)ctx.getHostValidator()).update(applicationId("foo"), Collections.singletonList("mytesthost"));
- preparer.prepare(ctx, new BaseDeployLogger(), new PrepareParams.Builder().build(), Optional.empty(), tenantPath, Instant.now());
+ prepare(new PrepareParams.Builder().build(), new BaseDeployLogger(), ctx);
}
@Test
@@ -173,7 +167,7 @@ public class SessionPreparerTest extends TestWithCurator {
System.out.println(level + ": "+message);
if (level.equals(LogLevel.WARNING) && message.contains("The host mytesthost is already in use")) logged.append("ok");
};
- preparer.prepare(ctx, logger, new PrepareParams.Builder().build(), Optional.empty(), tenantPath, Instant.now());
+ prepare(testApp, new PrepareParams.Builder().build(), logger);
assertEquals(logged.toString(), "");
}
@@ -184,7 +178,7 @@ public class SessionPreparerTest extends TestWithCurator {
.tenant(tenant)
.applicationName("foo").instanceName("quux").build();
PrepareParams params = new PrepareParams.Builder().applicationId(origId).build();
- preparer.prepare(getContext(getApplicationPackage(testApp)), getLogger(), params, Optional.empty(), tenantPath, Instant.now());
+ prepare(testApp, params);
SessionZooKeeperClient zkc = new SessionZooKeeperClient(curator, sessionsPath);
assertTrue(configCurator.exists(sessionsPath.append(SessionZooKeeperClient.APPLICATION_ID_PATH).getAbsolute()));
assertThat(zkc.readApplicationId(), is(origId));
@@ -199,10 +193,8 @@ public class SessionPreparerTest extends TestWithCurator {
new ConfigChangeActionsModelFactory(Version.fromIntValues(1, 2, 4),
new MockRestartAction("other change", Arrays.asList(service)))));
preparer = createPreparer(modelFactoryRegistry, HostProvisionerProvider.empty());
- List<RestartActions.Entry> actions =
- preparer.prepare(getContext(getApplicationPackage(testApp)), getLogger(),
- new PrepareParams.Builder().build(), Optional.empty(), tenantPath, Instant.now())
- .getRestartActions().getEntries();
+ List<RestartActions.Entry> actions = prepare(testApp, new PrepareParams.Builder().build())
+ .getRestartActions().getEntries();
assertThat(actions.size(), is(1));
assertThat(actions.get(0).getMessages(), equalTo(ImmutableSet.of("change", "other change")));
}
@@ -217,7 +209,7 @@ public class SessionPreparerTest extends TestWithCurator {
final ApplicationId applicationId = applicationId("test");
PrepareParams params = new PrepareParams.Builder().applicationId(applicationId).rotations(rotations).build();
File app = new File("src/test/resources/deploy/app");
- preparer.prepare(getContext(getApplicationPackage(app)), getLogger(), params, Optional.empty(), tenantPath, Instant.now());
+ prepare(app, params);
assertThat(readRotationsFromZK(applicationId), contains(new Rotation(rotations)));
}
@@ -233,7 +225,7 @@ public class SessionPreparerTest extends TestWithCurator {
new Rotations(curator, tenantPath).writeRotationsToZooKeeper(applicationId, Collections.singleton(new Rotation(rotations)));
final PrepareParams params = new PrepareParams.Builder().applicationId(applicationId).build();
final File app = new File("src/test/resources/deploy/app");
- preparer.prepare(getContext(getApplicationPackage(app)), getLogger(), params, Optional.empty(), tenantPath, Instant.now());
+ prepare(app, params);
// check that the rotation from zookeeper were used
final ModelContext modelContext = modelFactory.getModelContext();
@@ -244,6 +236,19 @@ public class SessionPreparerTest extends TestWithCurator {
assertThat(readRotationsFromZK(applicationId), contains(new Rotation(rotations)));
}
+ private ConfigChangeActions prepare(File app, PrepareParams params) throws IOException {
+ return prepare(app, params, getLogger());
+ }
+
+ private ConfigChangeActions prepare(File app, PrepareParams params, DeployLogger logger) throws IOException {
+ return prepare(params, logger, getContext(getApplicationPackage(app)));
+ }
+
+ private ConfigChangeActions prepare(PrepareParams params, DeployLogger logger, SessionContext sessionContext) throws IOException {
+ return preparer.prepare(sessionContext, logger, params, Optional.empty(),
+ Optional.empty(), tenantPath, Instant.now());
+ }
+
private SessionContext getContext(FilesApplicationPackage app) throws IOException {
return new SessionContext(app, new SessionZooKeeperClient(curator, sessionsPath), app.getAppDir(), new MemoryTenantApplications(), new HostRegistry<>(), new SuperModelGenerationCounter(curator));
}
@@ -254,12 +259,8 @@ public class SessionPreparerTest extends TestWithCurator {
return FilesApplicationPackage.fromFile(appDir);
}
- DeployHandlerLogger getLogger() {
- return getLogger(false);
- }
-
- DeployHandlerLogger getLogger(boolean verbose) {
- return new DeployHandlerLogger(new Slime().get(), verbose,
+ private DeployHandlerLogger getLogger() {
+ return new DeployHandlerLogger(new Slime().get(), false,
new ApplicationId.Builder().tenant("testtenant").applicationName("testapp").build());
}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionTest.java
index 71b31754c5d..d2db5d06193 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionTest.java
@@ -1,6 +1,7 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.config.server.session;
+import com.yahoo.component.Version;
import com.yahoo.config.application.api.DeployLogger;
import com.yahoo.path.Path;
import com.yahoo.vespa.config.server.application.ApplicationSet;
@@ -18,14 +19,18 @@ import java.util.Optional;
public class SessionTest {
public static class MockSessionPreparer extends SessionPreparer {
- public boolean isPrepared = false;
+ boolean isPrepared = false;
public MockSessionPreparer() {
- super(null, null, null, null, null, null, new MockCurator(), null);
+ super(null, null, null, null,
+ null, null, new MockCurator(), null);
}
@Override
- public ConfigChangeActions prepare(SessionContext context, DeployLogger logger, PrepareParams params, Optional<ApplicationSet> currentActiveApplicationSet, Path tenantPath, Instant now) {
+ public ConfigChangeActions prepare(SessionContext context, DeployLogger logger, PrepareParams params,
+ Optional<ApplicationSet> currentActiveApplicationSet,
+ Optional<Version> currentVespaVersion,
+ Path tenantPath, Instant now) {
isPrepared = true;
return new ConfigChangeActions(new ArrayList<>());
}