}
protected List<ToscaPolicy> resetPoliciesAction() {
- ArrayList<ToscaPolicy> policies = new ArrayList<>(policiesMap.values());
+ List<ToscaPolicy> policies = new ArrayList<>(policiesMap.values());
policiesMap.clear();
return policies;
}
+ protected boolean updatePoliciesAction(List<ToscaPolicy> toscaPolicies) {
+ return (this.scheduler.submit( () -> state.updatePolicies(toscaPolicies)) != null);
+ }
+
/* ** Action Helpers ** */
private boolean startIo() {
package org.onap.policy.drools.lifecycle;
+import java.util.List;
import lombok.NonNull;
import org.onap.policy.common.capabilities.Startable;
import org.onap.policy.common.gson.annotation.GsonJsonIgnore;
import org.onap.policy.models.pdp.concepts.PdpStateChange;
import org.onap.policy.models.pdp.concepts.PdpUpdate;
import org.onap.policy.models.pdp.enums.PdpState;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public abstract boolean update(@NonNull PdpUpdate update);
/**
- * state change event .
+ * state change event.
*/
public abstract boolean stateChange(@NonNull PdpStateChange change);
+
+ /**
+ * update policies with the current list.
+ */
+ public abstract boolean updatePolicies(List<ToscaPolicy> toscaPolicies);
}
\ No newline at end of file
package org.onap.policy.drools.lifecycle;
+import java.util.List;
import lombok.NonNull;
import org.onap.policy.models.pdp.concepts.PdpStateChange;
import org.onap.policy.models.pdp.concepts.PdpUpdate;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public boolean isAlive() {
return false;
}
+
+ @Override
+ public boolean updatePolicies(List<ToscaPolicy> toscaPolicies) {
+ logger.warn("{}: updatePolicies", this);
+ return false;
+ }
}
@Override
protected boolean stateChangeToActive(@NonNull PdpStateChange change) {
fsm.transitionToAction(new LifecycleStateActive(fsm));
- super.updatePolicies(fsm.resetPoliciesAction());
- return fsm.statusAction(response(change.getRequestId(), PdpResponseStatus.SUCCESS,null));
+ fsm.statusAction(response(change.getRequestId(), PdpResponseStatus.SUCCESS,null));
+ return fsm.updatePoliciesAction(fsm.resetPoliciesAction());
}
@Override
@Override
protected boolean deployPolicy(@NonNull PolicyController controller, @NonNull ToscaPolicy policy) {
- logger.info("{}: deploy {} from {}", this, policy.getIdentifier(), controller.getName());
+ logger.info("{}: deploy {} to {}", this, policy.getIdentifier(), controller.getName());
fsm.deployedPolicyAction(policy);
return true;
}
}
}
- protected boolean updatePolicies(List<ToscaPolicy> policies) {
+ @Override
+ public boolean updatePolicies(List<ToscaPolicy> policies) {
if (policies == null) {
return true;
}
package org.onap.policy.drools.lifecycle;
+import java.util.List;
import org.onap.policy.models.pdp.concepts.PdpStateChange;
import org.onap.policy.models.pdp.concepts.PdpUpdate;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
/**
* Support class for those unsupported states not yet implemented.
public boolean stateChange(PdpStateChange change) {
throw new UnsupportedOperationException("stateChange: " + this);
}
+
+ @Override
+ public boolean updatePolicies(List<ToscaPolicy> toscaPolicies) {
+ throw new UnsupportedOperationException("updatePolicies: " + this);
+ }
}
}
@Test
- public void stateChange() throws CoderException {
+ public void stateChange() throws CoderException, IOException {
/* no name */
PdpStateChange change = new PdpStateChange();
change.setPdpGroup("A");
assertNull(fsm.getGroup());
assertNull(fsm.getSubgroup());
+ PdpUpdate update = new PdpUpdate();
+ update.setName(NetworkUtil.getHostname());
+ update.setPdpGroup("A");
+ update.setPdpSubgroup("a");
+
+ String rawPolicy =
+ new String(Files.readAllBytes(Paths.get("src/test/resources/tosca-policy-operational-restart.json")));
+ ToscaPolicy toscaPolicy = new StandardCoder().decode(rawPolicy, ToscaPolicy.class);
+ update.setPolicies(Arrays.asList(toscaPolicy));
+
+ controllerSupport.getController().start();
+ fsm.start(controllerSupport.getController());
+ assertEquals(1, fsm.policyTypesMap.size());
+ assertTrue(fsm.policiesMap.isEmpty());
+
+ assertTrue(fsm.update(update));
+ assertEquals(1, fsm.policyTypesMap.size());
+ assertEquals(1, fsm.policiesMap.size());
+ assertEquals(fsm.policiesMap.get(toscaPolicy.getIdentifier()), toscaPolicy);
+ assertEquals(PdpState.PASSIVE, fsm.state());
+ assertEquals("A", fsm.getGroup());
+ assertEquals("a", fsm.getSubgroup());
+ assertBasicPassive();
+ assertEquals(0, controllerSupport.getController().getDrools().factCount("junits"));
+
/* correct name */
change.setName(fsm.getName());
fsm.source.offer(new StandardCoder().encode(change));
assertEquals(PdpState.ACTIVE, fsm.state());
- assertNull(fsm.getGroup());
- assertNull(fsm.getSubgroup());
+ assertEquals("A", fsm.getGroup());
+ assertEquals("a", fsm.getSubgroup());
+
+ await()
+ .atMost(5, TimeUnit.SECONDS)
+ .until(() -> controllerSupport.getController().getDrools().factCount("junits") == 1);
+
+ assertTrue(controllerSupport.getController().getDrools().delete(ToscaPolicy.class));
+ assertEquals(0, controllerSupport.getController().getDrools().factCount("junits"));
fsm.shutdown();
}
bash-completion \
openssl \
less \
+ vim \
&& pip install http-prompt
RUN mkdir -p ${POLICY_CONFIG} ${POLICY_LOGS} ${POLICY_INSTALL_INIT} && \