summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorVijay VK <vv770d@att.com>2018-08-07 00:44:41 +0100
committerVENKATESH KUMAR <vv770d@att.com>2018-08-08 11:05:15 -0400
commit5deddeb4892243627ad342a41d4dcef0f7280a29 (patch)
tree02e43a15b100ec02bffb8ff6f3b822e8b013ca24 /src
parent7752c2d818e6d19e4d805c2fd6760b4a13d601bc (diff)
VES 7.0.1 updates
Initial commit to include the support for below - VES 7.1 API - updated spec and data-format - Response code update per new spec - springfox for swagger doc - New topic defaults Todo - Swagger instrumention to include necessary annotation - Event Transformation 7.x to 5.x - VES7.x response header - AAF cert integration Change-Id: I9bc2223fa362b35ae8a7105acd651fe524a403c5 Signed-off-by: VENKATESH KUMAR <vv770d@att.com> Issue-ID: DCAEGEN2-600
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/onap/dcae/restapi/SwaggerConfig.java55
-rw-r--r--src/main/java/org/onap/dcae/restapi/VesRestController.java301
-rw-r--r--src/test/java/org/onap/dcae/vestest/TestJsonSchemaValidation.java70
-rw-r--r--src/test/resources/ves4_invalid.json (renamed from src/test/resources/VES_invalid.txt)0
-rw-r--r--src/test/resources/ves4_valid.json (renamed from src/test/resources/VES_valid.txt)0
-rw-r--r--src/test/resources/ves7_batch_valid.json67
-rw-r--r--src/test/resources/ves7_invalid.json34
-rw-r--r--src/test/resources/ves7_valid.json34
8 files changed, 395 insertions, 166 deletions
diff --git a/src/main/java/org/onap/dcae/restapi/SwaggerConfig.java b/src/main/java/org/onap/dcae/restapi/SwaggerConfig.java
new file mode 100644
index 00000000..d8554cbe
--- /dev/null
+++ b/src/main/java/org/onap/dcae/restapi/SwaggerConfig.java
@@ -0,0 +1,55 @@
+/*
+ * ============LICENSE_START=======================================================
+ * PROJECT
+ * ================================================================================
+ * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.dcae.restapi;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+@Configuration
+@EnableSwagger2
+public class SwaggerConfig extends WebMvcConfigurationSupport {
+ @Bean
+ public Docket api() {
+ return new Docket(DocumentationType.SWAGGER_2)
+ .select()
+ .apis(RequestHandlerSelectors.any())
+ .paths(PathSelectors.any())
+ .build();
+ }
+
+ @Override
+ protected void addResourceHandlers(ResourceHandlerRegistry registry) {
+ registry
+ .addResourceHandler("swagger-ui.html")
+ .addResourceLocations("classpath:/META-INF/resources/");
+
+ registry
+ .addResourceHandler("/webjars/**")
+ .addResourceLocations("classpath:/META-INF/resources/webjars/");
+ }
+}
diff --git a/src/main/java/org/onap/dcae/restapi/VesRestController.java b/src/main/java/org/onap/dcae/restapi/VesRestController.java
index 92e8d004..58b52765 100644
--- a/src/main/java/org/onap/dcae/restapi/VesRestController.java
+++ b/src/main/java/org/onap/dcae/restapi/VesRestController.java
@@ -55,159 +55,172 @@ import org.springframework.web.bind.annotation.RestController;
@RestController
public class VesRestController {
- private static final Logger LOG = LoggerFactory.getLogger(VesRestController.class);
-
- private static final String FALLBACK_VES_VERSION = "v5";
-
- @Autowired
- private ApplicationSettings collectorProperties;
-
- @Autowired
- private CollectorSchemas schemas;
-
- @Autowired
- @Qualifier("metriclog")
- private Logger metriclog;
-
- @Autowired
- @Qualifier("incomingRequestsLogger")
- private Logger incomingRequestsLogger;
-
- @Autowired
- @Qualifier("errorLog")
- private Logger errorLog;
-
- private LinkedBlockingQueue<JSONObject> inputQueue;
- private String version;
-
- @Autowired
- VesRestController(@Qualifier("incomingRequestsLogger") Logger incomingRequestsLogger,
- @Qualifier("inputQueue") LinkedBlockingQueue<JSONObject> inputQueue) {
- this.incomingRequestsLogger = incomingRequestsLogger;
- this.inputQueue = inputQueue;
- }
-
- @GetMapping("/")
- String mainPage() {
- return "Welcome to VESCollector";
+ private static final Logger LOG = LoggerFactory.getLogger(VesRestController.class);
+
+ private static final String FALLBACK_VES_VERSION = "v5";
+
+ @Autowired private ApplicationSettings collectorProperties;
+
+ @Autowired private CollectorSchemas schemas;
+
+ @Autowired
+ @Qualifier("metriclog")
+ private Logger metriclog;
+
+ @Autowired
+ @Qualifier("incomingRequestsLogger")
+ private Logger incomingRequestsLogger;
+
+ @Autowired
+ @Qualifier("errorLog")
+ private Logger errorLog;
+
+ private LinkedBlockingQueue<JSONObject> inputQueue;
+ private String version;
+
+ @Autowired
+ VesRestController(
+ @Qualifier("incomingRequestsLogger") Logger incomingRequestsLogger,
+ @Qualifier("inputQueue") LinkedBlockingQueue<JSONObject> inputQueue) {
+ this.incomingRequestsLogger = incomingRequestsLogger;
+ this.inputQueue = inputQueue;
+ }
+
+ @GetMapping("/")
+ String mainPage() {
+ return "Welcome to VESCollector";
+ }
+
+ // refactor in next iteration
+ @PostMapping(
+ value = {
+ "/eventListener/v1",
+ "/eventListener/v1/eventBatch",
+ "/eventListener/v2",
+ "/eventListener/v2/eventBatch",
+ "/eventListener/v3",
+ "/eventListener/v3/eventBatch",
+ "/eventListener/v4",
+ "/eventListener/v4/eventBatch",
+ "/eventListener/v5",
+ "/eventListener/v5/eventBatch",
+ "/eventListener/v7",
+ "/eventListener/v7/eventBatch"
+ },
+ consumes = "application/json")
+ ResponseEntity<String> receiveEvent(
+ @RequestBody String jsonPayload, HttpServletRequest httpServletRequest) {
+ String request = httpServletRequest.getRequestURI();
+ extractVersion(request);
+
+ JSONObject jsonObject;
+ try {
+ jsonObject = new JSONObject(jsonPayload);
+ } catch (Exception e) {
+ return ResponseEntity.badRequest().body(ApiException.INVALID_JSON_INPUT.toJSON().toString());
}
- //refactor in next iteration
- @PostMapping(value = {"/eventListener/v1",
- "/eventListener/v1/eventBatch",
- "/eventListener/v2",
- "/eventListener/v2/eventBatch",
- "/eventListener/v3",
- "/eventListener/v3/eventBatch",
- "/eventListener/v4",
- "/eventListener/v4/eventBatch",
- "/eventListener/v5",
- "/eventListener/v5/eventBatch"}, consumes = "application/json")
- ResponseEntity<String> receiveEvent(@RequestBody String jsonPayload, HttpServletRequest httpServletRequest) {
- String request = httpServletRequest.getRequestURI();
- extractVersion(request);
-
- JSONObject jsonObject;
- try {
- jsonObject = new JSONObject(jsonPayload);
- } catch (Exception e) {
- return ResponseEntity.badRequest().body(ApiException.INVALID_JSON_INPUT.toJSON().toString());
- }
+ String uuid = setUpECOMPLoggingForRequest();
+ incomingRequestsLogger.info(
+ String.format(
+ "Received a VESEvent '%s', marked with unique identifier '%s', on api version '%s', from host: '%s'",
+ jsonObject, uuid, version, httpServletRequest.getRemoteHost()));
- String uuid = setUpECOMPLoggingForRequest();
- incomingRequestsLogger.info(String.format(
- "Received a VESEvent '%s', marked with unique identifier '%s', on api version '%s', from host: '%s'",
- jsonObject, uuid, version, httpServletRequest.getRemoteHost()));
-
- if (collectorProperties.jsonSchemaValidationEnabled()) {
- if (isBatchRequest(request) && (jsonObject.has("eventList") && (!jsonObject.has("event")))) {
- if (!conformsToSchema(jsonObject, version)) {
- return errorResponse(ApiException.SCHEMA_VALIDATION_FAILED);
- }
- } else if (!isBatchRequest(request) && (!jsonObject.has("eventList") && (jsonObject.has("event")))) {
- if (!conformsToSchema(jsonObject, version)) {
- return errorResponse(ApiException.SCHEMA_VALIDATION_FAILED);
- }
- } else {
- return errorResponse(ApiException.INVALID_JSON_INPUT);
- }
+ if (collectorProperties.jsonSchemaValidationEnabled()) {
+ if (isBatchRequest(request) && (jsonObject.has("eventList") && (!jsonObject.has("event")))) {
+ if (!conformsToSchema(jsonObject, version)) {
+ return errorResponse(ApiException.SCHEMA_VALIDATION_FAILED);
}
-
- JSONArray commonlyFormatted = convertToJSONArrayCommonFormat(jsonObject, request, uuid, version);
-
- if (!putEventsOnProcessingQueue(commonlyFormatted)) {
- errorLog.error("EVENT_RECEIPT_FAILURE: QueueFull " + ApiException.NO_SERVER_RESOURCES);
- return errorResponse(ApiException.NO_SERVER_RESOURCES);
+ } else if (!isBatchRequest(request)
+ && (!jsonObject.has("eventList") && (jsonObject.has("event")))) {
+ if (!conformsToSchema(jsonObject, version)) {
+ return errorResponse(ApiException.SCHEMA_VALIDATION_FAILED);
}
- return ok().contentType(MediaType.APPLICATION_JSON).body("Message Accepted");
- }
-
- private void extractVersion(String httpServletRequest) {
- version = httpServletRequest.split("/")[2];
+ } else {
+ return errorResponse(ApiException.INVALID_JSON_INPUT);
+ }
}
- private ResponseEntity<String> errorResponse(ApiException noServerResources) {
- return ResponseEntity.status(noServerResources.httpStatusCode)
- .body(noServerResources.toJSON().toString());
- }
-
- private boolean putEventsOnProcessingQueue(JSONArray arrayOfEvents) {
- for (int i = 0; i < arrayOfEvents.length(); i++) {
- metriclog.info("EVENT_PUBLISH_START");
- if (!inputQueue.offer((JSONObject) arrayOfEvents.get(i))) {
- return false;
- }
- }
- LOG.debug("CommonStartup.handleEvents:EVENTS has been published successfully!");
- metriclog.info("EVENT_PUBLISH_END");
- return true;
- }
+ JSONArray commonlyFormatted =
+ convertToJSONArrayCommonFormat(jsonObject, request, uuid, version);
- private boolean conformsToSchema(JSONObject payload, String version) {
- try {
- JsonSchema schema = ofNullable(schemas.getJSONSchemasMap(version).get(version))
- .orElse(schemas.getJSONSchemasMap(version).get(FALLBACK_VES_VERSION));
- ProcessingReport report = schema.validate(JsonLoader.fromString(payload.toString()));
- if (!report.isSuccess()) {
- LOG.warn("Schema validation failed for event: " + payload);
- stream(report.spliterator(), false).forEach(e -> LOG.warn(e.getMessage()));
- return false;
- }
- return report.isSuccess();
- } catch (Exception e) {
- throw new RuntimeException("Unable to validate against schema", e);
- }
+ if (!putEventsOnProcessingQueue(commonlyFormatted)) {
+ errorLog.error("EVENT_RECEIPT_FAILURE: QueueFull " + ApiException.NO_SERVER_RESOURCES);
+ return errorResponse(ApiException.NO_SERVER_RESOURCES);
}
-
- private static JSONArray convertToJSONArrayCommonFormat(JSONObject jsonObject, String request,
- String uuid, String version) {
- JSONArray asArrayEvents = new JSONArray();
- String vesUniqueIdKey = "VESuniqueId";
- String vesVersionKey = "VESversion";
- if (isBatchRequest(request)) {
- JSONArray events = jsonObject.getJSONArray("eventList");
- for (int i = 0; i < events.length(); i++) {
- JSONObject event = new JSONObject().put("event", events.getJSONObject(i));
- event.put(vesUniqueIdKey, uuid + "-" + i);
- event.put(vesVersionKey, version);
- asArrayEvents.put(event);
- }
- } else {
- jsonObject.put(vesUniqueIdKey, uuid);
- jsonObject.put(vesVersionKey, version);
- asArrayEvents = new JSONArray().put(jsonObject);
- }
- return asArrayEvents;
+ // HttpStatus.SC_NO_CONTENT
+ return org.springframework.http.ResponseEntity.accepted()
+ .contentType(MediaType.APPLICATION_JSON)
+ .body("Accepted");
+ }
+
+ private void extractVersion(String httpServletRequest) {
+ version = httpServletRequest.split("/")[2];
+ }
+
+ private ResponseEntity<String> errorResponse(ApiException noServerResources) {
+ return ResponseEntity.status(noServerResources.httpStatusCode)
+ .body(noServerResources.toJSON().toString());
+ }
+
+ private boolean putEventsOnProcessingQueue(JSONArray arrayOfEvents) {
+ for (int i = 0; i < arrayOfEvents.length(); i++) {
+ metriclog.info("EVENT_PUBLISH_START");
+ if (!inputQueue.offer((JSONObject) arrayOfEvents.get(i))) {
+ return false;
+ }
}
-
- private static String setUpECOMPLoggingForRequest() {
- final UUID uuid = UUID.randomUUID();
- LoggingContext localLC = VESLogger.getLoggingContextForThread(uuid);
- localLC.put(EcompFields.kBeginTimestampMs, SaClock.now());
- return uuid.toString();
+ LOG.debug("CommonStartup.handleEvents:EVENTS has been published successfully!");
+ metriclog.info("EVENT_PUBLISH_END");
+ return true;
+ }
+
+ private boolean conformsToSchema(JSONObject payload, String version) {
+ try {
+ JsonSchema schema =
+ ofNullable(schemas.getJSONSchemasMap(version).get(version))
+ .orElse(schemas.getJSONSchemasMap(version).get(FALLBACK_VES_VERSION));
+ ProcessingReport report = schema.validate(JsonLoader.fromString(payload.toString()));
+ if (!report.isSuccess()) {
+ LOG.warn("Schema validation failed for event: " + payload);
+ stream(report.spliterator(), false).forEach(e -> LOG.warn(e.getMessage()));
+ return false;
+ }
+ return report.isSuccess();
+ } catch (Exception e) {
+ throw new RuntimeException("Unable to validate against schema", e);
}
-
- private static boolean isBatchRequest(String request) {
- return request.contains("eventBatch");
+ }
+
+ private static JSONArray convertToJSONArrayCommonFormat(
+ JSONObject jsonObject, String request, String uuid, String version) {
+ JSONArray asArrayEvents = new JSONArray();
+ String vesUniqueIdKey = "VESuniqueId";
+ String vesVersionKey = "VESversion";
+ if (isBatchRequest(request)) {
+ JSONArray events = jsonObject.getJSONArray("eventList");
+ for (int i = 0; i < events.length(); i++) {
+ JSONObject event = new JSONObject().put("event", events.getJSONObject(i));
+ event.put(vesUniqueIdKey, uuid + "-" + i);
+ event.put(vesVersionKey, version);
+ asArrayEvents.put(event);
+ }
+ } else {
+ jsonObject.put(vesUniqueIdKey, uuid);
+ jsonObject.put(vesVersionKey, version);
+ asArrayEvents = new JSONArray().put(jsonObject);
}
-} \ No newline at end of file
+ return asArrayEvents;
+ }
+
+ private static String setUpECOMPLoggingForRequest() {
+ final UUID uuid = UUID.randomUUID();
+ LoggingContext localLC = VESLogger.getLoggingContextForThread(uuid);
+ localLC.put(EcompFields.kBeginTimestampMs, SaClock.now());
+ return uuid.toString();
+ }
+
+ private static boolean isBatchRequest(String request) {
+ return request.contains("eventBatch");
+ }
+}
diff --git a/src/test/java/org/onap/dcae/vestest/TestJsonSchemaValidation.java b/src/test/java/org/onap/dcae/vestest/TestJsonSchemaValidation.java
index c39fb013..9146cdac 100644
--- a/src/test/java/org/onap/dcae/vestest/TestJsonSchemaValidation.java
+++ b/src/test/java/org/onap/dcae/vestest/TestJsonSchemaValidation.java
@@ -32,26 +32,52 @@ import org.onap.dcae.SchemaValidator;
public class TestJsonSchemaValidation {
- @Test
- public void shouldValidEventPassSchema_27_2() throws IOException {
- String result = SchemaValidator.validateAgainstSchema(
- readJSONFromFile("src/test/resources/VES_valid.txt").toString(),
- readJSONFromFile("etc/CommonEventFormat_27.2.json").toString());
- assertEquals(result, "true");
- }
-
-
- @Test
- public void shouldInvalidEventDoesNotPassSchema_27_2() throws IOException {
- String result = SchemaValidator.validateAgainstSchema(
- readJSONFromFile("src/test/resources/VES_invalid.txt").toString(),
- readJSONFromFile("etc/CommonEventFormat_27.2.json").toString());
- assertEquals(result, "false");
- }
-
-
- private static JsonObject readJSONFromFile(String path) throws IOException {
- return (JsonObject) new JsonParser().parse(new String(readAllBytes(Paths.get(path))));
- }
-}
+ @Test
+ public void shouldValidEventPassSchema_27_2() throws IOException {
+ String result =
+ SchemaValidator.validateAgainstSchema(
+ readJSONFromFile("src/test/resources/ves4_valid.json").toString(),
+ readJSONFromFile("etc/CommonEventFormat_27.2.json").toString());
+ assertEquals(result, "true");
+ }
+
+ @Test
+ public void shouldInvalidEventDoesNotPassSchema_27_2() throws IOException {
+ String result =
+ SchemaValidator.validateAgainstSchema(
+ readJSONFromFile("src/test/resources/ves4_invalid.json").toString(),
+ readJSONFromFile("etc/CommonEventFormat_27.2.json").toString());
+ assertEquals(result, "false");
+ }
+
+ @Test
+ public void shouldValidEventPassSchema_30_0_1() throws IOException {
+ String result =
+ SchemaValidator.validateAgainstSchema(
+ readJSONFromFile("src/test/resources/ves7_valid.json").toString(),
+ readJSONFromFile("etc/CommonEventFormat_30.0.1.json").toString());
+ assertEquals(result, "true");
+ }
+ @Test
+ public void shouldValidEventBatchPassSchema_30_0_1() throws IOException {
+ String result =
+ SchemaValidator.validateAgainstSchema(
+ readJSONFromFile("src/test/resources/ves7_batch_valid.json").toString(),
+ readJSONFromFile("etc/CommonEventFormat_30.0.1.json").toString());
+ assertEquals(result, "true");
+ }
+
+ @Test
+ public void shouldInvalidEventDoesNotPassSchema_30_0_1() throws IOException {
+ String result =
+ SchemaValidator.validateAgainstSchema(
+ readJSONFromFile("src/test/resources/ves7_invalid.json").toString(),
+ readJSONFromFile("etc/CommonEventFormat_30.0.1.json").toString());
+ assertEquals(result, "false");
+ }
+
+ private static JsonObject readJSONFromFile(String path) throws IOException {
+ return (JsonObject) new JsonParser().parse(new String(readAllBytes(Paths.get(path))));
+ }
+}
diff --git a/src/test/resources/VES_invalid.txt b/src/test/resources/ves4_invalid.json
index 67d638ed..67d638ed 100644
--- a/src/test/resources/VES_invalid.txt
+++ b/src/test/resources/ves4_invalid.json
diff --git a/src/test/resources/VES_valid.txt b/src/test/resources/ves4_valid.json
index 907aaf38..907aaf38 100644
--- a/src/test/resources/VES_valid.txt
+++ b/src/test/resources/ves4_valid.json
diff --git a/src/test/resources/ves7_batch_valid.json b/src/test/resources/ves7_batch_valid.json
new file mode 100644
index 00000000..1db81eed
--- /dev/null
+++ b/src/test/resources/ves7_batch_valid.json
@@ -0,0 +1,67 @@
+
+{
+ "eventList": [
+ {
+ "commonEventHeader": {
+ "version": "4.0.1",
+ "vesEventListenerVersion": "7.0.1",
+ "domain": "fault",
+ "eventName": "Fault_Vscf:Acs-Ericcson_PilotNumberPoolExhaustion",
+ "eventId": "fault0000250",
+ "sequence": 1,
+ "priority": "High",
+ "reportingEntityId": "cc305d54-75b4-431b-adb2-eb6b9e541234",
+ "reportingEntityName": "ibcx0001vm002oam0011234",
+ "sourceId": "de305d54-75b4-431b-adb2-eb6b9e546014",
+ "sourceName": "scfx0001vm002cap001",
+ "nfVendorName": "Ericsson",
+ "nfNamingCode": "scfx",
+ "nfcNamingCode": "ssc",
+ "startEpochMicrosec": 1413378172000000,
+ "lastEpochMicrosec": 1413378172000000,
+ "timeZoneOffset": "UTC-05:30"
+ },
+ "faultFields": {
+ "faultFieldsVersion": "4.0",
+ "alarmCondition": "PilotNumberPoolExhaustion",
+ "eventSourceType": "other",
+ "specificProblem": "Calls cannot complete - pilot numbers are unavailable",
+ "eventSeverity": "CRITICAL",
+ "vfStatus": "Active",
+ "alarmAdditionalInformation": {
+ "PilotNumberPoolSize": "1000"
+ }
+ }
+ },
+ {
+ "commonEventHeader": {
+ "version": "4.0.1",
+ "vesEventListenerVersion": "7.0.1",
+ "domain": "fault",
+ "eventName": " Fault_Vscf:Acs-Ericcson_RecordingServerUnreachable",
+ "eventId": "fault0000251",
+ "sequence": 0,
+ "priority": "High",
+ "reportingEntityId": "cc305d54-75b4-431b-adb2-eb6b9e541234",
+ "reportingEntityName": "ibcx0001vm002oam0011234",
+ "sourceId": "de305d54-75b4-431b-adb2-eb6b9e546014",
+ "sourceName": "scfx0001vm002cap001",
+ "nfVendorName": "Ericsson",
+ "nfNamingCode": "scfx",
+ "nfcNamingCode": "ssc",
+ "startEpochMicrosec": 1413378172000010,
+ "lastEpochMicrosec": 1413378172000010,
+ "timeZoneOffset": "UTC-05:30"
+ },
+ "faultFields": {
+ "faultFieldsVersion": "4.0",
+ "alarmCondition": "RecordingServerUnreachable",
+ "eventSourceType": "other",
+ "specificProblem": "Recording server unreachable",
+ "eventSeverity": "CRITICAL",
+ "vfStatus": "Active"
+ }
+ }
+ ]
+}
+
diff --git a/src/test/resources/ves7_invalid.json b/src/test/resources/ves7_invalid.json
new file mode 100644
index 00000000..74c0a92f
--- /dev/null
+++ b/src/test/resources/ves7_invalid.json
@@ -0,0 +1,34 @@
+{
+ "event": {
+ "commonEventHeader": {
+ "version": "4.0.1",
+ "vesEventListenerVersion": "30.0.1",
+ "domain": "fault",
+ "eventName": "Fault_Vscf:Acs-Ericcson_PilotNumberPoolExhaustion",
+ "eventId": "fault0000245",
+ "sequence": 1,
+ "priority": "High",
+ "reportingEntityId": "cc305d54-75b4-431b-adb2-eb6b9e541234",
+ "reportingEntityName": "ibcx0001vm002oam001",
+ "sourceId": "de305d54-75b4-431b-adb2-eb6b9e546014",
+ "sourceName": "scfx0001vm002cap001",
+ "nfVendorName": "Ericsson",
+ "nfNamingCode": "scfx",
+ "nfcNamingCode": "ssc",
+ "startEpochMicrosec": 1413378172000000,
+ "lastEpochMicrosec": 1413378172000000,
+ "timeZoneOffset": "UTC-05:30"
+ },
+ "faultFields": {
+ "faultFieldsVersion": "4.0",
+ "alarmCondition": "PilotNumberPoolExhaustion",
+ "eventSourceType": "other",
+ "specificProblem": "Calls cannot complete - pilot numbers are unavailable",
+ "eventSeverity": "CRITICAL",
+ "vfStatus": "Active",
+ "alarmAdditionalInformation": {
+ "PilotNumberPoolSize": "1000"
+ }
+ }
+ }
+}
diff --git a/src/test/resources/ves7_valid.json b/src/test/resources/ves7_valid.json
new file mode 100644
index 00000000..19116b15
--- /dev/null
+++ b/src/test/resources/ves7_valid.json
@@ -0,0 +1,34 @@
+{
+ "event": {
+ "commonEventHeader": {
+ "version": "4.0.1",
+ "vesEventListenerVersion": "7.0.1",
+ "domain": "fault",
+ "eventName": "Fault_Vscf:Acs-Ericcson_PilotNumberPoolExhaustion",
+ "eventId": "fault0000245",
+ "sequence": 1,
+ "priority": "High",
+ "reportingEntityId": "cc305d54-75b4-431b-adb2-eb6b9e541234",
+ "reportingEntityName": "ibcx0001vm002oam001",
+ "sourceId": "de305d54-75b4-431b-adb2-eb6b9e546014",
+ "sourceName": "scfx0001vm002cap001",
+ "nfVendorName": "Ericsson",
+ "nfNamingCode": "scfx",
+ "nfcNamingCode": "ssc",
+ "startEpochMicrosec": 1413378172000000,
+ "lastEpochMicrosec": 1413378172000000,
+ "timeZoneOffset": "UTC-05:30"
+ },
+ "faultFields": {
+ "faultFieldsVersion": "4.0",
+ "alarmCondition": "PilotNumberPoolExhaustion",
+ "eventSourceType": "other",
+ "specificProblem": "Calls cannot complete - pilot numbers are unavailable",
+ "eventSeverity": "CRITICAL",
+ "vfStatus": "Active",
+ "alarmAdditionalInformation": {
+ "PilotNumberPoolSize": "1000"
+ }
+ }
+ }
+}