aboutsummaryrefslogtreecommitdiffstats
path: root/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator
diff options
context:
space:
mode:
Diffstat (limited to 'pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator')
-rw-r--r--pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/Simulator.java213
-rw-r--r--pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/SimulatorFactory.java54
-rw-r--r--pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/client/RestTemplateAdapter.java26
-rw-r--r--pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/client/RestTemplateAdapterImpl.java155
-rw-r--r--pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/validation/JSONValidator.java66
-rw-r--r--pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/validation/NoRopFilesException.java28
-rw-r--r--pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/validation/ValidationException.java28
7 files changed, 570 insertions, 0 deletions
diff --git a/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/Simulator.java b/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/Simulator.java
new file mode 100644
index 0000000..725fe43
--- /dev/null
+++ b/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/Simulator.java
@@ -0,0 +1,213 @@
+/*
+ * ============LICENSE_START=======================================================
+ * PNF-REGISTRATION-HANDLER
+ * ================================================================================ Copyright (C)
+ * 2018 NOKIA Intellectual Property. All rights reserved.
+ * ================================================================================ Licensed under
+ * the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License. ============LICENSE_END=========================================================
+ */
+
+package org.onap.pnfsimulator.simulator;
+
+import com.github.fge.jsonschema.core.exceptions.ProcessingException;
+import java.io.IOException;
+import java.time.Duration;
+import java.time.Instant;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import org.json.JSONObject;
+import org.onap.pnfsimulator.FileProvider;
+import org.onap.pnfsimulator.message.MessageProvider;
+import org.onap.pnfsimulator.simulator.client.RestTemplateAdapter;
+import org.onap.pnfsimulator.simulator.client.RestTemplateAdapterImpl;
+import org.onap.pnfsimulator.simulator.validation.JSONValidator;
+import org.onap.pnfsimulator.simulator.validation.NoRopFilesException;
+import org.onap.pnfsimulator.simulator.validation.ValidationException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
+import org.slf4j.Marker;
+import org.slf4j.MarkerFactory;
+
+public class Simulator extends Thread {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(Simulator.class);
+ private final Marker EXIT = MarkerFactory.getMarker("EXIT");
+ private Map<String, String> contextMap = MDC.getCopyOfContextMap();
+ private boolean isEndless;
+ private String vesUrl;
+ private RestTemplateAdapter httpClient;
+ private JSONObject messageBody;
+ private Duration duration;
+ private Duration interval;
+ private Instant endTime;
+ private JSONObject commonEventHeaderParams;
+ private Optional<JSONObject> pnfRegistrationParams;
+ private Optional<JSONObject> notificationParams;
+ private String xnfUrl;
+ private static final String DEFAULT_OUTPUT_SCHEMA_PATH = "json_schema/output_validator_ves_schema_30.0.1.json";
+ private FileProvider fileProvider;
+ private Exception thrownException = null;
+
+ private Simulator() {}
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ @Override
+ public void run() {
+ setMdcContextMap(contextMap);
+ LOGGER.info("Simulation started - duration: {}, interval: {}s", getDuration(), interval.getSeconds());
+ endTime = Instant.now().plus(duration);
+ while (isEndless || runningTimeNotExceeded()) {
+ try {
+
+ List<String> fileList = fileProvider.getFiles();
+ MessageProvider messageProvider = new MessageProvider();
+ JSONValidator validator = new JSONValidator();
+ messageBody = messageProvider.createMessage(this.commonEventHeaderParams, this.pnfRegistrationParams,
+ this.notificationParams, fileList, this.xnfUrl);
+ validator.validate(messageBody.toString(), DEFAULT_OUTPUT_SCHEMA_PATH);
+
+ LOGGER.info("Message to be sent:\n" + getMessage());
+ httpClient.send(messageBody.toString(), vesUrl);
+ Thread.sleep(interval.toMillis());
+ } catch (InterruptedException | ValidationException | ProcessingException | IOException | NoRopFilesException e) {
+ LOGGER.info("Simulation stopped due to an exception: " + e);
+ thrownException = e;
+ return;
+ }
+ }
+ LOGGER.info(EXIT, "Simulation finished");
+ MDC.clear();
+ }
+
+ private void setMdcContextMap(Map<String, String> mdcContextMap) {
+ if (mdcContextMap != null)
+ MDC.setContextMap(mdcContextMap);
+ }
+
+ private String getMessage() {
+ return messageBody.toString(4);
+ }
+
+ private String getDuration() {
+ return isEndless() ? "infinity" : duration.getSeconds() + "s";
+ }
+
+ private boolean runningTimeNotExceeded() {
+ return Instant.now().isBefore(endTime);
+ }
+
+ public boolean isEndless() {
+ return isEndless;
+ }
+
+ public Exception getThrownException() {
+ return thrownException;
+ }
+
+ public long getRemainingTime() {
+ return Duration.between(Instant.now(), endTime).getSeconds();
+ }
+
+ public static class Builder {
+
+ private String vesUrl;
+ private RestTemplateAdapter httpClient;
+ //private JSONObject messageBody;
+ private Duration duration;
+ private Duration interval;
+ private Optional<JSONObject> notificationParams;
+ private Optional<JSONObject> pnfRegistrationParams;
+ private JSONObject commonEventHeaderParams;
+ private String xnfUrl;
+ private FileProvider fileProvider;
+
+ private Builder() {
+ this.vesUrl = "";
+ this.httpClient = new RestTemplateAdapterImpl();
+ //this.messageBody = new JSONObject();
+ this.duration = Duration.ZERO;
+ this.interval = Duration.ZERO;
+ this.commonEventHeaderParams = new JSONObject();
+ }
+
+ public Builder withVesUrl(String vesUrl) {
+ this.vesUrl = vesUrl;
+ return this;
+ }
+
+ public Builder withCustomRestTemplateAdapter(RestTemplateAdapter httpClient) {
+ this.httpClient = httpClient;
+ return this;
+ }
+
+ /*public Builder withMessageBody(JSONObject messageBody) {
+ this.messageBody = messageBody;
+ return this;
+ }*/
+
+ public Builder withDuration(Duration duration) {
+ this.duration = duration;
+ return this;
+ }
+
+
+ public Builder withInterval(Duration interval) {
+ this.interval = interval;
+ return this;
+ }
+
+ public Builder withCommonEventHeaderParams(JSONObject commonEventHeaderParams) {
+ this.commonEventHeaderParams = commonEventHeaderParams;
+ return this;
+ }
+
+ public Builder withNotificationParams(Optional<JSONObject> notificationParams) {
+ this.notificationParams = notificationParams;
+ return this;
+ }
+
+ public Builder withPnfRegistrationParams(Optional<JSONObject> pnfRegistrationParams) {
+ this.pnfRegistrationParams = pnfRegistrationParams;
+ return this;
+ }
+
+ public Builder withXnfUrl(String xnfUrl) {
+ this.xnfUrl = xnfUrl;
+ return this;
+ }
+
+ public Builder withFileProvider(FileProvider fileProvider) {
+ this.fileProvider = fileProvider;
+ return this;
+ }
+
+ public Simulator build() {
+ Simulator simulator = new Simulator();
+ simulator.vesUrl = this.vesUrl;
+ simulator.httpClient = this.httpClient;
+ //simulator.messageBody = this.messageBody;
+ simulator.duration = this.duration;
+ simulator.interval = this.interval;
+ simulator.xnfUrl = this.xnfUrl;
+ simulator.fileProvider = this.fileProvider;
+ simulator.commonEventHeaderParams = this.commonEventHeaderParams;
+ simulator.pnfRegistrationParams = this.pnfRegistrationParams;
+ simulator.notificationParams = this.notificationParams;
+ simulator.isEndless = duration.equals(Duration.ZERO);
+ return simulator;
+ }
+ }
+}
diff --git a/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/SimulatorFactory.java b/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/SimulatorFactory.java
new file mode 100644
index 0000000..851e6ad
--- /dev/null
+++ b/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/SimulatorFactory.java
@@ -0,0 +1,54 @@
+/*
+ * ============LICENSE_START=======================================================
+ * PNF-REGISTRATION-HANDLER
+ * ================================================================================ Copyright (C)
+ * 2018 NOKIA Intellectual Property. All rights reserved.
+ * ================================================================================ Licensed under
+ * the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License. ============LICENSE_END=========================================================
+ */
+
+package org.onap.pnfsimulator.simulator;
+
+import static java.lang.Integer.parseInt;
+import static org.onap.pnfsimulator.message.MessageConstants.MESSAGE_INTERVAL;
+import static org.onap.pnfsimulator.message.MessageConstants.TEST_DURATION;
+import java.time.Duration;
+import java.util.Optional;
+import org.json.JSONObject;
+import org.onap.pnfsimulator.ConfigurationProvider;
+import org.onap.pnfsimulator.FileProvider;
+import org.onap.pnfsimulator.PnfSimConfig;
+import org.springframework.stereotype.Service;
+
+@Service
+public class SimulatorFactory {
+
+ public Simulator create(JSONObject simulatorParams, JSONObject commonEventHeaderParams,
+ Optional<JSONObject> pnfRegistrationParams, Optional<JSONObject> notificationParams) {
+ PnfSimConfig configuration = ConfigurationProvider.getConfigInstance();
+
+ String xnfUrl = null;
+ if (configuration.getTypefileserver().equals("sftp")) {
+ xnfUrl = configuration.getUrlsftp() + "/";
+ } else if (configuration.getTypefileserver().equals("ftps")) {
+ xnfUrl = configuration.getUrlftps() + "/";
+ }
+
+ String urlVes = configuration.getUrlves();
+ Duration duration = Duration.ofSeconds(parseInt(simulatorParams.getString(TEST_DURATION)));
+ Duration interval = Duration.ofSeconds(parseInt(simulatorParams.getString(MESSAGE_INTERVAL)));
+
+ return Simulator.builder().withVesUrl(urlVes).withXnfUrl(xnfUrl).withDuration(duration)
+ .withFileProvider(new FileProvider()).withCommonEventHeaderParams(commonEventHeaderParams)
+ .withNotificationParams(notificationParams).withPnfRegistrationParams(pnfRegistrationParams)
+ .withInterval(interval).build();
+ }
+}
diff --git a/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/client/RestTemplateAdapter.java b/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/client/RestTemplateAdapter.java
new file mode 100644
index 0000000..92e66b4
--- /dev/null
+++ b/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/client/RestTemplateAdapter.java
@@ -0,0 +1,26 @@
+/*
+ * ============LICENSE_START=======================================================
+ * PNF-REGISTRATION-HANDLER
+ * ================================================================================
+ * Copyright (C) 2018 NOKIA Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.pnfsimulator.simulator.client;
+
+public interface RestTemplateAdapter {
+
+ void send(String content, String url);
+}
diff --git a/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/client/RestTemplateAdapterImpl.java b/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/client/RestTemplateAdapterImpl.java
new file mode 100644
index 0000000..e082637
--- /dev/null
+++ b/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/client/RestTemplateAdapterImpl.java
@@ -0,0 +1,155 @@
+/*
+ * ============LICENSE_START=======================================================
+ * PNF-REGISTRATION-HANDLER
+ * ================================================================================
+ * Copyright (C) 2018 NOKIA Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.pnfsimulator.simulator.client;
+
+import static org.onap.pnfsimulator.logging.MDCVariables.REQUEST_ID;
+import static org.onap.pnfsimulator.logging.MDCVariables.X_INVOCATION_ID;
+import static org.onap.pnfsimulator.logging.MDCVariables.X_ONAP_REQUEST_ID;
+import static org.onap.pnfsimulator.logging.MDCVariables.AUTHORIZATION;
+
+import org.springframework.web.client.ResourceAccessException;
+import java.security.KeyManagementException;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.X509Certificate;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import org.apache.http.conn.ssl.NoopHostnameVerifier;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
+import org.springframework.web.client.RestTemplate;
+
+import org.springframework.http.HttpEntity;
+import org.springframework.http.ResponseEntity;
+import org.springframework.http.HttpHeaders;
+
+import java.util.UUID;
+import org.springframework.web.client.HttpClientErrorException;
+import org.apache.http.client.config.RequestConfig;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
+import org.slf4j.Marker;
+import org.slf4j.MarkerFactory;
+
+public class RestTemplateAdapterImpl implements RestTemplateAdapter {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(RestTemplateAdapterImpl.class);
+ private static final String CONTENT_TYPE = "Content-Type";
+ private static final String APPLICATION_JSON = "application/json";
+ private final Marker INVOKE = MarkerFactory.getMarker("INVOKE");
+ private static final RequestConfig CONFIG = RequestConfig.custom()
+ .setConnectTimeout(1000)
+ .setConnectionRequestTimeout(1000)
+ .setSocketTimeout(1000)
+ .build();
+
+ private RestTemplate restTemplate;
+
+ public RestTemplateAdapterImpl() {
+ try {
+ this.restTemplate = createRestTemplate();
+ } catch (KeyStoreException | NoSuchAlgorithmException | KeyManagementException ex) {
+ LOGGER.warn("Error while creating a RestTemplate object: {}", ex.getMessage());
+ }
+ }
+
+ RestTemplateAdapterImpl(RestTemplate restTemplate) {
+ this.restTemplate = restTemplate;
+ }
+
+ @Override
+ public void send(String content, String url) {
+ try {
+ HttpEntity<String> entity = createPostEntity(content);
+ ResponseEntity<String> response = restTemplate.postForEntity(url, entity, String.class);
+ LOGGER.info(INVOKE, "Message sent, ves response code: {}", response.getStatusCode());
+ } catch (HttpClientErrorException codeEx) {
+ LOGGER.warn("Response body: ", codeEx.getResponseBodyAsString());
+ LOGGER.warn("Error sending message to ves: {}", codeEx.getMessage());
+ LOGGER.warn("URL: {}", url);
+ } catch (ResourceAccessException ioEx) {
+ LOGGER.warn("The URL cannot be reached: {}", ioEx.getMessage());
+ LOGGER.warn("URL: {}", url);
+ }
+ }
+
+ private CloseableHttpClient createClient()
+ throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
+
+ TrustManager[] trustAllCerts = new TrustManager[] {
+ new X509TrustManager() {
+
+ public java.security.cert.X509Certificate[] getAcceptedIssuers() {
+ return new X509Certificate[0];
+ }
+
+ public void checkClientTrusted(
+ java.security.cert.X509Certificate[] certs,
+ String authType) {}
+
+ public void checkServerTrusted(
+ java.security.cert.X509Certificate[] certs,
+ String authType) {}
+ }
+ };
+
+ SSLContext sslContext = SSLContext.getInstance("TLS");
+ sslContext.init(
+ null,
+ trustAllCerts,
+ new java.security.SecureRandom()
+ );
+
+ CloseableHttpClient httpClient = HttpClients
+ .custom()
+ .setSSLContext(sslContext)
+ .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE)
+ .build();
+
+ return httpClient;
+ }
+
+ private RestTemplate createRestTemplate()
+ throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
+
+ CloseableHttpClient client = createClient();
+ HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
+ requestFactory.setHttpClient(client);
+
+ return new RestTemplate(requestFactory);
+
+ }
+
+ private HttpEntity createPostEntity(String content) {
+
+ HttpHeaders headers = new HttpHeaders();
+ headers.set(CONTENT_TYPE, APPLICATION_JSON);
+ headers.set(AUTHORIZATION, MDC.get(AUTHORIZATION));
+ headers.set(X_ONAP_REQUEST_ID, MDC.get(REQUEST_ID));
+ headers.set(X_INVOCATION_ID, UUID.randomUUID().toString());
+
+ return new HttpEntity<>(content, headers);
+
+ }
+} \ No newline at end of file
diff --git a/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/validation/JSONValidator.java b/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/validation/JSONValidator.java
new file mode 100644
index 0000000..89135f9
--- /dev/null
+++ b/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/validation/JSONValidator.java
@@ -0,0 +1,66 @@
+/*
+ * ============LICENSE_START=======================================================
+ * PNF-REGISTRATION-HANDLER
+ * ================================================================================
+ * Copyright (C) 2018 NOKIA Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.pnfsimulator.simulator.validation;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.github.fge.jackson.JsonLoader;
+import com.github.fge.jsonschema.core.exceptions.ProcessingException;
+import com.github.fge.jsonschema.core.report.LogLevel;
+import com.github.fge.jsonschema.core.report.ProcessingMessage;
+import com.github.fge.jsonschema.core.report.ProcessingReport;
+import com.github.fge.jsonschema.main.JsonSchema;
+import com.github.fge.jsonschema.main.JsonSchemaFactory;
+import com.google.gson.JsonParser;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.stream.Collectors;
+import java.util.stream.StreamSupport;
+
+public class JSONValidator {
+
+ public void validate(String data, String jsonSchemaPath)
+ throws ValidationException, ProcessingException, IOException {
+ String jsonSchema = readJsonSchemaAsString(jsonSchemaPath);
+ JsonNode jsonData = JsonLoader.fromString(data);
+ ProcessingReport report = createJsonSchema(jsonSchema).validate(jsonData);
+
+ if (!report.isSuccess()) {
+ throw new ValidationException(constructValidationErrors(report));
+ }
+ }
+
+ private String readJsonSchemaAsString(String schemaPath) throws IOException {
+ try (FileReader reader = new FileReader(schemaPath)) {
+ return new JsonParser().parse(reader).toString();
+ }
+ }
+
+ private JsonSchema createJsonSchema(String schema) throws ProcessingException, IOException {
+ return JsonSchemaFactory.byDefault().getJsonSchema(JsonLoader.fromString(schema));
+ }
+
+ private String constructValidationErrors(ProcessingReport report) {
+ return StreamSupport.stream(report.spliterator(), false)
+ .filter(entry -> entry.getLogLevel() == LogLevel.ERROR)
+ .map(ProcessingMessage::getMessage)
+ .collect(Collectors.joining("\n"));
+ }
+}
diff --git a/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/validation/NoRopFilesException.java b/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/validation/NoRopFilesException.java
new file mode 100644
index 0000000..d3765a8
--- /dev/null
+++ b/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/validation/NoRopFilesException.java
@@ -0,0 +1,28 @@
+/*
+ * ============LICENSE_START=======================================================
+ * PNF-REGISTRATION-HANDLER
+ * ================================================================================
+ * Copyright (C) 2018 NOKIA Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.pnfsimulator.simulator.validation;
+
+public class NoRopFilesException extends Exception {
+
+ public NoRopFilesException(String message) {
+ super(message);
+ }
+}
diff --git a/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/validation/ValidationException.java b/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/validation/ValidationException.java
new file mode 100644
index 0000000..a934917
--- /dev/null
+++ b/pnf-sim-lightweight/src/main/java/org/onap/pnfsimulator/simulator/validation/ValidationException.java
@@ -0,0 +1,28 @@
+/*
+ * ============LICENSE_START=======================================================
+ * PNF-REGISTRATION-HANDLER
+ * ================================================================================
+ * Copyright (C) 2018 NOKIA Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.pnfsimulator.simulator.validation;
+
+public class ValidationException extends Exception {
+
+ public ValidationException(String message) {
+ super(message);
+ }
+}