diff options
author | jhh <jorge.hernandez-herrero@att.com> | 2020-03-05 22:32:58 -0600 |
---|---|---|
committer | jhh <jorge.hernandez-herrero@att.com> | 2020-03-10 11:29:27 -0500 |
commit | 3f563fe552e35b3bc3d95c47a3cabdfe7645ad07 (patch) | |
tree | 9439dc357096b69b670e7dad666084a5cb08dcfb /policy-domains | |
parent | 845cbbc74445909613aff1912d3cfc9083c57d53 (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 'policy-domains')
36 files changed, 2552 insertions, 0 deletions
diff --git a/policy-domains/lombok.config b/policy-domains/lombok.config new file mode 100644 index 00000000..2384843f --- /dev/null +++ b/policy-domains/lombok.config @@ -0,0 +1,3 @@ +config.stopBubbling = true +lombok.addLombokGeneratedAnnotation = true +lombok.nonNull.exceptionType = IllegalArgumentException diff --git a/policy-domains/pom.xml b/policy-domains/pom.xml new file mode 100644 index 00000000..c28d5b29 --- /dev/null +++ b/policy-domains/pom.xml @@ -0,0 +1,89 @@ +<!-- + ============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========================================================= + --> + +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.onap.policy.drools-pdp</groupId> + <artifactId>drools-pdp</artifactId> + <version>1.6.0-SNAPSHOT</version> + </parent> + + <artifactId>policy-domains</artifactId> + + <name>policy-domains</name> + <description>domain policies</description> + + <dependencies> + + <dependency> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + <scope>provided</scope> + </dependency> + + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.assertj</groupId> + <artifactId>assertj-core</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.powermock</groupId> + <artifactId>powermock-api-mockito2</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>com.google.code.gson</groupId> + <artifactId>gson</artifactId> + </dependency> + + <dependency> + <groupId>com.openpojo</groupId> + <artifactId>openpojo</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.onap.policy.common</groupId> + <artifactId>utils</artifactId> + <version>1.6.2-SNAPSHOT</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.onap.policy.drools-pdp</groupId> + <artifactId>policy-utils</artifactId> + <version>1.6.0-SNAPSHOT</version> + <scope>test</scope> + </dependency> + + </dependencies> + +</project> diff --git a/policy-domains/src/main/java/org/onap/policy/drools/domain/models/DroolsPolicy.java b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/DroolsPolicy.java new file mode 100644 index 00000000..4b1a1cbd --- /dev/null +++ b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/DroolsPolicy.java @@ -0,0 +1,46 @@ +/* + * ============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 com.google.gson.annotations.SerializedName; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +@Data +@SuperBuilder +@NoArgsConstructor +public abstract class DroolsPolicy { + @SerializedName("type") + protected String type; + + @SerializedName("type_version") + protected String typeVersion; + + @SerializedName("version") + protected String version; + + @SerializedName("name") + protected String name; + + @SerializedName("metadata") + protected Metadata metadata; +} diff --git a/policy-domains/src/main/java/org/onap/policy/drools/domain/models/Metadata.java b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/Metadata.java new file mode 100644 index 00000000..fd68e5b5 --- /dev/null +++ b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/Metadata.java @@ -0,0 +1,40 @@ +/* + * ============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 com.google.gson.annotations.SerializedName; +import java.io.Serializable; +import lombok.Builder; +import lombok.Data; + +/** + * Metadata in Native Drools Policies. + */ + +@Data +@Builder +public class Metadata implements Serializable { + + private static final long serialVersionUID = -1027974819756498893L; + + @SerializedName("policy-id") + protected String policyId; +} diff --git a/policy-domains/src/main/java/org/onap/policy/drools/domain/models/artifact/NativeArtifactController.java b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/artifact/NativeArtifactController.java new file mode 100644 index 00000000..c5d29b02 --- /dev/null +++ b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/artifact/NativeArtifactController.java @@ -0,0 +1,38 @@ +/* + * ============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.artifact; + +import java.io.Serializable; +import lombok.Builder; +import lombok.Data; + +/** + * Controller Model in Native Drools Policies. + */ + +@Data +@Builder +public class NativeArtifactController implements Serializable { + + private static final long serialVersionUID = -2070515139072136869L; + + private String name; +} diff --git a/policy-domains/src/main/java/org/onap/policy/drools/domain/models/artifact/NativeArtifactPolicy.java b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/artifact/NativeArtifactPolicy.java new file mode 100644 index 00000000..0f53b532 --- /dev/null +++ b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/artifact/NativeArtifactPolicy.java @@ -0,0 +1,39 @@ +/* + * ============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.artifact; + +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 NativeArtifactPolicy extends DroolsPolicy implements Serializable { + + private static final long serialVersionUID = -8171337852833516581L; + + private NativeArtifactProperties properties; +} diff --git a/policy-domains/src/main/java/org/onap/policy/drools/domain/models/artifact/NativeArtifactProperties.java b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/artifact/NativeArtifactProperties.java new file mode 100644 index 00000000..e5ab1561 --- /dev/null +++ b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/artifact/NativeArtifactProperties.java @@ -0,0 +1,38 @@ +/* + * ============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.artifact; + +import java.io.Serializable; +import lombok.Builder; +import lombok.Data; + +/** + * Properties in Native Drools Policies. + */ + +@Data +@Builder +public class NativeArtifactProperties implements Serializable { + private static final long serialVersionUID = 2360030332628276427L; + + private NativeArtifactRulesArtifact rulesArtifact; + private NativeArtifactController controller; +} diff --git a/policy-domains/src/main/java/org/onap/policy/drools/domain/models/artifact/NativeArtifactRulesArtifact.java b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/artifact/NativeArtifactRulesArtifact.java new file mode 100644 index 00000000..c93c2609 --- /dev/null +++ b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/artifact/NativeArtifactRulesArtifact.java @@ -0,0 +1,40 @@ +/* + * ============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.artifact; + +import java.io.Serializable; +import lombok.Builder; +import lombok.Data; + +/** + * Rules Artifact in Native Drools Policies. + */ + +@Data +@Builder +public class NativeArtifactRulesArtifact implements Serializable { + + private static final long serialVersionUID = -3519759514319217518L; + + private String groupId; + private String artifactId; + private String version; +} diff --git a/policy-domains/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerCustomSerialization.java b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerCustomSerialization.java new file mode 100644 index 00000000..4977f9a1 --- /dev/null +++ b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerCustomSerialization.java @@ -0,0 +1,35 @@ +/* + * ============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 lombok.Builder; +import lombok.Data; + + +@Data +@Builder +public class ControllerCustomSerialization implements Serializable { + private static final long serialVersionUID = 1505345574249332514L; + + private String customSerializerClass; + private String jsonParser; +} diff --git a/policy-domains/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerEvent.java b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerEvent.java new file mode 100644 index 00000000..d6817a4a --- /dev/null +++ b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerEvent.java @@ -0,0 +1,36 @@ +/* + * ============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 lombok.Builder; +import lombok.Data; + + +@Data +@Builder +public class ControllerEvent implements Serializable { + private static final long serialVersionUID = 8770353732981476267L; + + private String eventClass; + private String eventFilter; + private ControllerCustomSerialization customSerialization; +} diff --git a/policy-domains/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerPolicy.java b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerPolicy.java new file mode 100644 index 00000000..09236c84 --- /dev/null +++ b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerPolicy.java @@ -0,0 +1,39 @@ +/* + * ============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 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; + + private ControllerProperties properties; +} diff --git a/policy-domains/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerProperties.java b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerProperties.java new file mode 100644 index 00000000..780c20dc --- /dev/null +++ b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerProperties.java @@ -0,0 +1,43 @@ +/* + * ============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 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; + + private String controllerName; + private List<ControllerSourceTopic> sourceTopics; + private List<ControllerSinkTopic> sinkTopics; + private Map<String, String> customConfig; +} diff --git a/policy-domains/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSinkTopic.java b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSinkTopic.java new file mode 100644 index 00000000..87af6c36 --- /dev/null +++ b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSinkTopic.java @@ -0,0 +1,36 @@ +/* + * ============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 lombok.Data; +import lombok.experimental.SuperBuilder; + + +/** + * Sink Topic. + */ + +@Data +@SuperBuilder +public class ControllerSinkTopic extends ControllerTopic implements Serializable { + private static final long serialVersionUID = 8770353732981476267L; +} diff --git a/policy-domains/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSourceTopic.java b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSourceTopic.java new file mode 100644 index 00000000..e41f4dc3 --- /dev/null +++ b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSourceTopic.java @@ -0,0 +1,36 @@ +/* + * ============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 lombok.Data; +import lombok.experimental.SuperBuilder; + + +/** + * Source Topics. + */ + +@Data +@SuperBuilder +public class ControllerSourceTopic extends ControllerTopic implements Serializable { + private static final long serialVersionUID = -1732598566914643612L; +} diff --git a/policy-domains/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerTopic.java b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerTopic.java new file mode 100644 index 00000000..2954350d --- /dev/null +++ b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerTopic.java @@ -0,0 +1,37 @@ +/* + * ============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.util.List; +import lombok.Data; +import lombok.experimental.SuperBuilder; + + +/** + * Source Topics. + */ + +@Data +@SuperBuilder +public abstract class ControllerTopic { + protected String topicName; + protected List<ControllerEvent> events; +} diff --git a/policy-domains/src/main/java/org/onap/policy/drools/domain/models/legacy/LegacyPolicy.java b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/legacy/LegacyPolicy.java new file mode 100644 index 00000000..f4fcb702 --- /dev/null +++ b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/legacy/LegacyPolicy.java @@ -0,0 +1,39 @@ +/*- + * ============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.domain.models.legacy; + +import java.io.Serializable; +import lombok.Data; +import lombok.experimental.SuperBuilder; +import org.onap.policy.drools.domain.models.DroolsPolicy; + + +/** + * Operational Domain Policy. + */ + +@Data +@SuperBuilder +public class LegacyPolicy extends DroolsPolicy implements Serializable { + private static final long serialVersionUID = 4100092564657497713L; + + private LegacyProperties properties; +} diff --git a/policy-domains/src/main/java/org/onap/policy/drools/domain/models/legacy/LegacyProperties.java b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/legacy/LegacyProperties.java new file mode 100644 index 00000000..b74d9a6c --- /dev/null +++ b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/legacy/LegacyProperties.java @@ -0,0 +1,47 @@ +/*- + * ============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.domain.models.legacy; + +import java.io.Serializable; +import lombok.Builder; +import lombok.Data; + + +/** + * Legacy Operational Policy Properties. + */ + +@Data +@Builder +public class LegacyProperties implements Serializable { + private static final long serialVersionUID = 2455300363502597721L; + + /** + * Content (Operational Policy URL encoded yaml). + */ + private String content; + + /** + * Controller Name (optional) to select an specific controller among many that + * support a policy type. + */ + private String controllerName; +} diff --git a/policy-domains/src/main/java/org/onap/policy/drools/domain/models/operational/ActorOperation.java b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/operational/ActorOperation.java new file mode 100644 index 00000000..af39f792 --- /dev/null +++ b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/operational/ActorOperation.java @@ -0,0 +1,59 @@ +/*- + * ============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.domain.models.operational; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; +import lombok.Builder; +import lombok.Data; + + +/** + * Actor Operation. + */ + +@Data +@Builder +public class ActorOperation implements Serializable { + private static final long serialVersionUID = -534488831693359530L; + + /** + * Actor. + */ + private String actor; + + /** + * Operation Name. + */ + private String operation; + + /** + * Target. + */ + private OperationalTarget target; + + /** + * Payload. + */ + @Builder.Default + private Map<String, String> payload = new HashMap<>(); +} diff --git a/policy-domains/src/main/java/org/onap/policy/drools/domain/models/operational/Operation.java b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/operational/Operation.java new file mode 100644 index 00000000..b996c825 --- /dev/null +++ b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/operational/Operation.java @@ -0,0 +1,104 @@ +/*- + * ============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.domain.models.operational; + +import com.google.gson.annotations.SerializedName; +import java.io.Serializable; +import lombok.Builder; +import lombok.Data; + +/** + * Policy Operation. + */ + +@Data +@Builder +public class Operation implements Serializable { + private static final long serialVersionUID = 6175229119078195110L; + + /** + * Operation Identifier. + */ + private String id; + + /** + * Description. + */ + private String description; + + /** + * Actor Operation. + */ + @SerializedName("operation") + private ActorOperation actorOperation; + + /** + * Operation Timeout in seconds. + */ + @Builder.Default + private int timeout = 10; + + /** + * Number of Retries. + */ + @Builder.Default + private int retries = 0; + + /** + * Success Treatment. + */ + @Builder.Default + private String success = "final_success"; + + /** + * Failure Treatment. + */ + @Builder.Default + private String failure = "final_failure"; + + /** + * Failure Timeout Treatment. + */ + @SerializedName("failure_timeout") + @Builder.Default + private String failureTimeout = "final_failure_timeout"; + + /** + * Failure Retry Treatment. + */ + @SerializedName("failure_retries") + @Builder.Default + private String failureRetries = "final_failure_retries"; + + /** + * Failure Exception Treatment. + */ + @SerializedName("failure_exception") + @Builder.Default + private String failureException = "final_failure_exception"; + + /** + * Failure Guard Treatment. + */ + @SerializedName("failure_guard") + @Builder.Default + private String failureGuard = "final_failure_guard"; +} diff --git a/policy-domains/src/main/java/org/onap/policy/drools/domain/models/operational/OperationalPolicy.java b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/operational/OperationalPolicy.java new file mode 100644 index 00000000..d158608b --- /dev/null +++ b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/operational/OperationalPolicy.java @@ -0,0 +1,40 @@ +/*- + * ============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.domain.models.operational; + +import java.io.Serializable; +import lombok.Data; +import lombok.experimental.SuperBuilder; +import org.onap.policy.drools.domain.models.DroolsPolicy; + + +/** + * Operational Domain Policy. + */ + +@Data +@SuperBuilder +public class OperationalPolicy extends DroolsPolicy implements Serializable { + private static final long serialVersionUID = 4100092564657497713L; + + private OperationalProperties properties; + +} diff --git a/policy-domains/src/main/java/org/onap/policy/drools/domain/models/operational/OperationalProperties.java b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/operational/OperationalProperties.java new file mode 100644 index 00000000..993ba024 --- /dev/null +++ b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/operational/OperationalProperties.java @@ -0,0 +1,69 @@ +/*- + * ============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.domain.models.operational; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import lombok.Builder; +import lombok.Data; + + +/** + * Operational Policy Properties. + */ + +@Data +@Builder +public class OperationalProperties implements Serializable { + private static final long serialVersionUID = 2455300363502597721L; + + /** + * Control Loop Name. + */ + private String id; + + /** + * Timeout in seconds. + */ + private int timeout = 30; + + /** + * Abatement. + */ + private boolean abatement = false; + + /** + * Trigger Operation. + */ + private String trigger; + + /** + * Operations. + */ + @Builder.Default + private List<Operation> operations = new ArrayList<>(); + + /** + * Controller Name. + */ + private String controllerName; +} diff --git a/policy-domains/src/main/java/org/onap/policy/drools/domain/models/operational/OperationalTarget.java b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/operational/OperationalTarget.java new file mode 100644 index 00000000..34f405ee --- /dev/null +++ b/policy-domains/src/main/java/org/onap/policy/drools/domain/models/operational/OperationalTarget.java @@ -0,0 +1,49 @@ +/*- + * ============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.domain.models.operational; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; +import lombok.Builder; +import lombok.Data; + + +/** + * Operational Target. + */ + +@Data +@Builder +public class OperationalTarget implements Serializable { + private static final long serialVersionUID = -3557887855401250181L; + + /** + * Target Type. + */ + private String targetType; + + /** + * Payload. + */ + @Builder.Default + private Map<String, String> entityIds = new HashMap<>(); +} diff --git a/policy-domains/src/main/resources/schemas/onap.policies.controlloop.Operational-1.0.0.schema.json b/policy-domains/src/main/resources/schemas/onap.policies.controlloop.Operational-1.0.0.schema.json new file mode 100644 index 00000000..820bdd70 --- /dev/null +++ b/policy-domains/src/main/resources/schemas/onap.policies.controlloop.Operational-1.0.0.schema.json @@ -0,0 +1,100 @@ +{ + "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": "^(.+)$" + }, + "controllerName": { + "$id": "#/properties/properties/properties/controllerName", + "type": "string", + "title": "Controller Name", + "examples": [ + "usecases" + ], + "pattern": "^(.+)$" + } + } + } + } +} diff --git a/policy-domains/src/main/resources/schemas/onap.policies.controlloop.operational.common.Drools-1.0.0.schema.json b/policy-domains/src/main/resources/schemas/onap.policies.controlloop.operational.common.Drools-1.0.0.schema.json new file mode 100644 index 00000000..a7dbf8b0 --- /dev/null +++ b/policy-domains/src/main/resources/schemas/onap.policies.controlloop.operational.common.Drools-1.0.0.schema.json @@ -0,0 +1,330 @@ +{ + "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" + ], + "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/policy-domains/src/main/resources/schemas/onap.policies.native.drools.Artifact-1.0.0.schema.json b/policy-domains/src/main/resources/schemas/onap.policies.native.drools.Artifact-1.0.0.schema.json new file mode 100644 index 00000000..add06c07 --- /dev/null +++ b/policy-domains/src/main/resources/schemas/onap.policies.native.drools.Artifact-1.0.0.schema.json @@ -0,0 +1,141 @@ +{ + "definitions": {}, + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "http://www.onap.org/policy/models/schemas/onap.policies.native.drools.Artifact.schema.json", + "type": "object", + "title": "Domain onap.policies.native.drools.Artifact 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.Artifact", + "examples": [ + "onap.policies.native.drools.Artifact" + ], + "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/policy-domains/src/main/resources/schemas/onap.policies.native.drools.Controller-1.0.0.schema.json b/policy-domains/src/main/resources/schemas/onap.policies.native.drools.Controller-1.0.0.schema.json new file mode 100644 index 00000000..41fbf4e9 --- /dev/null +++ b/policy-domains/src/main/resources/schemas/onap.policies.native.drools.Controller-1.0.0.schema.json @@ -0,0 +1,274 @@ +{ + "definitions": {}, + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "http://www.onap.org/policy/models/schemas/onap.policies.native.drools.Controller.schema.json", + "type": "object", + "title": "Domain onap.policies.native.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.Controller", + "examples": [ + "onap.policies.native.drools.Controller" + ], + "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 Sources", + "required": [ + "topicName", + "events" + ], + "properties": { + "topicName": { + "$id": "#/properties/properties/properties/sourceTopics/items/properties/topicName", + "type": "string", + "title": "Topic Name", + "examples": [ + "DCAE_TOPIC" + ], + "pattern": "^(.+)$" + }, + "events": { + "$id": "#/properties/properties/properties/sourceTopics/items/properties/events", + "type": "array", + "title": "Source Events", + "items": { + "$id": "#/properties/properties/properties/sourceTopics/items/properties/events/items", + "type": "object", + "title": "Event Information", + "required": [ + "eventClass" + ], + "properties": { + "eventClass": { + "$id": "#/properties/properties/properties/sourceTopics/items/properties/events/items/properties/eventClass", + "type": "string", + "title": "Event Class", + "examples": [ + "org.onap.policy.controlloop.CanonicalOnset" + ], + "pattern": "^(.+)$" + }, + "eventFilter": { + "$id": "#/properties/properties/properties/sourceTopics/items/properties/events/items/properties/eventFilter", + "type": "string", + "title": "Event Filter", + "examples": [ + "[?($.closedLoopEventStatus == 'ONSET')]" + ], + "pattern": "^(.+)$" + }, + "customSerialization": { + "$id": "#/properties/properties/properties/sourceTopics/items/properties/events/items/properties/customSerialization", + "type": "object", + "title": "Custom Serialization", + "required": [ + "customSerializerClass", + "jsonParser" + ], + "properties": { + "customSerializerClass": { + "$id": "#/properties/properties/properties/sourceTopics/items/properties/events/items/properties/customSerialization/properties/customSerializerClass", + "type": "string", + "title": "Custom Serializer Class for customized JSON parsing", + "examples": [ + "org.onap.policy.controlloop.util.Serialization" + ], + "pattern": "^(.+)$" + }, + "jsonParser": { + "$id": "#/properties/properties/properties/sourceTopics/items/properties/events/items/properties/customSerialization/properties/jsonParser", + "type": "string", + "title": "JSON Parser Static Field (currently only GSON is supported)", + "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", + "events" + ], + "properties": { + "topicName": { + "$id": "#/properties/properties/properties/sinkTopics/items/properties/topicName", + "type": "string", + "title": "Topic Name", + "default": "", + "examples": [ + "APPC-CL" + ], + "pattern": "^(.+)$" + }, + "events": { + "$id": "#/properties/properties/properties/sinkTopics/items/properties/events", + "type": "array", + "title": "Source Events", + "items": { + "$id": "#/properties/properties/properties/sinkTopics/items/properties/events/items", + "type": "object", + "title": "Event Information", + "required": [ + "eventClass" + ], + "properties": { + "eventClass": { + "$id": "#/properties/properties/properties/sinkTopics/items/properties/events/items/properties/eventClass", + "type": "string", + "title": "Event Class", + "examples": [ + "org.onap.policy.appc.Response" + ], + "pattern": "^(.+)$" + }, + "eventFilter": { + "$id": "#/properties/properties/properties/sinkTopics/items/properties/events/items/properties/eventFilter", + "type": "string", + "title": "Event Filter", + "examples": [ + "[?($.CommonHeader && $.Status)]" + ], + "pattern": "^(.+)$" + }, + "customSerialization": { + "$id": "#/properties/properties/properties/sinkTopics/items/properties/events/items/properties/customSerialization", + "type": "object", + "title": "Custom Serialization", + "required": [ + "customSerializerClass", + "jsonParser" + ], + "properties": { + "customSerializerClass": { + "$id": "#/properties/properties/properties/sinkTopics/items/properties/events/items/properties/customSerialization/properties/customSerializerClass", + "type": "string", + "title": "Custom Serializer Class for customized JSON parsing", + "examples": [ + "org.onap.policy.controlloop.util.Serialization" + ], + "pattern": "^(.+)$" + }, + "jsonParser": { + "$id": "#/properties/properties/properties/sinkTopics/items/properties/events/items/properties/customSerialization/properties/jsonParser", + "type": "string", + "title": "JSON Parser Static Field (currently only GSON is supported)", + "examples": [ + "gson" + ], + "pattern": "^(.+)$" + } + } + } + } + } + } + } + } + }, + "customConfig": { + "$id": "#/properties/properties/properties/customConfig", + "type": "object", + "title": "other Configuration", + "additionalProperties": { + "type": "string" + } + } + } + } + } +} diff --git a/policy-domains/src/test/java/org/onap/policy/drools/domain/models/DomainPolicyTypesTest.java b/policy-domains/src/test/java/org/onap/policy/drools/domain/models/DomainPolicyTypesTest.java new file mode 100644 index 00000000..6fdcc0a5 --- /dev/null +++ b/policy-domains/src/test/java/org/onap/policy/drools/domain/models/DomainPolicyTypesTest.java @@ -0,0 +1,244 @@ +/* + * ============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.artifact.NativeArtifactController; +import org.onap.policy.drools.domain.models.artifact.NativeArtifactPolicy; +import org.onap.policy.drools.domain.models.artifact.NativeArtifactProperties; +import org.onap.policy.drools.domain.models.artifact.NativeArtifactRulesArtifact; +import org.onap.policy.drools.domain.models.controller.ControllerPolicy; +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.Artifact"; + + // 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/tosca-policy-native-artifact-example.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/tosca-policy-native-controller-example.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)); + NativeArtifactPolicy domainDroolsPolicy = domainMaker.convertTo(toscaPolicy, NativeArtifactPolicy.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, NativeArtifactPolicy.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"); + + // @formatter:off + NativeArtifactPolicy domainDroolsPolicy2 = + NativeArtifactPolicy.builder().metadata(Metadata.builder().policyId("policy-id").build()) + .name("example") + .version("1.0.0").properties( + NativeArtifactProperties.builder().controller( + NativeArtifactController.builder().name("example").build()) + .rulesArtifact( + NativeArtifactRulesArtifact.builder().groupId("org.onap.policy.controlloop") + .artifactId("example").version("example").build()).build()) + .type("onap.policies.native.drools.Artifact") + .typeVersion("1.0.0").build(); + // @formatter:on + + 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.native.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).getEvents().get(0).getEventClass()); + assertEquals("[?($.closedLoopEventStatus == 'ONSET')]", + controllerPolicy.getProperties().getSourceTopics().get(0).getEvents().get(0).getEventFilter()); + assertEquals("org.onap.policy.controlloop.util.Serialization", + controllerPolicy.getProperties().getSourceTopics().get(0).getEvents().get(0) + .getCustomSerialization().getCustomSerializerClass()); + assertEquals("gson", + controllerPolicy.getProperties().getSourceTopics().get(0).getEvents().get(0) + .getCustomSerialization().getJsonParser()); + assertEquals("APPC-CL", controllerPolicy.getProperties().getSinkTopics().get(0).getTopicName()); + assertEquals("org.onap.policy.appc.Response", + controllerPolicy.getProperties().getSinkTopics().get(0).getEvents().get(0).getEventClass()); + assertEquals("[?($.CommonHeader && $.Status)]", + controllerPolicy.getProperties().getSinkTopics().get(0).getEvents().get(0).getEventFilter()); + assertEquals("org.onap.policy.appc.util.Serialization", + controllerPolicy.getProperties().getSinkTopics().get(0).getEvents().get(0) + .getCustomSerialization().getCustomSerializerClass()); + assertEquals("gsonPretty", + controllerPolicy.getProperties().getSinkTopics().get(0).getEvents().get(0) + .getCustomSerialization().getJsonParser()); + assertEquals("value1", controllerPolicy.getProperties().getCustomConfig().get("field1")); + } + + private String getJsonFromFile(String filePath) throws IOException { + return Files.readString(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/policy-domains/src/test/java/org/onap/policy/drools/domain/models/DroolsPolicyTest.java b/policy-domains/src/test/java/org/onap/policy/drools/domain/models/DroolsPolicyTest.java new file mode 100644 index 00000000..c6e8990e --- /dev/null +++ b/policy-domains/src/test/java/org/onap/policy/drools/domain/models/DroolsPolicyTest.java @@ -0,0 +1,70 @@ +/* + * ============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 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.io.Serializable; +import java.util.List; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.junit.Test; + +public class DroolsPolicyTest { + + @Data + @SuperBuilder + @NoArgsConstructor + public static class DerivedDomainPolicy extends DroolsPolicy implements Serializable { + private static final long serialVersionUID = -1027974819756498893L; + } + + @Test + public void testDerivedClass() { + /* validate model pojos */ + Validator validator = ValidatorBuilder.create() + .with(new SetterTester(), new GetterTester()).build(); + + validator.validate(PojoClassFactory.getPojoClass(DerivedDomainPolicy.class)); + } + + @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); + } +}
\ No newline at end of file diff --git a/policy-domains/src/test/java/org/onap/policy/drools/domain/models/artifact/ArtifactPolicyTest.java b/policy-domains/src/test/java/org/onap/policy/drools/domain/models/artifact/ArtifactPolicyTest.java new file mode 100644 index 00000000..b4c71f0d --- /dev/null +++ b/policy-domains/src/test/java/org/onap/policy/drools/domain/models/artifact/ArtifactPolicyTest.java @@ -0,0 +1,51 @@ +/* + * ============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.artifact; + +import static org.junit.Assert.assertNotNull; + +import org.junit.Test; +import org.onap.policy.drools.domain.models.Metadata; + +public class ArtifactPolicyTest { + + @Test + public void testBuildDomainPolicyNativeArtifact() { + /* manually create a native drools policy */ + + // @formatter:off + assertNotNull(NativeArtifactPolicy.builder() + .metadata(Metadata.builder().policyId("policy-id").build()) + .name("example") + .type("onap.policies.native.drools.Artifact") + .typeVersion("1.0.0") + .version("1.0.0") + .properties( + NativeArtifactProperties.builder().controller( + NativeArtifactController.builder().name("example").build()) + .rulesArtifact( + NativeArtifactRulesArtifact.builder().groupId("org.onap.policy.controlloop") + .artifactId("example").version("example").build()).build()) + .build()); + // @formatter:on + } + +}
\ No newline at end of file diff --git a/policy-domains/src/test/java/org/onap/policy/drools/domain/models/controller/ControllerPolicyTest.java b/policy-domains/src/test/java/org/onap/policy/drools/domain/models/controller/ControllerPolicyTest.java new file mode 100644 index 00000000..d24a8f70 --- /dev/null +++ b/policy-domains/src/test/java/org/onap/policy/drools/domain/models/controller/ControllerPolicyTest.java @@ -0,0 +1,48 @@ +/* + * ============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 static org.junit.Assert.assertNotNull; + +import java.util.ArrayList; +import org.junit.Test; +import org.onap.policy.drools.domain.models.Metadata; + +public class ControllerPolicyTest { + + @Test + public void testBuildDomainPolicyController() { + /* manually create a controller policy */ + + // @formatter:off + 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()); + // @formatter:on + } + +}
\ No newline at end of file diff --git a/policy-domains/src/test/java/org/onap/policy/drools/domain/models/legacy/LegacyPolicyTest.java b/policy-domains/src/test/java/org/onap/policy/drools/domain/models/legacy/LegacyPolicyTest.java new file mode 100644 index 00000000..7eb2532f --- /dev/null +++ b/policy-domains/src/test/java/org/onap/policy/drools/domain/models/legacy/LegacyPolicyTest.java @@ -0,0 +1,64 @@ +/*- + * ============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.domain.models.legacy; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import org.junit.Test; +import org.onap.policy.common.utils.coder.CoderException; +import org.onap.policy.common.utils.coder.StandardCoder; +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; + +public class LegacyPolicyTest { + // Policy Types + private static final String OPERATIONAL_LEGACY_POLICY_TYPE = "onap.policies.controlloop.Operational"; + + // Operational vCPE Legacy Policy + private static final String OP_POLICY_NAME_VCPE = "operational.restart"; + public static final String VCPE_OPERATIONAL_LEGACY_POLICY_JSON = "src/test/resources/tosca-legacy-vcpe.json"; + + @Test + public void testToscaLegacyOperationalPolicyType() throws IOException, CoderException { + String rawVcpeToscaPolicy = getJsonFromFile(VCPE_OPERATIONAL_LEGACY_POLICY_JSON); + + ToscaPolicyTypeIdentifier legacyType = + new ToscaPolicyTypeIdentifier(OPERATIONAL_LEGACY_POLICY_TYPE, "1.0.0"); + + DomainMaker domainMaker = new DomainMaker(); + assertTrue(domainMaker .isConformant(legacyType, rawVcpeToscaPolicy)); + LegacyPolicy legacyPolicy = domainMaker.convertTo(legacyType, rawVcpeToscaPolicy, LegacyPolicy.class); + + ToscaPolicy policy = new StandardCoder().decode(rawVcpeToscaPolicy, ToscaPolicy.class); + assertEquals(policy.getProperties().get("content").toString(), legacyPolicy.getProperties().getContent()); + assertEquals(policy.getProperties().get("controllerName").toString(), + legacyPolicy.getProperties().getControllerName()); + } + + private String getJsonFromFile(String filePath) throws IOException { + return Files.readString(Paths.get(filePath)); + } +}
\ No newline at end of file diff --git a/policy-domains/src/test/java/org/onap/policy/drools/domain/models/operational/OperationalPolicyTest.java b/policy-domains/src/test/java/org/onap/policy/drools/domain/models/operational/OperationalPolicyTest.java new file mode 100644 index 00000000..bf50a3df --- /dev/null +++ b/policy-domains/src/test/java/org/onap/policy/drools/domain/models/operational/OperationalPolicyTest.java @@ -0,0 +1,122 @@ +/*- + * ============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.domain.models.operational; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.List; +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.Metadata; +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 OperationalPolicyTest { + // Policy Types + private static final String OPERATIONAL_DROOLS_POLICY_TYPE = "onap.policies.controlloop.operational.common.Drools"; + + // 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 DomainMaker domainMaker; + private StandardCoder nonValCoder; + + @Before + public void setUp() { + domainMaker = new DomainMaker(); + nonValCoder = new StandardCoder(); + } + + @Test + public void testToscaCompliantOperationalPolicyType() throws CoderException { + String rawVcpeToscaPolicy = getExamplesPolicyString(VCPE_OPERATIONAL_DROOLS_POLICY_JSON, OP_POLICY_NAME_VCPE); + + // valid "known" policy type with implicit schema + ToscaPolicyTypeIdentifier operationalCompliantType = + new ToscaPolicyTypeIdentifier(OPERATIONAL_DROOLS_POLICY_TYPE, "1.0.0"); + assertTrue(domainMaker.isConformant(operationalCompliantType, rawVcpeToscaPolicy)); + assertNotNull(domainMaker.convertTo(operationalCompliantType, rawVcpeToscaPolicy, OperationalPolicy.class)); + } + + @Test + public void testOperationalCompliantModel() { + // @formatter:off + OperationalPolicy policy = + OperationalPolicy.builder() + .metadata(Metadata.builder().policyId(OP_POLICY_NAME_VCPE).build()) + .name(OP_POLICY_NAME_VCPE) + .type(OPERATIONAL_DROOLS_POLICY_TYPE) + .typeVersion("1.0.0") + .version("1.0.0") + .properties( + OperationalProperties.builder() + .id("ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e") + .abatement(true) + .trigger("unique-policy-id-1-restart") + .operations( + List.of(Operation.builder() + .id("unique-policy-id-1-restart") + .description("Restart the VM") + .timeout(60) + .retries(3) + .actorOperation(ActorOperation.builder() + .operation("Restart") + .actor("APPC") + .target(OperationalTarget.builder().targetType("VNF").build()) + .build()) + .build())) + .controllerName("usecases") + .build()) + .build(); + // @formatter:on + + assertNotNull(policy); + } + + private String getJsonFromFile(String filePath) throws IOException { + return Files.readString(Paths.get(filePath)); + } + + private String getJsonFromResource(String resourcePath) { + return ResourceUtils.getResourceAsString(resourcePath); + } + + 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/policy-domains/src/test/resources/tosca-legacy-vcpe.json b/policy-domains/src/test/resources/tosca-legacy-vcpe.json new file mode 100644 index 00000000..ab0e59d7 --- /dev/null +++ b/policy-domains/src/test/resources/tosca-legacy-vcpe.json @@ -0,0 +1,10 @@ +{ + "type": "onap.policies.controlloop.Operational", + "type_version": "1.0.0", + "properties": { + "content": "controlLoop%3A%0A%20%20version%3A%202.0.0%0A%20%20controlLoopName%3A%20ControlLoop-vCPE-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", + "controllerName": "usecases" + }, + "name": "operational.restart", + "version": "1.0.0" +} diff --git a/policy-domains/src/test/resources/tosca-policy-native-artifact-example.json b/policy-domains/src/test/resources/tosca-policy-native-artifact-example.json new file mode 100644 index 00000000..f521953d --- /dev/null +++ b/policy-domains/src/test/resources/tosca-policy-native-artifact-example.json @@ -0,0 +1,29 @@ +{ + "tosca_definitions_version": "tosca_simple_yaml_1_0_0", + "topology_template": { + "policies": [ + { + "example": { + "type": "onap.policies.native.drools.Artifact", + "type_version": "1.0.0", + "version": "1.0.0", + "name": "example", + "metadata": { + "policy-id": "example" + }, + "properties": { + "rulesArtifact": { + "groupId": "org.onap.policy.drools.test", + "artifactId": "lifecycle", + "version": "1.0.0" + }, + "controller": { + "name": "lifecycle", + "version": "1.0.0" + } + } + } + } + ] + } +}
\ No newline at end of file diff --git a/policy-domains/src/test/resources/tosca-policy-native-controller-example.json b/policy-domains/src/test/resources/tosca-policy-native-controller-example.json new file mode 100644 index 00000000..3d716845 --- /dev/null +++ b/policy-domains/src/test/resources/tosca-policy-native-controller-example.json @@ -0,0 +1,58 @@ +{ + "tosca_definitions_version": "tosca_simple_yaml_1_0_0", + "topology_template": { + "policies": [ + { + "example": { + "type": "onap.policies.native.drools.Controller", + "type_version": "1.0.0", + "version": "1.0.0", + "name": "example", + "metadata": { + "policy-id": "example" + }, + "properties": { + "controllerName": "lifecycle", + "sourceTopics": [ + { + "topicName": "DCAE_TOPIC", + "events": [ + { + "eventClass": "org.onap.policy.controlloop.CanonicalOnset", + "eventFilter": "[?($.closedLoopEventStatus == 'ONSET')]", + "customSerialization": { + "customSerializerClass": "org.onap.policy.controlloop.util.Serialization", + "jsonParser": "gson" + } + }, + { + "eventClass": "org.onap.policy.controlloop.CanonicalAbated", + "eventFilter": "[?($.closedLoopEventStatus == 'ABATED')]" + } + ] + } + ], + "sinkTopics": [ + { + "topicName": "APPC-CL", + "events": [ + { + "eventClass": "org.onap.policy.appc.Response", + "eventFilter": "[?($.CommonHeader && $.Status)]", + "customSerialization": { + "customSerializerClass": "org.onap.policy.appc.util.Serialization", + "jsonParser": "gsonPretty" + } + } + ] + } + ], + "customConfig": { + "field1" : "value1" + } + } + } + } + ] + } +}
\ No newline at end of file diff --git a/policy-domains/src/test/resources/tosca-policy-operational-restart.json b/policy-domains/src/test/resources/tosca-policy-operational-restart.json new file mode 100644 index 00000000..98e8bb8f --- /dev/null +++ b/policy-domains/src/test/resources/tosca-policy-operational-restart.json @@ -0,0 +1,9 @@ +{ + "type": "onap.policies.controlloop.Operational", + "type_version": "1.0.0", + "properties": { + "content": "controlLoop%3A%0A%20%20version%3A%202.0.0%0A%20%20controlLoopName%3A%20ControlLoop-vCPE-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" + }, + "name": "operational.restart", + "version": "1.0.0" +} |