import org.onap.policy.clamp.acm.runtime.main.parameters.AcRuntimeParameterGroup;
import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionDeployPublisher;
import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionStateChangePublisher;
+import org.onap.policy.clamp.models.acm.concepts.AcTypeState;
import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionDefinition;
import org.onap.policy.clamp.models.acm.concepts.DeployState;
import org.onap.policy.clamp.models.acm.concepts.ParticipantUtils;
import org.onap.policy.clamp.models.acm.concepts.StateChangeResult;
var list = acDefinitionProvider.getAllAcDefinitions();
for (var acDefinition : list) {
- var acList = automationCompositionProvider.getAcInstancesByCompositionId(acDefinition.getCompositionId());
- for (var automationComposition : acList) {
- scanAutomationComposition(automationComposition, acDefinition.getServiceTemplate());
+ if (AcTypeState.PRIMING.equals(acDefinition.getState())
+ || AcTypeState.DEPRIMING.equals(acDefinition.getState())) {
+ scanAutomationCompositionDefinition(acDefinition);
+ } else {
+ acTimeout.clear(acDefinition.getCompositionId());
+ var acList =
+ automationCompositionProvider.getAcInstancesByCompositionId(acDefinition.getCompositionId());
+ for (var automationComposition : acList) {
+ scanAutomationComposition(automationComposition, acDefinition.getServiceTemplate());
+ }
}
}
LOGGER.debug("Automation composition scan complete . . .");
}
+ private void scanAutomationCompositionDefinition(AutomationCompositionDefinition acDefinition) {
+ if (StateChangeResult.FAILED.equals(acDefinition.getStateChangeResult())) {
+ LOGGER.debug("automation definition {} scanned, OK", acDefinition.getCompositionId());
+
+ // Clear Timeout on ac Definition
+ acTimeout.clear(acDefinition.getCompositionId());
+ return;
+ }
+
+ if (acTimeout.isTimeout(acDefinition.getCompositionId())
+ && StateChangeResult.NO_ERROR.equals(acDefinition.getStateChangeResult())) {
+ // retry by the user
+ LOGGER.debug("clearing Timeout for the ac definition");
+ acTimeout.clear(acDefinition.getCompositionId());
+ }
+
+ handleTimeout(acDefinition);
+ }
+
private void scanAutomationComposition(final AutomationComposition automationComposition,
ToscaServiceTemplate serviceTemplate) {
LOGGER.debug("scanning automation composition {} . . .", automationComposition.getInstanceId());
}
}
+ private void handleTimeout(AutomationCompositionDefinition acDefinition) {
+ var compositionId = acDefinition.getCompositionId();
+ if (acTimeout.isTimeout(compositionId)) {
+ LOGGER.debug("The ac definition is in timeout {}", acDefinition.getCompositionId());
+ return;
+ }
+
+ if (acTimeout.getDuration(compositionId) > acTimeout.getMaxWaitMs()) {
+ LOGGER.debug("Report timeout for the ac definition {}", acDefinition.getCompositionId());
+ acTimeout.setTimeout(compositionId);
+ acDefinition.setStateChangeResult(StateChangeResult.TIMEOUT);
+ acDefinitionProvider.updateAcDefinition(acDefinition);
+ }
+ }
+
private void handleTimeout(AutomationComposition automationComposition) {
var instanceId = automationComposition.getInstanceId();
if (acTimeout.isTimeout(instanceId)) {
import java.util.Map;
import java.util.Objects;
import java.util.UUID;
-import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.onap.policy.clamp.acm.runtime.instantiation.InstantiationUtils;
import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionDeployPublisher;
import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionStateChangePublisher;
import org.onap.policy.clamp.acm.runtime.util.CommonTestData;
+import org.onap.policy.clamp.models.acm.concepts.AcTypeState;
import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionDefinition;
import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElement;
import org.onap.policy.clamp.models.acm.concepts.DeployState;
import org.onap.policy.clamp.models.acm.concepts.LockState;
+import org.onap.policy.clamp.models.acm.concepts.StateChangeResult;
import org.onap.policy.clamp.models.acm.persistence.provider.AcDefinitionProvider;
import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider;
import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
private static final String AC_JSON = "src/test/resources/rest/acm/AutomationCompositionSmoke.json";
- private static final AcDefinitionProvider acDefinitionProvider = mock(AcDefinitionProvider.class);
+ private static final UUID compositionId = UUID.randomUUID();
- private static UUID compositionId;
-
- @BeforeAll
- public static void setUpBeforeAll() {
+ private AcDefinitionProvider createAcDefinitionProvider(AcTypeState acTypeState,
+ StateChangeResult stateChangeResult) {
var serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
var acDefinition = new AutomationCompositionDefinition();
- compositionId = UUID.randomUUID();
+ acDefinition.setState(acTypeState);
+ acDefinition.setStateChangeResult(stateChangeResult);
acDefinition.setCompositionId(compositionId);
acDefinition.setServiceTemplate(serviceTemplate);
+ var acDefinitionProvider = mock(AcDefinitionProvider.class);
when(acDefinitionProvider.getAllAcDefinitions()).thenReturn(List.of(Objects.requireNonNull(acDefinition)));
+ return acDefinitionProvider;
+ }
+
+ private AcDefinitionProvider createAcDefinitionProvider() {
+ return createAcDefinitionProvider(AcTypeState.PRIMED, StateChangeResult.NO_ERROR);
+ }
+
+ @Test
+ void testScannerOrderedFailed() {
+ var acDefinitionProvider = createAcDefinitionProvider(AcTypeState.PRIMING, StateChangeResult.FAILED);
+ var acRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanner");
+ var supervisionScanner = new SupervisionScanner(mock(AutomationCompositionProvider.class), acDefinitionProvider,
+ mock(AutomationCompositionStateChangePublisher.class), mock(AutomationCompositionDeployPublisher.class),
+ acRuntimeParameterGroup);
+ supervisionScanner.run();
+ verify(acDefinitionProvider, times(0)).updateAcDefinition(any(AutomationCompositionDefinition.class));
+ }
+
+ @Test
+ void testScannerOrderedPriming() {
+ var acDefinitionProvider = createAcDefinitionProvider(AcTypeState.PRIMING, StateChangeResult.NO_ERROR);
+ var acRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanner");
+ var supervisionScanner = new SupervisionScanner(mock(AutomationCompositionProvider.class), acDefinitionProvider,
+ mock(AutomationCompositionStateChangePublisher.class), mock(AutomationCompositionDeployPublisher.class),
+ acRuntimeParameterGroup);
+ supervisionScanner.run();
+ verify(acDefinitionProvider, times(0)).updateAcDefinition(any(AutomationCompositionDefinition.class));
+
+ acRuntimeParameterGroup.getParticipantParameters().setMaxStatusWaitMs(-1);
+ supervisionScanner = new SupervisionScanner(mock(AutomationCompositionProvider.class), acDefinitionProvider,
+ mock(AutomationCompositionStateChangePublisher.class), mock(AutomationCompositionDeployPublisher.class),
+ acRuntimeParameterGroup);
+ supervisionScanner.run();
+ verify(acDefinitionProvider).updateAcDefinition(any(AutomationCompositionDefinition.class));
}
@Test
when(automationCompositionProvider.getAcInstancesByCompositionId(compositionId))
.thenReturn(List.of(automationComposition));
- var supervisionScanner = new SupervisionScanner(automationCompositionProvider, acDefinitionProvider,
+ var supervisionScanner = new SupervisionScanner(automationCompositionProvider, createAcDefinitionProvider(),
automationCompositionStateChangePublisher, automationCompositionDeployPublisher,
acRuntimeParameterGroup);
supervisionScanner.run();
var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
var acRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanner");
- var supervisionScanner = new SupervisionScanner(automationCompositionProvider, acDefinitionProvider,
+ var supervisionScanner = new SupervisionScanner(automationCompositionProvider, createAcDefinitionProvider(),
automationCompositionStateChangePublisher, automationCompositionDeployPublisher,
acRuntimeParameterGroup);
supervisionScanner.run();
verify(automationCompositionProvider).updateAutomationComposition(any(AutomationComposition.class));
}
-
@Test
void testScannerDelete() {
var automationComposition = InstantiationUtils.getAutomationCompositionFromResource(AC_JSON, "Crud");
var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
var acRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanner");
- var supervisionScanner = new SupervisionScanner(automationCompositionProvider, acDefinitionProvider,
+ var supervisionScanner = new SupervisionScanner(automationCompositionProvider, createAcDefinitionProvider(),
automationCompositionStateChangePublisher, automationCompositionDeployPublisher,
acRuntimeParameterGroup);
supervisionScanner.run();
var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
var acRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanner");
- var supervisionScanner = new SupervisionScanner(automationCompositionProvider, acDefinitionProvider,
+ var supervisionScanner = new SupervisionScanner(automationCompositionProvider, createAcDefinitionProvider(),
automationCompositionStateChangePublisher, automationCompositionDeployPublisher,
acRuntimeParameterGroup);
var acRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanner");
acRuntimeParameterGroup.getParticipantParameters().setMaxStatusWaitMs(-1);
- //verify timeout scenario
- var scannerObj2 = new SupervisionScanner(automationCompositionProvider, acDefinitionProvider,
+ // verify timeout scenario
+ var scannerObj2 = new SupervisionScanner(automationCompositionProvider, createAcDefinitionProvider(),
automationCompositionStateChangePublisher, automationCompositionDeployPublisher,
acRuntimeParameterGroup);
var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
var acRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanner");
- var supervisionScanner = new SupervisionScanner(automationCompositionProvider, acDefinitionProvider,
+ var supervisionScanner = new SupervisionScanner(automationCompositionProvider, createAcDefinitionProvider(),
automationCompositionStateChangePublisher, automationCompositionDeployPublisher,
acRuntimeParameterGroup);
var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
var acRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanner");
- var supervisionScanner = new SupervisionScanner(automationCompositionProvider, acDefinitionProvider,
+ var supervisionScanner = new SupervisionScanner(automationCompositionProvider, createAcDefinitionProvider(),
automationCompositionStateChangePublisher, automationCompositionDeployPublisher,
acRuntimeParameterGroup);