aboutsummaryrefslogtreecommitdiffstats
path: root/feature-lifecycle/src
diff options
context:
space:
mode:
authorjhh <jorge.hernandez-herrero@att.com>2020-03-05 22:32:58 -0600
committerjhh <jorge.hernandez-herrero@att.com>2020-03-10 11:29:27 -0500
commit3f563fe552e35b3bc3d95c47a3cabdfe7645ad07 (patch)
tree9439dc357096b69b670e7dad666084a5cb08dcfb /feature-lifecycle/src
parent845cbbc74445909613aff1912d3cfc9083c57d53 (diff)
policy routing and reorg into policy-domains
- Native Drools Controller Policy support. - Move domain policies into the policy-domains project. - Route legacy/compliant operational policies to one or all controller supporting the policy's policy type. - Enhancements to scripts to invoke commands external to the container. Issue-ID: POLICY-2388 Signed-off-by: jhh <jorge.hernandez-herrero@att.com> Change-Id: Id41f04d10a28d2ea86bdd41334e499c28d0438ae Signed-off-by: jhh <jorge.hernandez-herrero@att.com>
Diffstat (limited to 'feature-lifecycle/src')
-rw-r--r--feature-lifecycle/src/main/feature/config/feature-lifecycle.properties16
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerCustomSerializer.java39
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerPolicy.java41
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerProperties.java52
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSerialization.java42
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSinkTopic.java45
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSourceTopic.java40
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsController.java43
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsPolicy.java41
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsProperties.java42
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsRulesArtifact.java46
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleFsm.java4
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeDroolsController.java93
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeArtifactController.java (renamed from feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeRulesController.java)16
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeController.java66
-rw-r--r--feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeDroolsController.java250
-rw-r--r--feature-lifecycle/src/main/resources/schemas/onap.policies.drools.Controller-1.0.0.schema.json277
-rw-r--r--feature-lifecycle/src/main/resources/schemas/onap.policies.native.Drools-1.0.0.schema.json141
-rw-r--r--feature-lifecycle/src/test/java/org/onap/policy/drools/domain/models/DomainPolicyTypesTest.java240
-rw-r--r--feature-lifecycle/src/test/java/org/onap/policy/drools/domain/models/DroolsPolicyModelsTest.java90
-rw-r--r--feature-lifecycle/src/test/java/org/onap/policy/drools/lifecycle/LifecycleStatePassiveTest.java2
-rw-r--r--feature-lifecycle/src/test/java/org/onap/policy/drools/lifecycle/PolicyTypeDroolsControllerTest.java100
-rw-r--r--feature-lifecycle/src/test/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeArtifactControllerTest.java (renamed from feature-lifecycle/src/test/java/org/onap/policy/drools/lifecycle/PolicyTypeRulesControllerTest.java)16
-rw-r--r--feature-lifecycle/src/test/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeDroolsControllerTest.java (renamed from feature-lifecycle/src/test/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeControllerTest.java)29
-rw-r--r--feature-lifecycle/src/test/resources/schemas/onap.policies.controlloop.Operational-1.0.0.schema.json91
-rw-r--r--feature-lifecycle/src/test/resources/schemas/onap.policies.controlloop.operational.common.Drools-1.0.0.schema.json331
-rw-r--r--feature-lifecycle/src/test/resources/tosca-policy-native-artifact-example.json (renamed from feature-lifecycle/src/test/resources/example.policy.native.drools.tosca.json)2
-rw-r--r--feature-lifecycle/src/test/resources/tosca-policy-native-controller-example.json (renamed from feature-lifecycle/src/test/resources/example.policy.drools.controller.tosca.json)14
28 files changed, 493 insertions, 1716 deletions
diff --git a/feature-lifecycle/src/main/feature/config/feature-lifecycle.properties b/feature-lifecycle/src/main/feature/config/feature-lifecycle.properties
index 1bb32169..076da1f9 100644
--- a/feature-lifecycle/src/main/feature/config/feature-lifecycle.properties
+++ b/feature-lifecycle/src/main/feature/config/feature-lifecycle.properties
@@ -21,14 +21,14 @@ lifecycle.pdp.group=${envd:POLICY_PDP_PAP_GROUP:defaultGroup}
dmaap.source.topics=POLICY-PDP-PAP
dmaap.sink.topics=POLICY-PDP-PAP
-dmaap.source.topics.POLICY-PDP-PAP.servers=${env:DMAAP_SERVERS}
-dmaap.source.topics.POLICY-PDP-PAP.effectiveTopic=${env:POLICY_PDP_PAP_TOPIC}
-dmaap.source.topics.POLICY-PDP-PAP.apiKey=${env:POLICY_PDP_PAP_API_KEY}
-dmaap.source.topics.POLICY-PDP-PAP.apiSecret=${env:POLICY_PDP_PAP_API_SECRET}
+dmaap.source.topics.POLICY-PDP-PAP.servers=${envd:DMAAP_SERVERS}
+dmaap.source.topics.POLICY-PDP-PAP.effectiveTopic=${envd:POLICY_PDP_PAP_TOPIC}
+dmaap.source.topics.POLICY-PDP-PAP.apiKey=${envd:POLICY_PDP_PAP_API_KEY}
+dmaap.source.topics.POLICY-PDP-PAP.apiSecret=${envd:POLICY_PDP_PAP_API_SECRET}
dmaap.source.topics.POLICY-PDP-PAP.https=true
-dmaap.sink.topics.POLICY-PDP-PAP.servers=${env:DMAAP_SERVERS}
-dmaap.sink.topics.POLICY-PDP-PAP.effectiveTopic=${env:POLICY_PDP_PAP_TOPIC}
-dmaap.sink.topics.POLICY-PDP-PAP.apiKey=${env:POLICY_PDP_PAP_API_KEY}
-dmaap.sink.topics.POLICY-PDP-PAP.apiSecret=${env:POLICY_PDP_PAP_API_SECRET}
+dmaap.sink.topics.POLICY-PDP-PAP.servers=${envd:DMAAP_SERVERS}
+dmaap.sink.topics.POLICY-PDP-PAP.effectiveTopic=${envd:POLICY_PDP_PAP_TOPIC}
+dmaap.sink.topics.POLICY-PDP-PAP.apiKey=${envd:POLICY_PDP_PAP_API_KEY}
+dmaap.sink.topics.POLICY-PDP-PAP.apiSecret=${envd:POLICY_PDP_PAP_API_SECRET}
dmaap.sink.topics.POLICY-PDP-PAP.https=true
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerCustomSerializer.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerCustomSerializer.java
deleted file mode 100644
index d7956b41..00000000
--- a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerCustomSerializer.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.drools.domain.models.controller;
-
-import com.google.gson.annotations.SerializedName;
-import java.io.Serializable;
-import lombok.Builder;
-import lombok.Data;
-
-
-@Data
-@Builder
-public class ControllerCustomSerializer implements Serializable {
- private static final long serialVersionUID = 1505345574249332514L;
-
- @SerializedName("customSerializerClass")
- protected String customSerializerClass;
-
- @SerializedName("jsonParser")
- protected String jsonParser;
-}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerPolicy.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerPolicy.java
deleted file mode 100644
index 0d5a363e..00000000
--- a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerPolicy.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.drools.domain.models.controller;
-
-import com.google.gson.annotations.SerializedName;
-import java.io.Serializable;
-import lombok.Data;
-import lombok.experimental.SuperBuilder;
-import org.onap.policy.drools.domain.models.DroolsPolicy;
-
-/**
- * Controller Policy model root object.
- */
-
-@Data
-@SuperBuilder
-public class ControllerPolicy extends DroolsPolicy implements Serializable {
-
- private static final long serialVersionUID = -8171337852833516581L;
-
- @SerializedName("properties")
- protected ControllerProperties properties;
-}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerProperties.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerProperties.java
deleted file mode 100644
index 692b1790..00000000
--- a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerProperties.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.drools.domain.models.controller;
-
-import com.google.gson.annotations.SerializedName;
-import java.io.Serializable;
-import java.util.List;
-import java.util.Map;
-import lombok.Builder;
-import lombok.Data;
-
-
-/**
- * Controller Domain Policy.
- */
-
-@Data
-@Builder
-public class ControllerProperties implements Serializable {
- private static final long serialVersionUID = 1259434187110418986L;
-
- @SerializedName("controllerName")
- protected String controllerName;
-
- @SerializedName("sourceTopics")
- protected List<ControllerSourceTopic> sourceTopics;
-
- @SerializedName("sinkTopics")
- protected List<ControllerSinkTopic> sinkTopics;
-
- @SerializedName("customConfig")
- protected Map<String, String> customConfig;
-
-}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSerialization.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSerialization.java
deleted file mode 100644
index 8daaa31f..00000000
--- a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSerialization.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.drools.domain.models.controller;
-
-import com.google.gson.annotations.SerializedName;
-import java.io.Serializable;
-import lombok.Builder;
-import lombok.Data;
-
-
-@Data
-@Builder
-public class ControllerSerialization implements Serializable {
-
- @SerializedName("eventClass")
- public String eventClass;
-
- @SerializedName("eventFilter")
- public String eventFilter;
-
- @SerializedName("customSerializer")
- public ControllerCustomSerializer customSerializer;
-
-}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSinkTopic.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSinkTopic.java
deleted file mode 100644
index ecd66a3f..00000000
--- a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSinkTopic.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.drools.domain.models.controller;
-
-import com.google.gson.annotations.SerializedName;
-import java.io.Serializable;
-import java.util.List;
-import lombok.Builder;
-import lombok.Data;
-
-
-/**
- * Sink Topic.
- */
-
-@Data
-@Builder
-public class ControllerSinkTopic implements Serializable {
- private static final long serialVersionUID = 8770353732981476267L;
-
- @SerializedName("topicName")
- protected String topicName;
-
- @SerializedName("serialization")
- protected List<ControllerSerialization> serialization;
-
-}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSourceTopic.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSourceTopic.java
deleted file mode 100644
index 09344016..00000000
--- a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSourceTopic.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.drools.domain.models.controller;
-
-import java.io.Serializable;
-import java.util.List;
-import lombok.Builder;
-import lombok.Data;
-
-
-/**
- * Source Topics.
- */
-
-@Data
-@Builder
-public class ControllerSourceTopic implements Serializable {
- private static final long serialVersionUID = -1732598566914643612L;
-
- protected String topicName;
- protected List<ControllerSerialization> serialization;
-}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsController.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsController.java
deleted file mode 100644
index 0af96331..00000000
--- a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsController.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.drools.domain.models.nativ.rules;
-
-import com.google.gson.annotations.SerializedName;
-import java.io.Serializable;
-import lombok.Builder;
-import lombok.Data;
-
-/**
- * Controller Model in Native Drools Policies.
- */
-
-@Data
-@Builder
-public class NativeDroolsController implements Serializable {
-
- private static final long serialVersionUID = -2070515139072136869L;
-
- @SerializedName("name")
- protected String name;
-
- @SerializedName("version")
- protected String version;
-}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsPolicy.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsPolicy.java
deleted file mode 100644
index fce6ca1a..00000000
--- a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsPolicy.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.drools.domain.models.nativ.rules;
-
-import com.google.gson.annotations.SerializedName;
-import java.io.Serializable;
-import lombok.Data;
-import lombok.experimental.SuperBuilder;
-import org.onap.policy.drools.domain.models.DroolsPolicy;
-
-/**
- * Native Drools Policy model root object.
- */
-
-@Data
-@SuperBuilder
-public class NativeDroolsPolicy extends DroolsPolicy implements Serializable {
-
- private static final long serialVersionUID = -8171337852833516581L;
-
- @SerializedName("properties")
- protected NativeDroolsProperties properties;
-}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsProperties.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsProperties.java
deleted file mode 100644
index dfd25ca7..00000000
--- a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsProperties.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.drools.domain.models.nativ.rules;
-
-import com.google.gson.annotations.SerializedName;
-import java.io.Serializable;
-import lombok.Builder;
-import lombok.Data;
-
-/**
- * Properties in Native Drools Policies.
- */
-
-@Data
-@Builder
-public class NativeDroolsProperties implements Serializable {
- private static final long serialVersionUID = 2360030332628276427L;
-
- @SerializedName("rulesArtifact")
- protected NativeDroolsRulesArtifact rulesArtifact;
-
- @SerializedName("controller")
- protected NativeDroolsController controller;
-}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsRulesArtifact.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsRulesArtifact.java
deleted file mode 100644
index 8ca33865..00000000
--- a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsRulesArtifact.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.drools.domain.models.nativ.rules;
-
-import com.google.gson.annotations.SerializedName;
-import java.io.Serializable;
-import lombok.Builder;
-import lombok.Data;
-
-/**
- * Rules Artifact in Native Drools Policies.
- */
-
-@Data
-@Builder
-public class NativeDroolsRulesArtifact implements Serializable {
-
- private static final long serialVersionUID = -3519759514319217518L;
-
- @SerializedName("groupId")
- protected String groupId;
-
- @SerializedName("artifactId")
- protected String artifactId;
-
- @SerializedName("version")
- protected String version;
-}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleFsm.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleFsm.java
index 119ae7aa..a435f02e 100644
--- a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleFsm.java
+++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleFsm.java
@@ -132,10 +132,10 @@ public class LifecycleFsm implements Startable {
this.policyTypesMap.put(
POLICY_TYPE_DROOLS_CONTROLLER,
- new PolicyTypeNativeController(this, POLICY_TYPE_DROOLS_CONTROLLER));
+ new PolicyTypeNativeDroolsController(this, POLICY_TYPE_DROOLS_CONTROLLER));
this.policyTypesMap.put(
POLICY_TYPE_DROOLS_NATIVE_RULES,
- new PolicyTypeRulesController(this, POLICY_TYPE_DROOLS_NATIVE_RULES));
+ new PolicyTypeNativeArtifactController(this, POLICY_TYPE_DROOLS_NATIVE_RULES));
}
@JsonIgnore
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeDroolsController.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeDroolsController.java
index f5ceafbe..36c52e2b 100644
--- a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeDroolsController.java
+++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeDroolsController.java
@@ -20,23 +20,45 @@
package org.onap.policy.drools.lifecycle;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Function;
import lombok.Getter;
-
+import org.apache.commons.lang3.StringUtils;
+import org.onap.policy.common.gson.annotation.GsonJsonIgnore;
+import org.onap.policy.common.utils.coder.CoderException;
+import org.onap.policy.drools.domain.models.legacy.LegacyPolicy;
+import org.onap.policy.drools.domain.models.operational.OperationalPolicy;
import org.onap.policy.drools.system.PolicyController;
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Policy Type Drools Controller that delegates to a corresponding
* PolicyController that supports this policy type.
*/
-@Getter
public class PolicyTypeDroolsController implements PolicyTypeController {
+ protected static final ToscaPolicyTypeIdentifier legacyType =
+ new ToscaPolicyTypeIdentifier("onap.policies.controlloop.Operational", "1.0.0");
+
+ protected static final ToscaPolicyTypeIdentifier compliantType =
+ new ToscaPolicyTypeIdentifier("onap.policies.controlloop.operational.common.Drools", "1.0.0");
+
+ private static final Logger logger = LoggerFactory.getLogger(PolicyTypeController.class);
- protected final PolicyController controller;
+ protected final Map<String, PolicyController> controllers = new ConcurrentHashMap<>();
+
+ @Getter
protected final ToscaPolicyTypeIdentifier policyType;
- protected final LifecycleFsm fsm;
+
+ @GsonJsonIgnore
+ @JsonIgnore
+ protected final transient LifecycleFsm fsm;
/**
* Creates a Policy Type Drools Controller.
@@ -44,17 +66,74 @@ public class PolicyTypeDroolsController implements PolicyTypeController {
public PolicyTypeDroolsController(
LifecycleFsm fsm, ToscaPolicyTypeIdentifier policyType, PolicyController controller) {
this.policyType = policyType;
- this.controller = controller;
+ this.controllers.put(controller.getName(), controller);
this.fsm = fsm;
}
@Override
public boolean deploy(ToscaPolicy policy) {
- return fsm.getDomainMaker().isConformant(policy) && this.controller.offer(policy);
+ return perform(policy, (PolicyController controller) -> controller.offer(policy));
}
@Override
public boolean undeploy(ToscaPolicy policy) {
- return controller.getDrools().delete(policy);
+ return perform(policy, (PolicyController controller) -> controller.getDrools().delete(policy));
+ }
+
+ private boolean perform(ToscaPolicy policy, Function<PolicyController, Boolean> operation) {
+ try {
+ List<PolicyController> selected = selectControllers(policy);
+ boolean success = true;
+ for (PolicyController controller : selected) {
+ try {
+ success = operation.apply(controller) && success;
+ } catch (RuntimeException r) {
+ logger.warn("invalid offer to controller: {}", controller);
+ success = false;
+ }
+ }
+ return success && !selected.isEmpty();
+ } catch (CoderException e) {
+ logger.warn("perform: invalid formatted policy: {}", policy, e);
+ return false;
+ }
+ }
+
+ private List<PolicyController> selectControllers(ToscaPolicy policy) throws CoderException {
+ List<PolicyController> selected;
+ if (legacyType.equals(policyType)) {
+ selected = controllers(
+ fsm.getDomainMaker().convertTo(policy, LegacyPolicy.class)
+ .getProperties()
+ .getControllerName());
+ } else if (compliantType.equals(policyType)) {
+ selected = controllers(
+ fsm.getDomainMaker().convertTo(policy, OperationalPolicy.class)
+ .getProperties()
+ .getControllerName());
+ } else {
+ selected = List.copyOf(controllers.values());
+ }
+ return selected;
+ }
+
+ private List<PolicyController> controllers(String controllerName) {
+ if (StringUtils.isBlank(controllerName)) {
+ /* this policy applies to all controllers */
+ return controllers();
+ }
+
+ if (!this.controllers.containsKey(controllerName)) {
+ return List.of();
+ }
+
+ return List.of(this.controllers.get(controllerName));
+ }
+
+ /**
+ * Get all controllers that support the policy type.
+ */
+ public List<PolicyController> controllers() {
+ return List.copyOf(controllers.values());
}
}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeRulesController.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeArtifactController.java
index 79e2ddb8..31e9059d 100644
--- a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeRulesController.java
+++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeArtifactController.java
@@ -25,7 +25,7 @@ import lombok.Getter;
import org.onap.policy.common.gson.annotation.GsonJsonIgnore;
import org.onap.policy.common.utils.coder.CoderException;
import org.onap.policy.drools.controller.DroolsControllerConstants;
-import org.onap.policy.drools.domain.models.nativ.rules.NativeDroolsPolicy;
+import org.onap.policy.drools.domain.models.artifact.NativeArtifactPolicy;
import org.onap.policy.drools.protocol.configuration.DroolsConfiguration;
import org.onap.policy.drools.system.PolicyController;
import org.onap.policy.drools.system.PolicyControllerConstants;
@@ -34,27 +34,27 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifi
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class PolicyTypeRulesController implements PolicyTypeController {
- private static final Logger logger = LoggerFactory.getLogger(PolicyTypeRulesController.class);
+public class PolicyTypeNativeArtifactController implements PolicyTypeController {
+ private static final Logger logger = LoggerFactory.getLogger(PolicyTypeNativeArtifactController.class);
@Getter
protected final ToscaPolicyTypeIdentifier policyType;
@GsonJsonIgnore
@JsonIgnore
- protected final LifecycleFsm fsm;
+ protected final transient LifecycleFsm fsm;
- public PolicyTypeRulesController(LifecycleFsm fsm, ToscaPolicyTypeIdentifier policyType) {
+ public PolicyTypeNativeArtifactController(LifecycleFsm fsm, ToscaPolicyTypeIdentifier policyType) {
this.policyType = policyType;
this.fsm = fsm;
}
@Override
public boolean deploy(ToscaPolicy policy) {
- NativeDroolsPolicy nativePolicy;
+ NativeArtifactPolicy nativePolicy;
PolicyController controller;
try {
- nativePolicy = fsm.getDomainMaker().convertTo(policy, NativeDroolsPolicy.class);
+ nativePolicy = fsm.getDomainMaker().convertTo(policy, NativeArtifactPolicy.class);
controller =
PolicyControllerConstants.getFactory().get(nativePolicy.getProperties().getController().getName());
} catch (CoderException e) {
@@ -76,7 +76,7 @@ public class PolicyTypeRulesController implements PolicyTypeController {
public boolean undeploy(ToscaPolicy policy) {
PolicyController controller;
try {
- NativeDroolsPolicy nativePolicy = fsm.getDomainMaker().convertTo(policy, NativeDroolsPolicy.class);
+ NativeArtifactPolicy nativePolicy = fsm.getDomainMaker().convertTo(policy, NativeArtifactPolicy.class);
controller =
PolicyControllerConstants.getFactory().get(nativePolicy.getProperties().getController().getName());
} catch (RuntimeException | CoderException e) {
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeController.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeController.java
deleted file mode 100644
index 1b5e7c47..00000000
--- a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeController.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * ONAP
- * ================================================================================
- * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.drools.lifecycle;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import lombok.Getter;
-import org.onap.policy.common.gson.annotation.GsonJsonIgnore;
-import org.onap.policy.common.utils.coder.CoderException;
-import org.onap.policy.drools.domain.models.controller.ControllerPolicy;
-import org.onap.policy.drools.system.PolicyControllerConstants;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class PolicyTypeNativeController implements PolicyTypeController {
- private static final Logger logger = LoggerFactory.getLogger(PolicyTypeNativeController.class);
-
- @Getter
- protected final ToscaPolicyTypeIdentifier policyType;
-
- @GsonJsonIgnore
- @JsonIgnore
- protected final LifecycleFsm fsm;
-
- public PolicyTypeNativeController(LifecycleFsm fsm, ToscaPolicyTypeIdentifier policyType) {
- this.policyType = policyType;
- this.fsm = fsm;
- }
-
- @Override
- public boolean deploy(ToscaPolicy policy) {
- // TODO
- return fsm.getDomainMaker().isConformant(policy);
- }
-
- @Override
- public boolean undeploy(ToscaPolicy policy) {
- try {
- ControllerPolicy nativePolicy = fsm.getDomainMaker().convertTo(policy, ControllerPolicy.class);
- PolicyControllerConstants.getFactory().destroy(nativePolicy.getProperties().getControllerName());
- return true;
- } catch (RuntimeException | CoderException e) {
- logger.warn("failed undeploy of policy: {}", policy);
- return false;
- }
- }
-}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeDroolsController.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeDroolsController.java
new file mode 100644
index 00000000..b0118fbe
--- /dev/null
+++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeDroolsController.java
@@ -0,0 +1,250 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP
+ * ================================================================================
+ * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.drools.lifecycle;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.stream.Collectors;
+import lombok.Getter;
+import org.onap.policy.common.endpoints.event.comm.TopicEndpointManager;
+import org.onap.policy.common.endpoints.event.comm.TopicSink;
+import org.onap.policy.common.endpoints.event.comm.TopicSource;
+import org.onap.policy.common.gson.annotation.GsonJsonIgnore;
+import org.onap.policy.common.utils.coder.CoderException;
+import org.onap.policy.drools.domain.models.controller.ControllerCustomSerialization;
+import org.onap.policy.drools.domain.models.controller.ControllerEvent;
+import org.onap.policy.drools.domain.models.controller.ControllerPolicy;
+import org.onap.policy.drools.domain.models.controller.ControllerProperties;
+import org.onap.policy.drools.domain.models.controller.ControllerSinkTopic;
+import org.onap.policy.drools.domain.models.controller.ControllerSourceTopic;
+import org.onap.policy.drools.properties.DroolsPropertyConstants;
+import org.onap.policy.drools.system.PolicyController;
+import org.onap.policy.drools.system.PolicyControllerConstants;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class PolicyTypeNativeDroolsController implements PolicyTypeController {
+ private static final Logger logger = LoggerFactory.getLogger(PolicyTypeNativeDroolsController.class);
+
+ @Getter
+ protected final ToscaPolicyTypeIdentifier policyType;
+
+ @GsonJsonIgnore
+ @JsonIgnore
+ protected final transient LifecycleFsm fsm;
+
+ public PolicyTypeNativeDroolsController(LifecycleFsm fsm, ToscaPolicyTypeIdentifier policyType) {
+ this.policyType = policyType;
+ this.fsm = fsm;
+ }
+
+ @Override
+ public boolean deploy(ToscaPolicy policy) {
+ Properties controllerProps = new Properties();
+ ControllerPolicy controllerPolicy = toDomainPolicy(policy);
+ if (controllerPolicy == null) {
+ return false;
+ }
+
+ ControllerProperties controllerConfig = controllerPolicy.getProperties();
+
+ boolean success =
+ configControllerName(controllerConfig, controllerProps)
+ && configControllerSources(controllerConfig, controllerProps)
+ && configControllerSinks(controllerConfig, controllerProps)
+ && configControllerCustom(controllerConfig, controllerProps);
+
+ if (!success) {
+ return false;
+ }
+
+ PolicyController controller;
+ try {
+ controller =
+ PolicyControllerConstants.getFactory().build(
+ controllerConfig.getControllerName(), controllerProps);
+ } catch (RuntimeException e) {
+ logger.warn("failed deploy (cannot create controller) for policy: {}", policy);
+ return false;
+ }
+
+ return controller != null;
+ }
+
+ @Override
+ public boolean undeploy(ToscaPolicy policy) {
+ try {
+ ControllerPolicy nativePolicy = fsm.getDomainMaker().convertTo(policy, ControllerPolicy.class);
+ PolicyControllerConstants.getFactory()
+ .destroy(nativePolicy.getProperties().getControllerName());
+ return true;
+ } catch (RuntimeException | CoderException e) {
+ logger.warn("failed undeploy of policy: {}", policy);
+ return false;
+ }
+ }
+
+ private ControllerPolicy toDomainPolicy(ToscaPolicy policy) {
+ ControllerPolicy nativePolicy = null;
+ try {
+ nativePolicy = fsm.getDomainMaker().convertTo(policy, ControllerPolicy.class);
+ ControllerProperties config = nativePolicy.getProperties();
+
+ /* check for duplicates */
+
+ if (isDups(sourceTopics(config.getSourceTopics()))
+ || isDups(sinkTopics(config.getSinkTopics()))) {
+ logger.warn("there are duplicated topics in policy {}", policy);
+ return null;
+ }
+
+ /* check for non-existance of the controller - throws IAE if there's not */
+
+ PolicyControllerConstants.getFactory().get(nativePolicy.getProperties().getControllerName());
+
+ } catch (CoderException e) {
+ logger.warn("failed deploy of policy (invalid): {}", policy);
+ return null;
+ } catch (IllegalArgumentException e) {
+ // this is OK
+ logger.trace("proceeding with the deploy of native controller policy: {}", policy);
+ }
+
+ return nativePolicy;
+ }
+
+ private boolean configControllerName(ControllerProperties controllerConfig, Properties controllerProps) {
+ controllerProps
+ .setProperty(DroolsPropertyConstants.PROPERTY_CONTROLLER_NAME, controllerConfig.getControllerName());
+ return true;
+ }
+
+ private boolean configControllerSources(ControllerProperties controllerConfig, Properties controllerProps) {
+ for (ControllerSourceTopic configSourceTopic : controllerConfig.getSourceTopics()) {
+ List<TopicSource> sources =
+ TopicEndpointManager.getManager().getTopicSources(List.of(configSourceTopic.getTopicName()));
+ if (sources.size() != 1) {
+ logger.warn("Topic {} is not present or ambigous {}", configSourceTopic.getTopicName(), sources);
+ return false;
+ }
+
+ configSourceTopic(sources.get(0), configSourceTopic, controllerProps);
+ }
+ return true;
+ }
+
+ private void configSourceTopic(TopicSource topic, ControllerSourceTopic configTopic, Properties controllerProps) {
+ String configCommPrefix = topic.getTopicCommInfrastructure().name().toLowerCase() + ".source";
+ configTopic(configCommPrefix, topic.getTopic(), configTopic.getEvents(), controllerProps);
+ }
+
+ private boolean configControllerSinks(ControllerProperties controllerConfig, Properties controllerProps) {
+ for (ControllerSinkTopic configSinkTopic : controllerConfig.getSinkTopics()) {
+ List<TopicSink> sinks =
+ TopicEndpointManager.getManager().getTopicSinks(List.of(configSinkTopic.getTopicName()));
+ if (sinks.size() != 1) {
+ logger.warn("Topic {} is not present or ambigous {}", configSinkTopic.getTopicName(), sinks);
+ return false;
+ }
+
+ configSinkTopic(sinks.get(0), configSinkTopic, controllerProps);
+ }
+ return true;
+ }
+
+ private void configSinkTopic(TopicSink topic, ControllerSinkTopic configTopic, Properties controllerProps) {
+ String configCommPrefix = topic.getTopicCommInfrastructure().name().toLowerCase() + ".sink";
+ configTopic(configCommPrefix, topic.getTopic(), configTopic.getEvents(), controllerProps);
+ }
+
+ private void configTopic(
+ String configCommPrefix, String topicName, List<ControllerEvent> events, Properties controllerProps) {
+ String configTopicPrefix = configCommPrefix + "." + topicName;
+ configTopics(configCommPrefix, topicName, controllerProps);
+ for (ControllerEvent configEvent : events) {
+ configEvent(configTopicPrefix, configEvent, controllerProps);
+ }
+ }
+
+ private void configTopics(String propPrefix, String topicName, Properties controllerProps) {
+ String topicsPropKey = propPrefix + ".topics";
+ configTopicItemList(topicsPropKey, topicName, controllerProps);
+ }
+
+ private void configEvent(String propPrefix, ControllerEvent configEvent, Properties controllerProps) {
+ String eventPropPrefix = propPrefix + ".events";
+ controllerProps.setProperty(eventPropPrefix, configEvent.getEventClass());
+ if (configEvent.getEventFilter() != null) {
+ controllerProps.setProperty(
+ eventPropPrefix + "." + configEvent.getEventClass() + ".filter", configEvent.getEventFilter());
+ }
+ if (configEvent.getCustomSerialization() != null) {
+ configSerialization(eventPropPrefix, configEvent.getCustomSerialization(), controllerProps);
+ }
+ configTopicItemList(eventPropPrefix, configEvent.getEventClass(), controllerProps);
+ }
+
+ private void configTopicItemList(String itemPrefix, String item, Properties controllerProps) {
+ if (controllerProps.getProperty(itemPrefix) == null) {
+ controllerProps.setProperty(itemPrefix, item);
+ } else {
+ controllerProps.setProperty(itemPrefix, "," + item);
+ }
+ }
+
+ private void configSerialization(
+ String propPrefix, ControllerCustomSerialization configCustom, Properties controllerProps) {
+ String customPropPrefix = propPrefix + ".custom.gson";
+ controllerProps.setProperty(
+ customPropPrefix, configCustom.getCustomSerializerClass() + "," + configCustom.getJsonParser());
+ }
+
+ private boolean configControllerCustom(ControllerProperties controllerConfig, Properties controllerProps) {
+ Map<String, String> configCustom = controllerConfig.getCustomConfig();
+ if (configCustom == null || configCustom.isEmpty()) {
+ return true;
+ }
+
+ controllerProps.putAll(configCustom);
+ return true;
+ }
+
+ private <T> boolean isDups(List<T> items) {
+ return items.size() != items.stream().distinct().count();
+ }
+
+ private List<String> sourceTopics(List<ControllerSourceTopic> sourceTopics) {
+ return sourceTopics.stream()
+ .map(ControllerSourceTopic::getTopicName)
+ .collect(Collectors.toList());
+ }
+
+ private List<String> sinkTopics(List<ControllerSinkTopic> sourceTopics) {
+ return sourceTopics.stream()
+ .map(ControllerSinkTopic::getTopicName)
+ .collect(Collectors.toList());
+ }
+
+}
diff --git a/feature-lifecycle/src/main/resources/schemas/onap.policies.drools.Controller-1.0.0.schema.json b/feature-lifecycle/src/main/resources/schemas/onap.policies.drools.Controller-1.0.0.schema.json
deleted file mode 100644
index d638e3b9..00000000
--- a/feature-lifecycle/src/main/resources/schemas/onap.policies.drools.Controller-1.0.0.schema.json
+++ /dev/null
@@ -1,277 +0,0 @@
-{
- "definitions": {},
- "$schema": "http://json-schema.org/draft-07/schema#",
- "$id": "http://www.onap.org/policy/models/schemas/onap.policies.drools.Controller.schema.json",
- "type": "object",
- "title": "Domain onap.policies.drools.Controller Policy root schema",
- "required": [
- "type",
- "type_version",
- "version",
- "metadata",
- "properties"
- ],
- "properties": {
- "type": {
- "$id": "#/properties/type",
- "type": "string",
- "title": "Policy Type",
- "default": "onap.policies.native.Drools",
- "examples": [
- "onap.policies.native.Drools"
- ],
- "pattern": "^(.+)$"
- },
- "type_version": {
- "$id": "#/properties/type_version",
- "type": "string",
- "title": "Policy Type Version",
- "examples": [
- "1.0.0"
- ],
- "pattern": "^(.+)$"
- },
- "version": {
- "$id": "#/properties/version",
- "type": "string",
- "title": "Version",
- "examples": [
- "1.0.0"
- ],
- "pattern": "^(.+)$"
- },
- "name": {
- "$id": "#/properties/name",
- "type": "string",
- "title": "Name",
- "examples": [
- "example"
- ],
- "pattern": "^(.+)$"
- },
- "metadata": {
- "$id": "#/properties/metadata",
- "type": "object",
- "title": "Metadata",
- "required": [
- "policy-id"
- ],
- "properties": {
- "policy-id": {
- "$id": "#/properties/metadata/properties/policy-id",
- "type": "string",
- "title": "The policy-id Schema",
- "examples": [
- "example"
- ],
- "pattern": "^(.+)$"
- }
- }
- },
- "properties": {
- "$id": "#/properties/properties",
- "type": "object",
- "title": "Policy Domain Properties",
- "required": [
- "controllerName"
- ],
- "properties": {
- "controllerName": {
- "$id": "#/properties/properties/properties/controllerName",
- "type": "string",
- "title": "Controller Name",
- "examples": [
- "example"
- ],
- "pattern": "^(.+)$"
- },
- "sourceTopics": {
- "$id": "#/properties/properties/properties/sourceTopics",
- "type": "array",
- "title": "Source Topics",
- "items": {
- "$id": "#/properties/properties/properties/sourceTopics/items",
- "type": "object",
- "title": "Topic Data",
- "required": [
- "topicName",
- "serialization"
- ],
- "properties": {
- "topicName": {
- "$id": "#/properties/properties/properties/sourceTopics/items/properties/topicName",
- "type": "string",
- "title": "Topic Name",
- "examples": [
- "DCAE_TOPIC"
- ],
- "pattern": "^(.+)$"
- },
- "serialization": {
- "$id": "#/properties/properties/properties/sourceTopics/items/properties/serialization",
- "type": "array",
- "title": "Serialization",
- "items": {
- "$id": "#/properties/properties/properties/sourceTopics/items/properties/serialization/items",
- "type": "object",
- "title": "Serialization Data",
- "required": [
- "eventClass",
- "eventFilter",
- "customSerializer"
- ],
- "properties": {
- "eventClass": {
- "$id": "#/properties/properties/properties/sourceTopics/items/properties/serialization/items/properties/eventClass",
- "type": "string",
- "title": "Event Class",
- "examples": [
- "org.onap.policy.controlloop.CanonicalOnset"
- ],
- "pattern": "^(.+)$"
- },
- "eventFilter": {
- "$id": "#/properties/properties/properties/sourceTopics/items/properties/serialization/items/properties/eventFilter",
- "type": "string",
- "title": "Event Filter",
- "examples": [
- "[?($.closedLoopEventStatus == 'ONSET')]"
- ],
- "pattern": "^(.+)$"
- },
- "customSerializer": {
- "$id": "#/properties/properties/properties/sourceTopics/items/properties/serialization/items/properties/customSerializer",
- "type": "object",
- "title": "Custom Serializer",
- "required": [
- "customSerializerClass",
- "jsonParser"
- ],
- "properties": {
- "customSerializerClass": {
- "$id": "#/properties/properties/properties/sourceTopics/items/properties/serialization/items/properties/customSerializer/properties/customSerializerClass",
- "type": "string",
- "title": "Custom Serializer Class",
- "examples": [
- "org.onap.policy.controlloop.util.Serialization"
- ],
- "pattern": "^(.*)$"
- },
- "jsonParser": {
- "$id": "#/properties/properties/properties/sourceTopics/items/properties/serialization/items/properties/customSerializer/properties/jsonParser",
- "type": "string",
- "title": "JSON Parser reference",
- "examples": [
- "gson"
- ],
- "pattern": "^(.+)$"
- }
- }
- }
- }
- }
- }
- }
- }
- },
- "sinkTopics": {
- "$id": "#/properties/properties/properties/sinkTopics",
- "type": "array",
- "title": "Sink Topics",
- "items": {
- "$id": "#/properties/properties/properties/sinkTopics/items",
- "type": "object",
- "title": "Sink Topic Data",
- "required": [
- "topicName",
- "serialization"
- ],
- "properties": {
- "topicName": {
- "$id": "#/properties/properties/properties/sinkTopics/items/properties/topicName",
- "type": "string",
- "title": "Topic Name",
- "default": "",
- "examples": [
- "APPC-CL"
- ],
- "pattern": "^(.+)$"
- },
- "serialization": {
- "$id": "#/properties/properties/properties/sinkTopics/items/properties/serialization",
- "type": "array",
- "title": "The Serialization Schema",
- "items": {
- "$id": "#/properties/properties/properties/sinkTopics/items/properties/serialization/items",
- "type": "object",
- "title": "Serialization Data",
- "required": [
- "eventClass",
- "eventFilter"
- ],
- "properties": {
- "eventClass": {
- "$id": "#/properties/properties/properties/sinkTopics/items/properties/serialization/items/properties/eventClass",
- "type": "string",
- "title": "Event Class",
- "examples": [
- "org.onap.policy.appc.Response"
- ],
- "pattern": "^(.+)$"
- },
- "eventFilter": {
- "$id": "#/properties/properties/properties/sinkTopics/items/properties/serialization/items/properties/eventFilter",
- "type": "string",
- "title": "The Eventfilter Schema",
- "examples": [
- "[?($.CommonHeader && $.Status)]"
- ],
- "pattern": "^(.+)$"
- },
- "customSerializer": {
- "$id": "#/properties/properties/properties/sinkTopics/items/properties/serialization/items/properties/customSerializer",
- "type": "object",
- "title": "The Customserializer Schema",
- "required": [
- "customSerializerClass",
- "jsonParser"
- ],
- "properties": {
- "customSerializerClass": {
- "$id": "#/properties/properties/properties/sinkTopics/items/properties/serialization/items/properties/customSerializer/properties/customSerializerClass",
- "type": "string",
- "title": "The Customserializerclass Schema",
- "examples": [
- "org.onap.policy.appc.util.Serialization"
- ],
- "pattern": "^(.+)$"
- },
- "jsonParser": {
- "$id": "#/properties/properties/properties/sinkTopics/items/properties/serialization/items/properties/customSerializer/properties/jsonParser",
- "type": "string",
- "title": "The Jsonparser Schema",
- "examples": [
- "gsonPretty"
- ],
- "pattern": "^(.+)$"
- }
- }
- }
- }
- }
- }
- }
- }
- },
- "customConfig": {
- "$id": "#/properties/properties/properties/customConfig",
- "type": "object",
- "title": "other Configuration",
- "additionalProperties": {
- "type": "string"
- }
- }
- }
- }
- }
-}
diff --git a/feature-lifecycle/src/main/resources/schemas/onap.policies.native.Drools-1.0.0.schema.json b/feature-lifecycle/src/main/resources/schemas/onap.policies.native.Drools-1.0.0.schema.json
deleted file mode 100644
index 8742768b..00000000
--- a/feature-lifecycle/src/main/resources/schemas/onap.policies.native.Drools-1.0.0.schema.json
+++ /dev/null
@@ -1,141 +0,0 @@
-{
- "definitions": {},
- "$schema": "http://json-schema.org/draft-07/schema#",
- "$id": "http://www.onap.org/policy/models/schemas/onap.policies.controlloop.native.Drools.schema.json",
- "type": "object",
- "title": "Domain onap.policies.controlloop.native.Drools Policy root schema",
- "required": [
- "type",
- "type_version",
- "version",
- "metadata",
- "properties"
- ],
- "properties": {
- "type": {
- "$id": "#/properties/type",
- "type": "string",
- "title": "Policy Type",
- "default": "onap.policies.native.Drools",
- "examples": [
- "onap.policies.native.Drools"
- ],
- "pattern": "^(.+)$"
- },
- "type_version": {
- "$id": "#/properties/type_version",
- "type": "string",
- "title": "Policy Type Version",
- "examples": [
- "1.0.0"
- ],
- "pattern": "^(.+)$"
- },
- "version": {
- "$id": "#/properties/version",
- "type": "string",
- "title": "Version",
- "examples": [
- "1.0.0"
- ],
- "pattern": "^(.+)$"
- },
- "name": {
- "$id": "#/properties/name",
- "type": "string",
- "title": "Name",
- "examples": [
- "example"
- ],
- "pattern": "^(.+)$"
- },
- "metadata": {
- "$id": "#/properties/metadata",
- "type": "object",
- "title": "Metadata",
- "required": [
- "policy-id"
- ],
- "properties": {
- "policy-id": {
- "$id": "#/properties/metadata/properties/policy-id",
- "type": "string",
- "title": "Policy Name",
- "examples": [
- "example"
- ],
- "pattern": "^(.+)$"
- }
- }
- },
- "properties": {
- "$id": "#/properties/properties",
- "type": "object",
- "title": "Properties",
- "required": [
- "rulesArtifact",
- "controller"
- ],
- "properties": {
- "rulesArtifact": {
- "$id": "#/properties/properties/properties/rulesArtifact",
- "type": "object",
- "title": "Rules Artifact",
- "required": [
- "groupId",
- "artifactId",
- "version"
- ],
- "properties": {
- "groupId": {
- "$id": "#/properties/properties/properties/rulesArtifact/properties/groupId",
- "type": "string",
- "title": "Group Id",
- "examples": [
- "org.onap.policy.controlloop"
- ],
- "pattern": "^(.+)$"
- },
- "artifactId": {
- "$id": "#/properties/properties/properties/rulesArtifact/properties/artifactId",
- "type": "string",
- "title": "Artifact ID",
- "examples": [
- "example"
- ],
- "pattern": "^(.+)$"
- },
- "version": {
- "$id": "#/properties/properties/properties/rulesArtifact/properties/version",
- "type": "string",
- "title": "Version",
- "examples": [
- "1.0.0"
- ],
- "pattern": "^(.+)$"
- }
- }
- },
- "controller": {
- "$id": "#/properties/properties/properties/controller",
- "type": "object",
- "title": "Controller",
- "required": [
- "name"
- ],
- "properties": {
- "name": {
- "$id": "#/properties/properties/properties/controller/properties/name",
- "type": "string",
- "title": "Name",
- "examples": [
- "example"
- ],
- "pattern": "^(.+)$"
- }
- }
- }
- }
- }
- }
-}
diff --git a/feature-lifecycle/src/test/java/org/onap/policy/drools/domain/models/DomainPolicyTypesTest.java b/feature-lifecycle/src/test/java/org/onap/policy/drools/domain/models/DomainPolicyTypesTest.java
deleted file mode 100644
index dd70553d..00000000
--- a/feature-lifecycle/src/test/java/org/onap/policy/drools/domain/models/DomainPolicyTypesTest.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.drools.domain.models;
-
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.worldturner.medeia.api.ValidationFailedException;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import org.junit.Before;
-import org.junit.Test;
-import org.onap.policy.common.utils.coder.CoderException;
-import org.onap.policy.common.utils.coder.StandardCoder;
-import org.onap.policy.common.utils.resources.ResourceUtils;
-import org.onap.policy.drools.domain.models.controller.ControllerPolicy;
-import org.onap.policy.drools.domain.models.nativ.rules.NativeDroolsController;
-import org.onap.policy.drools.domain.models.nativ.rules.NativeDroolsPolicy;
-import org.onap.policy.drools.domain.models.nativ.rules.NativeDroolsProperties;
-import org.onap.policy.drools.domain.models.nativ.rules.NativeDroolsRulesArtifact;
-import org.onap.policy.drools.policies.DomainMaker;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
-
-public class DomainPolicyTypesTest {
-
- // Policy Types
- private static final String OPERATIONAL_DROOLS_POLICY_TYPE = "onap.policies.controlloop.operational.common.Drools";
- private static final String NATIVE_DROOLS_POLICY_TYPE = "onap.policies.native.Drools";
-
- // Operational vCPE Policy
- private static final String OP_POLICY_NAME_VCPE = "operational.restart";
- private static final String VCPE_OPERATIONAL_DROOLS_POLICY_JSON =
- "policies/vCPE.policy.operational.input.tosca.json";
- public static final String VCPE_OPERATIONAL_DROOLS_LEGACY_POLICY_JSON =
- "src/test/resources/tosca-policy-operational-restart.json";
-
- // Native Drools Policy
- private static final String EXAMPLE_NATIVE_DROOLS_POLICY_NAME = "example";
- private static final String EXAMPLE_NATIVE_DROOLS_POLICY_JSON =
- "src/test/resources/example.policy.native.drools.tosca.json";
-
- // Controller Drools Policy
- private static final String EXAMPLE_CONTROLLER_DROOLS_POLICY_NAME = "example";
- private static final String EXAMPLE_CONTROLLER_DROOLS_POLICY_JSON =
- "src/test/resources/example.policy.drools.controller.tosca.json";
-
- private DomainMaker domainMaker;
- private StandardCoder nonValCoder;
-
- @Before
- public void setUp() {
- domainMaker = new DomainMaker();
- nonValCoder = new StandardCoder();
- }
-
- @Test
- public void testToscaOperationalPolicyType() throws CoderException, IOException {
- String rawVcpeToscaPolicy = getExamplesPolicyString(VCPE_OPERATIONAL_DROOLS_POLICY_JSON, OP_POLICY_NAME_VCPE);
- String rawVcpeLegacyToscaPolicy = getJsonFromFile(VCPE_OPERATIONAL_DROOLS_LEGACY_POLICY_JSON);
-
- // valid "known" policy type with implicit schema
- assertTrue(domainMaker
- .isConformant(new ToscaPolicyTypeIdentifier(OPERATIONAL_DROOLS_POLICY_TYPE, "1.0.0"),
- rawVcpeToscaPolicy));
-
- // policy type without schema
- assertFalse(domainMaker
- .isConformant(new ToscaPolicyTypeIdentifier("blah.blah", "1.0.0"), rawVcpeToscaPolicy));
-
- // known policy type but invalid json (legacy).
- assertFalse(domainMaker
- .isConformant(new ToscaPolicyTypeIdentifier(OPERATIONAL_DROOLS_POLICY_TYPE, "1.0.0"),
- rawVcpeLegacyToscaPolicy));
-
- ToscaPolicy vcpeToscaPolicy = getExamplesPolicy(VCPE_OPERATIONAL_DROOLS_POLICY_JSON, OP_POLICY_NAME_VCPE);
- assertTrue(domainMaker.isConformant(vcpeToscaPolicy));
- assertTrue(domainMaker.conformance(vcpeToscaPolicy));
-
- // set an invalid value in the Tosca Policy (timeout less than minimum value).
- final int timeout = (int) vcpeToscaPolicy.getProperties().get("timeout");
- vcpeToscaPolicy.getProperties().put("timeout", 0);
- assertFalse(domainMaker.isConformant(vcpeToscaPolicy));
- assertThatThrownBy(() ->
- domainMaker.conformance(vcpeToscaPolicy))
- .isInstanceOf(ValidationFailedException.class)
- .hasMessageContaining("Value 0 is smaller than minimum 1");
-
- // put back the original timeout value in the Tosca Policy
- vcpeToscaPolicy.getProperties().put("timeout", timeout);
- assertTrue(domainMaker.isConformant(vcpeToscaPolicy));
- assertTrue(domainMaker.conformance(vcpeToscaPolicy));
-
- // remove required element
- final Object operations = vcpeToscaPolicy.getProperties().remove("operations");
- assertFalse(domainMaker.isConformant(vcpeToscaPolicy));
- assertThatThrownBy(() ->
- domainMaker.conformance(vcpeToscaPolicy))
- .isInstanceOf(ValidationFailedException.class)
- .hasMessageContaining("Required property operations is missing from object");
-
- // put back the original operations value in the Tosca Policy
- vcpeToscaPolicy.getProperties().put("operations", operations);
- assertTrue(domainMaker.isConformant(vcpeToscaPolicy));
- assertTrue(domainMaker.conformance(vcpeToscaPolicy));
- }
-
- @Test
- public void testToscaNativeDroolsPolicy() throws CoderException, IOException {
- String rawNativeDroolsPolicy =
- getPolicyFromFileString(EXAMPLE_NATIVE_DROOLS_POLICY_JSON, EXAMPLE_NATIVE_DROOLS_POLICY_NAME);
- ToscaPolicy toscaPolicy =
- getExamplesPolicy(EXAMPLE_NATIVE_DROOLS_POLICY_JSON, EXAMPLE_NATIVE_DROOLS_POLICY_NAME);
-
- ToscaPolicyTypeIdentifier policyTypeId =
- new ToscaPolicyTypeIdentifier(NATIVE_DROOLS_POLICY_TYPE, "1.0.0");
- domainMaker.isConformant(policyTypeId, rawNativeDroolsPolicy);
-
- assertTrue(domainMaker.isConformant(toscaPolicy));
- NativeDroolsPolicy domainDroolsPolicy = domainMaker.convertTo(toscaPolicy, NativeDroolsPolicy.class);
- assertEquals("org.onap.policy.drools.test", domainDroolsPolicy.getProperties().getRulesArtifact().getGroupId());
- assertEquals("lifecycle", domainDroolsPolicy.getProperties().getRulesArtifact().getArtifactId());
- assertEquals("1.0.0", domainDroolsPolicy.getProperties().getRulesArtifact().getVersion());
-
- String policyId = toscaPolicy.getMetadata().remove("policy-id");
- assertThatThrownBy(() -> domainMaker.convertTo(toscaPolicy, NativeDroolsPolicy.class))
- .isInstanceOf(CoderException.class).hasCauseInstanceOf(ValidationFailedException.class);
-
- toscaPolicy.getMetadata().put("policy-id", policyId);
-
- assertTrue(domainMaker.isDomainConformant(policyTypeId, domainDroolsPolicy));
- assertTrue(domainMaker.conformance(policyTypeId, domainDroolsPolicy));
-
- domainDroolsPolicy.setName("");
- assertFalse(domainMaker.isDomainConformant(policyTypeId, domainDroolsPolicy));
- assertThatThrownBy(() -> domainMaker.conformance(policyTypeId, domainDroolsPolicy))
- .isInstanceOf(ValidationFailedException.class)
- .hasMessageContaining("Pattern ^(.+)$ is not contained in text");
-
- NativeDroolsPolicy domainDroolsPolicy2 =
- NativeDroolsPolicy.builder().metadata(Metadata.builder().policyId("policy-id").build()).name("example")
- .version("1.0.0").properties(
- NativeDroolsProperties.builder().controller(
- NativeDroolsController.builder().name("example").version("1.0.0").build())
- .rulesArtifact(
- NativeDroolsRulesArtifact.builder().groupId("org.onap.policy.controlloop")
- .artifactId("example").version("example").build()).build())
- .type("onap.policies.native.Drools")
- .typeVersion("1.0.0").build();
- assertTrue(domainMaker
- .isDomainConformant(
- new ToscaPolicyTypeIdentifier(domainDroolsPolicy2.getType(), domainDroolsPolicy2.getTypeVersion()),
- domainDroolsPolicy2));
- }
-
- @Test
- public void testToscaControllerPolicy() throws CoderException {
- ToscaPolicy toscaPolicy =
- getExamplesPolicy(EXAMPLE_CONTROLLER_DROOLS_POLICY_JSON, EXAMPLE_CONTROLLER_DROOLS_POLICY_NAME);
-
- assertTrue(domainMaker.isConformant(toscaPolicy));
- ControllerPolicy controllerPolicy = domainMaker.convertTo(toscaPolicy, ControllerPolicy.class);
-
- assertEquals("example", controllerPolicy.getName());
- assertEquals("1.0.0", controllerPolicy.getVersion());
- assertEquals("onap.policies.drools.Controller", controllerPolicy.getType());
- assertEquals("1.0.0", controllerPolicy.getTypeVersion());
- assertEquals("example", controllerPolicy.getMetadata().getPolicyId());
- assertEquals("lifecycle", controllerPolicy.getProperties().getControllerName());
- assertEquals("DCAE_TOPIC", controllerPolicy.getProperties().getSourceTopics().get(0).getTopicName());
- assertEquals("org.onap.policy.controlloop.CanonicalOnset",
- controllerPolicy.getProperties().getSourceTopics().get(0).getSerialization().get(0).getEventClass());
- assertEquals("[?($.closedLoopEventStatus == 'ONSET')]",
- controllerPolicy.getProperties().getSourceTopics().get(0).getSerialization().get(0).getEventFilter());
- assertEquals("org.onap.policy.controlloop.util.Serialization",
- controllerPolicy.getProperties().getSourceTopics().get(0).getSerialization().get(0)
- .getCustomSerializer().getCustomSerializerClass());
- assertEquals("gson",
- controllerPolicy.getProperties().getSourceTopics().get(0).getSerialization().get(0)
- .getCustomSerializer().getJsonParser());
- assertEquals("APPC-CL", controllerPolicy.getProperties().getSinkTopics().get(0).getTopicName());
- assertEquals("org.onap.policy.appc.Response",
- controllerPolicy.getProperties().getSinkTopics().get(0).getSerialization().get(0).getEventClass());
- assertEquals("[?($.CommonHeader && $.Status)]",
- controllerPolicy.getProperties().getSinkTopics().get(0).getSerialization().get(0).getEventFilter());
- assertEquals("org.onap.policy.appc.util.Serialization",
- controllerPolicy.getProperties().getSinkTopics().get(0).getSerialization().get(0)
- .getCustomSerializer().getCustomSerializerClass());
- assertEquals("gsonPretty",
- controllerPolicy.getProperties().getSinkTopics().get(0).getSerialization().get(0)
- .getCustomSerializer().getJsonParser());
- assertEquals("value1", controllerPolicy.getProperties().getCustomConfig().get("field1"));
- }
-
- private String getJsonFromFile(String filePath) throws IOException {
- return new String(Files.readAllBytes(Paths.get(filePath)));
- }
-
- private String getJsonFromResource(String resourcePath) {
- return ResourceUtils.getResourceAsString(resourcePath);
- }
-
- private String getPolicyFromFileString(String filePath, String policyName) throws CoderException, IOException {
- String policyJson = getJsonFromFile(filePath);
- ToscaServiceTemplate serviceTemplate = new StandardCoder().decode(policyJson, ToscaServiceTemplate.class);
- return nonValCoder.encode(serviceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyName));
- }
-
- private ToscaPolicy getExamplesPolicy(String resourcePath, String policyName) throws CoderException {
- String policyJson = getJsonFromResource(resourcePath);
- ToscaServiceTemplate serviceTemplate = new StandardCoder().decode(policyJson, ToscaServiceTemplate.class);
- return serviceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyName);
- }
-
- private String getExamplesPolicyString(String resourcePath, String policyName) throws CoderException {
- return nonValCoder.encode(getExamplesPolicy(resourcePath, policyName));
- }
-} \ No newline at end of file
diff --git a/feature-lifecycle/src/test/java/org/onap/policy/drools/domain/models/DroolsPolicyModelsTest.java b/feature-lifecycle/src/test/java/org/onap/policy/drools/domain/models/DroolsPolicyModelsTest.java
deleted file mode 100644
index d99dd089..00000000
--- a/feature-lifecycle/src/test/java/org/onap/policy/drools/domain/models/DroolsPolicyModelsTest.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.drools.domain.models;
-
-import static org.junit.Assert.assertNotNull;
-
-import com.openpojo.reflection.PojoClass;
-import com.openpojo.reflection.filters.FilterChain;
-import com.openpojo.reflection.filters.FilterClassName;
-import com.openpojo.reflection.filters.FilterNonConcrete;
-import com.openpojo.reflection.impl.PojoClassFactory;
-import com.openpojo.validation.Validator;
-import com.openpojo.validation.ValidatorBuilder;
-import com.openpojo.validation.test.impl.GetterTester;
-import com.openpojo.validation.test.impl.SetterTester;
-import java.util.ArrayList;
-import java.util.List;
-import org.junit.Test;
-import org.onap.policy.drools.domain.models.controller.ControllerPolicy;
-import org.onap.policy.drools.domain.models.controller.ControllerProperties;
-import org.onap.policy.drools.domain.models.nativ.rules.NativeDroolsController;
-import org.onap.policy.drools.domain.models.nativ.rules.NativeDroolsPolicy;
-import org.onap.policy.drools.domain.models.nativ.rules.NativeDroolsProperties;
-import org.onap.policy.drools.domain.models.nativ.rules.NativeDroolsRulesArtifact;
-
-public class DroolsPolicyModelsTest {
-
- @Test
- public void testPackage() {
- /* validate model pojos */
- List<PojoClass> pojoClasses =
- PojoClassFactory
- .getPojoClassesRecursively("org.onap.policy.drools.domain.models",
- new FilterChain(new FilterNonConcrete(),
- new FilterClassName(DroolsPolicy.class.getName())));
-
- Validator validator = ValidatorBuilder.create()
- .with(new SetterTester(), new GetterTester()).build();
- validator.validate(pojoClasses);
- }
-
- @Test
- public void testBuildDomainPolicyNativeDrools() {
- /* manually create a native drools policy */
- assertNotNull(NativeDroolsPolicy.builder().metadata(Metadata.builder().policyId("policy-id").build())
- .name("example")
- .type("onap.policies.native.Drools")
- .typeVersion("1.0.0")
- .version("1.0.0")
- .properties(
- NativeDroolsProperties.builder().controller(
- NativeDroolsController.builder().name("example").version("1.0.0").build())
- .rulesArtifact(
- NativeDroolsRulesArtifact.builder().groupId("org.onap.policy.controlloop")
- .artifactId("example").version("example").build()).build())
- .build());
- }
-
- @Test
- public void testBuildDomainPolicyController() {
- /* manually create a controller policy */
- assertNotNull(ControllerPolicy.builder().metadata(Metadata.builder().policyId("policy-id").build())
- .name("example")
- .version("1.0.0")
- .type("onap.policies.drools.Controller")
- .typeVersion("1.0.0")
- .properties(ControllerProperties.builder().controllerName("example").sourceTopics(
- new ArrayList<>()).sinkTopics(new ArrayList<>()).build())
- .build());
- }
-
-} \ No newline at end of file
diff --git a/feature-lifecycle/src/test/java/org/onap/policy/drools/lifecycle/LifecycleStatePassiveTest.java b/feature-lifecycle/src/test/java/org/onap/policy/drools/lifecycle/LifecycleStatePassiveTest.java
index b42e0fb6..219aa0fb 100644
--- a/feature-lifecycle/src/test/java/org/onap/policy/drools/lifecycle/LifecycleStatePassiveTest.java
+++ b/feature-lifecycle/src/test/java/org/onap/policy/drools/lifecycle/LifecycleStatePassiveTest.java
@@ -77,7 +77,7 @@ public class LifecycleStatePassiveTest extends LifecycleStateRunningTest {
((PolicyTypeDroolsController) fsm.getController(
new ToscaPolicyTypeIdentifier(
ControllerSupport.POLICY_TYPE, ControllerSupport.POLICY_TYPE_VERSION)))
- .getController());
+ .controllers().get(0));
fsm.stop(controllerSupport.getController());
assertNull(fsm.getController(new ToscaPolicyTypeIdentifier(ControllerSupport.POLICY_TYPE,
diff --git a/feature-lifecycle/src/test/java/org/onap/policy/drools/lifecycle/PolicyTypeDroolsControllerTest.java b/feature-lifecycle/src/test/java/org/onap/policy/drools/lifecycle/PolicyTypeDroolsControllerTest.java
new file mode 100644
index 00000000..a56e250b
--- /dev/null
+++ b/feature-lifecycle/src/test/java/org/onap/policy/drools/lifecycle/PolicyTypeDroolsControllerTest.java
@@ -0,0 +1,100 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * =============LICENSE_END========================================================
+ */
+
+package org.onap.policy.drools.lifecycle;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.common.utils.coder.CoderException;
+import org.onap.policy.common.utils.coder.StandardCoder;
+import org.onap.policy.common.utils.resources.ResourceUtils;
+import org.onap.policy.drools.domain.models.operational.OperationalPolicy;
+import org.onap.policy.drools.system.PolicyControllerConstants;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
+
+/**
+ * Drools Controller Policy Test.
+ */
+public class PolicyTypeDroolsControllerTest extends LifecycleStateRunningTest {
+
+ // Operational vCPE Policies
+ private static final String OP_POLICY_NAME_VCPE = "operational.restart";
+ private static final String VCPE_OPERATIONAL_DROOLS_POLICY_JSON =
+ "policies/vCPE.policy.operational.input.tosca.json";
+
+ private ToscaPolicy policy;
+ private OperationalPolicy operationalPolicy;
+ private PolicyTypeDroolsController controller;
+
+ /**
+ * Test initialization.
+ */
+ @Before
+ public void init() throws CoderException {
+ fsm = makeFsmWithPseudoTime();
+ policy = getExamplesPolicy(VCPE_OPERATIONAL_DROOLS_POLICY_JSON, OP_POLICY_NAME_VCPE);
+ operationalPolicy = fsm.getDomainMaker().convertTo(policy, OperationalPolicy.class);
+ controller = new PolicyTypeDroolsController(
+ fsm, PolicyTypeDroolsController.compliantType, controllerSupport.getController());
+
+ assertTrue(controllerSupport.getController().getDrools().isBrained());
+ assertFalse(controllerSupport.getController().isAlive());
+ assertFalse(controllerSupport.getController().getDrools().isAlive());
+ assertSame(controllerSupport.getController(), PolicyControllerConstants.getFactory().get("lifecycle"));
+
+ /* start controller */
+ assertTrue(controllerSupport.getController().start());
+
+ assertTrue(controllerSupport.getController().isAlive());
+ assertTrue(controllerSupport.getController().getDrools().isAlive());
+ assertTrue(controllerSupport.getController().getDrools().isBrained());
+ assertSame(controllerSupport.getController(), PolicyControllerConstants.getFactory().get("lifecycle"));
+ }
+
+ @Test
+ public void testDeployUndeploy() {
+ /* non-existing controller */
+ assertFalse(controller.undeploy(policy));
+ assertFalse(controller.deploy(policy));
+
+ policy.getProperties().remove("controllerName");
+ assertTrue(controller.deploy(policy));
+ assertTrue(controller.undeploy(policy));
+ assertFalse(controller.undeploy(policy));
+
+ /* existing controller */
+ policy.getProperties().put("controllerName", "lifecycle");
+ assertTrue(controller.deploy(policy));
+ assertTrue(controller.undeploy(policy));
+ assertFalse(controller.undeploy(policy));
+ }
+
+ private ToscaPolicy getExamplesPolicy(String resourcePath, String policyName) throws CoderException {
+ String policyJson = ResourceUtils.getResourceAsString(resourcePath);
+ ToscaServiceTemplate serviceTemplate = new StandardCoder().decode(policyJson, ToscaServiceTemplate.class);
+ return serviceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyName);
+ }
+
+} \ No newline at end of file
diff --git a/feature-lifecycle/src/test/java/org/onap/policy/drools/lifecycle/PolicyTypeRulesControllerTest.java b/feature-lifecycle/src/test/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeArtifactControllerTest.java
index 369284dc..cb55e637 100644
--- a/feature-lifecycle/src/test/java/org/onap/policy/drools/lifecycle/PolicyTypeRulesControllerTest.java
+++ b/feature-lifecycle/src/test/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeArtifactControllerTest.java
@@ -33,7 +33,7 @@ import org.onap.policy.common.utils.coder.CoderException;
import org.onap.policy.drools.controller.DroolsControllerConstants;
import org.onap.policy.drools.controller.internal.MavenDroolsController;
import org.onap.policy.drools.controller.internal.NullDroolsController;
-import org.onap.policy.drools.domain.models.nativ.rules.NativeDroolsPolicy;
+import org.onap.policy.drools.domain.models.artifact.NativeArtifactPolicy;
import org.onap.policy.drools.system.PolicyControllerConstants;
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
@@ -41,15 +41,15 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifi
/**
* Rules Controller Test.
*/
-public class PolicyTypeRulesControllerTest extends LifecycleStateRunningTest {
+public class PolicyTypeNativeArtifactControllerTest extends LifecycleStateRunningTest {
// Native Drools Policy
private static final String EXAMPLE_NATIVE_DROOLS_POLICY_NAME = "example";
private static final String EXAMPLE_NATIVE_DROOLS_POLICY_JSON =
- "src/test/resources/example.policy.native.drools.tosca.json";
+ "src/test/resources/tosca-policy-native-artifact-example.json";
private ToscaPolicy policy;
- private NativeDroolsPolicy nativePolicy;
- private PolicyTypeRulesController controller;
+ private NativeArtifactPolicy nativePolicy;
+ private PolicyTypeNativeArtifactController controller;
/**
* Test Set initialization.
@@ -58,10 +58,10 @@ public class PolicyTypeRulesControllerTest extends LifecycleStateRunningTest {
public void init() throws IOException, CoderException {
fsm = makeFsmWithPseudoTime();
policy = getPolicyFromFile(EXAMPLE_NATIVE_DROOLS_POLICY_JSON, EXAMPLE_NATIVE_DROOLS_POLICY_NAME);
- nativePolicy = fsm.getDomainMaker().convertTo(policy, NativeDroolsPolicy.class);
+ nativePolicy = fsm.getDomainMaker().convertTo(policy, NativeArtifactPolicy.class);
controller =
- new PolicyTypeRulesController(fsm,
- new ToscaPolicyTypeIdentifier("onap.policies.native.Drools", "1.0.0"));
+ new PolicyTypeNativeArtifactController(fsm,
+ new ToscaPolicyTypeIdentifier("onap.policies.native.drools.Artifact", "1.0.0"));
assertTrue(controllerSupport.getController().getDrools().isBrained());
assertFalse(controllerSupport.getController().isAlive());
diff --git a/feature-lifecycle/src/test/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeControllerTest.java b/feature-lifecycle/src/test/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeDroolsControllerTest.java
index 528fa7ef..1aa3a684 100644
--- a/feature-lifecycle/src/test/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeControllerTest.java
+++ b/feature-lifecycle/src/test/java/org/onap/policy/drools/lifecycle/PolicyTypeNativeDroolsControllerTest.java
@@ -1,6 +1,6 @@
/*
* ============LICENSE_START=======================================================
- * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -26,26 +26,28 @@ import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
+import java.util.Properties;
import org.junit.Before;
import org.junit.Test;
+import org.onap.policy.common.endpoints.event.comm.TopicEndpointManager;
+import org.onap.policy.common.endpoints.properties.PolicyEndPointProperties;
import org.onap.policy.common.utils.coder.CoderException;
import org.onap.policy.drools.domain.models.controller.ControllerPolicy;
import org.onap.policy.drools.system.PolicyControllerConstants;
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
/**
* Native Controller Policy Test.
*/
-public class PolicyTypeNativeControllerTest extends LifecycleStateRunningTest {
+public class PolicyTypeNativeDroolsControllerTest extends LifecycleStateRunningTest {
// Native Drools Policy
private static final String EXAMPLE_NATIVE_DROOLS_POLICY_NAME = "example";
private static final String EXAMPLE_NATIVE_DROOLS_POLICY_JSON =
- "src/test/resources/example.policy.drools.controller.tosca.json";
+ "src/test/resources/tosca-policy-native-controller-example.json";
private ToscaPolicy policy;
private ControllerPolicy controllerPolicy;
- private PolicyTypeNativeController controller;
+ private PolicyTypeNativeDroolsController controller;
/**
* Test initialization.
@@ -55,9 +57,7 @@ public class PolicyTypeNativeControllerTest extends LifecycleStateRunningTest {
fsm = makeFsmWithPseudoTime();
policy = getPolicyFromFile(EXAMPLE_NATIVE_DROOLS_POLICY_JSON, EXAMPLE_NATIVE_DROOLS_POLICY_NAME);
controllerPolicy = fsm.getDomainMaker().convertTo(policy, ControllerPolicy.class);
- controller =
- new PolicyTypeNativeController(fsm,
- new ToscaPolicyTypeIdentifier("onap.policies.drools.Controller", "1.0.0"));
+ controller = new PolicyTypeNativeDroolsController(fsm, policy.getTypeIdentifier());
assertTrue(controllerSupport.getController().getDrools().isBrained());
assertFalse(controllerSupport.getController().isAlive());
@@ -74,9 +74,20 @@ public class PolicyTypeNativeControllerTest extends LifecycleStateRunningTest {
}
@Test
- public void testUndeploy() {
+ public void testUndeployDeploy() {
assertTrue(controller.undeploy(policy));
assertThatIllegalArgumentException().isThrownBy(
() -> PolicyControllerConstants.getFactory().get(controllerPolicy.getName()));
+
+ assertFalse(controller.deploy(policy));
+
+ Properties noopTopicProperties = new Properties();
+ noopTopicProperties.put(PolicyEndPointProperties.PROPERTY_NOOP_SOURCE_TOPICS, "DCAE_TOPIC");
+ noopTopicProperties.put(PolicyEndPointProperties.PROPERTY_NOOP_SINK_TOPICS, "APPC-CL");
+ TopicEndpointManager.getManager().addTopics(noopTopicProperties);
+
+ controller.deploy(policy);
+
+ return;
}
} \ No newline at end of file
diff --git a/feature-lifecycle/src/test/resources/schemas/onap.policies.controlloop.Operational-1.0.0.schema.json b/feature-lifecycle/src/test/resources/schemas/onap.policies.controlloop.Operational-1.0.0.schema.json
deleted file mode 100644
index 801859be..00000000
--- a/feature-lifecycle/src/test/resources/schemas/onap.policies.controlloop.Operational-1.0.0.schema.json
+++ /dev/null
@@ -1,91 +0,0 @@
-{
- "definitions": {},
- "$schema": "http://json-schema.org/draft-07/schema#",
- "$id": "http://www.onap.org/policy/models/schemas/onap.policies.controlloop.Operational.schema.json",
- "type": "object",
- "title": "Root Schema for legacy onap.policies.controlloop.Operational policy type domain policies",
- "required": [
- "type",
- "type_version",
- "name",
- "version",
- "properties"
- ],
- "properties": {
- "type": {
- "$id": "#/properties/type",
- "type": "string",
- "title": "Policy Type",
- "default": "onap.policies.controlloop.Operational",
- "examples": [
- "onap.policies.controlloop.Operational"
- ],
- "pattern": "^(.+)$"
- },
- "type_version": {
- "$id": "#/properties/type_version",
- "type": "string",
- "title": "Policy Type Version",
- "examples": [
- "1.0.0"
- ],
- "pattern": "^(.+)$"
- },
- "version": {
- "$id": "#/properties/version",
- "type": "string",
- "title": "Version",
- "examples": [
- "1.0.0"
- ],
- "pattern": "^(.+)$"
- },
- "name": {
- "$id": "#/properties/name",
- "type": "string",
- "title": "Name",
- "examples": [
- "example"
- ],
- "pattern": "^(.+)$"
- },
- "metadata": {
- "$id": "#/properties/metadata",
- "type": "object",
- "title": "Metadata",
- "required": [
- "policy-id"
- ],
- "properties": {
- "policy-id": {
- "$id": "#/properties/metadata/properties/policy-id",
- "type": "string",
- "title": "Policy Name",
- "examples": [
- "example"
- ],
- "pattern": "^(.+)$"
- }
- }
- },
- "properties": {
- "$id": "#/properties/properties",
- "type": "object",
- "title": "Properties",
- "required": [
- "content"
- ],
- "properties": {
- "content": {
- "$id": "#/properties/properties/properties/content",
- "type": "string",
- "title": "Legacy policy in yaml format",
- "examples": [
- "controlLoop%3A%0A%20%20version%3A%202.0.0%0A%20%20controlLoopName%3A%20ControlLoop-vCPEv2-48f0c2c3-a172-4192-9ae3-052274181b6e%0A%20%20trigger_policy%3A%20unique-policy-id-1-restart%0A%20%20timeout%3A%203600%0A%20%20abatement%3A%20true%0A%20%0Apolicies%3A%0A%20%20-%20id%3A%20unique-policy-id-1-restart%0A%20%20%20%20name%3A%20Restart%20the%20VM%0A%20%20%20%20description%3A%0A%20%20%20%20actor%3A%20APPC%0A%20%20%20%20recipe%3A%20Restart%0A%20%20%20%20target%3A%0A%20%20%20%20%20%20type%3A%20VM%0A%20%20%20%20retry%3A%203%0A%20%20%20%20timeout%3A%201200%0A%20%20%20%20success%3A%20final_success%0A%20%20%20%20failure%3A%20final_failure%0A%20%20%20%20failure_timeout%3A%20final_failure_timeout%0A%20%20%20%20failure_retries%3A%20final_failure_retries%0A%20%20%20%20failure_exception%3A%20final_failure_exception%0A%20%20%20%20failure_guard%3A%20final_failure_guard"
- ],
- "pattern": "^(.+)$"
- }
- }
- }
- }
-}
diff --git a/feature-lifecycle/src/test/resources/schemas/onap.policies.controlloop.operational.common.Drools-1.0.0.schema.json b/feature-lifecycle/src/test/resources/schemas/onap.policies.controlloop.operational.common.Drools-1.0.0.schema.json
deleted file mode 100644
index 5d032f06..00000000
--- a/feature-lifecycle/src/test/resources/schemas/onap.policies.controlloop.operational.common.Drools-1.0.0.schema.json
+++ /dev/null
@@ -1,331 +0,0 @@
-{
- "definitions": {},
- "$schema": "http://json-schema.org/draft-07/schema#",
- "$id": "http://www.onap.org/policy/models/schemas/onap.policies.controlloop.operational.common.Drools.schema.json",
- "type": "object",
- "title": "The Root Schema",
- "required": [
- "type",
- "type_version",
- "version",
- "metadata",
- "properties"
- ],
- "properties": {
- "type": {
- "$id": "#/properties/type",
- "type": "string",
- "title": "Policy Type",
- "default": "onap.policies.controlloop.operational.common.Drools",
- "examples": [
- "onap.policies.controlloop.operational.common.Drools"
- ],
- "pattern": "^(.+)$"
- },
- "type_version": {
- "$id": "#/properties/type_version",
- "type": "string",
- "title": "Policy Type Version",
- "default": "1.0.0",
- "examples": [
- "1.0.0"
- ],
- "pattern": "^(.+)$"
- },
- "name": {
- "$id": "#/properties/name",
- "type": "string",
- "title": "Policy Name",
- "default": "",
- "examples": [
- "example"
- ],
- "pattern": "^(.*)$"
- },
- "version": {
- "$id": "#/properties/version",
- "type": "string",
- "title": "Policy Version",
- "default": "1.0.0",
- "examples": [
- "1.0.0"
- ],
- "pattern": "^(.+)$"
- },
- "metadata": {
- "$id": "#/properties/metadata",
- "type": "object",
- "title": "Metadata",
- "required": [
- "policy-id"
- ],
- "properties": {
- "policy-id": {
- "$id": "#/properties/metadata/properties/policy-id",
- "type": "string",
- "title": "Policy ID",
- "examples": [
- "operational.restart"
- ],
- "pattern": "^(.+)$"
- }
- }
- },
- "properties": {
- "$id": "#/properties/properties",
- "type": "object",
- "title": "Properties",
- "required": [
- "id",
- "timeout",
- "abatement",
- "trigger",
- "operations",
- "controllerName"
- ],
- "properties": {
- "id": {
- "$id": "#/properties/properties/properties/id",
- "type": "string",
- "title": "Control Loop Name",
- "examples": [
- "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e"
- ],
- "pattern": "^(.+)$"
- },
- "timeout": {
- "$id": "#/properties/properties/properties/timeout",
- "type": "integer",
- "title": "Timeout in seconds",
- "minimum": 1,
- "default": 30,
- "examples": [
- 3600
- ]
- },
- "abatement": {
- "$id": "#/properties/properties/properties/abatement",
- "type": "boolean",
- "title": "Abatement",
- "default": false,
- "examples": [
- true
- ]
- },
- "trigger": {
- "$id": "#/properties/properties/properties/trigger",
- "type": "string",
- "title": "Trigger Operation",
- "examples": [
- "unique-policy-id-1-restart"
- ],
- "pattern": "^(.+)$"
- },
- "operations": {
- "$id": "#/properties/properties/properties/operations",
- "type": "array",
- "title": "Operations",
- "items": {
- "$id": "#/properties/properties/properties/operations/items",
- "type": "object",
- "title": "Items",
- "uniqueItems": true,
- "required": [
- "id",
- "operation",
- "timeout",
- "retries",
- "success",
- "failure"
- ],
- "properties": {
- "id": {
- "$id": "#/properties/properties/properties/operations/items/properties/id",
- "type": "string",
- "title": "Operation Identifier",
- "examples": [
- "unique-policy-id-1-restart"
- ],
- "pattern": "^(.+)$"
- },
- "description": {
- "$id": "#/properties/properties/properties/operations/items/properties/description",
- "type": "string",
- "title": "Description",
- "examples": [
- "Restart the VM"
- ],
- "pattern": "^(.+)$"
- },
- "operation": {
- "$id": "#/properties/properties/properties/operations/items/properties/operation",
- "type": "object",
- "title": "Operation",
- "required": [
- "actor",
- "operation",
- "target"
- ],
- "properties": {
- "actor": {
- "$id": "#/properties/properties/properties/operations/items/properties/operation/properties/actor",
- "type": "string",
- "title": "Actor",
- "examples": [
- "APPC"
- ],
- "pattern": "^(.+)$"
- },
- "operation": {
- "$id": "#/properties/properties/properties/operations/items/properties/operation/properties/operation",
- "type": "string",
- "title": "Operation Name",
- "examples": [
- "Restart"
- ],
- "pattern": "^(.+)$"
- },
- "target": {
- "$id": "#/properties/properties/properties/operations/items/properties/operation/properties/target",
- "type": "object",
- "title": "Target",
- "required": [
- "targetType"
- ],
- "properties": {
- "targetType": {
- "$id": "#/properties/properties/properties/operations/items/properties/operation/properties/target/properties/targetType",
- "type": "string",
- "title": "Target Type",
- "examples": [
- "VNF"
- ],
- "pattern": "^(.+)$"
- },
- "entityIds": {
- "$id": "#/properties/properties/properties/operations/items/properties/operation/properties/target/properties/entityIds",
- "type": "object",
- "title": "Arbitrary Resource Identities",
- "examples": [
- "Eace933104d443b496b8.nodes.heat.vpg"
- ],
- "additionalProperties": {
- "type": "string",
- "pattern": "^(.+)$"
- }
- }
- }
- },
- "payload": {
- "$id": "#/properties/properties/properties/operations/items/properties/operation/properties/payload",
- "type": "object",
- "title": "Payload",
- "additionalProperties": {
- "type": "string",
- "pattern": "^(.+)$"
- }
- }
- }
- },
- "timeout": {
- "$id": "#/properties/properties/properties/operations/items/properties/timeout",
- "type": "integer",
- "title": "Operation Timeout in seconds",
- "default": 10,
- "minimum": 1,
- "examples": [
- 1200
- ]
- },
- "retries": {
- "$id": "#/properties/properties/properties/operations/items/properties/retries",
- "type": "integer",
- "title": "Number of Retries",
- "default": 0,
- "examples": [
- 3
- ]
- },
- "success": {
- "$id": "#/properties/properties/properties/operations/items/properties/success",
- "type": "string",
- "title": "Success Treatment",
- "default": "final_success",
- "examples": [
- "final_success",
- "unique-policy-id-2"
- ],
- "pattern": "^(.+)$"
- },
- "failure": {
- "$id": "#/properties/properties/properties/operations/items/properties/failure",
- "type": "string",
- "title": "Failure Treatment",
- "default": "final_failure",
- "examples": [
- "final_failure",
- "unique-policy-id-2"
- ],
- "pattern": "^(.+)$"
- },
- "failure_timeout": {
- "$id": "#/properties/properties/properties/operations/items/properties/failure_timeout",
- "type": "string",
- "title": "Failure Timeout Treatment",
- "default": "final_failure_timeout",
- "examples": [
- "final_failure_timeout",
- "unique-policy-id-2"
- ],
- "pattern": "^(.+)$"
- },
- "failure_retries": {
- "$id": "#/properties/properties/properties/operations/items/properties/failure_retries",
- "type": "string",
- "title": "Failure Retry Treatment",
- "default": "final_failure_retries",
- "examples": [
- "final_failure_retries",
- "unique-policy-id-2"
- ],
- "pattern": "^(.+)$"
- },
- "failure_exception": {
- "$id": "#/properties/properties/properties/operations/items/properties/failure_exception",
- "type": "string",
- "title": "Failure Exception Treatment",
- "default": "",
- "examples": [
- "final_failure_exception",
- "unique-policy-id-2"
- ],
- "pattern": "^(.+)$"
- },
- "failure_guard": {
- "$id": "#/properties/properties/properties/operations/items/properties/failure_guard",
- "type": "string",
- "title": "Failure Guard Treatment",
- "default": "final_failure_guard",
- "examples": [
- "final_failure_guard",
- "unique-policy-id-2"
- ],
- "pattern": "^(.+)$"
- }
- }
- }
- },
- "controllerName": {
- "$id": "#/properties/properties/properties/controllerName",
- "type": "string",
- "title": "Controller Name",
- "default": "",
- "examples": [
- "usecases"
- ],
- "pattern": "^(.+)$"
- }
- }
- }
- }
-} \ No newline at end of file
diff --git a/feature-lifecycle/src/test/resources/example.policy.native.drools.tosca.json b/feature-lifecycle/src/test/resources/tosca-policy-native-artifact-example.json
index f3f34b6f..f521953d 100644
--- a/feature-lifecycle/src/test/resources/example.policy.native.drools.tosca.json
+++ b/feature-lifecycle/src/test/resources/tosca-policy-native-artifact-example.json
@@ -4,7 +4,7 @@
"policies": [
{
"example": {
- "type": "onap.policies.native.Drools",
+ "type": "onap.policies.native.drools.Artifact",
"type_version": "1.0.0",
"version": "1.0.0",
"name": "example",
diff --git a/feature-lifecycle/src/test/resources/example.policy.drools.controller.tosca.json b/feature-lifecycle/src/test/resources/tosca-policy-native-controller-example.json
index f5a9151f..3d716845 100644
--- a/feature-lifecycle/src/test/resources/example.policy.drools.controller.tosca.json
+++ b/feature-lifecycle/src/test/resources/tosca-policy-native-controller-example.json
@@ -4,7 +4,7 @@
"policies": [
{
"example": {
- "type": "onap.policies.drools.Controller",
+ "type": "onap.policies.native.drools.Controller",
"type_version": "1.0.0",
"version": "1.0.0",
"name": "example",
@@ -16,14 +16,18 @@
"sourceTopics": [
{
"topicName": "DCAE_TOPIC",
- "serialization": [
+ "events": [
{
"eventClass": "org.onap.policy.controlloop.CanonicalOnset",
"eventFilter": "[?($.closedLoopEventStatus == 'ONSET')]",
- "customSerializer": {
+ "customSerialization": {
"customSerializerClass": "org.onap.policy.controlloop.util.Serialization",
"jsonParser": "gson"
}
+ },
+ {
+ "eventClass": "org.onap.policy.controlloop.CanonicalAbated",
+ "eventFilter": "[?($.closedLoopEventStatus == 'ABATED')]"
}
]
}
@@ -31,11 +35,11 @@
"sinkTopics": [
{
"topicName": "APPC-CL",
- "serialization": [
+ "events": [
{
"eventClass": "org.onap.policy.appc.Response",
"eventFilter": "[?($.CommonHeader && $.Status)]",
- "customSerializer": {
+ "customSerialization": {
"customSerializerClass": "org.onap.policy.appc.util.Serialization",
"jsonParser": "gsonPretty"
}