// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.model.application.validation.change; import com.yahoo.config.model.api.ConfigChangeAction; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.vespa.defaults.Defaults; import com.yahoo.vespa.model.VespaModel; import com.yahoo.vespa.model.test.utils.VespaModelCreatorWithMockPkg; import org.junit.jupiter.api.Test; import java.util.List; import static org.junit.jupiter.api.Assertions.*; /** * @author bjorncs */ public class ContainerRestartValidatorTest { @Test void validator_returns_action_for_containers_with_restart_on_deploy_enabled() { VespaModel current = createModel(true, false); VespaModel next = createModel(true, false); List result = validateModel(current, next); assertEquals(2, result.size()); assertTrue(result.get(0).ignoreForInternalRedeploy()); assertTrue(result.get(1).ignoreForInternalRedeploy()); } @Test void validator_returns_not_ignored_action_for_containers_with_restart_on_internal_redeploy_always() { VespaModel current = createModel(true, true); VespaModel next = createModel(true, true); List result = validateModel(current, next); assertEquals(2, result.size()); assertFalse(result.get(0).ignoreForInternalRedeploy()); assertFalse(result.get(1).ignoreForInternalRedeploy()); } @Test void validator_returns_empty_list_for_containers_with_restart_on_deploy_disabled() { VespaModel current = createModel(false, true); VespaModel next = createModel(false, true); List result = validateModel(current, next); assertTrue(result.isEmpty()); } @Test void validator_returns_empty_list_for_containers_with_restart_on_deploy_disabled_where_previously_enabled() { VespaModel current = createModel(true, true); VespaModel next = createModel(false, true); List result = validateModel(current, next); assertTrue(result.isEmpty()); } @Test void restart_on_deploy_is_propagated_to_cluster() { VespaModel model1 = createModel(false, false); assertFalse(model1.getContainerClusters().get("cluster1").getDeferChangesUntilRestart()); assertFalse(model1.getContainerClusters().get("cluster2").getDeferChangesUntilRestart()); assertFalse(model1.getContainerClusters().get("cluster3").getDeferChangesUntilRestart()); VespaModel model2 = createModel(true, false); assertTrue(model2.getContainerClusters().get("cluster1").getDeferChangesUntilRestart()); assertTrue(model2.getContainerClusters().get("cluster2").getDeferChangesUntilRestart()); assertFalse(model2.getContainerClusters().get("cluster3").getDeferChangesUntilRestart()); } private static List validateModel(VespaModel current, VespaModel next) { return new ContainerRestartValidator().validate(current, next, new DeployState.Builder().build()); } private static VespaModel createModel(boolean restartOnDeploy, boolean alwaysRestart) { return new VespaModelCreatorWithMockPkg( null, "\n" + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " " + restartOnDeploy + "\n" + (alwaysRestart ? " always\n" : "") + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " " + restartOnDeploy + "\n" + (alwaysRestart ? " always\n" : "") + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "" ).create(); } }