aboutsummaryrefslogtreecommitdiffstats
path: root/common/onap-generic-artifact-browser/onap-generic-artifact-browser-service/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'common/onap-generic-artifact-browser/onap-generic-artifact-browser-service/src/test')
-rw-r--r--common/onap-generic-artifact-browser/onap-generic-artifact-browser-service/src/test/java/org/onap/sdc/gab/yaml/GABYamlParserTest.java195
-rw-r--r--common/onap-generic-artifact-browser/onap-generic-artifact-browser-service/src/test/resources/yaml/faultRegistration.yml412
-rw-r--r--common/onap-generic-artifact-browser/onap-generic-artifact-browser-service/src/test/resources/yaml/invalid.yml2
3 files changed, 609 insertions, 0 deletions
diff --git a/common/onap-generic-artifact-browser/onap-generic-artifact-browser-service/src/test/java/org/onap/sdc/gab/yaml/GABYamlParserTest.java b/common/onap-generic-artifact-browser/onap-generic-artifact-browser-service/src/test/java/org/onap/sdc/gab/yaml/GABYamlParserTest.java
new file mode 100644
index 0000000000..6589209f96
--- /dev/null
+++ b/common/onap-generic-artifact-browser/onap-generic-artifact-browser-service/src/test/java/org/onap/sdc/gab/yaml/GABYamlParserTest.java
@@ -0,0 +1,195 @@
+/*
+ * ============LICENSE_START=======================================================
+ * GAB
+ * ================================================================================
+ * Copyright (C) 2019 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.sdc.gab.yaml;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+import com.google.common.collect.Sets;
+import java.io.IOException;
+import java.util.Collections;
+import org.junit.jupiter.api.Test;
+import org.onap.sdc.gab.model.GABResult;
+import org.onap.sdc.gab.model.GABResultEntry;
+import org.onap.sdc.gab.model.GABResults;
+
+class GABYamlParserTest {
+
+ private static final String EVENT_PRESENCE = "event.presence";
+ private static final String REQUIRED = "required";
+ private static final String INVALID_EVENT_HEARTBEAT_ACTION = "event.heartbeatAction.[1]";
+ private static final String EVENT_HEARTBEAT_ACTION = "event.heartbeatAction[1]";
+ private static final String FAULT = "fault";
+ private static final String DOMAIN_VALUE = "event.structure.commonEventHeader.structure.domain.value";
+ private static final String VNF_DOWN = "vnfDown";
+ private static final String SYSLOG = "syslog";
+ private static final String EVENT_STRUCTURE_HEARTBEAT_FIELDS_PRESENCE = "event.structure.heartbeatFields.presence";
+ private static final String HEARTBEAT = "heartbeat";
+ private static final String MEASUREMENTS_FOR_VF_SCALING = "measurementsForVfScaling";
+ private static final String EVENT = "event";
+ private static final String TEST = "test";
+ private static final String NONEXISTENT_FILE = "nonexistent.file";
+ private static final String FAULT_REGISTRATION_YML = "yaml/faultRegistration.yml";
+ private static final String INVALID_YML = "yaml/invalid.yml";
+
+ @Test
+ void shouldNotParseAnyYamlAndGenerateEmptyMapOfKeys() throws Exception {
+ GABResults result;
+ try (GABYamlParser yamlParser = new GABYamlParser(new YamlParser())){
+ result = yamlParser.filter(TEST).collect();
+ }
+ assertResultIsEmpty(result);
+ }
+
+ @Test
+ void shouldParseNonexistentYamlAndGenerateEmptyMapOfKeys() throws Exception {
+ GABResults result;
+ try (GABYamlParser yamlParser = new GABYamlParser(new YamlParser())){
+ result = yamlParser.parseFile(NONEXISTENT_FILE).collect();
+ }
+ assertResultIsEmpty(result);
+ }
+
+ @Test
+ void shouldParseExistentFileYamlAndGenerateEmptyMapOfKeysIfNoKeywordsSearched() throws Exception {
+ GABResults result;
+ try (GABYamlParser yamlParser = new GABYamlParser(new YamlParser())){
+ result = yamlParser.parseFile(FAULT_REGISTRATION_YML).collect();
+ }
+ assertResultIsEmpty(result);
+ }
+
+ @Test
+ void shouldParseFaultRegistrationAndGenerateMapOfKeysOnSingleFilter() throws Exception {
+ GABResults result;
+ try (GABYamlParser yamlParser = new GABYamlParser(new YamlParser())){
+ result = yamlParser.parseFile(FAULT_REGISTRATION_YML)
+ .filter(EVENT_PRESENCE).filter(EVENT_PRESENCE).collect();
+
+ }
+ assertRowsSize(result, 5);
+ assertThatEntryIsEqualTo(result, 0, 0, EVENT_PRESENCE, REQUIRED);
+ }
+
+ @Test
+ void shouldParseFaultRegistrationAndGenerateMapOfKeysOnTwoIndependentFilters() throws Exception {
+ GABResults result;
+ try (GABYamlParser yamlParser = new GABYamlParser(new YamlParser())){
+ result = yamlParser.parseFile(FAULT_REGISTRATION_YML)
+ .filter(DOMAIN_VALUE)
+ .filter(EVENT_PRESENCE)
+ .collect();
+
+ }
+ assertRowsSize(result, 5);
+ assertThatEntryIsEqualTo(result, 0 , 0, DOMAIN_VALUE, FAULT);
+ assertThatEntryIsEqualTo(result, 4 , 0, DOMAIN_VALUE, SYSLOG);
+ }
+
+ @Test
+ void shouldParseFaultRegistrationAndGenerateMapOfKeysOnTwoDependentFilters() throws Exception {
+ GABResults result;
+ try (GABYamlParser yamlParser = new GABYamlParser(new YamlParser())){
+ result = yamlParser.parseFile(FAULT_REGISTRATION_YML)
+ .filter(Sets.newHashSet(DOMAIN_VALUE, EVENT_PRESENCE))
+ .collect();
+
+ }
+ assertRowsSize(result, 5);
+ assertThatEntryIsEqualTo(result, 0, 0, DOMAIN_VALUE, FAULT);
+ assertThatEntryIsEqualTo(result, 4, 0, DOMAIN_VALUE, SYSLOG);
+ }
+
+ @Test
+ void shouldParseFaultRegistrationAndGenerateMapOfKeysOnThreeCombinedFilters() throws Exception {
+ GABResults result;
+ try (GABYamlParser yamlParser = new GABYamlParser(new YamlParser())){
+ result = yamlParser.parseFile(FAULT_REGISTRATION_YML)
+ .filter(Sets.newHashSet(DOMAIN_VALUE, EVENT_PRESENCE))
+ .filter(EVENT_STRUCTURE_HEARTBEAT_FIELDS_PRESENCE)
+ .collect();
+
+ }
+ assertRowsSize(result, 5);
+ assertThatEntryIsEqualTo(result, 0,0, DOMAIN_VALUE, FAULT);
+ assertThatEntryIsEqualTo(result, 0,1, EVENT_PRESENCE, REQUIRED);
+ assertThatEntryIsEqualTo(result, 1,0, DOMAIN_VALUE, FAULT);
+ assertThatEntryIsEqualTo(result, 1,1, EVENT_PRESENCE, REQUIRED);
+ assertThatEntryIsEqualTo(result, 2,0, DOMAIN_VALUE, HEARTBEAT);
+ assertThatEntryIsEqualTo(result, 2,1, EVENT_PRESENCE, REQUIRED);
+ assertThatEntryIsEqualTo(result, 3,0, DOMAIN_VALUE, MEASUREMENTS_FOR_VF_SCALING);
+ assertThatEntryIsEqualTo(result, 3,1, EVENT_PRESENCE, REQUIRED);
+ assertThatEntryIsEqualTo(result, 4,0, DOMAIN_VALUE, SYSLOG);
+ assertThatEntryIsEqualTo(result, 4,1, EVENT_PRESENCE, REQUIRED);
+ }
+
+ @Test
+ void shouldParseFaultRegistrationAndGenerateMapOfKeysOnFilterFromArray() throws Exception {
+ GABResults result;
+ try (GABYamlParser yamlParser = new GABYamlParser(new YamlParser())){
+ result = yamlParser.parseFile(FAULT_REGISTRATION_YML)
+ .filter(Sets.newHashSet(EVENT_HEARTBEAT_ACTION, EVENT_PRESENCE))
+ .collect();
+ }
+ assertRowsSize(result, 5);
+ assertThatEntryIsEqualTo(result,0,0, EVENT_PRESENCE, REQUIRED);
+ assertThatEntryIsEqualTo(result,2,1, EVENT_HEARTBEAT_ACTION, VNF_DOWN);
+ }
+
+ @Test
+ void shouldParseFaultRegistrationAndGenerateMapOfKeysRemovingInvalidKey() throws Exception {
+ GABResults result;
+ try (GABYamlParser yamlParser = new GABYamlParser(new YamlParser())){
+ result = yamlParser.parseFile(FAULT_REGISTRATION_YML)
+ .filter(Sets.newHashSet(INVALID_EVENT_HEARTBEAT_ACTION, EVENT_PRESENCE))
+ .collect();
+ }
+ assertRowsSize(result, 5);
+ assertThatEntryIsEqualTo(result, 0, 0, EVENT_PRESENCE, REQUIRED);
+ }
+
+ @Test
+ void shouldParseInvalidYamlAndGenerateIOException() {
+ assertThrows(IOException.class, () -> {
+ try (GABYamlParser yamlParser = new GABYamlParser(new YamlParser())){
+ yamlParser.parseFile(INVALID_YML)
+ .filter(EVENT)
+ .collect();
+ }});
+ }
+
+ private void assertThatEntryIsEqualTo(GABResults result, int rowIndex, int entryIndex, String path, String data){
+ GABResultEntry entry = result.getRows().get(rowIndex).getEntries().get(entryIndex);
+ assertThat(entry.getData(), is(equalTo(data)));
+ assertThat(entry.getPath(), is(equalTo(path)));
+ }
+
+ private void assertResultIsEmpty(GABResults result) {
+ assertThat(result.getRows(), is(equalTo(Collections.<GABResult>emptyList())));
+ }
+
+ private void assertRowsSize(GABResults results, int size){
+ assertThat(results.getRows().size(), is(equalTo(size)));
+ }
+
+} \ No newline at end of file
diff --git a/common/onap-generic-artifact-browser/onap-generic-artifact-browser-service/src/test/resources/yaml/faultRegistration.yml b/common/onap-generic-artifact-browser/onap-generic-artifact-browser-service/src/test/resources/yaml/faultRegistration.yml
new file mode 100644
index 0000000000..447af5e469
--- /dev/null
+++ b/common/onap-generic-artifact-browser/onap-generic-artifact-browser-service/src/test/resources/yaml/faultRegistration.yml
@@ -0,0 +1,412 @@
+---
+# registration for Fault\_vMrf\_alarm003
+# Constants: the values of domain, eventName, priority, vfstatus
+# , version, alarmCondition, eventSeverity, eventSourceType,
+# faultFieldsVersion, specificProblem,
+# Variables (to be supplied at runtime) include: eventId, lastEpochMicrosec,
+
+# reportingEntityId, reportingEntityName, sequence, sourceId, sourceName,
+# startEpochMicrosec
+
+event: {presence: required, action: [ any, any, alarm003,RECO-rebuildVnf ],
+ structure: {
+ commonEventHeader: {presence: required, structure: {
+ domain: {presence: required, value: fault},
+ eventName: {presence: required, value: Fault\_vMrf\_alarm003},
+ eventId: {presence: required},
+ nfNamingCode: {value: mrfx},
+ priority: {presence: required, value: Medium},
+ reportingEntityId: {presence: required},
+ reportingEntityName: {presence: required},
+ sequence: {presence: required},
+ sourceId: {presence: required},
+ sourceName: {presence: required},
+ startEpochMicrosec: {presence: required},
+ lastEpochMicrosec: {presence: required},
+ version: {presence: required, value: 3.0}
+ }},
+ faultFields: {presence: required, structure: {
+ alarmCondition: {presence: required, value: alarm003},
+ eventSeverity: {presence: required, value: MAJOR},
+ eventSourceType: {presence: required, value: virtualNetworkFunction},
+ faultFieldsVersion: {presence: required, value: 2.0},
+ specificProblem: {presence: required, value: "Configuration file was
+ corrupt or not present"},
+ vfStatus: {presence: required, value: "Requesting Termination"}
+ }}
+ }}
+---
+# registration for clearing Fault\_vMrf\_alarm003Cleared
+# Constants: the values of domain, eventName, priority,
+# , version, alarmCondition, eventSeverity, eventSourceType,
+# faultFieldsVersion, specificProblem,
+# Variables (to be supplied at runtime) include: eventId,lastEpochMicrosec,
+# reportingEntityId, reportingEntityName, sequence, sourceId,
+# sourceName, startEpochMicrosec, vfStatus
+event: {presence: required, action: [ any, any, alarm003, Clear ], structure: {
+ commonEventHeader: {presence: required, structure: {
+ domain: {presence: required, value: fault},
+ eventName: {presence: required, value: Fault\_vMrf\_alarm003Cleared},
+ eventId: {presence: required},
+ nfNamingCode: {value: mrfx},
+ priority: {presence: required, value: Medium},
+ reportingEntityId: {presence: required},
+ reportingEntityName: {presence: required},
+ sequence: {presence: required},
+ sourceId: {presence: required},
+ sourceName: {presence: required},
+ startEpochMicrosec: {presence: required},
+ lastEpochMicrosec: {presence: required},
+ version: {presence: required, value: 3.0}
+ }},
+ faultFields: {presence: required, structure: {
+ alarmCondition: {presence: required, value: alarm003},
+ eventSeverity: {presence: required, value: NORMAL},
+ eventSourceType: {presence: required, value: virtualNetworkFunction},
+ faultFieldsVersion: {presence: required, value: 2.0},
+ specificProblem: {presence: required, value: "Valid configuration file found"},
+ vfStatus: {presence: required, value: "Requesting Termination"}
+ }}
+}}
+---
+# registration for Heartbeat_vMRF
+# Constants: the values of domain, eventName, priority, version
+# Variables (to be supplied at runtime) include: eventId, lastEpochMicrosec,
+# reportingEntityId, reportingEntityName, sequence, sourceId, sourceName,
+# startEpochMicrosec
+event: {presence: required, heartbeatAction: [3, vnfDown,RECO-rebuildVnf],
+ structure: {
+ commonEventHeader: {presence: required, structure: {
+ domain: {presence: required, value: heartbeat},
+ eventName: {presence: required, value: Heartbeat\_vMrf},
+ eventId: {presence: required},
+ nfNamingCode: {value: mrfx},
+ priority: {presence: required, value: Normal},
+ reportingEntityId: {presence: required},
+ reportingEntityName: {presence: required},
+ sequence: {presence: required},
+ sourceId: {presence: required},
+ sourceName: {presence: required},
+ startEpochMicrosec: {presence: required},
+ lastEpochMicrosec: {presence: required},
+ version: {presence: required, value: 3.0}
+ }},
+ heartbeatFields: {presence: optional, structure:{
+ heartbeatFieldsVersion: {presence: required, value: 1.0},
+ heartbeatInterval: {presence: required, range: [ 15, 300 ], default: 60 }
+ }}
+ }}
+---
+# registration for Mfvs\_vMRF
+# Constants: the values of domain, eventName, priority, version,
+# measurementFieldsVersion, additionalMeasurements.namedArrayOfFields.name,
+# Variables (to be supplied at runtime) include: eventId, reportingEntityName, sequence,
+# sourceName, start/lastEpochMicrosec, measurementInterval,
+# concurrentSessions, requestRate, numberOfMediaPortsInUse,
+# cpuUsageArray.cpuUsage,cpuUsage.cpuIdentifier, cpuUsage.percentUsage,
+# additionalMeasurements.namedArrayOfFields.arrayOfFields,
+# vNicPerformance.receivedOctetsAccumulated,
+# vNicPerformance.transmittedOctetsAccumulated,
+# vNicPerformance.receivedTotalPacketsAccumulated,
+# vNicPerformance.transmittedTotalPacketsAccumulated,
+# vNicPerformance.vNicIdentifier, vNicPerformance.receivedOctetsDelta,
+# vNicPerformance.receivedTotalPacketsDelta,
+# vNicPerformance.transmittedOctetsDelta,
+# vNicPerformance.transmittedTotalPacketsDelta,
+# vNicPerformance.valuesAreSuspect, memoryUsageArray.memoryUsage,
+# memoryUsage.memoryConfigured, memoryUsage.vmIdentifier,
+# memoryUsage.memoryUsed, memoryUsage.memoryFree
+event: {presence: required, structure: {
+ commonEventHeader: {presence: required, structure: {
+ domain: {presence: required, value: measurementsForVfScaling},
+ eventName: {presence: required, value: Mfvs\_vMrf},
+ eventId: {presence: required},
+ nfNamingCode: {value: mrfx},
+ priority: {presence: required, value: Normal},
+ reportingEntityId: {presence: required},
+ reportingEntityName: {presence: required},
+ sequence: {presence: required},
+ sourceId: {presence: required},
+ sourceName: {presence: required},
+ startEpochMicrosec: {presence: required},
+ lastEpochMicrosec: {presence: required},
+ version: {presence: required, value: 3.0}
+ }},
+ measurementsForVfScalingFields: {presence: required, structure: {
+ measurementFieldsVersion: {presence: required, value: 2.0},
+ measurementInterval: {presence: required, range: [ 60, 3600 ], default:300},
+ concurrentSessions: {presence: required, range: [ 0, 100000 ]},
+ requestRate: {presence: required, range: [ 0, 100000 ]},
+ numberOfMediaPortsInUse: {presence: required, range: [ 0, 100000 ]},
+ cpuUsageArray: {presence: required, array: [
+ cpuUsage: {presence: required, structure: {
+ cpuIdentifier: {presence: required},
+ percentUsage: {presence: required, range: [ 0, 100 ],
+ action: [80, up, CpuUsageHigh, RECO-scaleOut],
+ action: [10, down, CpuUsageLow, RECO-scaleIn]}
+ }}
+ ]},
+ memoryUsageArray: {presence: required, array: [
+ memoryUsage: {presence: required, structure: {
+ memoryConfigured: {presence: required, value: 33554432},
+ memoryFree: {presence: required, range: [ 0, 33554432 ],
+ action: [100, down, FreeMemLow, RECO-scaleOut],
+ action: [30198989, up, FreeMemHigh, RECO-scaleIn]},
+ memoryUsed: {presence: required, range: [ 0, 33554432 ]},
+ vmIdentifier: {presence: required}
+ }}
+ ]},
+ additionalMeasurements: {presence: required, array: [
+ namedArrayOfFields: {presence: required, structure: {
+ name: {presence: required, value: licenseUsage},
+ arrayOfFields: {presence: required, array: [
+ field: {presence: required, structure: {
+ name: {presence: required, value: G711AudioPort},
+ value: {presence: required, range: [ 0, 100000 ],
+ units: numberOfPorts }
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: G729AudioPort},
+ value: {presence: required, range: [ 0, 100000 ],
+ units: numberOfPorts }
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: G722AudioPort},
+ value: {presence: required, range: [ 0, 100000 ],
+ units: numberOfPorts }
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: AMRAudioPort},
+ value: {presence: required, range: [ 0, 100000 ],
+ units: numberOfPorts }
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: AMRWBAudioPort},
+ value: {presence: required, range: [ 0, 100000 ],
+ units: numberOfPorts }
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: OpusAudioPort},
+ value: {presence: required, range: [ 0, 100000 ],
+ units: numberOfPorts }
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: H263VideoPort},
+ value: {presence: required, range: [ 0, 100000 ],
+ units: numberOfPorts }
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: H264NonHCVideoPort},
+ value: {presence: required, range: [ 0, 100000 ],
+ units: numberOfPorts }
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: H264HCVideoPort},
+ value: {presence: required, range: [ 0, 100000 ],
+ units: numberOfPorts }
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: MPEG4VideoPort},
+ value: {presence: required, range: [ 0, 100000 ],
+ units: numberOfPorts }
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: VP8NonHCVideoPort},
+ value: {presence: required, range: [ 0, 100000 ],
+ units: numberOfPorts }
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: VP8HCVideoPort},
+ value: {presence: required, range: [ 0, 100000 ],
+ units: numberOfPorts }
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: PLC},
+ value: {presence: required, range: [ 0, 100000 ],
+ units: numberOfPorts }
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: AEC},
+ value: {presence: required, range: [ 0, 100000 ],
+ units: numberOfPorts }
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: NR},
+ value: {presence: required, range: [ 0, 100000 ],
+ units: numberOfPorts }
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: NG},
+ value: {presence: required, range: [ 0, 100000 ],
+ units: numberOfPorts }
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: NLD},
+ value: {presence: required, range: [ 0, 100000 ],
+ units: numberOfPorts }
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: G711FaxPort},
+ value: {presence: required, range: [ 0, 100000 ],
+ units: numberOfPorts }
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: T38FaxPort},
+ value: {presence: required, range: [ 0, 100000 ],
+ units: numberOfPorts }
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: RFactor},
+ value: {presence: required, range: [ 0, 100000 ],
+ units: numberOfPorts }
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: T140TextPort},
+ value: {presence: required, range: [ 0, 100000 ],
+ units: numberOfPorts }
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: EVSAudioPort},
+ value: {presence: required, range: [ 0, 100000 ],
+ units: numberOfPorts }
+ }}
+ ]}
+ }},
+ namedArrayOfFields: {presence: required, structure: {
+ name: {presence: required, value: mediaCoreUtilization},
+ arrayOfFields: {presence: required, array: [
+ field: {presence: required, structure: {
+ name: {presence: required, value: actualAvgAudio},
+ value: {presence: required, range: [ 0, 255 ],
+ action: [80, up, AudioCoreUsageHigh, RECO-scaleOut],
+ action: [10, down, AudioCoreUsageLow, RECO-scaleIn]}
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: modelAvgAudio},
+ value: {presence: required, range: [ 0, 100 ],
+ action: [80, up, AudioCoreUsageHigh, RECO-scaleOut],
+ action: [10, down, AudioCoreUsageLow, RECO-scaleIn]}
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: actualMaxAudio},
+ value: {presence: required, range: [ 0, 255 ]}
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: modelMaxAudio},
+ value: {presence: required, range: [ 0, 100 ]}
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: actualAvgVideo},
+ value: {presence: required, range: [ 0, 255 ],
+ action: [80, up, VideoCoreUsageHigh, RECO-scaleOut],
+ action: [10, down, VideoCoreUsageLow, RECO-scaleIn]}
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: modelAvgVideo},
+ value: {presence: required, range: [ 0, 100 ],
+ action: [80, up, VideoCoreUsageHigh, RECO-scaleOut],
+ action: [10, down, VideoCoreUsageLow, RECO-scaleIn]}
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: actualMaxVideo},
+ value: {presence: required, range: [ 0, 255 ]}
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: modelMaxVideo},
+ value: {presence: required, range: [ 0, 100 ]}
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: actualAvgHcVideo},
+ value: {presence: required, range: [ 0, 255 ],
+ action: [80, up, HcVideoCoreUsageHigh, RECO-scaleOut],
+ action: [10, down, HcVideoCoreUsageLow, RECO-scaleIn]}
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: modelAvgHcVideo},
+ value: {presence: required, range: [ 0, 100 ],
+ action: [80, up, HcVideoCoreUsageHigh, RECO-scaleOut],
+ action: [10, down, HcVideoCoreUsageLow, RECO-scaleIn]}
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: actualMaxHcVideo},
+ value: {presence: required, range: [ 0, 255 ]}
+ }},
+ field: {presence: required, structure: {
+ name: {presence: required, value: modelMaxHcVideo},
+ value: {presence: required, range: [ 0, 100 ]}
+ }}
+ ]}
+ }}
+ ]},
+ vNicPerformanceArray: {presence: required, array: [
+ vNicPerformance: {presence: required, structure: {
+ receivedOctetsAccumulated: {presence: required,
+ range: [ 0, 18446744073709551615 ]},
+ receivedTotalPacketsAccumulated: {presence: required,
+ range: [ 0, 18446744073709551615 ]},
+ receivedOctetsDelta: {presence: required},
+ range: [ 0, 18446744073709551615 ],
+ receivedTotalPacketsDelta: {presence: required,
+ range: [ 0, 18446744073709551615 ]},
+ transmittedOctetsDelta: {presence: required,
+ range: [ 0, 18446744073709551615 ]},
+ transmittedOctetsAccumulated: {presence: required,
+ range: [ 0, 18446744073709551615 ]},
+ transmittedTotalPacketsAccumulated: {presence: required,
+ range: [ 0, 18446744073709551615 ]},
+ transmittedTotalPacketsDelta: {presence: required,
+ range: [ 0, 18446744073709551615 ]},
+ valuesAreSuspect: {presence: required, value: [ true, false ]},
+ vNicIdentifier: {presence: required}
+ }}
+ ]}
+ }}
+}}
+---
+# registration for Syslog\_vMRF
+# Constants: the values of domain, eventName, priority, lastEpochMicrosec, version,
+# syslogFields.syslogFieldsVersion, syslogFields.syslogTag
+# Variables include: eventId, lastEpochMicrosec, reportingEntityId, reportingEntityName,
+# sequence, sourceId, sourceName, startEpochMicrosec,
+# syslogFields.eventSourceHost, syslogFields.eventSourceType,
+# syslogFields.syslogFacility, syslogFields.syslogMsg
+event: {presence: required, structure: {
+ commonEventHeader: {presence: required, structure: {
+ domain: {presence: required, value: syslog},
+ eventName: {presence: required, value: Syslog\_vMrf},
+ eventId: {presence: required},
+ nfNamingCode: {value: mrfx},
+ priority: {presence: required, value: Normal},
+ reportingEntityId: {presence: required},
+ reportingEntityName: {presence: required},
+ sequence: {presence: required},
+ sourceId: {presence: required},
+ sourceName: {presence: required},
+ startEpochMicrosec: {presence: required},
+ lastEpochMicrosec: {presence: required},
+ version: {presence: required, value: 3.0},
+ }},
+ syslogFields: {presence: required, structure: {
+ eventSourceHost: {presence: required},
+ eventSourceType: {presence: required, value: virtualNetworkFunction},
+ syslogFacility: {presence: required, range: [16, 23]},
+ syslogSev: {presence: required, value: [ 0, 1, 2, 3, 4 ]},
+ syslogFieldsVersion: {presence: required, value: 3.0},
+ syslogMsg: {presence: required},
+ syslogTag: {presence: required, value: vMRF},
+ }}
+}}
+---
+#Rules
+Rules: [
+ rule: {
+ trigger: CpuUsageHigh \|\| FreeMemLow \|\| AudioCoreUsageHigh \|\|
+ VideoCoreUsageHigh \|\| HcVideoCoreUsageHigh,
+ microservices: [scaleOut]
+ },
+ rule: {
+ trigger: CpuUsageLow && FreeMemHigh && AudioCoreUsageLow &&
+ VideoCoreUsageLow && HcVideoCoreUsageLow,
+ microservices: [scaleIn]
+ }
+] \ No newline at end of file
diff --git a/common/onap-generic-artifact-browser/onap-generic-artifact-browser-service/src/test/resources/yaml/invalid.yml b/common/onap-generic-artifact-browser/onap-generic-artifact-browser-service/src/test/resources/yaml/invalid.yml
new file mode 100644
index 0000000000..9334720513
--- /dev/null
+++ b/common/onap-generic-artifact-browser/onap-generic-artifact-browser-service/src/test/resources/yaml/invalid.yml
@@ -0,0 +1,2 @@
+---
+event: "an escaped \' single quote" \ No newline at end of file