From 1936220d00ee644774e58ab33de39cca4a006d2a Mon Sep 17 00:00:00 2001 From: ramverma Date: Tue, 22 Jan 2019 12:39:39 +0000 Subject: Fix issues in policy-distribution 1) Creating a new thread for watching directory path for new file. 2) Updating distribution statistics from FileSystemReceptionHandler. Change-Id: Ic539f2cad015f0756407fe910f309a2ea661a764 Issue-ID: POLICY-1437 Signed-off-by: ramverma --- .../reception/handling/file/FileClientHandler.java | 61 +++++++ .../handling/file/FileSystemReceptionHandler.java | 166 +++++++++++++++++++ ...eptionHandlerConfigurationParameterBuilder.java | 52 ++++++ ...eceptionHandlerConfigurationParameterGroup.java | 84 ++++++++++ .../handling/sdc/FileSystemReceptionHandler.java | 120 -------------- ...eptionHandlerConfigurationParameterBuilder.java | 52 ------ ...eceptionHandlerConfigurationParameterGroup.java | 84 ---------- .../file/TestFileSystemReceptionHandler.java | 175 +++++++++++++++++++++ ...eceptionHandlerConfigurationParameterGroup.java | 104 ++++++++++++ .../sdc/TestFileSystemReceptionHandler.java | 174 -------------------- ...eceptionHandlerConfigurationParameterGroup.java | 104 ------------ 11 files changed, 642 insertions(+), 534 deletions(-) create mode 100644 plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/file/FileClientHandler.java create mode 100644 plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/file/FileSystemReceptionHandler.java create mode 100644 plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/file/FileSystemReceptionHandlerConfigurationParameterBuilder.java create mode 100644 plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/file/FileSystemReceptionHandlerConfigurationParameterGroup.java delete mode 100644 plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandler.java delete mode 100644 plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandlerConfigurationParameterBuilder.java delete mode 100644 plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandlerConfigurationParameterGroup.java create mode 100644 plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/file/TestFileSystemReceptionHandler.java create mode 100644 plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/file/TestFileSystemReceptionHandlerConfigurationParameterGroup.java delete mode 100644 plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/TestFileSystemReceptionHandler.java delete mode 100644 plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/TestFileSystemReceptionHandlerConfigurationParameterGroup.java (limited to 'plugins/reception-plugins/src') diff --git a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/file/FileClientHandler.java b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/file/FileClientHandler.java new file mode 100644 index 00000000..f8e57747 --- /dev/null +++ b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/file/FileClientHandler.java @@ -0,0 +1,61 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2019 Nordix Foundation. + * ================================================================================ + * 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.file; + +import java.io.IOException; + +import org.onap.policy.common.logging.flexlogger.FlexLogger; +import org.onap.policy.common.logging.flexlogger.Logger; + +/** + * This class implements Runnable interface for creating new thread which will be used as file watcher. + * + * @author Ram Krishna Verma (ram.krishna.verma@est.tech) + */ +public class FileClientHandler implements Runnable { + + private static final Logger LOGGER = FlexLogger.getLogger(FileClientHandler.class); + + private FileSystemReceptionHandler fileReceptionHandler; + private String watchPath; + + /** + * Constructs an instance of {@link FileClientHandler} class. + * + * @param fileReceptionHandler the fileReceptionHandler + */ + public FileClientHandler(final FileSystemReceptionHandler fileReceptionHandler, final String watchPath) { + this.fileReceptionHandler = fileReceptionHandler; + this.watchPath = watchPath; + } + + /** + * {@inheritDoc}. + */ + @Override + public void run() { + try { + fileReceptionHandler.initFileWatcher(watchPath); + } catch (final IOException ex) { + LOGGER.error(ex); + } + } +} diff --git a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/file/FileSystemReceptionHandler.java b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/file/FileSystemReceptionHandler.java new file mode 100644 index 00000000..3cb167f3 --- /dev/null +++ b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/file/FileSystemReceptionHandler.java @@ -0,0 +1,166 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Intel Corp. All rights reserved. + * Copyright (C) 2019 Nordix Foundation. + * ================================================================================ + * 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.file; + +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 java.util.concurrent.TimeUnit; +import java.util.zip.ZipFile; + +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.statistics.DistributionStatisticsManager; + +/** + * Handles reception of inputs from File System which can be used to decode policies. + */ +public class FileSystemReceptionHandler extends AbstractReceptionHandler { + + private static final Logger LOGGER = FlexLogger.getLogger(FileSystemReceptionHandler.class); + private boolean running = false; + + /** + * {@inheritDoc}. + */ + @Override + protected void initializeReception(final String parameterGroupName) { + LOGGER.debug("FileSystemReceptionHandler init..."); + try { + final FileSystemReceptionHandlerConfigurationParameterGroup handlerParameters = + ParameterService.get(parameterGroupName); + final FileClientHandler fileClientHandler = new FileClientHandler(this, handlerParameters.getWatchPath()); + final Thread fileWatcherThread = new Thread(fileClientHandler); + fileWatcherThread.start(); + } catch (final Exception ex) { + LOGGER.error(ex); + } + } + + /** + * {@inheritDoc}. + */ + @Override + public void destroy() { + running = false; + } + + /** + * Method to check the running status of file watcher thread. + * + * @return the running status + */ + public boolean isRunning() { + return running; + } + + /** + * Initialize the file watcher thread. + * + * @param watchPath Path to watch + */ + public void initFileWatcher(final 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()); + startWatchService(watcher, dir); + } catch (final InterruptedException ex) { + LOGGER.debug(ex); + Thread.currentThread().interrupt(); + } + } + + /** + * Method to keep watching the given path for any new file created. + * + * @param watcher the watcher + * @param dir the watch directory + * @throws InterruptedException if it occurs + */ + @SuppressWarnings("unchecked") + protected void startWatchService(final WatchService watcher, final Path dir) throws InterruptedException { + WatchKey key; + running = true; + while (running) { + key = watcher.take(); + + for (final WatchEvent event : key.pollEvents()) { + final WatchEvent ev = (WatchEvent) event; + final Path fileName = ev.context(); + LOGGER.debug("new CSAR found: " + fileName); + DistributionStatisticsManager.updateTotalDistributionCount(); + final String fullFilePath = dir.toString() + File.separator + fileName.toString(); + waitForFileToBeReady(fullFilePath); + createPolicyInputAndCallHandler(fullFilePath); + LOGGER.debug("CSAR complete: " + fileName); + } + final boolean valid = key.reset(); + if (!valid) { + LOGGER.error("Watch key no longer valid!"); + break; + } + } + } + + /** + * Method to create policy input & call policy handlers. + * + * @param fileName the filename + */ + protected void createPolicyInputAndCallHandler(final String fileName) { + try { + final Csar csarObject = new Csar(fileName); + DistributionStatisticsManager.updateTotalDownloadCount(); + inputReceived(csarObject); + DistributionStatisticsManager.updateDownloadSuccessCount(); + DistributionStatisticsManager.updateDistributionSuccessCount(); + } catch (final PolicyDecodingException ex) { + DistributionStatisticsManager.updateDownloadFailureCount(); + DistributionStatisticsManager.updateDistributionFailureCount(); + LOGGER.error(ex); + } + } + + private void waitForFileToBeReady(final String fullFilePath) throws InterruptedException { + boolean flag = true; + while (flag) { + TimeUnit.MILLISECONDS.sleep(100); + try (ZipFile zipFile = new ZipFile(fullFilePath)) { + flag = false; + } catch (final IOException exp) { + LOGGER.error("file is not ready for reading, wait for sometime and try again", exp); + } + } + } +} diff --git a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/file/FileSystemReceptionHandlerConfigurationParameterBuilder.java b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/file/FileSystemReceptionHandlerConfigurationParameterBuilder.java new file mode 100644 index 00000000..693ff0ec --- /dev/null +++ b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/file/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.file; + +/** + * 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/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/file/FileSystemReceptionHandlerConfigurationParameterGroup.java b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/file/FileSystemReceptionHandlerConfigurationParameterGroup.java new file mode 100644 index 00000000..dd50dc78 --- /dev/null +++ b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/file/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.file; + +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/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandler.java b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandler.java deleted file mode 100644 index 941cdd61..00000000 --- a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandler.java +++ /dev/null @@ -1,120 +0,0 @@ -/*- - * ============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 ev = (WatchEvent) 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/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandlerConfigurationParameterBuilder.java b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandlerConfigurationParameterBuilder.java deleted file mode 100644 index 37a16980..00000000 --- a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandlerConfigurationParameterBuilder.java +++ /dev/null @@ -1,52 +0,0 @@ -/*- - * ============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/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandlerConfigurationParameterGroup.java b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandlerConfigurationParameterGroup.java deleted file mode 100644 index 457cd5ea..00000000 --- a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/FileSystemReceptionHandlerConfigurationParameterGroup.java +++ /dev/null @@ -1,84 +0,0 @@ -/*- - * ============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/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/file/TestFileSystemReceptionHandler.java b/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/file/TestFileSystemReceptionHandler.java new file mode 100644 index 00000000..20922a1b --- /dev/null +++ b/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/file/TestFileSystemReceptionHandler.java @@ -0,0 +1,175 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Intel. All rights reserved. + * Copyright (C) 2019 Nordix Foundation. + * ================================================================================ + * 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.file; + +import static org.junit.Assert.fail; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.concurrent.atomic.AtomicInteger; + +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.stubbing.Answer; +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.reception.decoding.PolicyDecodingException; +import org.onap.policy.distribution.reception.statistics.DistributionStatisticsManager; + +/** + * Class to perform unit test of {@link FileSystemReceptionHandler}. + */ +@RunWith(MockitoJUnitRunner.class) +public class TestFileSystemReceptionHandler { + + private static final Logger LOGGER = FlexLogger.getLogger(TestFileSystemReceptionHandler.class); + + @Rule + public TemporaryFolder tempFolder = new TemporaryFolder(); + + private FileSystemReceptionHandlerConfigurationParameterGroup pssdConfigParameters; + private FileSystemReceptionHandler fileSystemHandler; + + + /** + * Setup for the test cases. + * + * @throws IOException if it occurs + * @throws SecurityException if it occurs + * @throws NoSuchFieldException if it occurs + * @throws IllegalAccessException if it occurs + * @throws IllegalArgumentException if it occurs + */ + @Before + public final void init() throws IOException, NoSuchFieldException, SecurityException, IllegalArgumentException, + IllegalAccessException { + DistributionStatisticsManager.resetAllStatistics(); + + final Gson gson = new GsonBuilder().create(); + pssdConfigParameters = gson.fromJson(new FileReader("src/test/resources/handling-filesystem.json"), + FileSystemReceptionHandlerConfigurationParameterGroup.class); + ParameterService.register(pssdConfigParameters); + fileSystemHandler = new FileSystemReceptionHandler(); + } + + @After + public void teardown() { + ParameterService.deregister(pssdConfigParameters); + } + + @Test + public final void testInit() throws IOException { + final FileSystemReceptionHandler sypHandler = Mockito.spy(fileSystemHandler); + Mockito.doNothing().when(sypHandler).initFileWatcher(Mockito.isA(String.class)); + sypHandler.initializeReception(pssdConfigParameters.getName()); + Mockito.verify(sypHandler, Mockito.times(1)).initFileWatcher(Mockito.isA(String.class)); + } + + @Test + public final void testDestroy() throws IOException { + try { + final FileSystemReceptionHandler sypHandler = Mockito.spy(fileSystemHandler); + Mockito.doNothing().when(sypHandler).initFileWatcher(Mockito.isA(String.class)); + sypHandler.initializeReception(pssdConfigParameters.getName()); + sypHandler.destroy(); + } catch (final Exception exp) { + LOGGER.error(exp); + fail("Test should not throw any exception"); + } + + } + + @Test + public void testMain() throws IOException, PolicyDecodingException { + final Object lock = new Object(); + final String watchPath = tempFolder.getRoot().getAbsolutePath().toString(); + + class Processed { + public boolean processed = false; + } + + final Processed cond = new Processed(); + + final FileSystemReceptionHandler sypHandler = Mockito.spy(fileSystemHandler); + Mockito.doAnswer(new Answer() { + @Override + public Object answer(final InvocationOnMock invocation) { + synchronized (lock) { + cond.processed = true; + lock.notifyAll(); + } + return null; + } + }).when(sypHandler).createPolicyInputAndCallHandler(Mockito.isA(String.class)); + + final Thread th = new Thread(() -> { + try { + sypHandler.initFileWatcher(watchPath); + } catch (final IOException ex) { + LOGGER.error(ex); + } + }); + + th.start(); + try { + // wait until internal watch service started or counter reached + final AtomicInteger counter = new AtomicInteger(); + counter.set(0); + synchronized (lock) { + while (!sypHandler.isRunning() && counter.getAndIncrement() < 10) { + lock.wait(1000); + } + } + Files.copy(Paths.get("src/test/resources/hpaPolicyHugePage.csar"), + Paths.get(watchPath + File.separator + "hpaPolicyHugePage.csar")); + // wait until mock method triggered or counter reached + counter.set(0); + synchronized (lock) { + while (!cond.processed && counter.getAndIncrement() < 10) { + lock.wait(1000); + } + } + sypHandler.destroy(); + th.interrupt(); + th.join(); + } catch (final InterruptedException ex) { + LOGGER.error(ex); + } + Mockito.verify(sypHandler, Mockito.times(1)).createPolicyInputAndCallHandler(Mockito.isA(String.class)); + + } +} + diff --git a/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/file/TestFileSystemReceptionHandlerConfigurationParameterGroup.java b/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/file/TestFileSystemReceptionHandlerConfigurationParameterGroup.java new file mode 100644 index 00000000..92d9443e --- /dev/null +++ b/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/file/TestFileSystemReceptionHandlerConfigurationParameterGroup.java @@ -0,0 +1,104 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2018 Intel. All rights reserved. + * Copyright (C) 2019 Nordix Foundation. + * ================================================================================ + * 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.file; + +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 org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; +import org.onap.policy.common.parameters.GroupValidationResult; + +/** + * Class to perform unit test of {@link FileSystemReceptionHandlerConfigurationParameterGroup}. + * + */ +public class TestFileSystemReceptionHandlerConfigurationParameterGroup { + @Rule + public TemporaryFolder tempFolder = new TemporaryFolder(); + + @Test + public void testFileSystemConfiguration() throws IOException { + FileSystemReceptionHandlerConfigurationParameterGroup configParameters = null; + String validPath = null; + try { + validPath = tempFolder.getRoot().getAbsolutePath(); + + final FileSystemReceptionHandlerConfigurationParameterBuilder builder = + new FileSystemReceptionHandlerConfigurationParameterBuilder().setWatchPath(validPath); + configParameters = new FileSystemReceptionHandlerConfigurationParameterGroup(builder); + } catch (final Exception e) { + fail("test should not thrown an exception here: " + e.getMessage()); + } + final GroupValidationResult validationResult = configParameters.validate(); + assertTrue(validationResult.isValid()); + assertEquals(validPath, configParameters.getWatchPath()); + } + + @Test + public void testInvalidFileSystemConfiguration() throws IOException { + FileSystemReceptionHandlerConfigurationParameterGroup configParameters = null; + try { + final Gson gson = new GsonBuilder().create(); + configParameters = gson.fromJson(new FileReader("src/test/resources/handling-sdcInvalid.json"), + FileSystemReceptionHandlerConfigurationParameterGroup.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 testFileSystemReceptionHandlerConfigurationParameterBuilder() { + + final FileSystemReceptionHandlerConfigurationParameterBuilder builder = + new FileSystemReceptionHandlerConfigurationParameterBuilder().setWatchPath("/foo/bar"); + final FileSystemReceptionHandlerConfigurationParameterGroup configParameters = + new FileSystemReceptionHandlerConfigurationParameterGroup(builder); + + assertEquals("/foo/bar", configParameters.getWatchPath()); + } + + @Test + public void testFileSystemReceptionHandlerConfigurationParameterBuilderWithInvalidPath() throws IOException { + final String invalidPath = tempFolder.newFile("foobar").getAbsolutePath(); + + final FileSystemReceptionHandlerConfigurationParameterBuilder builder = + new FileSystemReceptionHandlerConfigurationParameterBuilder().setWatchPath(invalidPath); + final FileSystemReceptionHandlerConfigurationParameterGroup configParameters = + new FileSystemReceptionHandlerConfigurationParameterGroup(builder); + + final GroupValidationResult validateResult = configParameters.validate(); + assertFalse(validateResult.isValid()); + assertTrue(validateResult.getResult().contains("must be a valid directory")); + } +} diff --git a/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/TestFileSystemReceptionHandler.java b/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/TestFileSystemReceptionHandler.java deleted file mode 100644 index fc2a2b6a..00000000 --- a/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/TestFileSystemReceptionHandler.java +++ /dev/null @@ -1,174 +0,0 @@ -/*- - * ============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.fail; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; - -import java.io.File; -import java.io.FileReader; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.util.concurrent.atomic.AtomicInteger; - -import org.junit.After; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; -import org.junit.runner.RunWith; -import org.mockito.Mockito; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.runners.MockitoJUnitRunner; -import org.mockito.stubbing.Answer; -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.reception.decoding.PolicyDecodingException; -import org.onap.policy.distribution.reception.statistics.DistributionStatisticsManager; - -/** - * Class to perform unit test of {@link FileSystemReceptionHandler}. - */ -@RunWith(MockitoJUnitRunner.class) -public class TestFileSystemReceptionHandler { - - private static final Logger LOGGER = FlexLogger.getLogger(TestFileSystemReceptionHandler.class); - - @Rule - public TemporaryFolder tempFolder = new TemporaryFolder(); - - private FileSystemReceptionHandlerConfigurationParameterGroup pssdConfigParameters; - private FileSystemReceptionHandler fileSystemHandler; - - - /** - * Setup for the test cases. - * - * @throws IOException if it occurs - * @throws SecurityException if it occurs - * @throws NoSuchFieldException if it occurs - * @throws IllegalAccessException if it occurs - * @throws IllegalArgumentException if it occurs - */ - @Before - public final void init() throws IOException, NoSuchFieldException, SecurityException, IllegalArgumentException, - IllegalAccessException { - DistributionStatisticsManager.resetAllStatistics(); - - final Gson gson = new GsonBuilder().create(); - pssdConfigParameters = gson.fromJson(new FileReader("src/test/resources/handling-filesystem.json"), - FileSystemReceptionHandlerConfigurationParameterGroup.class); - ParameterService.register(pssdConfigParameters); - fileSystemHandler = new FileSystemReceptionHandler(); - } - - @After - public void teardown() { - ParameterService.deregister(pssdConfigParameters); - } - - @Test - public final void testInit() throws IOException { - final FileSystemReceptionHandler sypHandler = Mockito.spy(fileSystemHandler); - Mockito.doNothing().when(sypHandler).main(Mockito.isA(String.class)); - sypHandler.initializeReception(pssdConfigParameters.getName()); - Mockito.verify(sypHandler, Mockito.times(1)).main(Mockito.isA(String.class)); - } - - @Test - public final void testDestroy() throws IOException { - try { - final FileSystemReceptionHandler sypHandler = Mockito.spy(fileSystemHandler); - Mockito.doNothing().when(sypHandler).main(Mockito.isA(String.class)); - sypHandler.initializeReception(pssdConfigParameters.getName()); - sypHandler.destroy(); - } catch (final Exception exp) { - LOGGER.error(exp); - fail("Test should not throw any exception"); - } - - } - - @Test - public void testMain() throws IOException, PolicyDecodingException { - final Object lock = new Object(); - final String watchPath = tempFolder.getRoot().getAbsolutePath().toString(); - - class Processed { - public boolean processed = false; - } - - Processed cond = new Processed(); - - final FileSystemReceptionHandler sypHandler = Mockito.spy(fileSystemHandler); - Mockito.doAnswer(new Answer() { - public Object answer(InvocationOnMock invocation) { - synchronized (lock) { - cond.processed = true; - lock.notifyAll(); - } - return null; - } - }).when(sypHandler).createPolicyInputAndCallHandler(Mockito.isA(String.class)); - - Thread th = new Thread(() -> { - try { - sypHandler.main(watchPath); - } catch (IOException ex) { - LOGGER.error(ex); - } - }); - - th.start(); - try { - //wait until internal watch service started or counter reached - AtomicInteger counter = new AtomicInteger(); - counter.set(0); - synchronized (lock) { - while (!sypHandler.isRunning() && counter.getAndIncrement() < 10) { - lock.wait(1000); - } - } - Files.copy(Paths.get("src/test/resources/hpaPolicyHugePage.csar"), - Paths.get(watchPath + File.separator + "hpaPolicyHugePage.csar")); - //wait until mock method triggered or counter reached - counter.set(0); - synchronized (lock) { - while (!cond.processed && counter.getAndIncrement() < 10) { - lock.wait(1000); - } - } - sypHandler.destroy(); - th.interrupt(); - th.join(); - } catch (final InterruptedException ex) { - LOGGER.error(ex); - } - Mockito.verify(sypHandler, Mockito.times(1)) - .createPolicyInputAndCallHandler(Mockito.isA(String.class)); - - } -} - diff --git a/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/TestFileSystemReceptionHandlerConfigurationParameterGroup.java b/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/TestFileSystemReceptionHandlerConfigurationParameterGroup.java deleted file mode 100644 index 3039560a..00000000 --- a/plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/handling/sdc/TestFileSystemReceptionHandlerConfigurationParameterGroup.java +++ /dev/null @@ -1,104 +0,0 @@ -/*- - * ============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 org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; - -import org.onap.policy.common.parameters.GroupValidationResult; - -/** - * Class to perform unit test of {@link FileSystemReceptionHandlerConfigurationParameterGroup}. - * - */ -public class TestFileSystemReceptionHandlerConfigurationParameterGroup { - @Rule - public TemporaryFolder tempFolder = new TemporaryFolder(); - - @Test - public void testFileSystemConfiguration() throws IOException { - FileSystemReceptionHandlerConfigurationParameterGroup configParameters = null; - String validPath = null; - try { - validPath = tempFolder.getRoot().getAbsolutePath(); - - final FileSystemReceptionHandlerConfigurationParameterBuilder builder = - new FileSystemReceptionHandlerConfigurationParameterBuilder().setWatchPath(validPath); - configParameters = new FileSystemReceptionHandlerConfigurationParameterGroup(builder); - } catch (final Exception e) { - fail("test should not thrown an exception here: " + e.getMessage()); - } - final GroupValidationResult validationResult = configParameters.validate(); - assertTrue(validationResult.isValid()); - assertEquals(validPath, configParameters.getWatchPath()); - } - - @Test - public void testInvalidFileSystemConfiguration() throws IOException { - FileSystemReceptionHandlerConfigurationParameterGroup configParameters = null; - try { - final Gson gson = new GsonBuilder().create(); - configParameters = gson.fromJson(new FileReader("src/test/resources/handling-sdcInvalid.json"), - FileSystemReceptionHandlerConfigurationParameterGroup.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 testFileSystemReceptionHandlerConfigurationParameterBuilder() { - - final FileSystemReceptionHandlerConfigurationParameterBuilder builder = - new FileSystemReceptionHandlerConfigurationParameterBuilder().setWatchPath("/foo/bar"); - final FileSystemReceptionHandlerConfigurationParameterGroup configParameters = - new FileSystemReceptionHandlerConfigurationParameterGroup(builder); - - assertEquals("/foo/bar", configParameters.getWatchPath()); - } - - @Test - public void testFileSystemReceptionHandlerConfigurationParameterBuilderWithInvalidPath() throws IOException { - final String invalidPath = tempFolder.newFile("foobar").getAbsolutePath(); - - final FileSystemReceptionHandlerConfigurationParameterBuilder builder = - new FileSystemReceptionHandlerConfigurationParameterBuilder().setWatchPath(invalidPath); - final FileSystemReceptionHandlerConfigurationParameterGroup configParameters = - new FileSystemReceptionHandlerConfigurationParameterGroup(builder); - - final GroupValidationResult validateResult = configParameters.validate(); - assertFalse(validateResult.isValid()); - assertTrue(validateResult.getResult().contains("must be a valid directory")); - } -} -- cgit 1.2.3-korg