diff options
63 files changed, 4707 insertions, 5 deletions
diff --git a/artifactbroker/forwarding/pom.xml b/artifactbroker/forwarding/pom.xml new file mode 100644 index 0000000..a56c313 --- /dev/null +++ b/artifactbroker/forwarding/pom.xml @@ -0,0 +1,51 @@ +<!-- + ============LICENSE_START======================================================= + Copyright (C) 2018 Ericsson. 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========================================================= +--> +<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.multicloud.framework</groupId> + <artifactId>multicloud-framework-artifactbroker</artifactId> + <version>1.3.0-SNAPSHOT</version> + </parent> + + <artifactId>multicloud-framework-artifactbroker-forwarding</artifactId> + + <name>${project.artifactId}</name> + <description>The module of Policy Distribution that forwards policies to other components.</description> + + <dependencies> + <dependency> + <groupId>org.onap.multicloud.framework</groupId> + <artifactId>multicloud-framework-artifactbroker-model</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>org.onap.sdc.sdc-distribution-client</groupId> + <artifactId>sdc-distribution-client</artifactId> + <version>1.3.0</version> + <exclusions> + <exclusion> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-log4j12</artifactId> + </exclusion> + </exclusions> + </dependency> + </dependencies> +</project> diff --git a/artifactbroker/forwarding/src/main/java/org/onap/policy/distribution/forwarding/ArtifactForwarder.java b/artifactbroker/forwarding/src/main/java/org/onap/policy/distribution/forwarding/ArtifactForwarder.java new file mode 100644 index 0000000..7e0d42b --- /dev/null +++ b/artifactbroker/forwarding/src/main/java/org/onap/policy/distribution/forwarding/ArtifactForwarder.java @@ -0,0 +1,54 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.forwarding; + +import java.util.Collection; +import org.onap.sdc.api.notification.IArtifactInfo; + +/** + * Forwards polices. + * + * <p>To create a Artifact forwarder a class implementing this interface must be created, along with a + * concrete sub class of ArtifactForwarderConfigurationParameterGroup to handle configuration + * parameters for the Artifact forwarder. + */ +public interface ArtifactForwarder { + + /** + * Configure the Artifact forwarder. + * + * <p>This method will be invoked immediately after instantiation in order for the Artifact forwarder + * to configure itself. + * + * @param parameterGroupName the name of the parameter group which contains the configuration + * for the Artifact forwarder + */ + void configure(String parameterGroupName); + + /** + * Forward the given policies. + * + * @param policies the policies to forward + * @throws ArtifactForwardingException if an error occurs when forwarding the given Artifact + */ + void forward(Collection<IArtifactInfo> artifacts) throws ArtifactForwardingException; + +} diff --git a/artifactbroker/forwarding/src/main/java/org/onap/policy/distribution/forwarding/ArtifactForwardingException.java b/artifactbroker/forwarding/src/main/java/org/onap/policy/distribution/forwarding/ArtifactForwardingException.java new file mode 100644 index 0000000..289e5b0 --- /dev/null +++ b/artifactbroker/forwarding/src/main/java/org/onap/policy/distribution/forwarding/ArtifactForwardingException.java @@ -0,0 +1,49 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.forwarding; + +/** + * An error has occured when forwarding a policy. + */ +public class ArtifactForwardingException extends Exception { + + private static final long serialVersionUID = 3866850096319435806L; + + /** + * Construct an instance with the given message. + * + * @param message the error message + */ + public ArtifactForwardingException(String message) { + super(message); + } + + /** + * Construct an instance with the given message and cause. + * + * @param message the error message + * @param cause the cause + */ + public ArtifactForwardingException(String message, Throwable cause) { + super(message, cause); + } + +} diff --git a/artifactbroker/forwarding/src/main/java/org/onap/policy/distribution/forwarding/parameters/ArtifactForwarderParameters.java b/artifactbroker/forwarding/src/main/java/org/onap/policy/distribution/forwarding/parameters/ArtifactForwarderParameters.java new file mode 100644 index 0000000..6221b6e --- /dev/null +++ b/artifactbroker/forwarding/src/main/java/org/onap/policy/distribution/forwarding/parameters/ArtifactForwarderParameters.java @@ -0,0 +1,126 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.forwarding.parameters; + +import org.onap.policy.common.logging.flexlogger.FlexLogger; +import org.onap.policy.common.logging.flexlogger.Logger; +import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.ValidationStatus; + +/** + * Class to hold all the Artifact forwarder parameters. + * + * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com) + */ +public class ArtifactForwarderParameters implements ParameterGroup { + + private static final Logger LOGGER = FlexLogger.getLogger(ArtifactForwarderParameters.class); + + private String forwarderType; + private String forwarderClassName; + private String forwarderConfigurationName; + + /** + * Constructor for instantiating ArtifactForwarderParameters. + * + * @param forwarderType the Artifact forwarder type + * @param forwarderClassName the Artifact forwarder class name + * @param forwarderConfigurationName the name of the configuration for the Artifact forwarder + */ + public ArtifactForwarderParameters(final String forwarderType, final String forwarderClassName, + final String forwarderConfigurationName) { + this.forwarderType = forwarderType; + this.forwarderClassName = forwarderClassName; + this.forwarderConfigurationName = forwarderConfigurationName; + } + + /** + * Return the forwarderType of this ArtifactForwarderParameters instance. + * + * @return the forwarderType + */ + public String getForwarderType() { + return forwarderType; + } + + /** + * Return the forwarderClassName of this ArtifactForwarderParameters instance. + * + * @return the forwarderClassName + */ + public String getForwarderClassName() { + return forwarderClassName; + } + + /** + * Return the name of the forwarder configuration of this ArtifactForwarderParameters instance. + * + * @return the the name of the forwarder configuration + */ + public String getForwarderConfigurationName() { + return forwarderConfigurationName; + } + + /** + * {@inheritDoc}. + */ + @Override + public String getName() { + return getForwarderType(); + } + + /** + * {@inheritDoc}. + */ + @Override + public void setName(final String name) { + this.forwarderType = name; + } + + /** + * {@inheritDoc}. + */ + @Override + public GroupValidationResult validate() { + final GroupValidationResult validationResult = new GroupValidationResult(this); + if (forwarderType == null || forwarderType.trim().length() == 0) { + validationResult.setResult("forwarderType", ValidationStatus.INVALID, "must be a non-blank string"); + } + if (forwarderClassName == null || forwarderClassName.trim().length() == 0) { + validationResult.setResult("forwarderClassName", ValidationStatus.INVALID, + "must be a non-blank string containing full class name of the forwarder"); + } else { + validateArtifactForwarderClass(validationResult); + } + return validationResult; + } + + private void validateArtifactForwarderClass(final GroupValidationResult validationResult) { + try { + Class.forName(forwarderClassName); + } catch (final ClassNotFoundException exp) { + LOGGER.trace("Artifact forwarder class not found in classpath", exp); + validationResult.setResult("forwarderClassName", ValidationStatus.INVALID, + "Artifact forwarder class not found in classpath"); + } + } +} diff --git a/artifactbroker/forwarding/src/test/java/org/onap/policy/distribution/forwarding/PolicyDecodingExceptionTest.java b/artifactbroker/forwarding/src/test/java/org/onap/policy/distribution/forwarding/PolicyDecodingExceptionTest.java new file mode 100644 index 0000000..6ba0ab0 --- /dev/null +++ b/artifactbroker/forwarding/src/test/java/org/onap/policy/distribution/forwarding/PolicyDecodingExceptionTest.java @@ -0,0 +1,44 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.forwarding; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class PolicyDecodingExceptionTest { + + @Test + public void testPolicyDecodingExceptionString() { + final ArtifactForwardingException policyDecodingException = new ArtifactForwardingException("error message"); + assertEquals("error message", policyDecodingException.getMessage()); + } + + @Test + public void testPolicyDecodingExceptionStringThrowable() { + final Exception cause = new IllegalArgumentException(); + final ArtifactForwardingException policyDecodingException = + new ArtifactForwardingException("error message", cause); + assertEquals("error message", policyDecodingException.getMessage()); + assertEquals(cause, policyDecodingException.getCause()); + } + +} diff --git a/artifactbroker/main/pom.xml b/artifactbroker/main/pom.xml index 36ae6d9..db1c855 100644 --- a/artifactbroker/main/pom.xml +++ b/artifactbroker/main/pom.xml @@ -19,7 +19,7 @@ --> <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"> <parent> - <groupId>org.onap.multicloud.framework.broker</groupId> + <groupId>org.onap.multicloud.framework</groupId> <artifactId>multicloud-framework-artifactbroker</artifactId> <version>1.3.0-SNAPSHOT</version> </parent> diff --git a/artifactbroker/model/pom.xml b/artifactbroker/model/pom.xml new file mode 100644 index 0000000..21f0ba4 --- /dev/null +++ b/artifactbroker/model/pom.xml @@ -0,0 +1,32 @@ +<!-- + ============LICENSE_START======================================================= + Copyright (C) 2018 Ericsson. 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========================================================= +--> +<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.multicloud.framework</groupId> + <artifactId>multicloud-framework-artifactbroker</artifactId> + <version>1.3.0-SNAPSHOT</version> + </parent> + + <artifactId>multicloud-framework-artifactbroker-model</artifactId> + <name>${project.artifactId}</name> + <description>[${project.parent.artifactId}] module provides the model for policy distribution</description> + +</project> diff --git a/artifactbroker/model/src/main/java/org/onap/policy/distribution/model/Csar.java b/artifactbroker/model/src/main/java/org/onap/policy/distribution/model/Csar.java new file mode 100644 index 0000000..df7eaf2 --- /dev/null +++ b/artifactbroker/model/src/main/java/org/onap/policy/distribution/model/Csar.java @@ -0,0 +1,43 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.model; + +/** + * Represents a CSAR file that a {@link Policy} can be decoded from. + */ +public class Csar implements PolicyInput { + + private String csarFilePath; + + public Csar(final String csarFilePath) { + this.csarFilePath = csarFilePath; + } + + /** + * Get the path to the CSAR file. + * + * @return the path of the CSAR file + */ + public String getCsarPath() { + return csarFilePath; + } + +} diff --git a/artifactbroker/model/src/main/java/org/onap/policy/distribution/model/OptimizationPolicy.java b/artifactbroker/model/src/main/java/org/onap/policy/distribution/model/OptimizationPolicy.java new file mode 100644 index 0000000..2ca3c94 --- /dev/null +++ b/artifactbroker/model/src/main/java/org/onap/policy/distribution/model/OptimizationPolicy.java @@ -0,0 +1,122 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.model; + +import java.util.Date; + +/** + * An optimization policy. + */ +public class OptimizationPolicy implements Policy { + + private static final String OPTIMIZATION = "Optimization"; + private String policyName; + private String policyDescription; + private String onapName; + private String configBody; + private String configBodyType; + private Date timetolive; + private String guard; + private String riskLevel; + private String riskType; + + @Override + public String getPolicyName() { + return policyName; + } + + @Override + public String getPolicyType() { + return OPTIMIZATION; + } + + public void setPolicyName(final String policyName) { + this.policyName = policyName; + } + + public String getPolicyDescription() { + return policyDescription; + } + + public void setPolicyDescription(final String policyDescription) { + this.policyDescription = policyDescription; + } + + public String getPolicyConfigType() { + return getPolicyType(); + } + + public String getOnapName() { + return onapName; + } + + public void setOnapName(final String onapName) { + this.onapName = onapName; + } + + public String getConfigBody() { + return configBody; + } + + public void setConfigBody(final String configBody) { + this.configBody = configBody; + } + + public String getConfigBodyType() { + return configBodyType; + } + + public void setConfigBodyType(final String configBodyType) { + this.configBodyType = configBodyType; + } + + public Date getTimetolive() { + return timetolive; + } + + public void setTimetolive(final Date timetolive) { + this.timetolive = timetolive; + } + + public String getGuard() { + return guard; + } + + public void setGuard(final String guard) { + this.guard = guard; + } + + public String getRiskLevel() { + return riskLevel; + } + + public void setRiskLevel(final String riskLevel) { + this.riskLevel = riskLevel; + } + + public String getRiskType() { + return riskType; + } + + public void setRiskType(final String riskType) { + this.riskType = riskType; + } +} diff --git a/artifactbroker/model/src/main/java/org/onap/policy/distribution/model/Policy.java b/artifactbroker/model/src/main/java/org/onap/policy/distribution/model/Policy.java new file mode 100644 index 0000000..02ac335 --- /dev/null +++ b/artifactbroker/model/src/main/java/org/onap/policy/distribution/model/Policy.java @@ -0,0 +1,42 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.model; + +/** + * A policy created . + */ +public interface Policy { + + /** + * Get the name of the policy. + * + * @return the name of the policy + */ + String getPolicyName(); + + /** + * Get the type of the policy. + * + * @return the type of the policy + */ + String getPolicyType(); + +} diff --git a/artifactbroker/model/src/main/java/org/onap/policy/distribution/model/PolicyAsString.java b/artifactbroker/model/src/main/java/org/onap/policy/distribution/model/PolicyAsString.java new file mode 100644 index 0000000..25bc412 --- /dev/null +++ b/artifactbroker/model/src/main/java/org/onap/policy/distribution/model/PolicyAsString.java @@ -0,0 +1,70 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.model; + +/** + * This class represents a policy . + * + * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com) + */ +public class PolicyAsString implements Policy { + private String policyName; + private String policyType; + private String policy; + + /** + * Constructor for creating instance of {@link PolicyAsString}. + * + * @param policyName the policy file name + * @param policyType the policy type + * @param policy the policy + */ + public PolicyAsString(final String policyName, final String policyType, final String policy) { + this.policyName = policyName; + this.policyType = policyType; + this.policy = policy; + } + + /** + * Returns the policy of this {@link PolicyAsString} instance. + * + * @return the policy + */ + public String getPolicy() { + return policy; + } + + /** + * {@inheritDoc}. + */ + @Override + public String getPolicyName() { + return policyName; + } + + /** + * {@inheritDoc}. + */ + @Override + public String getPolicyType() { + return policyType; + } +} diff --git a/artifactbroker/model/src/main/java/org/onap/policy/distribution/model/PolicyInput.java b/artifactbroker/model/src/main/java/org/onap/policy/distribution/model/PolicyInput.java new file mode 100644 index 0000000..1716503 --- /dev/null +++ b/artifactbroker/model/src/main/java/org/onap/policy/distribution/model/PolicyInput.java @@ -0,0 +1,28 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.model; + +/** + * An input that a {@link Policy} can be decoded from. + */ +public interface PolicyInput { + +} diff --git a/artifactbroker/model/src/main/java/org/onap/policy/distribution/model/Tosca.java b/artifactbroker/model/src/main/java/org/onap/policy/distribution/model/Tosca.java new file mode 100644 index 0000000..b7b14c4 --- /dev/null +++ b/artifactbroker/model/src/main/java/org/onap/policy/distribution/model/Tosca.java @@ -0,0 +1,43 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.model; + +/** + * Represents a TOSCA file that a {@link Policy} can be decoded from. + */ +public class Tosca implements PolicyInput { + + private String toscaFilePath; + + public Tosca(String toscaFilePath) { + this.toscaFilePath = toscaFilePath; + } + + /** + * Get the path to the TOSCA file. + * + * @return the path of the TOSCA file + */ + String getToscaFilePath() { + return toscaFilePath; + } + +} diff --git a/artifactbroker/model/src/test/java/org/onap/policy/distribution/model/TestModels.java b/artifactbroker/model/src/test/java/org/onap/policy/distribution/model/TestModels.java new file mode 100644 index 0000000..060ab36 --- /dev/null +++ b/artifactbroker/model/src/test/java/org/onap/policy/distribution/model/TestModels.java @@ -0,0 +1,43 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.model; + +import com.openpojo.reflection.filters.FilterPackageInfo; +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 org.junit.Test; + +/** + * Class to perform unit testing of all policy models. + * + * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com) + */ +public class TestModels { + + @Test + public void testAllModels() { + final Validator validator = ValidatorBuilder.create().with(new SetterTester()).with(new GetterTester()).build(); + validator.validate(Policy.class.getPackage().getName(), new FilterPackageInfo()); + } +} diff --git a/artifactbroker/packages/pom.xml b/artifactbroker/packages/pom.xml index 29548b1..c371cad 100644 --- a/artifactbroker/packages/pom.xml +++ b/artifactbroker/packages/pom.xml @@ -22,7 +22,7 @@ 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.multicloud.framework.broker</groupId> + <groupId>org.onap.multicloud.framework</groupId> <artifactId>multicloud-framework-artifactbroker</artifactId> <version>1.3.0-SNAPSHOT</version> </parent> @@ -33,11 +33,25 @@ <dependencies> <dependency> - <groupId>org.onap.multicloud.framework.broker</groupId> + <groupId>org.onap.multicloud.framework</groupId> <artifactId>multicloud-framework-artifactbroker-main</artifactId> <version>${project.version}</version> </dependency> - + <dependency> + <groupId>org.onap.multicloud.framework</groupId> + <artifactId>multicloud-framework-artifactbroker-reception</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>org.onap.multicloud.framework</groupId> + <artifactId>multicloud-framework-artifactbroker-forwarding</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>org.onap.multicloud.framework</groupId> + <artifactId>multicloud-framework-artifactbroker-reception-plugins</artifactId> + <version>${project.version}</version> + </dependency> </dependencies> <build> diff --git a/artifactbroker/plugins/pom.xml b/artifactbroker/plugins/pom.xml new file mode 100644 index 0000000..68d0fea --- /dev/null +++ b/artifactbroker/plugins/pom.xml @@ -0,0 +1,37 @@ +<!-- + ============LICENSE_START======================================================= + Copyright (C) 2018 Ericsson. 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========================================================= +--> +<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.multicloud.framework</groupId> + <artifactId>multicloud-framework-artifactbroker</artifactId> + <version>1.3.0-SNAPSHOT</version> + </parent> + + <artifactId>multicloud-framework-artifactbroker-plugins</artifactId> + + <name>${project.artifactId}</name> + <description>The module of Policy Distribution that holds plugins for custom policy reception and forwarding.</description> + <packaging>pom</packaging> + + <modules> + <module>reception-plugins</module> + </modules> +</project> diff --git a/artifactbroker/plugins/reception-plugins/pom.xml b/artifactbroker/plugins/reception-plugins/pom.xml new file mode 100644 index 0000000..d6a8ccc --- /dev/null +++ b/artifactbroker/plugins/reception-plugins/pom.xml @@ -0,0 +1,55 @@ +<!-- + ============LICENSE_START======================================================= + Copyright (C) 2018 Ericsson. 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========================================================= +--> +<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.multicloud.framework</groupId> + <artifactId>multicloud-framework-artifactbroker-plugins</artifactId> + <version>1.3.0-SNAPSHOT</version> + </parent> + + <artifactId>multicloud-framework-artifactbroker-reception-plugins</artifactId> + <name>${project.artifactId}</name> + <description>[${project.parent.artifactId}] module contains plugins for reception of policies.</description> + + <dependencies> + <dependency> + <groupId>org.onap.multicloud.framework</groupId> + <artifactId>multicloud-framework-artifactbroker-reception</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>org.onap.sdc.sdc-tosca</groupId> + <artifactId>sdc-tosca</artifactId> + <version>1.4.1</version> + </dependency> + <dependency> + <groupId>org.onap.sdc.sdc-distribution-client</groupId> + <artifactId>sdc-distribution-client</artifactId> + <version>1.3.0</version> + <exclusions> + <exclusion> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-log4j12</artifactId> + </exclusion> + </exclusions> + </dependency> + </dependencies> +</project> diff --git a/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/ComponentDoneStatusMessage.java b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/ComponentDoneStatusMessage.java new file mode 100644 index 0000000..581681b --- /dev/null +++ b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/ComponentDoneStatusMessage.java @@ -0,0 +1,74 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.reception.handling.sdc; + +import org.onap.sdc.api.consumer.IComponentDoneStatusMessage; +import org.onap.sdc.utils.DistributionStatusEnum; + +/** + * This class represents the component done status of the distribution service. + * + * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com) + */ +public class ComponentDoneStatusMessage implements IComponentDoneStatusMessage { + + private String consumerId; + private String distributionId; + private DistributionStatusEnum distributionStatus; + private long timestamp; + + /** + * Constructor for instantiating {@link ComponentDoneStatusMessage} class. + * + * @param messageBuilder the message builder + */ + public ComponentDoneStatusMessage(final ComponentDoneStatusMessageBuilder messageBuilder) { + this.consumerId = messageBuilder.getConsumerId(); + this.distributionId = messageBuilder.getDistributionId(); + this.distributionStatus = messageBuilder.getDistributionStatus(); + this.timestamp = messageBuilder.getTimestamp(); + } + + @Override + public DistributionStatusEnum getStatus() { + return distributionStatus; + } + + @Override + public String getDistributionID() { + return distributionId; + } + + @Override + public long getTimestamp() { + return timestamp; + } + + @Override + public String getConsumerID() { + return consumerId; + } + + @Override + public String getComponentName() { + return "POLICY"; + } +} diff --git a/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/ComponentDoneStatusMessageBuilder.java b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/ComponentDoneStatusMessageBuilder.java new file mode 100644 index 0000000..567ae8d --- /dev/null +++ b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/ComponentDoneStatusMessageBuilder.java @@ -0,0 +1,112 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.reception.handling.sdc; + +import org.onap.sdc.utils.DistributionStatusEnum; + +/** + * This class builds an instance of {@link ComponentDoneStatusMessage} class. + * + * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com) + */ +public class ComponentDoneStatusMessageBuilder { + + private String consumerId; + private String distributionId; + private DistributionStatusEnum distributionStatus; + private long timestamp; + + /** + * Returns consumer id of this {@link ComponentDoneStatusMessageBuilder} instance. + * + * @return the consumerId + */ + public String getConsumerId() { + return consumerId; + } + + /** + * Returns distribution id of this {@link ComponentDoneStatusMessageBuilder} instance. + * + * @return the distributionId + */ + public String getDistributionId() { + return distributionId; + } + + /** + * Returns distribution status of this {@link ComponentDoneStatusMessageBuilder} instance. + * + * @return the distributionStatus + */ + public DistributionStatusEnum getDistributionStatus() { + return distributionStatus; + } + + /** + * Returns time of this {@link ComponentDoneStatusMessageBuilder} instance. + * + * @return the timestamp + */ + public long getTimestamp() { + return timestamp; + } + + /** + * Set consumer id url to this {@link ComponentDoneStatusMessageBuilder} instance. + * + * @param consumerId the consumerId to set + */ + public ComponentDoneStatusMessageBuilder setConsumerId(final String consumerId) { + this.consumerId = consumerId; + return this; + } + + /** + * Set distribution id to this {@link ComponentDoneStatusMessageBuilder} instance. + * + * @param distributionId the distributionId to set + */ + public ComponentDoneStatusMessageBuilder setDistributionId(final String distributionId) { + this.distributionId = distributionId; + return this; + } + + /** + * Set distribution status to this {@link ComponentDoneStatusMessageBuilder} instance. + * + * @param distributionStatus the distributionStatus to set + */ + public ComponentDoneStatusMessageBuilder setDistributionStatus(final DistributionStatusEnum distributionStatus) { + this.distributionStatus = distributionStatus; + return this; + } + + /** + * Set time to this {@link ComponentDoneStatusMessageBuilder} instance. + * + * @param timestamp the timestamp to set + */ + public ComponentDoneStatusMessageBuilder setTimestamp(final long timestamp) { + this.timestamp = timestamp; + return this; + } +} diff --git a/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/DistributionStatusMessage.java b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/DistributionStatusMessage.java new file mode 100644 index 0000000..436c061 --- /dev/null +++ b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/DistributionStatusMessage.java @@ -0,0 +1,77 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.reception.handling.sdc; + +import org.onap.sdc.api.consumer.IDistributionStatusMessage; +import org.onap.sdc.utils.DistributionStatusEnum; + +/** + * This class represents the distribution status of the distribution service. + * + * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com) + */ +public class DistributionStatusMessage implements IDistributionStatusMessage { + + private String artifactUrl; + private String consumerId; + private String distributionId; + private DistributionStatusEnum distributionStatus; + private long timestamp; + + /** + * Constructor for instantiating {@link DistributionStatusMessage} class. + * + * @param messageBuilder the message builder + */ + public DistributionStatusMessage(final DistributionStatusMessageBuilder messageBuilder) { + this.artifactUrl = messageBuilder.getArtifactUrl(); + this.consumerId = messageBuilder.getConsumerId(); + this.distributionId = messageBuilder.getDistributionId(); + this.distributionStatus = messageBuilder.getDistributionStatus(); + this.timestamp = messageBuilder.getTimestamp(); + } + + @Override + public String getArtifactURL() { + return artifactUrl; + } + + @Override + public String getConsumerID() { + return consumerId; + } + + @Override + public String getDistributionID() { + return distributionId; + } + + @Override + public DistributionStatusEnum getStatus() { + return distributionStatus; + } + + @Override + public long getTimestamp() { + return timestamp; + } + +} diff --git a/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/DistributionStatusMessageBuilder.java b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/DistributionStatusMessageBuilder.java new file mode 100644 index 0000000..b83a768 --- /dev/null +++ b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/DistributionStatusMessageBuilder.java @@ -0,0 +1,132 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.reception.handling.sdc; + +import org.onap.sdc.utils.DistributionStatusEnum; + +/** + * This class builds an instance of {@link DistributionStatusMessage} class. + * + * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com) + */ +public class DistributionStatusMessageBuilder { + + private String artifactUrl; + private String consumerId; + private String distributionId; + private DistributionStatusEnum distributionStatus; + private long timestamp; + + /** + * Returns artifact url of this {@link DistributionStatusMessageBuilder} instance. + * + * @return the artifactUrl + */ + public String getArtifactUrl() { + return artifactUrl; + } + + /** + * Returns consumer id of this {@link DistributionStatusMessageBuilder} instance. + * + * @return the consumerId + */ + public String getConsumerId() { + return consumerId; + } + + /** + * Returns distribution id of this {@link DistributionStatusMessageBuilder} instance. + * + * @return the distributionId + */ + public String getDistributionId() { + return distributionId; + } + + /** + * Returns distribution status of this {@link DistributionStatusMessageBuilder} instance. + * + * @return the distributionStatus + */ + public DistributionStatusEnum getDistributionStatus() { + return distributionStatus; + } + + /** + * Returns time of this {@link DistributionStatusMessageBuilder} instance. + * + * @return the timestamp + */ + public long getTimestamp() { + return timestamp; + } + + /** + * Set artifact url to this {@link DistributionStatusMessageBuilder} instance. + * + * @param artifactUrl the artifactUrl to set + */ + public DistributionStatusMessageBuilder setArtifactUrl(final String artifactUrl) { + this.artifactUrl = artifactUrl; + return this; + } + + /** + * Set consumer id url to this {@link DistributionStatusMessageBuilder} instance. + * + * @param consumerId the consumerId to set + */ + public DistributionStatusMessageBuilder setConsumerId(final String consumerId) { + this.consumerId = consumerId; + return this; + } + + /** + * Set distribution id to this {@link DistributionStatusMessageBuilder} instance. + * + * @param distributionId the distributionId to set + */ + public DistributionStatusMessageBuilder setDistributionId(final String distributionId) { + this.distributionId = distributionId; + return this; + } + + /** + * Set distribution status to this {@link DistributionStatusMessageBuilder} instance. + * + * @param distributionStatus the distributionStatus to set + */ + public DistributionStatusMessageBuilder setDistributionStatus(final DistributionStatusEnum distributionStatus) { + this.distributionStatus = distributionStatus; + return this; + } + + /** + * Set time to this {@link DistributionStatusMessageBuilder} instance. + * + * @param timestamp the timestamp to set + */ + public DistributionStatusMessageBuilder setTimestamp(final long timestamp) { + this.timestamp = timestamp; + return this; + } +} diff --git a/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandler.java b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandler.java new file mode 100644 index 0000000..941cdd6 --- /dev/null +++ b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandler.java @@ -0,0 +1,120 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Intel Corp. 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.distribution.reception.handling.sdc; + +import static java.nio.file.StandardWatchEventKinds.ENTRY_CREATE; + +import java.io.File; +import java.io.IOException; +import java.nio.file.FileSystems; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.WatchEvent; +import java.nio.file.WatchKey; +import java.nio.file.WatchService; + +import org.onap.policy.common.logging.flexlogger.FlexLogger; +import org.onap.policy.common.logging.flexlogger.Logger; + +import org.onap.policy.common.parameters.ParameterService; +import org.onap.policy.distribution.model.Csar; +import org.onap.policy.distribution.reception.decoding.PolicyDecodingException; +import org.onap.policy.distribution.reception.handling.AbstractReceptionHandler; + +/** + * Handles reception of inputs from File System which can be used to decode policies. + */ +public class FileSystemReceptionHandler extends AbstractReceptionHandler { + private boolean running = false; + private static final Logger LOGGER = FlexLogger.getLogger(FileSystemReceptionHandler.class); + + @Override + protected void initializeReception(final String parameterGroupName) { + LOGGER.debug("FileSystemReceptionHandler init..."); + try { + final FileSystemReceptionHandlerConfigurationParameterGroup handlerParameters = + ParameterService.get(parameterGroupName); + main(handlerParameters.getWatchPath()); + } catch (final Exception ex) { + LOGGER.error(ex); + } + running = false; + LOGGER.debug("FileSystemReceptionHandler main loop exited..."); + } + + @Override + public void destroy() { + // Tear down subscription etc + running = false; + } + + public boolean isRunning() { + return running; + } + + /** + * Main entry point. + * + * @param watchPath Path to watch + */ + public void main(String watchPath) throws IOException { + try (final WatchService watcher = FileSystems.getDefault().newWatchService()) { + final Path dir = Paths.get(watchPath); + dir.register(watcher, ENTRY_CREATE); + LOGGER.debug("Watch Service registered for dir: " + dir.getFileName()); + startMainLoop(watcher, dir); + } catch (final InterruptedException ex) { + LOGGER.debug(ex); + Thread.currentThread().interrupt(); + } + } + + @SuppressWarnings("unchecked") + protected void startMainLoop(WatchService watcher, Path dir) throws InterruptedException { + WatchKey key; + running = true; + while (running) { + key = watcher.take(); + + for (final WatchEvent<?> event : key.pollEvents()) { + final WatchEvent<Path> ev = (WatchEvent<Path>) event; + final Path fileName = ev.context(); + LOGGER.debug("new CSAR found: " + fileName); + createPolicyInputAndCallHandler(dir.toString() + File.separator + fileName.toString()); + LOGGER.debug("CSAR complete: " + fileName); + } + final boolean valid = key.reset(); + if (!valid) { + LOGGER.error("Watch key no longer valid!"); + break; + } + } + } + + protected void createPolicyInputAndCallHandler(final String fileName) { + try { + final Csar csarObject = new Csar(fileName); + inputReceived(csarObject); + } catch (final PolicyDecodingException ex) { + LOGGER.error(ex); + } + } +} diff --git a/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandlerConfigurationParameterBuilder.java b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandlerConfigurationParameterBuilder.java new file mode 100644 index 0000000..37a1698 --- /dev/null +++ b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandlerConfigurationParameterBuilder.java @@ -0,0 +1,52 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Intel Corp. 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.distribution.reception.handling.sdc; + +/** + * This class builds an instance of {@link FileSystemReceptionHandlerConfigurationParameterGroup} class. + * + */ +public class FileSystemReceptionHandlerConfigurationParameterBuilder { + + private String watchPath; + + /** + * Set watchPath to this {@link FileSystemReceptionHandlerConfigurationParameterBuilder} instance. + * + * @param watchPath the watchPath + */ + public FileSystemReceptionHandlerConfigurationParameterBuilder setWatchPath(final String watchPath) { + this.watchPath = watchPath; + return this; + } + + + /** + * Returns the watchPath of this {@link FileSystemReceptionHandlerConfigurationParameterBuilder} instance. + * + * @return the watchPath + */ + public String getWatchPath() { + return watchPath; + } +} + + diff --git a/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandlerConfigurationParameterGroup.java b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandlerConfigurationParameterGroup.java new file mode 100644 index 0000000..457cd5e --- /dev/null +++ b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandlerConfigurationParameterGroup.java @@ -0,0 +1,84 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Intel. 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.distribution.reception.handling.sdc; + +import java.io.File; + +import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.common.parameters.ValidationStatus; +import org.onap.policy.distribution.reception.parameters.ReceptionHandlerConfigurationParameterGroup; + +/** + * This class handles reading, parsing and validating of the Policy SDC Service Distribution parameters from Json + * format, which strictly adheres to the interface:IConfiguration, defined by SDC SDK. + */ +public class FileSystemReceptionHandlerConfigurationParameterGroup extends ReceptionHandlerConfigurationParameterGroup { + + private String watchPath; + + /** + * The constructor for instantiating {@link FileSystemReceptionHandlerConfigurationParameterGroup} class. + * + * @param builder the SDC configuration builder + */ + public FileSystemReceptionHandlerConfigurationParameterGroup( + final FileSystemReceptionHandlerConfigurationParameterBuilder builder) { + watchPath = builder.getWatchPath(); + } + + public String getWatchPath() { + return watchPath; + } + + /** + * {@inheritDoc}. + */ + @Override + public GroupValidationResult validate() { + final GroupValidationResult validationResult = new GroupValidationResult(this); + validatePathElement(validationResult, watchPath, "watchPath"); + return validationResult; + } + + + /** + * Validate the string element. + * + * @param validationResult the result object + * @param element the element to validate + * @param elementName the element name for error message + */ + private void validatePathElement(final GroupValidationResult validationResult, final String element, + final String elementName) { + boolean valid = false; + if (element != null) { + File file = new File(element); + if (file.exists() && file.isDirectory()) { + valid = true; + } + } + if (!valid) { + validationResult.setResult(elementName, ValidationStatus.INVALID, + elementName + " must be a valid directory"); + } + } +} + diff --git a/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcClientHandler.java b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcClientHandler.java new file mode 100644 index 0000000..f69fb15 --- /dev/null +++ b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcClientHandler.java @@ -0,0 +1,76 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.reception.handling.sdc; + +import java.util.Timer; +import java.util.TimerTask; + +/** + * This class implements TimerTask for calling life cycle methods of SdcClient iteratively after specified interval + * until the operation is successful. + * + * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com) + */ +public class SdcClientHandler extends TimerTask { + + private SdcReceptionHandler sdcReceptionHandler; + private SdcClientOperationType operationType; + private Timer timer; + + public enum SdcClientOperationType { + START, STOP + } + + /** + * Constructs an instance of {@link SdcClientHandler} class. + * + * @param sdcReceptionHandler the sdcReceptionHandler + */ + public SdcClientHandler(final SdcReceptionHandler sdcReceptionHandler, final SdcClientOperationType operationType, + final long retryDelay) { + this.sdcReceptionHandler = sdcReceptionHandler; + this.operationType = operationType; + timer = new Timer(false); + timer.scheduleAtFixedRate(this, 0, retryDelay * 1000L); + } + + /** + * {@inheritDoc}. + */ + @Override + public void run() { + if (SdcClientOperationType.START.equals(operationType)) { + sdcReceptionHandler.initializeSdcClient(); + sdcReceptionHandler.startSdcClient(); + } else { + sdcReceptionHandler.stopSdcClient(); + } + } + + /** + * {@inheritDoc}. + */ + @Override + public boolean cancel() { + timer.cancel(); + return true; + } +} diff --git a/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcConfiguration.java b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcConfiguration.java new file mode 100644 index 0000000..04c978b --- /dev/null +++ b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcConfiguration.java @@ -0,0 +1,117 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Intel. 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.distribution.reception.handling.sdc; + +import java.util.List; +import org.onap.sdc.api.consumer.IConfiguration; + +/** + * This class represents the configurations needed for SDC Client. + * + */ +public class SdcConfiguration implements IConfiguration { + + private SdcReceptionHandlerConfigurationParameterGroup configParameters = null; + + /** + * Constructor for instantiating {@link SdcConfiguration}. + * + * @param configParameters the SDC Client configuration parameters + */ + public SdcConfiguration(final SdcReceptionHandlerConfigurationParameterGroup configParameters) { + this.configParameters = configParameters; + } + + @Override + public String getAsdcAddress() { + return configParameters.getAsdcAddress(); + } + + @Override + public List<String> getMsgBusAddress() { + return configParameters.getMessageBusAddress(); + } + + @Override + public String getUser() { + return configParameters.getUser(); + } + + @Override + public String getPassword() { + return configParameters.getPassword(); + } + + @Override + public int getPollingInterval() { + return configParameters.getPollingInterval(); + } + + @Override + public int getPollingTimeout() { + return configParameters.getPollingTimeout(); + } + + @Override + public List<String> getRelevantArtifactTypes() { + return configParameters.getArtifactTypes(); + } + + @Override + public String getConsumerGroup() { + return configParameters.getConsumerGroup(); + } + + @Override + public String getEnvironmentName() { + return configParameters.getEnvironmentName(); + } + + @Override + public String getConsumerID() { + return configParameters.getConsumerId(); + } + + @Override + public String getKeyStorePassword() { + return configParameters.getKeyStorePassword(); + } + + @Override + public String getKeyStorePath() { + return configParameters.getKeyStorePath(); + } + + @Override + public boolean activateServerTLSAuth() { + return configParameters.isActiveServerTlsAuth(); + } + + @Override + public boolean isFilterInEmptyResources() { + return configParameters.isFilterInEmptyResources(); + } + + @Override + public Boolean isUseHttpsWithDmaap() { + return configParameters.isUseHttpsWithDmaap(); + } +} diff --git a/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcReceptionHandler.java b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcReceptionHandler.java new file mode 100644 index 0000000..0d100f8 --- /dev/null +++ b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcReceptionHandler.java @@ -0,0 +1,382 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.reception.handling.sdc; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + +import org.onap.policy.common.logging.flexlogger.FlexLogger; +import org.onap.policy.common.logging.flexlogger.Logger; +import org.onap.policy.common.parameters.ParameterService; +import org.onap.policy.distribution.model.Csar; +import org.onap.policy.distribution.reception.decoding.PolicyDecodingException; +import org.onap.policy.distribution.reception.handling.AbstractReceptionHandler; +import org.onap.policy.distribution.reception.handling.sdc.SdcClientHandler.SdcClientOperationType; +import org.onap.policy.distribution.reception.handling.sdc.exceptions.ArtifactDownloadException; +import org.onap.policy.distribution.reception.statistics.DistributionStatisticsManager; +import org.onap.sdc.api.IDistributionClient; +import org.onap.sdc.api.consumer.IComponentDoneStatusMessage; +import org.onap.sdc.api.consumer.IDistributionStatusMessage; +import org.onap.sdc.api.consumer.INotificationCallback; +import org.onap.sdc.api.notification.IArtifactInfo; +import org.onap.sdc.api.notification.INotificationData; +import org.onap.sdc.api.results.IDistributionClientDownloadResult; +import org.onap.sdc.api.results.IDistributionClientResult; +import org.onap.sdc.impl.DistributionClientFactory; +import org.onap.sdc.utils.DistributionActionResultEnum; +import org.onap.sdc.utils.DistributionStatusEnum; + +/** + * Handles reception of inputs from ONAP Service Design and Creation (SDC) from which policies may be decoded. + */ +public class SdcReceptionHandler extends AbstractReceptionHandler implements INotificationCallback { + + private static final Logger LOGGER = FlexLogger.getLogger(SdcReceptionHandler.class); + private static final String SECONDS = "Seconds"; + + private SdcReceptionHandlerStatus sdcReceptionHandlerStatus = SdcReceptionHandlerStatus.STOPPED; + private IDistributionClient distributionClient; + private SdcConfiguration sdcConfig; + private volatile int nbOfNotificationsOngoing = 0; + private int retryDelay; + private SdcClientHandler sdcClientHandler; + + private enum DistributionStatusType { + DOWNLOAD, DEPLOY + } + + @Override + protected void initializeReception(final String parameterGroupName) { + final SdcReceptionHandlerConfigurationParameterGroup handlerParameters = + ParameterService.get(parameterGroupName); + retryDelay = handlerParameters.getRetryDelay() < 30 ? 30 : handlerParameters.getRetryDelay(); + sdcConfig = new SdcConfiguration(handlerParameters); + distributionClient = createSdcDistributionClient(); + sdcClientHandler = new SdcClientHandler(this, SdcClientOperationType.START, retryDelay); + } + + @Override + public void destroy() { + if (distributionClient != null) { + sdcClientHandler = new SdcClientHandler(this, SdcClientOperationType.STOP, retryDelay); + } + } + + @Override + public void activateCallback(final INotificationData notificationData) { + LOGGER.debug("Receieved the notification from SDC with ID: " + notificationData.getDistributionID()); + changeSdcReceptionHandlerStatus(SdcReceptionHandlerStatus.BUSY); + processCsarServiceArtifacts(notificationData); + changeSdcReceptionHandlerStatus(SdcReceptionHandlerStatus.IDLE); + LOGGER.debug("Processed the notification from SDC with ID: " + notificationData.getDistributionID()); + } + + /** + * Method to change the status of this reception handler instance. + * + * @param newStatus the new status + */ + private final synchronized void changeSdcReceptionHandlerStatus(final SdcReceptionHandlerStatus newStatus) { + switch (newStatus) { + case INIT: + case STOPPED: + sdcReceptionHandlerStatus = newStatus; + break; + case IDLE: + handleIdleStatusChange(newStatus); + break; + case BUSY: + ++nbOfNotificationsOngoing; + sdcReceptionHandlerStatus = newStatus; + break; + default: + break; + } + } + + /** + * Creates an instance of {@link IDistributionClient} from {@link DistributionClientFactory}. + * + * @return the {@link IDistributionClient} instance + */ + protected IDistributionClient createSdcDistributionClient() { + return DistributionClientFactory.createDistributionClient(); + } + + /** + * Method to initialize the SDC client. + * + */ + protected void initializeSdcClient() { + + LOGGER.debug("Initializing the SDC Client..."); + if (sdcReceptionHandlerStatus != SdcReceptionHandlerStatus.STOPPED) { + LOGGER.error("The SDC Client is already initialized"); + return; + } + final IDistributionClientResult clientResult = distributionClient.init(sdcConfig, this); + if (!clientResult.getDistributionActionResult().equals(DistributionActionResultEnum.SUCCESS)) { + LOGGER.error("SDC client initialization failed with reason:" + clientResult.getDistributionMessageResult() + + ". Initialization will be retried after " + retryDelay + SECONDS); + return; + } + LOGGER.debug("SDC Client is initialized successfully"); + changeSdcReceptionHandlerStatus(SdcReceptionHandlerStatus.INIT); + } + + /** + * Method to start the SDC client. + * + */ + protected void startSdcClient() { + + LOGGER.debug("Going to start the SDC Client..."); + if (sdcReceptionHandlerStatus != SdcReceptionHandlerStatus.INIT) { + LOGGER.error("The SDC Client is not initialized"); + return; + } + final IDistributionClientResult clientResult = distributionClient.start(); + if (!clientResult.getDistributionActionResult().equals(DistributionActionResultEnum.SUCCESS)) { + LOGGER.error("SDC client start failed with reason:" + clientResult.getDistributionMessageResult() + + ". Start will be retried after " + retryDelay + SECONDS); + return; + } + LOGGER.debug("SDC Client is started successfully"); + changeSdcReceptionHandlerStatus(SdcReceptionHandlerStatus.IDLE); + sdcClientHandler.cancel(); + } + + /** + * Method to stop the SDC client. + * + */ + protected void stopSdcClient() { + LOGGER.debug("Going to stop the SDC Client..."); + final IDistributionClientResult clientResult = distributionClient.stop(); + if (!clientResult.getDistributionActionResult().equals(DistributionActionResultEnum.SUCCESS)) { + LOGGER.error("SDC client stop failed with reason:" + clientResult.getDistributionMessageResult() + + ". Stop will be retried after " + retryDelay + SECONDS); + return; + } + LOGGER.debug("SDC Client is stopped successfully"); + changeSdcReceptionHandlerStatus(SdcReceptionHandlerStatus.STOPPED); + sdcClientHandler.cancel(); + } + + /** + * Method to process csar service artifacts from incoming SDC notification. + * + * @param notificationData the notification from SDC + */ + public void processCsarServiceArtifacts(final INotificationData notificationData) { + boolean artifactsProcessedSuccessfully = true; + DistributionStatisticsManager.updateTotalDistributionCount(); + for (final IArtifactInfo artifact : notificationData.getServiceArtifacts()) { + try { + final IDistributionClientDownloadResult resultArtifact = + downloadTheArtifact(artifact, notificationData); + final Path filePath = writeArtifactToFile(artifact, resultArtifact); + final Csar csarObject = new Csar(filePath.toString()); + inputReceived(csarObject); + sendDistributionStatus(DistributionStatusType.DEPLOY, artifact.getArtifactURL(), + notificationData.getDistributionID(), DistributionStatusEnum.DEPLOY_OK, null); + deleteArtifactFile(filePath); + } catch (final ArtifactDownloadException | PolicyDecodingException exp) { + LOGGER.error("Failed to process csar service artifacts ", exp); + artifactsProcessedSuccessfully = false; + sendDistributionStatus(DistributionStatusType.DEPLOY, artifact.getArtifactURL(), + notificationData.getDistributionID(), DistributionStatusEnum.DEPLOY_ERROR, + "Failed to deploy the artifact due to: " + exp.getMessage()); + } + } + if (artifactsProcessedSuccessfully) { + DistributionStatisticsManager.updateDistributionSuccessCount(); + sendComponentDoneStatus(notificationData.getDistributionID(), DistributionStatusEnum.COMPONENT_DONE_OK, + null); + } else { + DistributionStatisticsManager.updateDistributionFailureCount(); + sendComponentDoneStatus(notificationData.getDistributionID(), DistributionStatusEnum.COMPONENT_DONE_ERROR, + "Failed to process the artifact"); + } + } + + /** + * Method to download the distribution artifact. + * + * @param artifact the artifact + * @return the download result + * @throws ArtifactDownloadException if download fails + */ + private IDistributionClientDownloadResult downloadTheArtifact(final IArtifactInfo artifact, + final INotificationData notificationData) throws ArtifactDownloadException { + + DistributionStatisticsManager.updateTotalDownloadCount(); + final IDistributionClientDownloadResult downloadResult = distributionClient.download(artifact); + if (!downloadResult.getDistributionActionResult().equals(DistributionActionResultEnum.SUCCESS)) { + DistributionStatisticsManager.updateDownloadFailureCount(); + final String message = "Failed to download artifact with name: " + artifact.getArtifactName() + " due to: " + + downloadResult.getDistributionMessageResult(); + LOGGER.error(message); + sendDistributionStatus(DistributionStatusType.DOWNLOAD, artifact.getArtifactURL(), + notificationData.getDistributionID(), DistributionStatusEnum.DOWNLOAD_ERROR, message); + throw new ArtifactDownloadException(message); + } + DistributionStatisticsManager.updateDownloadSuccessCount(); + sendDistributionStatus(DistributionStatusType.DOWNLOAD, artifact.getArtifactURL(), + notificationData.getDistributionID(), DistributionStatusEnum.DOWNLOAD_OK, null); + return downloadResult; + } + + /** + * Method to write the downloaded distribution artifact to local file system. + * + * @param artifact the notification artifact + * @param resultArtifact the download result artifact + * @return the local path of written file + * @throws ArtifactDownloadException if error occurs while writing the artifact + */ + private Path writeArtifactToFile(final IArtifactInfo artifact, + final IDistributionClientDownloadResult resultArtifact) throws ArtifactDownloadException { + try { + final byte[] payloadBytes = resultArtifact.getArtifactPayload(); + final File tempArtifactFile = File.createTempFile(artifact.getArtifactName(), ".csar"); + try (FileOutputStream fileOutputStream = new FileOutputStream(tempArtifactFile)) { + fileOutputStream.write(payloadBytes, 0, payloadBytes.length); + return tempArtifactFile.toPath(); + } + } catch (final Exception exp) { + final String message = "Failed to write artifact to local repository"; + LOGGER.error(message, exp); + throw new ArtifactDownloadException(message, exp); + } + } + + /** + * Method to delete the downloaded notification artifact from local file system. + * + * @param filePath the path of file + */ + private void deleteArtifactFile(final Path filePath) { + try { + Files.deleteIfExists(filePath); + } catch (final IOException exp) { + LOGGER.error("Failed to delete the downloaded artifact file", exp); + } + } + + /** + * Sends the distribution status to SDC using the input values. + * + * @param statusType the status type + * @param artifactUrl the artifact url + * @param distributionId the distribution id + * @param status the status + * @param errorReason the error reason + */ + private void sendDistributionStatus(final DistributionStatusType statusType, final String artifactUrl, + final String distributionId, final DistributionStatusEnum status, final String errorReason) { + + IDistributionClientResult clientResult; + final DistributionStatusMessageBuilder messageBuilder = new DistributionStatusMessageBuilder() + .setArtifactUrl(artifactUrl).setConsumerId(sdcConfig.getConsumerID()).setDistributionId(distributionId) + .setDistributionStatus(status).setTimestamp(System.currentTimeMillis()); + final IDistributionStatusMessage message = new DistributionStatusMessage(messageBuilder); + if (DistributionStatusType.DOWNLOAD.equals(statusType)) { + if (errorReason != null) { + clientResult = distributionClient.sendDownloadStatus(message, errorReason); + } else { + clientResult = distributionClient.sendDownloadStatus(message); + } + } else { + if (errorReason != null) { + clientResult = distributionClient.sendDeploymentStatus(message, errorReason); + } else { + clientResult = distributionClient.sendDeploymentStatus(message); + } + } + final StringBuilder loggerMessage = new StringBuilder(); + loggerMessage.append("distribution status to SDC with values - ").append("DistributionId") + .append(distributionId).append(" Artifact: ").append(artifactUrl).append(" StatusType: ") + .append(statusType.name()).append(" Status: ").append(status.name()); + if (errorReason != null) { + loggerMessage.append(" ErrorReason: ").append(errorReason); + } + if (!clientResult.getDistributionActionResult().equals(DistributionActionResultEnum.SUCCESS)) { + loggerMessage.insert(0, "Failed sending "); + LOGGER.debug(loggerMessage); + } else { + loggerMessage.insert(0, "Successfully Sent "); + LOGGER.debug(loggerMessage); + } + } + + /** + * Sends the component done status to SDC using the input values. + * + * @param distributionId the distribution Id + * @param status the distribution status + * @param errorReason the error reason + */ + private void sendComponentDoneStatus(final String distributionId, final DistributionStatusEnum status, + final String errorReason) { + IDistributionClientResult clientResult; + final ComponentDoneStatusMessageBuilder messageBuilder = new ComponentDoneStatusMessageBuilder() + .setConsumerId(sdcConfig.getConsumerID()).setDistributionId(distributionId) + .setDistributionStatus(status).setTimestamp(System.currentTimeMillis()); + final IComponentDoneStatusMessage message = new ComponentDoneStatusMessage(messageBuilder); + if (errorReason == null) { + clientResult = distributionClient.sendComponentDoneStatus(message); + } else { + clientResult = distributionClient.sendComponentDoneStatus(message, errorReason); + } + + final StringBuilder loggerMessage = new StringBuilder(); + loggerMessage.append("component done status to SDC with values - ").append("DistributionId") + .append(distributionId).append(" Status: ").append(status.name()); + if (errorReason != null) { + loggerMessage.append(" ErrorReason: ").append(errorReason); + } + if (!clientResult.getDistributionActionResult().equals(DistributionActionResultEnum.SUCCESS)) { + loggerMessage.insert(0, "Failed sending "); + LOGGER.debug(loggerMessage); + } else { + loggerMessage.insert(0, "Successfully Sent "); + LOGGER.debug(loggerMessage); + } + } + + /** + * Handle the status change of {@link SdcReceptionHandler} to Idle. + * + * @param newStatus the new status + */ + private void handleIdleStatusChange(final SdcReceptionHandlerStatus newStatus) { + if (nbOfNotificationsOngoing > 1) { + --nbOfNotificationsOngoing; + } else { + nbOfNotificationsOngoing = 0; + sdcReceptionHandlerStatus = newStatus; + } + } +} diff --git a/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcReceptionHandlerConfigurationParameterBuilder.java b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcReceptionHandlerConfigurationParameterBuilder.java new file mode 100644 index 0000000..65305c1 --- /dev/null +++ b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcReceptionHandlerConfigurationParameterBuilder.java @@ -0,0 +1,357 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.reception.handling.sdc; + +import java.util.List; + +/** + * This class builds an instance of {@link SdcReceptionHandlerConfigurationParameterGroup} class. + * + * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com) + */ +public class SdcReceptionHandlerConfigurationParameterBuilder { + + private boolean activeserverTlsAuth; + private boolean filterinEmptyResources; + private boolean useHttpsWithDmaap; + private int pollingTimeout; + private int pollingInterval; + private String user; + private String password; + private String consumerId; + private String consumerGroup; + private String asdcAddress; + private String environmentName; + private String keystorePath; + private String keystorePassword; + private List<String> messageBusAddress; + private List<String> artifactTypes; + private int retryDelay; + + /** + * Set activeserverTlsAuth to this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @param activeserverTlsAuth the activeserverTlsAuth + */ + public SdcReceptionHandlerConfigurationParameterBuilder setActiveserverTlsAuth(final boolean activeserverTlsAuth) { + this.activeserverTlsAuth = activeserverTlsAuth; + return this; + } + + /** + * Set filterinEmptyResources to this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @param filterinEmptyResources the filterinEmptyResources + */ + public SdcReceptionHandlerConfigurationParameterBuilder setFilterinEmptyResources( + final boolean filterinEmptyResources) { + this.filterinEmptyResources = filterinEmptyResources; + return this; + } + + /** + * Set useHttpsWithDmaap to this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @param useHttpsWithDmaap the useHttpsWithDmaap + */ + public SdcReceptionHandlerConfigurationParameterBuilder setUseHttpsWithDmaap(final Boolean useHttpsWithDmaap) { + this.useHttpsWithDmaap = useHttpsWithDmaap; + return this; + } + + /** + * Set pollingInterval to this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @param pollingInterval the pollingInterval + */ + public SdcReceptionHandlerConfigurationParameterBuilder setPollingInterval(final int pollingInterval) { + this.pollingInterval = pollingInterval; + return this; + } + + /** + * Set pollingTimeout to this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @param pollingTimeout the pollingTimeout + */ + public SdcReceptionHandlerConfigurationParameterBuilder setPollingTimeout(final int pollingTimeout) { + this.pollingTimeout = pollingTimeout; + return this; + } + + /** + * Set asdcAddress to this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @param asdcAddress the asdcAddress + */ + public SdcReceptionHandlerConfigurationParameterBuilder setAsdcAddress(final String asdcAddress) { + this.asdcAddress = asdcAddress; + return this; + } + + /** + * Set user to this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @param user the user + */ + public SdcReceptionHandlerConfigurationParameterBuilder setUser(final String user) { + this.user = user; + return this; + } + + /** + * Set password to this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @param password the password + */ + public SdcReceptionHandlerConfigurationParameterBuilder setPassword(final String password) { + this.password = password; + return this; + } + + /** + * Set consumerId to this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @param consumerId the consumerId + */ + public SdcReceptionHandlerConfigurationParameterBuilder setConsumerId(final String consumerId) { + this.consumerId = consumerId; + return this; + } + + /** + * Set consumerGroup to this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @param consumerGroup the consumerGroup + */ + public SdcReceptionHandlerConfigurationParameterBuilder setConsumerGroup(final String consumerGroup) { + this.consumerGroup = consumerGroup; + return this; + } + + /** + * Set environmentName to this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @param environmentName the environmentName + */ + public SdcReceptionHandlerConfigurationParameterBuilder setEnvironmentName(final String environmentName) { + this.environmentName = environmentName; + return this; + } + + /** + * Set keystorePath to this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @param keystorePath the keystorePath + */ + public SdcReceptionHandlerConfigurationParameterBuilder setKeystorePath(final String keystorePath) { + this.keystorePath = keystorePath; + return this; + } + + /** + * Set keystorePassword to this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @param keystorePassword the keystorePassword + */ + public SdcReceptionHandlerConfigurationParameterBuilder setKeystorePassword(final String keystorePassword) { + this.keystorePassword = keystorePassword; + return this; + } + + /** + * Set messageBusAddress to this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @param messageBusAddress the messageBusAddress + */ + public SdcReceptionHandlerConfigurationParameterBuilder setMessageBusAddress(final List<String> messageBusAddress) { + this.messageBusAddress = messageBusAddress; + return this; + } + + /** + * Set artifactTypes to this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @param artifactTypes the artifactTypes + */ + public SdcReceptionHandlerConfigurationParameterBuilder setArtifactTypes(final List<String> artifactTypes) { + this.artifactTypes = artifactTypes; + return this; + } + + /** + * Set retryDelay to this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @param retryDelay the retryDelay + */ + public SdcReceptionHandlerConfigurationParameterBuilder setRetryDelay(final int retryDelay) { + this.retryDelay = retryDelay; + return this; + } + + /** + * Returns the active server TlsAuth of this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @return the activeserverTlsAuth + */ + public boolean isActiveserverTlsAuth() { + return activeserverTlsAuth; + } + + /** + * Returns the isFilterinEmptyResources flag of this {@link SdcReceptionHandlerConfigurationParameterBuilder} + * instance. + * + * @return the isFilterinEmptyResources + */ + public boolean isFilterinEmptyResources() { + return filterinEmptyResources; + } + + /** + * Returns the isUseHttpsWithDmaap flag of this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @return the isUseHttpsWithDmaap + */ + public Boolean getIsUseHttpsWithDmaap() { + return useHttpsWithDmaap; + } + + /** + * Returns the polling interval of this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @return the pollingInterval + */ + public int getPollingInterval() { + return pollingInterval; + } + + /** + * Returns the polling timeout of this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @return the pollingTimeout + */ + public int getPollingTimeout() { + return pollingTimeout; + } + + /** + * Returns the asdc address of this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @return the asdcAddress + */ + public String getAsdcAddress() { + return asdcAddress; + } + + /** + * Returns the user of this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @return the user + */ + public String getUser() { + return user; + } + + /** + * Returns the password of this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @return the password + */ + public String getPassword() { + return password; + } + + /** + * Returns the consumer id of this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @return the consumerId + */ + public String getConsumerId() { + return consumerId; + } + + /** + * Returns the consumer group of this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @return the consumerGroup + */ + public String getConsumerGroup() { + return consumerGroup; + } + + /** + * Returns the environment name of this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @return the environmentName + */ + public String getEnvironmentName() { + return environmentName; + } + + /** + * Returns the keystore path of this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @return the keystorePath + */ + public String getKeystorePath() { + return keystorePath; + } + + /** + * Returns the keystore password of this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @return the keystorePassword + */ + public String getKeystorePassword() { + return keystorePassword; + } + + /** + * Returns the message bus address of this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @return the messageBusAddress + */ + public List<String> getMessageBusAddress() { + return messageBusAddress; + } + + /** + * Returns the artifact types of this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @return the artifactTypes + */ + public List<String> getArtifactTypes() { + return artifactTypes; + } + + /** + * Returns the retryDelay of this {@link SdcReceptionHandlerConfigurationParameterBuilder} instance. + * + * @return the retryDelay + */ + public int getRetryDelay() { + return retryDelay; + } + +} + + diff --git a/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcReceptionHandlerConfigurationParameterGroup.java b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcReceptionHandlerConfigurationParameterGroup.java new file mode 100644 index 0000000..6746dc3 --- /dev/null +++ b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcReceptionHandlerConfigurationParameterGroup.java @@ -0,0 +1,210 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Intel. 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.distribution.reception.handling.sdc; + +import java.util.List; + +import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.common.parameters.ValidationStatus; +import org.onap.policy.common.utils.validation.ParameterValidationUtils; +import org.onap.policy.distribution.reception.parameters.ReceptionHandlerConfigurationParameterGroup; + +/** + * This class handles reading, parsing and validating of the Policy SDC Service Distribution parameters from Json + * format, which strictly adheres to the interface:IConfiguration, defined by SDC SDK. + */ +public class SdcReceptionHandlerConfigurationParameterGroup extends ReceptionHandlerConfigurationParameterGroup { + + private String asdcAddress; + private List<String> messageBusAddress; + private String user; + private String password; + private int pollingInterval; + private int pollingTimeout; + private int retryDelay; + private String consumerId; + private List<String> artifactTypes; + private String consumerGroup; + private String environmentName; + private String keyStorePath; + private String keyStorePassword; + private boolean activeServerTlsAuth; + private boolean isFilterInEmptyResources; + private boolean isUseHttpsWithDmaap; + + /** + * The constructor for instantiating {@link SdcReceptionHandlerConfigurationParameterGroup} class. + * + * @param builder the SDC configuration builder + */ + public SdcReceptionHandlerConfigurationParameterGroup( + final SdcReceptionHandlerConfigurationParameterBuilder builder) { + asdcAddress = builder.getAsdcAddress(); + messageBusAddress = builder.getMessageBusAddress(); + user = builder.getUser(); + password = builder.getPassword(); + pollingInterval = builder.getPollingInterval(); + pollingTimeout = builder.getPollingTimeout(); + retryDelay = builder.getRetryDelay(); + consumerId = builder.getConsumerId(); + artifactTypes = builder.getArtifactTypes(); + consumerGroup = builder.getConsumerGroup(); + environmentName = builder.getEnvironmentName(); + keyStorePath = builder.getKeystorePath(); + keyStorePassword = builder.getKeystorePassword(); + activeServerTlsAuth = builder.isActiveserverTlsAuth(); + isFilterInEmptyResources = builder.isFilterinEmptyResources(); + isUseHttpsWithDmaap = builder.getIsUseHttpsWithDmaap(); + + } + + public String getAsdcAddress() { + return asdcAddress; + } + + public List<String> getMessageBusAddress() { + return messageBusAddress; + } + + public String getUser() { + return user; + } + + public String getPassword() { + return password; + } + + public int getPollingInterval() { + return pollingInterval; + } + + public int getPollingTimeout() { + return pollingTimeout; + } + + public int getRetryDelay() { + return retryDelay; + } + + public String getConsumerId() { + return consumerId; + } + + public List<String> getArtifactTypes() { + return artifactTypes; + } + + public String getConsumerGroup() { + return consumerGroup; + } + + public String getEnvironmentName() { + return environmentName; + } + + public String getKeyStorePassword() { + return keyStorePassword; + } + + public boolean isActiveServerTlsAuth() { + return activeServerTlsAuth; + } + + public String getKeyStorePath() { + return keyStorePath; + } + + public boolean isFilterInEmptyResources() { + return isFilterInEmptyResources; + } + + public boolean isUseHttpsWithDmaap() { + return isUseHttpsWithDmaap; + } + + /** + * {@inheritDoc}. + */ + @Override + public GroupValidationResult validate() { + final GroupValidationResult validationResult = new GroupValidationResult(this); + validateStringElement(validationResult, asdcAddress, "asdcAddress"); + validateStringElement(validationResult, user, "user"); + validateStringElement(validationResult, consumerId, "consumerId"); + validateStringElement(validationResult, consumerGroup, "consumerGroup"); + validateStringElement(validationResult, keyStorePath, "keyStorePath"); + validateStringElement(validationResult, keyStorePassword, "keyStorePassword"); + validateIntElement(validationResult, pollingInterval, "pollingInterval"); + validateIntElement(validationResult, pollingTimeout, "pollingTimeout"); + validateIntElement(validationResult, retryDelay, "retryDelay"); + validateStringListElement(validationResult, messageBusAddress, "messageBusAddress"); + validateStringListElement(validationResult, artifactTypes, "artifactTypes"); + return validationResult; + } + + /** + * Validate the integer Element. + * + * @param validationResult the result object + * @param element the element to validate + * @param elementName the element name for error message + */ + private void validateIntElement(final GroupValidationResult validationResult, final int element, + final String elementName) { + if (!ParameterValidationUtils.validateIntParameter(element)) { + validationResult.setResult(elementName, ValidationStatus.INVALID, + elementName + " must be a positive integer"); + } + } + + /** + * Validate the String List Element. + * + * @param validationResult the result object + * @param element the element to validate + * @param elementName the element name for error message + */ + private void validateStringListElement(final GroupValidationResult validationResult, final List<String> element, + final String elementName) { + for (final String temp : element) { + if (!ParameterValidationUtils.validateStringParameter(temp)) { + validationResult.setResult(elementName, ValidationStatus.INVALID, + "the string of " + elementName + "must be a non-blank string"); + } + } + } + + /** + * Validate the string element. + * + * @param validationResult the result object + * @param element the element to validate + * @param elementName the element name for error message + */ + private void validateStringElement(final GroupValidationResult validationResult, final String element, + final String elementName) { + if (!ParameterValidationUtils.validateStringParameter(element)) { + validationResult.setResult(elementName, ValidationStatus.INVALID, + elementName + " must be a non-blank string"); + } + } +} + diff --git a/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcReceptionHandlerStatus.java b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcReceptionHandlerStatus.java new file mode 100644 index 0000000..d0e04c7 --- /dev/null +++ b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcReceptionHandlerStatus.java @@ -0,0 +1,49 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.reception.handling.sdc; + +/** + * Class to hold the possible values for status of {@link SdcReceptionHandler}. + * + * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com) + */ +public enum SdcReceptionHandlerStatus { + + /** + * The SdcReceptionHandler is not alive. + */ + STOPPED, + + /** + * The SdcReceptionHandler is initialized but not started yet. + */ + INIT, + + /** + * The SdcReceptionHandler is initialized, started & ready to handle incoming notifications. + */ + IDLE, + + /** + * The SdcReceptionHandler is currently busy in handling notifications. + */ + BUSY +} diff --git a/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/ArtifactDownloadException.java b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/ArtifactDownloadException.java new file mode 100644 index 0000000..23409ea --- /dev/null +++ b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/ArtifactDownloadException.java @@ -0,0 +1,53 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Intel. 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.distribution.reception.handling.sdc.exceptions; + +/** + * Exception during download from Pssd. + */ +public class ArtifactDownloadException extends Exception { + + /** + * serialization id. + */ + private static final long serialVersionUID = -8507246953751956974L; + + /** + * Constructor for creating PssdDownloadException using message. + * + * @param message The message to dump + */ + public ArtifactDownloadException(final String message) { + super(message); + + } + + /** + * Constructor for creating PssdDownloadException using message and exception. + * + * @param message The message to dump + * @param ex the exception that caused this exception to be thrown + */ + public ArtifactDownloadException(final String message, final Exception ex) { + super(message, ex); + + } +} diff --git a/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/ArtifactInstallerException.java b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/ArtifactInstallerException.java new file mode 100644 index 0000000..19e711b --- /dev/null +++ b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/ArtifactInstallerException.java @@ -0,0 +1,53 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Intel. 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.distribution.reception.handling.sdc.exceptions; + +/** + * Exception during artifact installation. + */ +public class ArtifactInstallerException extends Exception { + + /** + * serialization id. + */ + private static final long serialVersionUID = -8507246953751956974L; + + /** + * Constructor for creating ArtifactInstallerException using message. + * + * @param message The message to dump + */ + public ArtifactInstallerException(final String message) { + super(message); + + } + + /** + * Constructor for creating ArtifactInstallerException using message and exception. + * + * @param message The message to dump + * @param ex the exception that caused this exception to be thrown + */ + public ArtifactInstallerException(final String message, final Exception ex) { + super(message, ex); + + } +} diff --git a/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/PssdControllerException.java b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/PssdControllerException.java new file mode 100644 index 0000000..0dd16d7 --- /dev/null +++ b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/PssdControllerException.java @@ -0,0 +1,53 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Intel. 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.distribution.reception.handling.sdc.exceptions; + +/** + * Exception of the Pssd controller. + */ +public class PssdControllerException extends Exception { + + /** + * serialization id. + */ + private static final long serialVersionUID = -8507246953751956974L; + + /** + * Constructor for creating PssdControllerException using message. + * + * @param message The message to dump + */ + public PssdControllerException(final String message) { + super(message); + + } + + /** + * Constructor for creating PssdControllerException using message and exception. + * + * @param message The message to dump + * @param ex the exception that caused this exception to be thrown + */ + public PssdControllerException(final String message, final Exception ex) { + super(message, ex); + + } +} diff --git a/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/PssdParametersException.java b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/PssdParametersException.java new file mode 100644 index 0000000..e1cdf70 --- /dev/null +++ b/artifactbroker/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/PssdParametersException.java @@ -0,0 +1,53 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Intel. 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.distribution.reception.handling.sdc.exceptions; + +/** + * Exception of the Pssd controller. + */ +public class PssdParametersException extends Exception { + + /** + * serialization id. + */ + private static final long serialVersionUID = -8507246953751956974L; + + /** + * Constructor for creating PssdParametersException using message. + * + * @param message The message to dump + */ + public PssdParametersException(final String message) { + super(message); + + } + + /** + * Constructor for creating PssdParametersException using message and exception. + * + * @param message The message to dump + * @param ex the exception that caused this exception to be thrown + */ + public PssdParametersException(final String message, final Exception ex) { + super(message, ex); + + } +} diff --git a/artifactbroker/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/DummyArtifactForwarder.java b/artifactbroker/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/DummyArtifactForwarder.java new file mode 100644 index 0000000..445d47c --- /dev/null +++ b/artifactbroker/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/DummyArtifactForwarder.java @@ -0,0 +1,72 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.reception.handling.sdc; + +import java.util.ArrayList; +import java.util.Collection; + +import org.onap.policy.distribution.forwarding.ArtifactForwarder; +import org.onap.policy.distribution.forwarding.ArtifactForwardingException; +import org.onap.sdc.api.notification.IArtifactInfo; + +/** + * Class to create a dummy forwarder for test cases. + * + * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com) + */ +public class DummyArtifactForwarder implements ArtifactForwarder { + private int numberOfPoliciesReceived = 0; + private Collection<IArtifactInfo> policiesReceived = new ArrayList<>(); + + /** + * {@inheritDoc}. + */ + @Override + public void forward(final Collection<IArtifactInfo> policies) throws ArtifactForwardingException { + numberOfPoliciesReceived += policies.size(); + policiesReceived.addAll(policies); + } + + /** + * Returns the number of policies received by this forwarder. + * + * @return the integer value + */ + public int getNumberOfPoliciesReceived() { + return numberOfPoliciesReceived; + } + + /** + * Checks if the forwarder has received a policy with given policy type. + * + * @param policyType the policy type + * @return the boolean result + */ + public boolean receivedPolicyWithGivenType(final String policyType) { + return true; + } + + /** + * {@inheritDoc}. + */ + @Override + public void configure(final String parameterGroupName) {} +} diff --git a/artifactbroker/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/DummyPolicy.java b/artifactbroker/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/DummyPolicy.java new file mode 100644 index 0000000..f4c56ab --- /dev/null +++ b/artifactbroker/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/DummyPolicy.java @@ -0,0 +1,62 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.reception.handling.sdc; + +import org.onap.policy.distribution.model.Policy; + +/** + * Class to create a dummy policy for test cases. + * + * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com) + */ +public class DummyPolicy implements Policy { + + private String policyName; + private String policyType; + + /** + * Constructor for instantiating {@link DummyPolicy} class. + * + * @param policyName the policy name + * @param policyType the policy type + */ + public DummyPolicy(final String policyName, final String policyType) { + super(); + this.policyName = policyName; + this.policyType = policyType; + } + + /** + * {@inheritDoc}. + */ + @Override + public String getPolicyName() { + return policyName; + } + + /** + * {@inheritDoc}. + */ + @Override + public String getPolicyType() { + return policyType; + } +} diff --git a/artifactbroker/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/TestComponentDoneStatusMessage.java b/artifactbroker/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/TestComponentDoneStatusMessage.java new file mode 100644 index 0000000..75e3224 --- /dev/null +++ b/artifactbroker/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/TestComponentDoneStatusMessage.java @@ -0,0 +1,61 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Intel. 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.distribution.reception.handling.sdc; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.onap.sdc.utils.DistributionStatusEnum; + +public class TestComponentDoneStatusMessage { + + @Test + public void testComponentDoneStatusMessage_Success() { + final String consumerId = "dummyId"; + final String distributionId = "dummyDistribution"; + final long timestamp = System.currentTimeMillis(); + final ComponentDoneStatusMessageBuilder messageBuilder = + new ComponentDoneStatusMessageBuilder().setConsumerId(consumerId).setDistributionId(distributionId) + .setDistributionStatus(DistributionStatusEnum.COMPONENT_DONE_OK).setTimestamp(timestamp); + final ComponentDoneStatusMessage message = new ComponentDoneStatusMessage(messageBuilder); + assertEquals("POLICY", message.getComponentName()); + assertEquals(consumerId, message.getConsumerID()); + assertEquals(distributionId, message.getDistributionID()); + assertEquals(DistributionStatusEnum.COMPONENT_DONE_OK, message.getStatus()); + assertEquals(timestamp, message.getTimestamp()); + } + + @Test + public void testComponentDoneStatusMessage_Failure() { + final String consumerId = "dummyId"; + final String distributionId = "dummyDistribution"; + final long timestamp = System.currentTimeMillis(); + final ComponentDoneStatusMessageBuilder messageBuilder = + new ComponentDoneStatusMessageBuilder().setConsumerId(consumerId).setDistributionId(distributionId) + .setDistributionStatus(DistributionStatusEnum.COMPONENT_DONE_ERROR).setTimestamp(timestamp); + final ComponentDoneStatusMessage message = new ComponentDoneStatusMessage(messageBuilder); + assertEquals("POLICY", message.getComponentName()); + assertEquals(consumerId, message.getConsumerID()); + assertEquals(distributionId, message.getDistributionID()); + assertEquals(DistributionStatusEnum.COMPONENT_DONE_ERROR, message.getStatus()); + assertEquals(timestamp, message.getTimestamp()); + } +} diff --git a/artifactbroker/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/TestDistributionStatusMessage.java b/artifactbroker/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/TestDistributionStatusMessage.java new file mode 100644 index 0000000..be12777 --- /dev/null +++ b/artifactbroker/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/TestDistributionStatusMessage.java @@ -0,0 +1,65 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Intel. 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.distribution.reception.handling.sdc; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.onap.sdc.utils.DistributionStatusEnum; + +public class TestDistributionStatusMessage { + + @Test + public void testDistributionStatusMessage_Download() { + final String artifactUrl = "http://dummyurl"; + final String consumerId = "dummyId"; + final String distributionId = "dummyDistribution"; + final long timestamp = System.currentTimeMillis(); + + final DistributionStatusMessageBuilder messageBuilder = new DistributionStatusMessageBuilder() + .setArtifactUrl(artifactUrl).setConsumerId(consumerId).setDistributionId(distributionId) + .setDistributionStatus(DistributionStatusEnum.DOWNLOAD_OK).setTimestamp(timestamp); + final DistributionStatusMessage message = new DistributionStatusMessage(messageBuilder); + assertEquals(artifactUrl, message.getArtifactURL()); + assertEquals(consumerId, message.getConsumerID()); + assertEquals(distributionId, message.getDistributionID()); + assertEquals(DistributionStatusEnum.DOWNLOAD_OK, message.getStatus()); + assertEquals(timestamp, message.getTimestamp()); + } + + @Test + public void testDistributionStatusMessage_Deploy() { + final String artifactUrl = "http://dummyurl"; + final String consumerId = "dummyId"; + final String distributionId = "dummyDistribution"; + final long timestamp = System.currentTimeMillis(); + + final DistributionStatusMessageBuilder messageBuilder = new DistributionStatusMessageBuilder() + .setArtifactUrl(artifactUrl).setConsumerId(consumerId).setDistributionId(distributionId) + .setDistributionStatus(DistributionStatusEnum.DEPLOY_OK).setTimestamp(timestamp); + final DistributionStatusMessage message = new DistributionStatusMessage(messageBuilder); + assertEquals(artifactUrl, message.getArtifactURL()); + assertEquals(consumerId, message.getConsumerID()); + assertEquals(distributionId, message.getDistributionID()); + assertEquals(DistributionStatusEnum.DEPLOY_OK, message.getStatus()); + assertEquals(timestamp, message.getTimestamp()); + } +} diff --git a/artifactbroker/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/TestSdcReceptionHandlerConfigurationParameterGroup.java b/artifactbroker/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/TestSdcReceptionHandlerConfigurationParameterGroup.java new file mode 100644 index 0000000..f9a65c5 --- /dev/null +++ b/artifactbroker/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/TestSdcReceptionHandlerConfigurationParameterGroup.java @@ -0,0 +1,160 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Intel. 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.distribution.reception.handling.sdc; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +import java.io.FileReader; +import java.io.IOException; +import java.util.Arrays; + +import org.junit.Test; +import org.onap.policy.common.parameters.GroupValidationResult; + +/** + * Class to perform unit test of {@link SdcConfiguration}. + * + */ +public class TestSdcReceptionHandlerConfigurationParameterGroup { + + @Test + public void testSdcConfiguration() throws IOException { + SdcReceptionHandlerConfigurationParameterGroup configParameters = null; + try { + final Gson gson = new GsonBuilder().create(); + configParameters = gson.fromJson(new FileReader("src/test/resources/handling-sdc.json"), + SdcReceptionHandlerConfigurationParameterGroup.class); + } catch (final Exception e) { + fail("test should not thrown an exception here: " + e.getMessage()); + } + final GroupValidationResult validationResult = configParameters.validate(); + assertTrue(validationResult.isValid()); + final SdcConfiguration config = new SdcConfiguration(configParameters); + assertEquals(Arrays.asList("a.com", "b.com", "c.com"), config.getMsgBusAddress()); + assertEquals(Arrays.asList("TOSCA_CSAR", "HEAT"), config.getRelevantArtifactTypes()); + assertEquals("localhost", config.getAsdcAddress()); + assertEquals("policy", config.getUser()); + assertEquals("policy", config.getPassword()); + assertEquals(20, config.getPollingInterval()); + assertEquals(30, config.getPollingTimeout()); + assertEquals("policy-id", config.getConsumerID()); + assertEquals("policy-group", config.getConsumerGroup()); + assertEquals("TEST", config.getEnvironmentName()); + assertEquals("null", config.getKeyStorePath()); + assertEquals("null", config.getKeyStorePassword()); + assertEquals(false, config.activateServerTLSAuth()); + assertEquals(true, config.isFilterInEmptyResources()); + assertEquals(false, config.isUseHttpsWithDmaap()); + } + + @Test + public void testInvalidSdcConfiguration() throws IOException { + SdcReceptionHandlerConfigurationParameterGroup configParameters = null; + try { + final Gson gson = new GsonBuilder().create(); + configParameters = gson.fromJson(new FileReader("src/test/resources/handling-sdcInvalid.json"), + SdcReceptionHandlerConfigurationParameterGroup.class); + } catch (final Exception e) { + fail("test should not thrown an exception here: " + e.getMessage()); + } + final GroupValidationResult validationResult = configParameters.validate(); + assertFalse(validationResult.isValid()); + } + + @Test + public void testSdcConfigurationBuilder() { + + final SdcReceptionHandlerConfigurationParameterBuilder builder = + new SdcReceptionHandlerConfigurationParameterBuilder().setAsdcAddress("localhost") + .setConsumerGroup("policy-group").setConsumerId("policy-id").setEnvironmentName("TEST") + .setKeystorePassword("password").setKeystorePath("dummyPath").setPassword("policy") + .setPollingInterval(10).setPollingTimeout(20).setRetryDelay(30).setUser("policy") + .setUseHttpsWithDmaap(false).setActiveserverTlsAuth(false).setFilterinEmptyResources(true) + .setArtifactTypes(Arrays.asList("TOSCA_CSAR")).setMessageBusAddress(Arrays.asList("localhost")); + final SdcReceptionHandlerConfigurationParameterGroup configParameters = + new SdcReceptionHandlerConfigurationParameterGroup(builder); + configParameters.setName("SDCConfiguration"); + + assertEquals(Arrays.asList("localhost"), configParameters.getMessageBusAddress()); + assertEquals(Arrays.asList("TOSCA_CSAR"), configParameters.getArtifactTypes()); + assertEquals("localhost", configParameters.getAsdcAddress()); + assertEquals("policy", configParameters.getUser()); + assertEquals("policy", configParameters.getPassword()); + assertEquals(10, configParameters.getPollingInterval()); + assertEquals(20, configParameters.getPollingTimeout()); + assertEquals(30, configParameters.getRetryDelay()); + assertEquals("policy-id", configParameters.getConsumerId()); + assertEquals("policy-group", configParameters.getConsumerGroup()); + assertEquals("TEST", configParameters.getEnvironmentName()); + assertEquals("dummyPath", configParameters.getKeyStorePath()); + assertEquals("password", configParameters.getKeyStorePassword()); + assertEquals(false, configParameters.isActiveServerTlsAuth()); + assertEquals(true, configParameters.isFilterInEmptyResources()); + assertEquals(false, configParameters.isUseHttpsWithDmaap()); + } + + @Test + public void testSdcConfigurationWithNullList() { + + final SdcReceptionHandlerConfigurationParameterBuilder builder = + new SdcReceptionHandlerConfigurationParameterBuilder().setAsdcAddress("localhost") + .setConsumerGroup("policy-group").setConsumerId("policy-id").setEnvironmentName("TEST") + .setKeystorePassword("password").setKeystorePath("dummyPath").setPassword("policy") + .setPollingInterval(10).setPollingTimeout(20).setUser("policy").setUseHttpsWithDmaap(false) + .setActiveserverTlsAuth(false).setFilterinEmptyResources(true) + .setArtifactTypes(Arrays.asList("TOSCA_CSAR")).setMessageBusAddress(null); + final SdcReceptionHandlerConfigurationParameterGroup configParameters = + new SdcReceptionHandlerConfigurationParameterGroup(builder); + configParameters.setName("SDCConfiguration"); + + try { + configParameters.validate(); + fail("Test must throw an exception"); + } catch (final Exception exp) { + assertTrue(exp.getMessage().contains("collection parameter \"messageBusAddress\" is null")); + } + } + + @Test + public void testSdcConfigurationWithEmptyStringList() { + + final SdcReceptionHandlerConfigurationParameterBuilder builder = + new SdcReceptionHandlerConfigurationParameterBuilder().setAsdcAddress("localhost") + .setConsumerGroup("policy-group").setConsumerId("policy-id").setEnvironmentName("TEST") + .setKeystorePassword("password").setKeystorePath("dummyPath").setPassword("policy") + .setPollingInterval(10).setPollingTimeout(20).setUser("policy").setUseHttpsWithDmaap(false) + .setActiveserverTlsAuth(false).setFilterinEmptyResources(true) + .setArtifactTypes(Arrays.asList("")).setMessageBusAddress(Arrays.asList("localhost")); + final SdcReceptionHandlerConfigurationParameterGroup configParameters = + new SdcReceptionHandlerConfigurationParameterGroup(builder); + configParameters.setName("SDCConfiguration"); + + final GroupValidationResult validationResult = configParameters.validate(); + assertFalse(validationResult.isValid()); + assertTrue(validationResult.getResult().contains("must be a non-blank string")); + } +} diff --git a/artifactbroker/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/ArtifactDownloadExceptionTest.java b/artifactbroker/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/ArtifactDownloadExceptionTest.java new file mode 100644 index 0000000..6d275f7 --- /dev/null +++ b/artifactbroker/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/ArtifactDownloadExceptionTest.java @@ -0,0 +1,36 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Intel. 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.distribution.reception.handling.sdc.exceptions; + +import static org.junit.Assert.assertNotNull; + +import java.io.IOException; + +import org.junit.Test; + +public class ArtifactDownloadExceptionTest { + + @Test + public void test() { + assertNotNull(new ArtifactDownloadException("Message")); + assertNotNull(new ArtifactDownloadException("Message", new IOException())); + } +} diff --git a/artifactbroker/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/ArtifactInstallerExceptionTest.java b/artifactbroker/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/ArtifactInstallerExceptionTest.java new file mode 100644 index 0000000..6c524ff --- /dev/null +++ b/artifactbroker/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/ArtifactInstallerExceptionTest.java @@ -0,0 +1,36 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Intel. 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.distribution.reception.handling.sdc.exceptions; + +import static org.junit.Assert.assertNotNull; + +import java.io.IOException; + +import org.junit.Test; + +public class ArtifactInstallerExceptionTest { + + @Test + public void test() { + assertNotNull(new ArtifactInstallerException("Message")); + assertNotNull(new ArtifactInstallerException("Message", new IOException())); + } +} diff --git a/artifactbroker/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/PssdControllerExceptionTest.java b/artifactbroker/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/PssdControllerExceptionTest.java new file mode 100644 index 0000000..5f8e507 --- /dev/null +++ b/artifactbroker/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/PssdControllerExceptionTest.java @@ -0,0 +1,36 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Intel. 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.distribution.reception.handling.sdc.exceptions; + +import static org.junit.Assert.assertNotNull; + +import java.io.IOException; + +import org.junit.Test; + +public class PssdControllerExceptionTest { + + @Test + public void test() { + assertNotNull(new PssdControllerException("Message")); + assertNotNull(new PssdControllerException("Message", new IOException())); + } +} diff --git a/artifactbroker/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/PssdParametersExceptionTest.java b/artifactbroker/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/PssdParametersExceptionTest.java new file mode 100644 index 0000000..7a1f551 --- /dev/null +++ b/artifactbroker/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/exceptions/PssdParametersExceptionTest.java @@ -0,0 +1,36 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Intel. 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.distribution.reception.handling.sdc.exceptions; + +import static org.junit.Assert.assertNotNull; + +import java.io.IOException; + +import org.junit.Test; + +public class PssdParametersExceptionTest { + + @Test + public void test() { + assertNotNull(new PssdParametersException("Message")); + assertNotNull(new PssdParametersException("Message", new IOException())); + } +} diff --git a/artifactbroker/plugins/reception-plugins/src/test/resources/handling-sdc.json b/artifactbroker/plugins/reception-plugins/src/test/resources/handling-sdc.json new file mode 100644 index 0000000..0bb936b --- /dev/null +++ b/artifactbroker/plugins/reception-plugins/src/test/resources/handling-sdc.json @@ -0,0 +1,27 @@ +{ + "name" : "parameterConfig1", + "asdcAddress": "localhost", + "messageBusAddress": [ + "a.com", + "b.com", + "c.com" + ], + "user": "policy", + "password": "policy", + "pollingInterval":20, + "pollingTimeout":30, + "retryDelay":30, + "consumerId": "policy-id", + "artifactTypes": [ + "TOSCA_CSAR", + "HEAT" + ], + "consumerGroup": "policy-group", + "environmentName": "TEST", + "keyStorePath": "null", + "keyStorePassword": "null", + "activeServerTlsAuth": false, + "isFilterInEmptyResources": true, + "isUseHttpsWithDmaap": false +} + diff --git a/artifactbroker/plugins/reception-plugins/src/test/resources/handling-sdcInvalid.json b/artifactbroker/plugins/reception-plugins/src/test/resources/handling-sdcInvalid.json new file mode 100644 index 0000000..803fc41 --- /dev/null +++ b/artifactbroker/plugins/reception-plugins/src/test/resources/handling-sdcInvalid.json @@ -0,0 +1,26 @@ +{ + "name" : "parameterConfig1", + "asdcAddress": "", + "messageBusAddress": [ + "a.com", + "b.com", + "c.com" + ], + "user": "tbdsdc-1480", + "password": "tbdsdc-1480", + "pollingInterval":-1, + "pollingTimeout":-2, + "consumerId": "policy-id", + "artifactTypes": [ + "TOSCA_CSAR", + "HEAT" + ], + "consumerGroup": "policy-group", + "environmentName": "environmentName", + "keyStorePath": "null", + "keyStorePassword": "null", + "activeserverTlsAuth": false, + "isFilterInEmptyResources": true, + "isUseHttpsWithDmaap": false +} + diff --git a/artifactbroker/pom.xml b/artifactbroker/pom.xml index 7736cbb..0553390 100644 --- a/artifactbroker/pom.xml +++ b/artifactbroker/pom.xml @@ -22,7 +22,6 @@ <relativePath /> </parent> <modelVersion>4.0.0</modelVersion> - <groupId>org.onap.multicloud.framework.broker</groupId> <artifactId>multicloud-framework-artifactbroker</artifactId> <version>1.3.0-SNAPSHOT</version> <packaging>pom</packaging> @@ -39,7 +38,11 @@ </properties> <modules> + <module>model</module> <module>main</module> + <module>reception</module> + <module>forwarding</module> + <module>plugins</module> <module>packages</module> </modules> <dependencies> diff --git a/artifactbroker/reception/pom.xml b/artifactbroker/reception/pom.xml new file mode 100644 index 0000000..b18838d --- /dev/null +++ b/artifactbroker/reception/pom.xml @@ -0,0 +1,45 @@ +<!-- + ============LICENSE_START======================================================= + Copyright (C) 2018 Ericsson. 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========================================================= +--> +<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.multicloud.framework</groupId> + <artifactId>multicloud-framework-artifactbroker</artifactId> + <version>1.3.0-SNAPSHOT</version> + </parent> + + <artifactId>multicloud-framework-artifactbroker-reception</artifactId> + + <name>${project.artifactId}</name> + <description>The module of Policy Distribution that handles reception of policies from other systems.</description> + + <dependencies> + <dependency> + <groupId>org.onap.multicloud.framework</groupId> + <artifactId>multicloud-framework-artifactbroker-model</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>org.onap.multicloud.framework</groupId> + <artifactId>multicloud-framework-artifactbroker-forwarding</artifactId> + <version>${project.version}</version> + </dependency> + </dependencies> +</project> diff --git a/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/decoding/PluginInitializationException.java b/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/decoding/PluginInitializationException.java new file mode 100644 index 0000000..4dd36a7 --- /dev/null +++ b/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/decoding/PluginInitializationException.java @@ -0,0 +1,51 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.reception.decoding; + +/** + * This exception will be called if an error occurs while initializing distribution plugins. + * + * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com) + */ +public class PluginInitializationException extends Exception { + + private static final long serialVersionUID = 3809376274411309160L; + + /** + * Construct an instance with the given message. + * + * @param message the error message + */ + public PluginInitializationException(final String message) { + super(message); + } + + /** + * Construct an instance with the given message and cause. + * + * @param message the error message + * @param cause the cause + */ + public PluginInitializationException(final String message, final Throwable cause) { + super(message, cause); + } + +} diff --git a/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/decoding/PluginTerminationException.java b/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/decoding/PluginTerminationException.java new file mode 100644 index 0000000..be9f51c --- /dev/null +++ b/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/decoding/PluginTerminationException.java @@ -0,0 +1,51 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.reception.decoding; + +/** + * This exception will be called if an error occurs while terminating distribution plugins. + * + * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com) + */ +public class PluginTerminationException extends Exception { + + private static final long serialVersionUID = 3809376274411309160L; + + /** + * Construct an instance with the given message. + * + * @param message the error message + */ + public PluginTerminationException(final String message) { + super(message); + } + + /** + * Construct an instance with the given message and cause. + * + * @param message the error message + * @param cause the cause + */ + public PluginTerminationException(final String message, final Throwable cause) { + super(message, cause); + } + +} diff --git a/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/decoding/PolicyDecodingException.java b/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/decoding/PolicyDecodingException.java new file mode 100644 index 0000000..5f2923d --- /dev/null +++ b/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/decoding/PolicyDecodingException.java @@ -0,0 +1,49 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.reception.decoding; + +/** + * An error has occured while decoding a policy. + */ +public class PolicyDecodingException extends Exception { + + private static final long serialVersionUID = 3809376274411309160L; + + /** + * Construct an instance with the given message. + * + * @param message the error message + */ + public PolicyDecodingException(String message) { + super(message); + } + + /** + * Construct an instance with the given message and cause. + * + * @param message the error message + * @param cause the cause + */ + public PolicyDecodingException(String message, Throwable cause) { + super(message, cause); + } + +} diff --git a/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/handling/AbstractReceptionHandler.java b/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/handling/AbstractReceptionHandler.java new file mode 100644 index 0000000..7081dc7 --- /dev/null +++ b/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/handling/AbstractReceptionHandler.java @@ -0,0 +1,89 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.reception.handling; + +import java.util.ArrayList; +import java.util.Collection; + +import org.onap.policy.common.logging.flexlogger.FlexLogger; +import org.onap.policy.common.logging.flexlogger.Logger; +import org.onap.policy.common.parameters.ParameterService; +import org.onap.policy.distribution.forwarding.ArtifactForwarder; +import org.onap.policy.distribution.forwarding.ArtifactForwardingException; +import org.onap.policy.distribution.model.PolicyInput; +import org.onap.policy.distribution.reception.decoding.PluginInitializationException; +import org.onap.policy.distribution.reception.decoding.PolicyDecodingException; +import org.onap.policy.distribution.reception.parameters.ReceptionHandlerParameters; + +import org.onap.sdc.api.notification.IArtifactInfo; +/** + * Base implementation of {@link ReceptionHandler}. All reception handlers should extend this base class by implementing + * the {@link #initializeReception(String)} method to perform the specific initialization required to receive inputs and + * by invoking {@link #inputReceived(PolicyInput)} when the reception handler receives input. + */ +public abstract class AbstractReceptionHandler implements ReceptionHandler { + + private static final Logger LOGGER = FlexLogger.getLogger(AbstractReceptionHandler.class); + + private PluginHandler pluginHandler; + + /** + * {@inheritDoc}. + */ + @Override + public void initialize(final String parameterGroupName) throws PluginInitializationException { + final ReceptionHandlerParameters receptionHandlerParameters = ParameterService.get(parameterGroupName); + pluginHandler = new PluginHandler(receptionHandlerParameters.getPluginHandlerParameters().getName()); + initializeReception(receptionHandlerParameters.getReceptionHandlerConfigurationName()); + } + + /** + * Sub classes must implement this method to perform the specific initialization required to receive inputs, for + * example setting up subscriptions. + * + * @param parameterGroupName the parameter group name + * @throws PluginInitializationException if initialization of reception handler fails + */ + protected abstract void initializeReception(String parameterGroupName) throws PluginInitializationException; + + /** + * Handle input that has been received. The given input shall be decoded using the s configured + * for this reception handler and forwarded using the {@link ArtifactForwarder}s configured for this reception + * handler. + * + * @param policyInput the input that has been received + * @throws PolicyDecodingException if an error occurs in decoding a policy from the received input + */ + protected void inputReceived(final PolicyInput policyInput) throws PolicyDecodingException { + + final Collection<IArtifactInfo> policies = new ArrayList<>(); + + for (final ArtifactForwarder policyForwarder : pluginHandler.getArtifactForwarders()) { + try { + policyForwarder.forward(policies); + } catch (final ArtifactForwardingException policyForwardingException) { + LOGGER.error("Error when forwarding policies to " + policyForwarder, policyForwardingException); + } + } + } + + +} diff --git a/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/handling/PluginHandler.java b/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/handling/PluginHandler.java new file mode 100644 index 0000000..e7e77ba --- /dev/null +++ b/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/handling/PluginHandler.java @@ -0,0 +1,88 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.reception.handling; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Map; + +import org.onap.policy.common.logging.flexlogger.FlexLogger; +import org.onap.policy.common.logging.flexlogger.Logger; +import org.onap.policy.common.parameters.ParameterService; +import org.onap.policy.distribution.forwarding.ArtifactForwarder; +import org.onap.policy.distribution.forwarding.parameters.ArtifactForwarderParameters; +import org.onap.policy.distribution.reception.decoding.PluginInitializationException; +import org.onap.policy.distribution.reception.parameters.PluginHandlerParameters; + +/** + * Handles the plugins to policy distribution. + */ +public class PluginHandler { + + private static final Logger LOGGER = FlexLogger.getLogger(PluginHandler.class); + + private Collection<ArtifactForwarder> artifactForwarders; + + /** + * Create an instance to instantiate plugins based on the given parameter group. + * + * @param parameterGroupName the name of the parameter group + * @throws PluginInitializationException exception if it occurs + */ + public PluginHandler(final String parameterGroupName) throws PluginInitializationException { + final PluginHandlerParameters params = ParameterService.get(parameterGroupName); + initArtifactForwarders(params.getArtifactForwarders()); + } + + /** + * Get the policy forwarders. + * + * @return the policy forwarders + */ + public Collection<ArtifactForwarder> getArtifactForwarders() { + return artifactForwarders; + } + + /** + * Initialize policy forwarders. + * + * @param artifactForwarderParameters exception if it occurs + * @throws PluginInitializationException exception if it occurs + */ + @SuppressWarnings("unchecked") + private void initArtifactForwarders(final Map<String, ArtifactForwarderParameters> artifactForwarderParameters) + throws PluginInitializationException { + artifactForwarders = new ArrayList<>(); + for (final ArtifactForwarderParameters forwarderParameters : artifactForwarderParameters.values()) { + try { + final Class<ArtifactForwarder> artifactForwarderClass = + (Class<ArtifactForwarder>) Class.forName(forwarderParameters.getForwarderClassName()); + final ArtifactForwarder artifactForwarder = artifactForwarderClass.newInstance(); + artifactForwarder.configure(forwarderParameters.getForwarderConfigurationName()); + artifactForwarders.add(artifactForwarder); + } catch (final ClassNotFoundException | InstantiationException | IllegalAccessException exp) { + LOGGER.error("exception occured while initializing forwarders", exp); + throw new PluginInitializationException(exp.getMessage(), exp.getCause()); + } + } + } + +} diff --git a/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/handling/ReceptionHandler.java b/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/handling/ReceptionHandler.java new file mode 100644 index 0000000..3678c69 --- /dev/null +++ b/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/handling/ReceptionHandler.java @@ -0,0 +1,46 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.reception.handling; + +import org.onap.policy.distribution.reception.decoding.PluginInitializationException; +import org.onap.policy.distribution.reception.decoding.PluginTerminationException; + +/** + * Handles input into Policy Distribution which may be decoded into a Policy. + */ +public interface ReceptionHandler { + + /** + * Initialize the reception handler with the given parameters. + * + * @param parameterGroupName the name of the parameter group containing the configuration for the reception handler + * @throws PluginInitializationException exception if it occurs + */ + void initialize(String parameterGroupName) throws PluginInitializationException; + + /** + * Destroy the reception handler, removing any subscriptions and releasing all resources. + * + * @throws PluginTerminationException if it occurs + */ + void destroy() throws PluginTerminationException; + +} diff --git a/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/parameters/PluginHandlerParameters.java b/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/parameters/PluginHandlerParameters.java new file mode 100644 index 0000000..70ab18e --- /dev/null +++ b/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/parameters/PluginHandlerParameters.java @@ -0,0 +1,94 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.reception.parameters; + +import java.util.Map; +import java.util.Map.Entry; + +import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.ValidationStatus; +import org.onap.policy.distribution.forwarding.parameters.ArtifactForwarderParameters; + +/** + * Class to hold all the plugin handler parameters. + * + * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com) + */ +public class PluginHandlerParameters implements ParameterGroup { + + private static final String PLUGIN_HANDLER = "_PluginHandler"; + + private String name; + private Map<String, ArtifactForwarderParameters> artifactForwarders; + + /** + * Constructor for instantiating PluginHandlerParameters. + * + * @param artifactForwarders the map of policy forwarders + */ + public PluginHandlerParameters( + final Map<String, ArtifactForwarderParameters> artifactForwarders) { + this.artifactForwarders = artifactForwarders; + } + + /** + * Return the artifactForwarders of this PluginHandlerParameters instance. + * + * @return the artifactForwarders + */ + public Map<String, ArtifactForwarderParameters> getArtifactForwarders() { + return artifactForwarders; + } + + @Override + public String getName() { + return name + PLUGIN_HANDLER; + } + + /** + * Validate the plugin handler parameters. + * + */ + @Override + public GroupValidationResult validate() { + final GroupValidationResult validationResult = new GroupValidationResult(this); + if (artifactForwarders == null || artifactForwarders.size() == 0) { + validationResult.setResult("artifactForwarders", ValidationStatus.INVALID, + "must have at least one policy forwarder"); + } else { + for (final Entry<String, ArtifactForwarderParameters> nestedGroupEntry : artifactForwarders.entrySet()) { + validationResult.setResult("artifactForwarders", nestedGroupEntry.getKey(), + nestedGroupEntry.getValue().validate()); + } + } + return validationResult; + } + + /** + * Set the name of this group. + * + * @param name the name to set. + */ + public void setName(final String name) { + this.name = name; + } +} diff --git a/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/parameters/ReceptionHandlerConfigurationParameterGroup.java b/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/parameters/ReceptionHandlerConfigurationParameterGroup.java new file mode 100644 index 0000000..3fa877d --- /dev/null +++ b/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/parameters/ReceptionHandlerConfigurationParameterGroup.java @@ -0,0 +1,44 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.reception.parameters; + +import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.distribution.reception.handling.ReceptionHandler; + +/** + * Base class of all {@link ParameterGroup} classes for configuration parameters for + * {@link ReceptionHandler} classes. + */ +public abstract class ReceptionHandlerConfigurationParameterGroup implements ParameterGroup { + + private String name; + + @Override + public String getName() { + return name; + } + + @Override + public void setName(final String name) { + this.name = name; + } + +} diff --git a/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/parameters/ReceptionHandlerConfigurationParametersJsonAdapter.java b/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/parameters/ReceptionHandlerConfigurationParametersJsonAdapter.java new file mode 100644 index 0000000..0890a2a --- /dev/null +++ b/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/parameters/ReceptionHandlerConfigurationParametersJsonAdapter.java @@ -0,0 +1,80 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.reception.parameters; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonPrimitive; +import java.lang.reflect.Type; +import org.slf4j.ext.XLogger; +import org.slf4j.ext.XLoggerFactory; + +/** + * This class deserialises reception handler parameters from JSON. + */ +public class ReceptionHandlerConfigurationParametersJsonAdapter + implements JsonDeserializer<ReceptionHandlerConfigurationParameterGroup> { + private static final XLogger LOGGER = + XLoggerFactory.getXLogger(ReceptionHandlerConfigurationParametersJsonAdapter.class); + + private static final String PARAMETER_CLASS_NAME = "parameterClassName"; + private static final String RECEPTION_HANDLER_PARAMETERS = "parameters"; + + @Override + public ReceptionHandlerConfigurationParameterGroup deserialize(final JsonElement json, final Type typeOfT, + final JsonDeserializationContext context) { + final JsonObject jsonObject = json.getAsJsonObject(); + + final String receptionHandlerParameterClassName = getParameterGroupClassName(jsonObject); + Class<?> receptionHandlerParameterClass = getParameterGroupClass(receptionHandlerParameterClassName); + + return context.deserialize(jsonObject.get(RECEPTION_HANDLER_PARAMETERS), receptionHandlerParameterClass); + } + + private String getParameterGroupClassName(final JsonObject jsonObject) { + final JsonPrimitive classNameJsonPrimitive = ((JsonPrimitive) jsonObject.get(PARAMETER_CLASS_NAME)); + + if (classNameJsonPrimitive == null || classNameJsonPrimitive.getAsString().length() == 0) { + final String errorMessage = "parameter \"" + PARAMETER_CLASS_NAME + "\" value \"" + + (classNameJsonPrimitive != null ? classNameJsonPrimitive.getAsString() : "null") + + "\" invalid in JSON file"; + LOGGER.warn(errorMessage); + throw new IllegalArgumentException(errorMessage); + } + return classNameJsonPrimitive.getAsString().replaceAll("\\s+", ""); + } + + private Class<?> getParameterGroupClass(final String receptionHAndlerParameterClassName) { + Class<?> receptionHandlerParameterClass = null; + try { + receptionHandlerParameterClass = Class.forName(receptionHAndlerParameterClassName); + } catch (final ClassNotFoundException e) { + final String errorMessage = "parameter \"" + PARAMETER_CLASS_NAME + "\" value \"" + + receptionHAndlerParameterClassName + "\", could not find class"; + LOGGER.warn(errorMessage, e); + throw new IllegalArgumentException(errorMessage, e); + } + return receptionHandlerParameterClass; + } + +} diff --git a/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/parameters/ReceptionHandlerParameters.java b/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/parameters/ReceptionHandlerParameters.java new file mode 100644 index 0000000..3839c44 --- /dev/null +++ b/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/parameters/ReceptionHandlerParameters.java @@ -0,0 +1,147 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.reception.parameters; + +import org.onap.policy.common.logging.flexlogger.FlexLogger; +import org.onap.policy.common.logging.flexlogger.Logger; +import org.onap.policy.common.parameters.GroupValidationResult; +import org.onap.policy.common.parameters.ParameterGroup; +import org.onap.policy.common.parameters.ValidationStatus; + +/** + * Class to hold all the reception handler parameters. + * + * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com) + */ +public class ReceptionHandlerParameters implements ParameterGroup { + + private static final Logger LOGGER = FlexLogger.getLogger(ReceptionHandlerParameters.class); + + private String name; + private String receptionHandlerType; + private String receptionHandlerClassName; + private String receptionHandlerConfigurationName; + private PluginHandlerParameters pluginHandlerParameters; + + /** + * Constructor for instantiating ReceptionHandlerParameters. + * + * @param receptionHandlerType the reception handler type + * @param receptionHandlerClassName the reception handler class name + * @param receptionHandlerConfigurationName the name of the configuration for the reception + * handler + * @param pluginHandlerParameters the plugin handler parameters + */ + public ReceptionHandlerParameters(final String receptionHandlerType, final String receptionHandlerClassName, + final String receptionHandlerConfigurationName, final PluginHandlerParameters pluginHandlerParameters) { + this.receptionHandlerType = receptionHandlerType; + this.receptionHandlerClassName = receptionHandlerClassName; + this.receptionHandlerConfigurationName = receptionHandlerConfigurationName; + this.pluginHandlerParameters = pluginHandlerParameters; + } + + /** + * Return the receptionHandlerType of this ReceptionHandlerParameters instance. + * + * @return the receptionHandlerType + */ + public String getReceptionHandlerType() { + return receptionHandlerType; + } + + /** + * Return the receptionHandlerClassName of this ReceptionHandlerParameters instance. + * + * @return the receptionHandlerClassName + */ + public String getReceptionHandlerClassName() { + return receptionHandlerClassName; + } + + /** + * Return the name of the reception handler configuration for this ReceptionHandlerParameters + * instance. + * + * @return the PssdConfigurationParametersGroup + */ + public String getReceptionHandlerConfigurationName() { + return receptionHandlerConfigurationName; + } + + /** + * Return the pluginHandlerParameters of this ReceptionHandlerParameters instance. + * + * @return the pluginHandlerParameters + */ + public PluginHandlerParameters getPluginHandlerParameters() { + return pluginHandlerParameters; + } + + @Override + public String getName() { + return name + "_" + receptionHandlerType; + } + + /** + * Validate the reception handler parameters. + * + */ + @Override + public GroupValidationResult validate() { + final GroupValidationResult validationResult = new GroupValidationResult(this); + if (receptionHandlerType == null || receptionHandlerType.trim().length() == 0) { + validationResult.setResult("receptionHandlerType", ValidationStatus.INVALID, "must be a non-blank string"); + } + if (receptionHandlerClassName == null || receptionHandlerClassName.trim().length() == 0) { + validationResult.setResult("receptionHandlerClassName", ValidationStatus.INVALID, + "must be a non-blank string containing full class name of the reception handler"); + } else { + validateReceptionHandlerClass(validationResult); + } + if (pluginHandlerParameters == null) { + validationResult.setResult("pluginHandlerParameters", ValidationStatus.INVALID, + "must have a plugin handler"); + } else { + validationResult.setResult("pluginHandlerParameters", pluginHandlerParameters.validate()); + } + return validationResult; + } + + private void validateReceptionHandlerClass(final GroupValidationResult validationResult) { + try { + Class.forName(receptionHandlerClassName); + } catch (final ClassNotFoundException exp) { + LOGGER.error("reception handler class not found in classpath", exp); + validationResult.setResult("receptionHandlerClassName", ValidationStatus.INVALID, + "reception handler class not found in classpath"); + } + } + + /** + * Set the name of this group. + * + * @param name the name to set + */ + @Override + public void setName(final String name) { + this.name = name; + } +} diff --git a/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/statistics/DistributionStatisticsManager.java b/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/statistics/DistributionStatisticsManager.java new file mode 100644 index 0000000..3b66ee1 --- /dev/null +++ b/artifactbroker/reception/src/main/java/org/onap/policy/distribution/reception/statistics/DistributionStatisticsManager.java @@ -0,0 +1,160 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.reception.statistics; + +/** + * Class to hold statistical data for distribution component. + * + * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com) + */ +public class DistributionStatisticsManager { + + private static long totalDistributionCount; + private static long distributionSuccessCount; + private static long distributionFailureCount; + private static long totalDownloadCount; + private static long downloadSuccessCount; + private static long downloadFailureCount; + + private DistributionStatisticsManager() { + throw new IllegalStateException("Instantiation of the class is not allowed"); + } + + /** + * Method to update the total distribution count. + * + * @return the updated value of totalDistributionCount + */ + public static long updateTotalDistributionCount() { + return ++totalDistributionCount; + } + + /** + * Method to update the distribution success count. + * + * @return the updated value of distributionSuccessCount + */ + public static long updateDistributionSuccessCount() { + return ++distributionSuccessCount; + } + + /** + * Method to update the distribution failure count. + * + * @return the updated value of distributionFailureCount + */ + public static long updateDistributionFailureCount() { + return ++distributionFailureCount; + } + + /** + * Method to update the total download count. + * + * @return the updated value of totalDownloadCount + */ + public static long updateTotalDownloadCount() { + return ++totalDownloadCount; + } + + /** + * Method to update the download success count. + * + * @return the updated value of downloadSuccessCount + */ + public static long updateDownloadSuccessCount() { + return ++downloadSuccessCount; + } + + /** + * Method to update the download failure count. + * + * @return the updated value of downloadFailureCount + */ + public static long updateDownloadFailureCount() { + return ++downloadFailureCount; + } + + /** + * Returns the current value of totalDistributionCount. + * + * @return the totalDistributionCount + */ + public static long getTotalDistributionCount() { + return totalDistributionCount; + } + + /** + * Returns the current value of distributionSuccessCount. + * + * @return the distributionSuccessCount + */ + public static long getDistributionSuccessCount() { + return distributionSuccessCount; + } + + /** + * Returns the current value of distributionFailureCount. + * + * @return the distributionFailureCount + */ + public static long getDistributionFailureCount() { + return distributionFailureCount; + } + + /** + * Returns the current value of totalDownloadCount. + * + * @return the totalDownloadCount + */ + public static long getTotalDownloadCount() { + return totalDownloadCount; + } + + /** + * Returns the current value of downloadSuccessCount. + * + * @return the downloadSuccessCount + */ + public static long getDownloadSuccessCount() { + return downloadSuccessCount; + } + + /** + * Returns the current value of downloadFailureCount. + * + * @return the downloadFailureCount + */ + public static long getDownloadFailureCount() { + return downloadFailureCount; + } + + /** + * Reset all the statistics counts to 0. + */ + public static void resetAllStatistics() { + totalDistributionCount = 0L; + distributionSuccessCount = 0L; + distributionFailureCount = 0L; + totalDownloadCount = 0L; + downloadSuccessCount = 0L; + downloadFailureCount = 0L; + } +} diff --git a/artifactbroker/reception/src/test/java/org/onap/policy/distribution/reception/decoding/PluginInitializationExceptionTest.java b/artifactbroker/reception/src/test/java/org/onap/policy/distribution/reception/decoding/PluginInitializationExceptionTest.java new file mode 100644 index 0000000..b63e667 --- /dev/null +++ b/artifactbroker/reception/src/test/java/org/onap/policy/distribution/reception/decoding/PluginInitializationExceptionTest.java @@ -0,0 +1,50 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2016-2018 Ericsson. 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.distribution.reception.decoding; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +/** + * Class to perform unit test of {@link PluginInitializationException}. + * + * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com) + */ +public class PluginInitializationExceptionTest { + + @Test + public void testPluginInitializationExceptionString() { + final PluginInitializationException pluginInitializationException = + new PluginInitializationException("error message"); + assertEquals("error message", pluginInitializationException.getMessage()); + } + + @Test + public void testPluginInitializationExceptionStringThrowable() { + final Exception cause = new IllegalArgumentException(); + final PluginInitializationException pluginInitializationException = + new PluginInitializationException("error message", cause); + assertEquals("error message", pluginInitializationException.getMessage()); + assertEquals(cause, pluginInitializationException.getCause()); + } + +} diff --git a/artifactbroker/reception/src/test/java/org/onap/policy/distribution/reception/decoding/PluginTerminationExceptionTest.java b/artifactbroker/reception/src/test/java/org/onap/policy/distribution/reception/decoding/PluginTerminationExceptionTest.java new file mode 100644 index 0000000..c2fc6a9 --- /dev/null +++ b/artifactbroker/reception/src/test/java/org/onap/policy/distribution/reception/decoding/PluginTerminationExceptionTest.java @@ -0,0 +1,49 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2016-2018 Ericsson. 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.distribution.reception.decoding; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +/** + * Class to perform unit test of {@link PluginTerminationException}. + * + * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com) + */ +public class PluginTerminationExceptionTest { + + @Test + public void testPluginTerminationExceptionString() { + final PluginTerminationException pluginTerminationException = new PluginTerminationException("error message"); + assertEquals("error message", pluginTerminationException.getMessage()); + } + + @Test + public void testPluginTerminationExceptionStringThrowable() { + final Exception cause = new IllegalArgumentException(); + final PluginTerminationException pluginTerminationException = new PluginTerminationException("error message", + cause); + assertEquals("error message", pluginTerminationException.getMessage()); + assertEquals(cause, pluginTerminationException.getCause()); + } + +} diff --git a/artifactbroker/reception/src/test/java/org/onap/policy/distribution/reception/decoding/PolicyDecodingExceptionTest.java b/artifactbroker/reception/src/test/java/org/onap/policy/distribution/reception/decoding/PolicyDecodingExceptionTest.java new file mode 100644 index 0000000..a5bc072 --- /dev/null +++ b/artifactbroker/reception/src/test/java/org/onap/policy/distribution/reception/decoding/PolicyDecodingExceptionTest.java @@ -0,0 +1,43 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2016-2018 Ericsson. 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.distribution.reception.decoding; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class PolicyDecodingExceptionTest { + + @Test + public void testPolicyDecodingExceptionString() { + final PolicyDecodingException policyDecodingException = new PolicyDecodingException("error message"); + assertEquals("error message", policyDecodingException.getMessage()); + } + + @Test + public void testPolicyDecodingExceptionStringThrowable() { + final Exception cause = new IllegalArgumentException(); + final PolicyDecodingException policyDecodingException = new PolicyDecodingException("error message", cause); + assertEquals("error message", policyDecodingException.getMessage()); + assertEquals(cause, policyDecodingException.getCause()); + } + +} diff --git a/artifactbroker/reception/src/test/java/org/onap/policy/distribution/reception/handling/DummyArtifactForwarder.java b/artifactbroker/reception/src/test/java/org/onap/policy/distribution/reception/handling/DummyArtifactForwarder.java new file mode 100644 index 0000000..5785927 --- /dev/null +++ b/artifactbroker/reception/src/test/java/org/onap/policy/distribution/reception/handling/DummyArtifactForwarder.java @@ -0,0 +1,54 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.reception.handling; + +import java.util.ArrayList; +import java.util.Collection; +import org.onap.policy.distribution.forwarding.ArtifactForwarder; +import org.onap.policy.distribution.forwarding.ArtifactForwardingException; +import org.onap.sdc.api.notification.IArtifactInfo; + +/** + * Class to create a dummy forwarder for test cases in AbstractReceptionHandlerTest. + * + * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com) + */ +public class DummyArtifactForwarder implements ArtifactForwarder { + private int numberOfPoliciesReceived = 0; + private Collection<IArtifactInfo> policiesReceived = new ArrayList<>(); + + @Override + public void forward(final Collection<IArtifactInfo> policies) throws ArtifactForwardingException { + numberOfPoliciesReceived += policies.size(); + policiesReceived.addAll(policies); + } + + public int getNumberOfPoliciesReceived() { + return numberOfPoliciesReceived; + } + + public boolean receivedPolicy(final IArtifactInfo policy) { + return policiesReceived.contains(policy); + } + + @Override + public void configure(String parameterGroupName) {} +} diff --git a/artifactbroker/reception/src/test/java/org/onap/policy/distribution/reception/handling/DummyReceptionHandler.java b/artifactbroker/reception/src/test/java/org/onap/policy/distribution/reception/handling/DummyReceptionHandler.java new file mode 100644 index 0000000..43596ff --- /dev/null +++ b/artifactbroker/reception/src/test/java/org/onap/policy/distribution/reception/handling/DummyReceptionHandler.java @@ -0,0 +1,35 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Ericsson. 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.distribution.reception.handling; + +/** + * Class to create a dummy reception handler for test cases in AbstractReceptionHandlerTest. + * + * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com) + */ +class DummyReceptionHandler extends AbstractReceptionHandler { + + @Override + protected void initializeReception(final String parameterGroupName) {} + + @Override + public void destroy() {} +} |