diff options
author | Chenfei Gao <cgao@research.att.com> | 2019-03-25 22:42:39 -0400 |
---|---|---|
committer | Chenfei Gao <cgao@research.att.com> | 2019-03-26 09:13:48 -0400 |
commit | 2c5a396554a34cddc2f43d98c72665d5b1496f85 (patch) | |
tree | 95fb614e7793b98e9890060b8755dbb97569470e /models-tosca/src/test | |
parent | b6649e710c6aad05b6cbb64fa61d6aa0ad82f12a (diff) |
Implement serialization/deserialization for TOSCA concepts
Includes:
a) Build serialization for tosca policy
b) Build serialization for tosca policy type
c) Build serialization for tosca data type
d) Build deserialization for tosca policy
e) Build deserialization for tosca policy type
f) Build deserialization for tosca data type
g) Build plain tosca pojos for API endpoints
h) Build plain tosca pojo mapper to map from/to internal tosca representation
i) Add relevant junit tests
Issue-ID: POLICY-1441
Change-Id: I30a4a1337c756f675fc7a5521e5f9e1a5e3eb97a
Signed-off-by: Chenfei Gao <cgao@research.att.com>
Diffstat (limited to 'models-tosca/src/test')
6 files changed, 798 insertions, 37 deletions
diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestPojos.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestPojos.java new file mode 100644 index 000000000..4dd55d562 --- /dev/null +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestPojos.java @@ -0,0 +1,52 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP Policy Model + * ================================================================================ + * Copyright (C) 2019 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.models.tosca.authorative.concepts; + +import com.openpojo.reflection.filters.FilterPackageInfo; +import com.openpojo.validation.Validator; +import com.openpojo.validation.ValidatorBuilder; +import com.openpojo.validation.rule.impl.GetterMustExistRule; +import com.openpojo.validation.rule.impl.SetterMustExistRule; +import com.openpojo.validation.test.impl.GetterTester; +import com.openpojo.validation.test.impl.SetterTester; +import org.junit.Test; +import org.onap.policy.common.utils.validation.ToStringTester; + +/** + * Class to perform unit tests of all pojos + * + * @author Chenfei Gao (cgao@research.att.com) + * + */ +public class TestPojos { + + private static final String POJO_PACKAGE = "org.onap.policy.models.tosca.authorative.concepts"; + + @Test + public void testPojos() { + final Validator validator = ValidatorBuilder.create().with(new ToStringTester()) + .with(new SetterMustExistRule()).with(new GetterMustExistRule()).with(new SetterTester()) + .with(new GetterTester()).build(); + validator.validate(POJO_PACKAGE, new FilterPackageInfo()); + } +} diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/mapping/PlainToscaServiceTemplateMapperTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/mapping/PlainToscaServiceTemplateMapperTest.java new file mode 100644 index 000000000..bd6b26bb9 --- /dev/null +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/mapping/PlainToscaServiceTemplateMapperTest.java @@ -0,0 +1,94 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP Policy Model + * ================================================================================ + * Copyright (C) 2019 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.models.tosca.authorative.mapping; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import com.google.gson.Gson; +import com.google.gson.JsonSyntaxException; +import java.io.IOException; +import org.junit.Before; +import org.junit.Test; +import org.onap.policy.common.utils.resources.ResourceUtils; +import org.onap.policy.models.base.PfValidationResult; +import org.onap.policy.models.tosca.authorative.concepts.PlainToscaServiceTemplate; +import org.onap.policy.models.tosca.simple.concepts.ToscaServiceTemplate; +import org.yaml.snakeyaml.Yaml; + +/** + * This class performs unit test of {@link PlainToscaServiceTemplateMapper}} + * + * @author Chenfei Gao (cgao@research.att.com) + */ +public class PlainToscaServiceTemplateMapperTest { + + private Gson defaultGson; + private PlainToscaServiceTemplateMapper mapper; + + @Before + public void setUp() { + defaultGson = new Gson(); + mapper = new PlainToscaServiceTemplateMapper(); + } + + @Test + public void testPlainToscaPolicies() throws JsonSyntaxException, IOException { + try { + String inputJson = ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"); + + PlainToscaServiceTemplate plainPolicies = defaultGson.fromJson(inputJson, PlainToscaServiceTemplate.class); + ToscaServiceTemplate internalPolicies = mapper.toToscaServiceTemplate(plainPolicies); + assertTrue(internalPolicies.validate(new PfValidationResult()).isValid()); + PlainToscaServiceTemplate plainPolicies2 = mapper.fromToscaServiceTemplate(internalPolicies); + assertTrue(plainPolicies.equals(plainPolicies2)); + + } catch (Exception e) { + fail("no exception should be thrown"); + } + } + + @Test + public void testPlainToscaPolicyTypes() throws JsonSyntaxException, IOException { + try { + Yaml yaml = new Yaml(); + String inputYaml = ResourceUtils.getResourceAsString( + "policytypes/onap.policy.monitoring.cdap.tca.hi.lo.app.yaml"); + Object yamlObject = yaml.load(inputYaml); + String yamlAsJsonString = defaultGson.toJson(yamlObject); + + PlainToscaServiceTemplate plainPolicyTypes = defaultGson.fromJson(yamlAsJsonString, + PlainToscaServiceTemplate.class); + ToscaServiceTemplate internalPolicyTypes = mapper.toToscaServiceTemplate(plainPolicyTypes); + assertTrue(internalPolicyTypes.validate(new PfValidationResult()).isValid()); + PlainToscaServiceTemplate plainPolicyTypes2 = mapper.fromToscaServiceTemplate(internalPolicyTypes); + ToscaServiceTemplate internalPolicyTypes2 = mapper.toToscaServiceTemplate(plainPolicyTypes2); + assertTrue(internalPolicyTypes2.validate(new PfValidationResult()).isValid()); + assertTrue(internalPolicyTypes.compareTo(internalPolicyTypes2) == 0); + + } catch (Exception e) { + fail("no exception should be thrown"); + } + + } +} diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/ToscaPolicyTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/ToscaPolicyTest.java index 807f33ed2..01c1377b9 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/ToscaPolicyTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/ToscaPolicyTest.java @@ -37,7 +37,7 @@ import org.onap.policy.models.base.PfValidationResult; import org.onap.policy.models.tosca.simple.concepts.ToscaPolicy; /** - * DAO test for ToscaDatatype. + * DAO test for ToscaPolicy. * * @author Liam Fallon (liam.fallon@est.tech) */ @@ -171,4 +171,4 @@ public class ToscaPolicyTest { assertEquals("resultIn is marked @NonNull but is null", exc.getMessage()); } } -} +}
\ No newline at end of file diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/ToscaPropertyTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/ToscaPropertyTest.java index a33da605e..0fcf96a89 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/ToscaPropertyTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/concepts/ToscaPropertyTest.java @@ -99,8 +99,7 @@ public class ToscaPropertyTest { tp.setRequired(false); assertFalse(tp.isRequired()); - PfConceptKey tdefaultKey = new PfConceptKey("defaultKey", "0.0.1"); - tp.setDefaultValue(tdefaultKey); + tp.setDefaultValue("defaultKey"); tp.setStatus(ToscaProperty.Status.SUPPORTED); @@ -141,7 +140,7 @@ public class ToscaPropertyTest { assertFalse(tp.compareTo(otherDt) == 0); otherDt.setRequired(false); assertFalse(tp.compareTo(otherDt) == 0); - otherDt.setDefaultValue(tdefaultKey); + otherDt.setDefaultValue("defaultKey"); assertFalse(tp.compareTo(otherDt) == 0); otherDt.setStatus(ToscaProperty.Status.SUPPORTED); assertFalse(tp.compareTo(otherDt) == 0); @@ -168,7 +167,7 @@ public class ToscaPropertyTest { assertEquals("target is marked @NonNull but is null", exc.getMessage()); } - assertEquals(6, tp.getKeys().size()); + assertEquals(5, tp.getKeys().size()); assertEquals(2, new ToscaProperty().getKeys().size()); new ToscaProperty().clean(); @@ -197,12 +196,7 @@ public class ToscaPropertyTest { tp.setDefaultValue(null); assertTrue(tp.validate(new PfValidationResult()).isValid()); - tp.setDefaultValue(tdefaultKey); - assertTrue(tp.validate(new PfValidationResult()).isValid()); - - tp.setDefaultValue(PfConceptKey.getNullKey()); - assertFalse(tp.validate(new PfValidationResult()).isValid()); - tp.setDefaultValue(tdefaultKey); + tp.setDefaultValue("defaultKey"); assertTrue(tp.validate(new PfValidationResult()).isValid()); tp.getConstraints().add(null); diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicySerializationTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicySerializationTest.java index 95f0ac971..e49156330 100644 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicySerializationTest.java +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicySerializationTest.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019 Nordix Foundation. + * Copyright (C) 2019 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. @@ -23,17 +24,22 @@ package org.onap.policy.models.tosca.simple.serialization; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import com.google.gson.Gson; -import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; import com.google.gson.JsonSyntaxException; import java.io.IOException; - +import java.util.Map; import org.junit.Before; import org.junit.Test; import org.onap.policy.common.utils.resources.ResourceUtils; +import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfValidationResult; +import org.onap.policy.models.tosca.simple.concepts.ToscaPolicy; import org.onap.policy.models.tosca.simple.concepts.ToscaServiceTemplate; import org.onap.policy.models.tosca.simple.serialization.ToscaServiceTemplateMessageBodyHandler; import org.slf4j.Logger; @@ -44,11 +50,19 @@ import org.yaml.snakeyaml.Yaml; * Test serialization of monitoring policies. * * @author Liam Fallon (liam.fallon@est.tech) + * @author Chenfei Gao (cgao@research.att.com) */ public class MonitoringPolicySerializationTest { - // Logger for this class + private static final Logger LOGGER = LoggerFactory.getLogger(MonitoringPolicySerializationTest.class); + private static final String VCPE_MONITORING_INPUT_JSON = "policies/vCPE.policy.monitoring.input.tosca.json"; + private static final String VCPE_MONITORING_INPUT_YAML = "policies/vCPE.policy.monitoring.input.tosca.yaml"; + private static final String VDNS_MONITORING_INPUT_JSON = "policies/vDNS.policy.monitoring.input.tosca.json"; + private static final String VDNS_MONITORING_INPUT_YAML = "policies/vDNS.policy.monitoring.input.tosca.yaml"; + private static final String VFW_MONITORING_INPUT_JSON = "policies/vFirewall.policy.monitoring.input.tosca.json"; + private static final String VFW_MONITORING_INPUT_YAML = "policies/vFirewall.policy.monitoring.input.tosca.yaml"; + private Gson gson; @Before @@ -57,48 +71,231 @@ public class MonitoringPolicySerializationTest { } @Test - public void testJsonDeserialization() throws JsonSyntaxException, IOException { - String vcpePolicyJson = ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"); + public void testDeserialization() { + try { + // vCPE + ToscaServiceTemplate serviceTemplateFromJson = deserializeMonitoringInputJson(VCPE_MONITORING_INPUT_JSON); + verifyVcpeMonitoringInputDeserialization(serviceTemplateFromJson); + ToscaServiceTemplate serviceTemplateFromYaml = deserializeMonitoringInputYaml(VCPE_MONITORING_INPUT_YAML); + assertTrue(serviceTemplateFromJson.compareTo(serviceTemplateFromYaml) == 0); + + // vDNS + serviceTemplateFromJson = deserializeMonitoringInputJson(VDNS_MONITORING_INPUT_JSON); + verifyVdnsMonitoringInputDeserialization(serviceTemplateFromJson); + serviceTemplateFromYaml = deserializeMonitoringInputYaml(VDNS_MONITORING_INPUT_YAML); + assertTrue(serviceTemplateFromJson.compareTo(serviceTemplateFromYaml) == 0); + + // vFirewall + serviceTemplateFromJson = deserializeMonitoringInputJson(VFW_MONITORING_INPUT_JSON); + verifyVfwMonitoringInputDeserialization(serviceTemplateFromJson); + serviceTemplateFromYaml = deserializeMonitoringInputYaml(VFW_MONITORING_INPUT_YAML); + assertTrue(serviceTemplateFromJson.compareTo(serviceTemplateFromYaml) == 0); + + } catch (Exception e) { + fail("No exception should be thrown"); + } + } + + @Test + public void testSerialization() { + try { + // vCPE + ToscaServiceTemplate serviceTemplate = deserializeMonitoringInputJson(VCPE_MONITORING_INPUT_JSON); + String serializedServiceTemplate = serializeMonitoringServiceTemplate(serviceTemplate); + verifyVcpeMonitoringOutputserialization(serializedServiceTemplate); + + // vDNS + serviceTemplate = deserializeMonitoringInputJson(VDNS_MONITORING_INPUT_JSON); + serializedServiceTemplate = serializeMonitoringServiceTemplate(serviceTemplate); + verifyVdnsMonitoringOutputserialization(serializedServiceTemplate); + + // vFirewall + serviceTemplate = deserializeMonitoringInputJson(VFW_MONITORING_INPUT_JSON); + serializedServiceTemplate = serializeMonitoringServiceTemplate(serviceTemplate); + verifyVfwMonitoringOutputserialization(serializedServiceTemplate); + + } catch (Exception e) { + fail("No exception should be thrown"); + } + } + + private ToscaServiceTemplate deserializeMonitoringInputJson(String resourcePath) + throws JsonSyntaxException, IOException { - ToscaServiceTemplate serviceTemplate = gson.fromJson(vcpePolicyJson, ToscaServiceTemplate.class); + String policyJson = ResourceUtils.getResourceAsString(resourcePath); + ToscaServiceTemplate serviceTemplate = gson.fromJson(policyJson, ToscaServiceTemplate.class); + return serviceTemplate; + } + + private ToscaServiceTemplate deserializeMonitoringInputYaml(String resourcePath) + throws JsonSyntaxException, IOException { + + Yaml yaml = new Yaml(); + String policyYaml = ResourceUtils.getResourceAsString(resourcePath); + Object yamlObject = yaml.load(policyYaml); + String yamlAsJsonString = new Gson().toJson(yamlObject); + ToscaServiceTemplate serviceTemplate = gson.fromJson(yamlAsJsonString, ToscaServiceTemplate.class); + return serviceTemplate; + } + + private String serializeMonitoringServiceTemplate(ToscaServiceTemplate serviceTemplate) { + return gson.toJson(serviceTemplate); + } + + private void verifyVcpeMonitoringInputDeserialization(ToscaServiceTemplate serviceTemplate) { + + // Sanity check the entire structure assertNotNull(serviceTemplate); LOGGER.info(serviceTemplate.validate(new PfValidationResult()).toString()); assertTrue(serviceTemplate.validate(new PfValidationResult()).isValid()); + // Check tosca_definitions_version + assertEquals("tosca_simple_yaml_1_0_0", + serviceTemplate.getToscaDefinitionsVersion()); + + Map<PfConceptKey, ToscaPolicy> policiesConceptMap = serviceTemplate.getTopologyTemplate() + .getPolicies().getConceptMap(); + + // Check policies + assertTrue(policiesConceptMap.size() == 1); + assertEquals("onap.restart.tca", policiesConceptMap.keySet().iterator().next().getName()); assertEquals("onap.restart.tca:1.0.0", serviceTemplate.getTopologyTemplate().getPolicies().get("onap.restart.tca").getId()); - String reserializedString = gson.toJson(serviceTemplate, ToscaServiceTemplate.class); - assertEquals(vcpePolicyJson.replaceAll("\\s+", ""), reserializedString.replaceAll("\\s+", "")); + ToscaPolicy policyVal = policiesConceptMap.values().iterator().next(); + + // Check metadata + assertTrue(policyVal.getMetadata().size() == 1); + assertEquals("policy-id", policyVal.getMetadata().entrySet().iterator().next().getKey()); + assertEquals("onap.restart.tca", policyVal.getMetadata().entrySet().iterator().next().getValue()); - ToscaServiceTemplate serviceTemplate2 = gson.fromJson(reserializedString, ToscaServiceTemplate.class); - assertNotNull(serviceTemplate2); - assertEquals(serviceTemplate, serviceTemplate2); + // Check properties + assertTrue(policiesConceptMap.values().iterator().next().getProperties().size() == 1); + assertEquals("tca_policy", policyVal.getProperties().keySet().iterator().next()); + assertNotNull(policyVal.getProperties().values().iterator().next()); } - @Test - public void testYamlDeserialization() throws JsonSyntaxException, IOException { - Yaml yaml = new Yaml(); + private void verifyVdnsMonitoringInputDeserialization(ToscaServiceTemplate serviceTemplate) { - String vcpePolicyYaml = ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.yaml"); - Object yamlObject = yaml.load(vcpePolicyYaml); + // Sanity check the entire structure + assertNotNull(serviceTemplate); + LOGGER.info(serviceTemplate.validate(new PfValidationResult()).toString()); + assertTrue(serviceTemplate.validate(new PfValidationResult()).isValid()); - String yamlAsJsonString = new GsonBuilder().setPrettyPrinting().create().toJson(yamlObject); + // Check tosca_definitions_version + assertEquals("tosca_simple_yaml_1_0_0", + serviceTemplate.getToscaDefinitionsVersion()); - ToscaServiceTemplate serviceTemplate = gson.fromJson(yamlAsJsonString, ToscaServiceTemplate.class); + Map<PfConceptKey, ToscaPolicy> policiesConceptMap = serviceTemplate.getTopologyTemplate() + .getPolicies().getConceptMap(); + + // Check policies + assertTrue(policiesConceptMap.size() == 1); + assertEquals("onap.scaleout.tca", policiesConceptMap.keySet().iterator().next().getName()); + assertEquals("onap.scaleout.tca:1.0.0", + serviceTemplate.getTopologyTemplate().getPolicies().get("onap.scaleout.tca").getId()); + ToscaPolicy policyVal = policiesConceptMap.values().iterator().next(); + + // Check metadata + assertTrue(policyVal.getMetadata().size() == 1); + assertEquals("policy-id", policyVal.getMetadata().entrySet().iterator().next().getKey()); + assertEquals("onap.scaleout.tca", policyVal.getMetadata().entrySet().iterator().next().getValue()); + + // Check properties + assertTrue(policiesConceptMap.values().iterator().next().getProperties().size() == 1); + assertEquals("tca_policy", policyVal.getProperties().keySet().iterator().next()); + assertNotNull(policyVal.getProperties().values().iterator().next()); + } + + private void verifyVfwMonitoringInputDeserialization(ToscaServiceTemplate serviceTemplate) { + + // Sanity check the entire structure assertNotNull(serviceTemplate); LOGGER.info(serviceTemplate.validate(new PfValidationResult()).toString()); assertTrue(serviceTemplate.validate(new PfValidationResult()).isValid()); - assertEquals("onap.restart.tca:1.0.0", - serviceTemplate.getTopologyTemplate().getPolicies().get("onap.restart.tca").getId()); + // Check tosca_definitions_version + assertEquals("tosca_simple_yaml_1_0_0", + serviceTemplate.getToscaDefinitionsVersion()); + + Map<PfConceptKey, ToscaPolicy> policiesConceptMap = serviceTemplate.getTopologyTemplate() + .getPolicies().getConceptMap(); + + // Check policies + assertTrue(policiesConceptMap.size() == 1); + assertEquals("onap.vfirewall.tca", policiesConceptMap.keySet().iterator().next().getName()); + assertEquals("onap.vfirewall.tca:1.0.0", + serviceTemplate.getTopologyTemplate().getPolicies().get("onap.vfirewall.tca").getId()); + + ToscaPolicy policyVal = policiesConceptMap.values().iterator().next(); + + // Check metadata + assertTrue(policyVal.getMetadata().size() == 1); + assertEquals("policy-id", policyVal.getMetadata().entrySet().iterator().next().getKey()); + assertEquals("onap.vfirewall.tca", policyVal.getMetadata().entrySet().iterator().next().getValue()); + + // Check properties + assertTrue(policiesConceptMap.values().iterator().next().getProperties().size() == 1); + assertEquals("tca_policy", policyVal.getProperties().keySet().iterator().next()); + assertNotNull(policyVal.getProperties().values().iterator().next()); + } + + private void verifyVcpeMonitoringOutputserialization(String serializedServiceTemplate) { + + JsonObject serviceTemplateJsonObject = new JsonParser().parse(serializedServiceTemplate).getAsJsonObject(); + assertEquals("tosca_simple_yaml_1_0_0", serviceTemplateJsonObject.get("tosca_definitions_version") + .getAsString()); + JsonObject topologyTemplateJsonObject = serviceTemplateJsonObject.get("topology_template") + .getAsJsonObject(); + JsonArray policiesJsonArray = topologyTemplateJsonObject.get("policies").getAsJsonArray(); + assertTrue(policiesJsonArray.size() == 1); + JsonObject policy = policiesJsonArray.iterator().next().getAsJsonObject(); + assertNotNull(policy.get("onap.restart.tca")); + JsonObject policyVal = policy.get("onap.restart.tca").getAsJsonObject(); + assertEquals("onap.policies.monitoring.cdap.tca.hi.lo.app", policyVal.get("type").getAsString()); + assertEquals("1.0.0", policyVal.get("version").getAsString()); + assertEquals("onap.restart.tca", policyVal.get("metadata").getAsJsonObject().get("policy-id") + .getAsString()); + JsonObject properties = policyVal.get("properties").getAsJsonObject(); + assertNotNull(properties.get("tca_policy")); + } + + private void verifyVdnsMonitoringOutputserialization(String serializedServiceTemplate) { + + JsonObject serviceTemplateJsonObject = new JsonParser().parse(serializedServiceTemplate).getAsJsonObject(); + assertEquals("tosca_simple_yaml_1_0_0", serviceTemplateJsonObject.get("tosca_definitions_version") + .getAsString()); + JsonObject topologyTemplateJsonObject = serviceTemplateJsonObject.get("topology_template").getAsJsonObject(); + JsonArray policiesJsonArray = topologyTemplateJsonObject.get("policies").getAsJsonArray(); + assertTrue(policiesJsonArray.size() == 1); + JsonObject policy = policiesJsonArray.iterator().next().getAsJsonObject(); + assertNotNull(policy.get("onap.scaleout.tca")); + JsonObject policyVal = policy.get("onap.scaleout.tca").getAsJsonObject(); + assertEquals("onap.policies.monitoring.cdap.tca.hi.lo.app", policyVal.get("type").getAsString()); + assertEquals("1.0.0", policyVal.get("version").getAsString()); + assertEquals("onap.scaleout.tca", policyVal.get("metadata").getAsJsonObject().get("policy-id") + .getAsString()); + JsonObject properties = policyVal.get("properties").getAsJsonObject(); + assertNotNull(properties.get("tca_policy")); + } - String reserializedString = gson.toJson(serviceTemplate, ToscaServiceTemplate.class); - assertEquals(yamlAsJsonString.replaceAll("\\s+", ""), reserializedString.replaceAll("\\s+", "")); + private void verifyVfwMonitoringOutputserialization(String serializedServiceTemplate) { - ToscaServiceTemplate serviceTemplate2 = gson.fromJson(reserializedString, ToscaServiceTemplate.class); - assertNotNull(serviceTemplate2); - assertEquals(serviceTemplate, serviceTemplate2); + JsonObject serviceTemplateJsonObject = new JsonParser().parse(serializedServiceTemplate).getAsJsonObject(); + assertEquals("tosca_simple_yaml_1_0_0", serviceTemplateJsonObject.get("tosca_definitions_version") + .getAsString()); + JsonObject topologyTemplateJsonObject = serviceTemplateJsonObject.get("topology_template").getAsJsonObject(); + JsonArray policiesJsonArray = topologyTemplateJsonObject.get("policies").getAsJsonArray(); + assertTrue(policiesJsonArray.size() == 1); + JsonObject policy = policiesJsonArray.iterator().next().getAsJsonObject(); + assertNotNull(policy.get("onap.vfirewall.tca")); + JsonObject policyVal = policy.get("onap.vfirewall.tca").getAsJsonObject(); + assertEquals("onap.policy.monitoring.cdap.tca.hi.lo.app", policyVal.get("type").getAsString()); + assertEquals("1.0.0", policyVal.get("version").getAsString()); + assertEquals("onap.vfirewall.tca", policyVal.get("metadata").getAsJsonObject().get("policy-id") + .getAsString()); + JsonObject properties = policyVal.get("properties").getAsJsonObject(); + assertNotNull(properties.get("tca_policy")); } } diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicyTypeSerializationTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicyTypeSerializationTest.java new file mode 100644 index 000000000..c40b32e3c --- /dev/null +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/MonitoringPolicyTypeSerializationTest.java @@ -0,0 +1,424 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2019 Nordix Foundation. + * Copyright (C) 2019 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.models.tosca.simple.serialization; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import com.google.gson.Gson; +import com.google.gson.JsonSyntaxException; + +import java.io.IOException; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; +import org.junit.Before; +import org.junit.Test; +import org.onap.policy.common.utils.resources.ResourceUtils; +import org.onap.policy.models.base.PfConceptKey; +import org.onap.policy.models.base.PfValidationResult; +import org.onap.policy.models.tosca.simple.concepts.ToscaConstraintLogicalString; +import org.onap.policy.models.tosca.simple.concepts.ToscaConstraintValidValues; +import org.onap.policy.models.tosca.simple.concepts.ToscaDataType; +import org.onap.policy.models.tosca.simple.concepts.ToscaEntrySchema; +import org.onap.policy.models.tosca.simple.concepts.ToscaPolicyType; +import org.onap.policy.models.tosca.simple.concepts.ToscaProperty; +import org.onap.policy.models.tosca.simple.concepts.ToscaServiceTemplate; +import org.onap.policy.models.tosca.simple.serialization.ToscaServiceTemplateMessageBodyHandler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.yaml.snakeyaml.Yaml; + +/** + * Test serialization of monitoring policy types. + * + * @author Chenfei Gao (cgao@research.att.com) + */ +public class MonitoringPolicyTypeSerializationTest { + + private static final Logger LOGGER = LoggerFactory.getLogger(MonitoringPolicyTypeSerializationTest.class); + + private static final String MONITORING_TCA_YAML = "policytypes/onap.policy.monitoring.cdap.tca.hi.lo.app.yaml"; + private static final String MONITORING_COLLECTORS_YAML = + "policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml"; + + private Gson gson; + + @Before + public void setUp() { + gson = new ToscaServiceTemplateMessageBodyHandler().getGson(); + } + + @Test + public void testDeserialization() { + try { + // TCA + ToscaServiceTemplate serviceTemplateFromYaml = deserializeMonitoringInputYaml(MONITORING_TCA_YAML); + verifyTcaInputDeserialization(serviceTemplateFromYaml); + + // Collector + serviceTemplateFromYaml = deserializeMonitoringInputYaml(MONITORING_COLLECTORS_YAML); + verifyCollectorInputDeserialization(serviceTemplateFromYaml); + + } catch (Exception e) { + fail("No exception should be thrown"); + } + } + + @Test + public void testSerialization() { + try { + // TCA + ToscaServiceTemplate serviceTemplateFromYaml = deserializeMonitoringInputYaml(MONITORING_TCA_YAML); + String serializedServiceTemplate1 = serializeMonitoringServiceTemplate(serviceTemplateFromYaml); + ToscaServiceTemplate serviceTemplateFromJson = gson.fromJson(serializedServiceTemplate1, + ToscaServiceTemplate.class); + String serializedServiceTemplate2 = serializeMonitoringServiceTemplate(serviceTemplateFromJson); + assertEquals(serializedServiceTemplate1, serializedServiceTemplate2); + + // Collector + serviceTemplateFromYaml = deserializeMonitoringInputYaml(MONITORING_COLLECTORS_YAML); + serializedServiceTemplate1 = serializeMonitoringServiceTemplate(serviceTemplateFromYaml); + serviceTemplateFromJson = gson.fromJson(serializedServiceTemplate1, ToscaServiceTemplate.class); + serializedServiceTemplate2 = serializeMonitoringServiceTemplate(serviceTemplateFromJson); + assertEquals(serializedServiceTemplate1, serializedServiceTemplate2); + + } catch (Exception e) { + fail("No exception should be thrown"); + } + } + + private ToscaServiceTemplate deserializeMonitoringInputYaml(String resourcePath) + throws JsonSyntaxException, IOException { + + Yaml yaml = new Yaml(); + String policyTypeYaml = ResourceUtils.getResourceAsString(resourcePath); + Object yamlObject = yaml.load(policyTypeYaml); + String yamlAsJsonString = new Gson().toJson(yamlObject); + ToscaServiceTemplate serviceTemplate = gson.fromJson(yamlAsJsonString, ToscaServiceTemplate.class); + return serviceTemplate; + } + + private void verifyTcaInputDeserialization(ToscaServiceTemplate serviceTemplate) { + + // Sanity check the entire structure + assertNotNull(serviceTemplate); + LOGGER.info(serviceTemplate.validate(new PfValidationResult()).toString()); + assertTrue(serviceTemplate.validate(new PfValidationResult()).isValid()); + + // Check tosca_definitions_version + assertEquals("tosca_simple_yaml_1_0_0", serviceTemplate.getToscaDefinitionsVersion()); + + // Check policy_types + Map<PfConceptKey, ToscaPolicyType> policyTypesConceptMap = serviceTemplate.getPolicyTypes().getConceptMap(); + assertTrue(policyTypesConceptMap.size() == 2); + Iterator<Entry<PfConceptKey, ToscaPolicyType>> policyTypesIter = policyTypesConceptMap.entrySet().iterator(); + + Entry<PfConceptKey, ToscaPolicyType> firstPolicyType = policyTypesIter.next(); + assertEquals("onap.policies.Monitoring", firstPolicyType.getKey().getName()); + assertEquals("1.0.0", firstPolicyType.getKey().getVersion()); + assertEquals("tosca.policies.Root", firstPolicyType.getValue().getDerivedFrom().getName()); + assertEquals("a base policy type for all policies that governs monitoring provisioning", + firstPolicyType.getValue().getDescription()); + + Entry<PfConceptKey, ToscaPolicyType> secondPolicyType = policyTypesIter.next(); + assertEquals("onap.policy.monitoring.cdap.tca.hi.lo.app", secondPolicyType.getKey().getName()); + assertEquals("1.0.0", secondPolicyType.getKey().getVersion()); + assertEquals("onap.policies.Monitoring", secondPolicyType.getValue().getDerivedFrom().getName()); + assertTrue(secondPolicyType.getValue().getProperties().size() == 1); + + ToscaProperty property = secondPolicyType.getValue().getProperties().iterator().next(); + assertEquals("onap.policy.monitoring.cdap.tca.hi.lo.app", property.getKey().getParentKeyName()); + assertEquals("1.0.0", property.getKey().getParentKeyVersion()); + assertEquals("tca_policy", property.getKey().getLocalName()); + assertEquals("map", property.getType().getName()); + assertEquals("TCA Policy JSON", property.getDescription()); + + ToscaEntrySchema entrySchema = property.getEntrySchema(); + assertEquals("map", entrySchema.getKey().getParentKeyName()); + assertEquals("1.0.0", entrySchema.getKey().getParentKeyVersion()); + assertEquals("entry_schema", entrySchema.getKey().getLocalName()); + assertEquals("onap.datatypes.monitoring.tca_policy", entrySchema.getType().getName()); + + // Check data_types + Map<PfConceptKey, ToscaDataType> dataTypesConceptMap = serviceTemplate.getDataTypes().getConceptMap(); + assertTrue(dataTypesConceptMap.size() == 3); + Iterator<Entry<PfConceptKey, ToscaDataType>> dataTypesIter = dataTypesConceptMap.entrySet().iterator(); + + Entry<PfConceptKey, ToscaDataType> firstDataType = dataTypesIter.next(); + assertEquals("onap.datatypes.monitoring.metricsPerEventName", firstDataType.getKey().getName()); + ToscaDataType firstDataTypeVal = firstDataType.getValue(); + assertEquals("tosca.datatypes.Root", firstDataTypeVal.getDerivedFrom().getName()); + assertEquals("1.0.0", firstDataTypeVal.getDerivedFrom().getVersion()); + assertTrue(firstDataTypeVal.getProperties().size() == 6); + Iterator<ToscaProperty> firstDataTypePropertiesIter = firstDataTypeVal.getProperties().iterator(); + + ToscaProperty firstDataTypeFirstProperty = firstDataTypePropertiesIter.next(); + assertEquals("onap.datatypes.monitoring.metricsPerEventName", firstDataTypeFirstProperty.getKey() + .getParentKeyName()); + assertEquals("controlLoopSchemaType", firstDataTypeFirstProperty.getKey().getLocalName()); + assertEquals("string", firstDataTypeFirstProperty.getType().getName()); + assertTrue(firstDataTypeFirstProperty.isRequired()); + assertEquals("Specifies Control Loop Schema Type for the event Name e.g. VNF, VM", + firstDataTypeFirstProperty.getDescription()); + assertTrue(firstDataTypeFirstProperty.getConstraints().size() == 1); + assertEquals("valid_values", firstDataTypeFirstProperty.getConstraints().iterator().next().getKey() + .getLocalName()); + assertEquals("string", firstDataTypeFirstProperty.getConstraints().iterator().next().getKey() + .getParentKeyName()); + assertTrue(firstDataTypeFirstProperty.getConstraints().iterator().next() + instanceof ToscaConstraintValidValues); + assertTrue(((ToscaConstraintValidValues)(firstDataTypeFirstProperty.getConstraints().iterator().next())) + .getValidValues().size() == 2); + + ToscaProperty firstDataTypeSecondProperty = firstDataTypePropertiesIter.next(); + assertEquals("onap.datatypes.monitoring.metricsPerEventName", firstDataTypeSecondProperty.getKey() + .getParentKeyName()); + assertEquals("eventName", firstDataTypeSecondProperty.getKey().getLocalName()); + assertEquals("string", firstDataTypeSecondProperty.getType().getName()); + assertTrue(firstDataTypeSecondProperty.isRequired()); + assertEquals("Event name to which thresholds need to be applied", firstDataTypeSecondProperty + .getDescription()); + + ToscaProperty firstDataTypeThirdProperty = firstDataTypePropertiesIter.next(); + assertEquals("onap.datatypes.monitoring.metricsPerEventName", firstDataTypeThirdProperty.getKey() + .getParentKeyName()); + assertEquals("policyName", firstDataTypeThirdProperty.getKey().getLocalName()); + assertEquals("string", firstDataTypeThirdProperty.getType().getName()); + assertTrue(firstDataTypeThirdProperty.isRequired()); + assertEquals("TCA Policy Scope Name", firstDataTypeThirdProperty.getDescription()); + + ToscaProperty firstDataTypeFourthProperty = firstDataTypePropertiesIter.next(); + assertEquals("onap.datatypes.monitoring.metricsPerEventName", firstDataTypeFourthProperty.getKey() + .getParentKeyName()); + assertEquals("policyScope", firstDataTypeFourthProperty.getKey().getLocalName()); + assertEquals("string", firstDataTypeFourthProperty.getType().getName()); + assertTrue(firstDataTypeFourthProperty.isRequired()); + assertEquals("TCA Policy Scope", firstDataTypeFourthProperty.getDescription()); + + ToscaProperty firstDataTypeFifthProperty = firstDataTypePropertiesIter.next(); + assertEquals("onap.datatypes.monitoring.metricsPerEventName", firstDataTypeFifthProperty.getKey() + .getParentKeyName()); + assertEquals("policyVersion", firstDataTypeFifthProperty.getKey().getLocalName()); + assertEquals("string", firstDataTypeFifthProperty.getType().getName()); + assertTrue(firstDataTypeFifthProperty.isRequired()); + assertEquals("TCA Policy Scope Version", firstDataTypeFifthProperty.getDescription()); + + ToscaProperty firstDataTypeSixthProperty = firstDataTypePropertiesIter.next(); + assertEquals("onap.datatypes.monitoring.metricsPerEventName", firstDataTypeSixthProperty.getKey() + .getParentKeyName()); + assertEquals("thresholds", firstDataTypeSixthProperty.getKey().getLocalName()); + assertEquals("list", firstDataTypeSixthProperty.getType().getName()); + assertTrue(firstDataTypeSixthProperty.isRequired()); + assertEquals("Thresholds associated with eventName", firstDataTypeSixthProperty.getDescription()); + assertNotNull(firstDataTypeSixthProperty.getEntrySchema()); + assertEquals("entry_schema", firstDataTypeSixthProperty.getEntrySchema().getKey().getLocalName()); + assertEquals("list", firstDataTypeSixthProperty.getEntrySchema().getKey().getParentKeyName()); + assertEquals("onap.datatypes.monitoring.thresholds", firstDataTypeSixthProperty.getEntrySchema().getType() + .getName()); + + Entry<PfConceptKey, ToscaDataType> secondDataType = dataTypesIter.next(); + assertEquals("onap.datatypes.monitoring.tca_policy", secondDataType.getKey().getName()); + ToscaDataType secondDataTypeVal = secondDataType.getValue(); + assertEquals("tosca.datatypes.Root", secondDataTypeVal.getDerivedFrom().getName()); + assertEquals("1.0.0", secondDataTypeVal.getDerivedFrom().getVersion()); + assertTrue(secondDataTypeVal.getProperties().size() == 2); + Iterator<ToscaProperty> secondDataTypePropertiesIter = secondDataTypeVal.getProperties().iterator(); + + ToscaProperty secondDataTypeFirstProperty = secondDataTypePropertiesIter.next(); + assertEquals("onap.datatypes.monitoring.tca_policy", secondDataTypeFirstProperty.getKey().getParentKeyName()); + assertEquals("domain", secondDataTypeFirstProperty.getKey().getLocalName()); + assertEquals("string", secondDataTypeFirstProperty.getType().getName()); + assertTrue(secondDataTypeFirstProperty.isRequired()); + assertEquals("Domain name to which TCA needs to be applied", secondDataTypeFirstProperty.getDescription()); + assertEquals("measurementsForVfScaling", secondDataTypeFirstProperty.getDefaultValue()); + assertTrue(secondDataTypeFirstProperty.getConstraints().size() == 1); + assertEquals("string", secondDataTypeFirstProperty.getConstraints().iterator().next().getKey() + .getParentKeyName()); + assertEquals("equal", secondDataTypeFirstProperty.getConstraints().iterator().next().getKey().getLocalName()); + assertTrue(secondDataTypeFirstProperty.getConstraints().iterator().next() + instanceof ToscaConstraintLogicalString); + assertEquals("measurementsForVfScaling", ((ToscaConstraintLogicalString)(secondDataTypeFirstProperty + .getConstraints().iterator().next())).getCompareToString()); + + ToscaProperty secondDataTypeSecondProperty = secondDataTypePropertiesIter.next(); + assertEquals("onap.datatypes.monitoring.tca_policy", secondDataTypeSecondProperty.getKey().getParentKeyName()); + assertEquals("metricsPerEventName", secondDataTypeSecondProperty.getKey().getLocalName()); + assertEquals("list", secondDataTypeSecondProperty.getType().getName()); + assertTrue(secondDataTypeSecondProperty.isRequired()); + assertEquals("Contains eventName and threshold details that need to be applied to given eventName", + secondDataTypeSecondProperty.getDescription()); + assertNotNull(secondDataTypeSecondProperty.getEntrySchema()); + assertEquals("list", secondDataTypeSecondProperty.getEntrySchema().getKey().getParentKeyName()); + assertEquals("onap.datatypes.monitoring.metricsPerEventName", + secondDataTypeSecondProperty.getEntrySchema().getType().getName()); + assertEquals("entry_schema", secondDataTypeSecondProperty.getEntrySchema().getKey().getLocalName()); + + Entry<PfConceptKey, ToscaDataType> thirdDataType = dataTypesIter.next(); + assertEquals("onap.datatypes.monitoring.thresholds", thirdDataType.getKey().getName()); + ToscaDataType thirdDataTypeVal = thirdDataType.getValue(); + assertEquals("tosca.datatypes.Root", thirdDataTypeVal.getDerivedFrom().getName()); + assertEquals("1.0.0", thirdDataTypeVal.getDerivedFrom().getVersion()); + assertTrue(thirdDataTypeVal.getProperties().size() == 7); + Iterator<ToscaProperty> thirdDataTypePropertiesIter = thirdDataTypeVal.getProperties().iterator(); + + ToscaProperty thirdDataTypeFirstProperty = thirdDataTypePropertiesIter.next(); + assertEquals("onap.datatypes.monitoring.thresholds", thirdDataTypeFirstProperty.getKey().getParentKeyName()); + assertEquals("closedLoopControlName", thirdDataTypeFirstProperty.getKey().getLocalName()); + assertEquals("string", thirdDataTypeFirstProperty.getType().getName()); + assertTrue(thirdDataTypeFirstProperty.isRequired()); + assertEquals("Closed Loop Control Name associated with the threshold", thirdDataTypeFirstProperty + .getDescription()); + + ToscaProperty thirdDataTypeSecondProperty = thirdDataTypePropertiesIter.next(); + assertEquals("onap.datatypes.monitoring.thresholds", thirdDataTypeSecondProperty.getKey().getParentKeyName()); + assertEquals("closedLoopEventStatus", thirdDataTypeSecondProperty.getKey().getLocalName()); + assertEquals("string", thirdDataTypeSecondProperty.getType().getName()); + assertTrue(thirdDataTypeSecondProperty.isRequired()); + assertEquals("Closed Loop Event Status of the threshold", thirdDataTypeSecondProperty.getDescription()); + assertNotNull(thirdDataTypeSecondProperty.getConstraints()); + assertTrue(thirdDataTypeSecondProperty.getConstraints().size() == 1); + assertEquals("string", thirdDataTypeSecondProperty.getConstraints().iterator().next().getKey() + .getParentKeyName()); + assertEquals("valid_values", thirdDataTypeSecondProperty.getConstraints().iterator().next().getKey() + .getLocalName()); + assertTrue(thirdDataTypeSecondProperty.getConstraints().iterator().next() + instanceof ToscaConstraintValidValues); + assertTrue(((ToscaConstraintValidValues)(thirdDataTypeSecondProperty.getConstraints().iterator().next())) + .getValidValues().size() == 2); + + ToscaProperty thirdDataTypeThirdProperty = thirdDataTypePropertiesIter.next(); + assertEquals("onap.datatypes.monitoring.thresholds", thirdDataTypeThirdProperty.getKey().getParentKeyName()); + assertEquals("direction", thirdDataTypeThirdProperty.getKey().getLocalName()); + assertEquals("string", thirdDataTypeThirdProperty.getType().getName()); + assertTrue(thirdDataTypeThirdProperty.isRequired()); + assertEquals("Direction of the threshold", thirdDataTypeThirdProperty.getDescription()); + assertNotNull(thirdDataTypeThirdProperty.getConstraints()); + assertTrue(thirdDataTypeThirdProperty.getConstraints().size() == 1); + assertEquals("string", thirdDataTypeThirdProperty.getConstraints().iterator().next().getKey() + .getParentKeyName()); + assertEquals("valid_values", thirdDataTypeThirdProperty.getConstraints().iterator().next().getKey() + .getLocalName()); + assertTrue(((ToscaConstraintValidValues)(thirdDataTypeThirdProperty.getConstraints().iterator().next())) + .getValidValues().size() == 5); + + ToscaProperty thirdDataTypeFourthProperty = thirdDataTypePropertiesIter.next(); + assertEquals("onap.datatypes.monitoring.thresholds", thirdDataTypeFourthProperty.getKey().getParentKeyName()); + assertEquals("fieldPath", thirdDataTypeFourthProperty.getKey().getLocalName()); + assertEquals("string", thirdDataTypeFourthProperty.getType().getName()); + assertTrue(thirdDataTypeFourthProperty.isRequired()); + assertEquals("Json field Path as per CEF message which needs to be analyzed for TCA", + thirdDataTypeFourthProperty.getDescription()); + assertNotNull(thirdDataTypeFourthProperty.getConstraints()); + assertTrue(thirdDataTypeFourthProperty.getConstraints().size() == 1); + assertEquals("string", thirdDataTypeFourthProperty.getConstraints().iterator().next().getKey() + .getParentKeyName()); + assertEquals("valid_values", thirdDataTypeFourthProperty.getConstraints().iterator().next().getKey() + .getLocalName()); + assertTrue(((ToscaConstraintValidValues)(thirdDataTypeFourthProperty.getConstraints().iterator().next())) + .getValidValues().size() == 43); + + ToscaProperty thirdDataTypeFifthProperty = thirdDataTypePropertiesIter.next(); + assertEquals("onap.datatypes.monitoring.thresholds", thirdDataTypeFifthProperty.getKey().getParentKeyName()); + assertEquals("severity", thirdDataTypeFifthProperty.getKey().getLocalName()); + assertEquals("string", thirdDataTypeFifthProperty.getType().getName()); + assertTrue(thirdDataTypeFifthProperty.isRequired()); + assertEquals("Threshold Event Severity", thirdDataTypeFifthProperty.getDescription()); + assertNotNull(thirdDataTypeFifthProperty.getConstraints()); + assertTrue(thirdDataTypeFifthProperty.getConstraints().size() == 1); + assertEquals("string", thirdDataTypeFifthProperty.getConstraints().iterator().next().getKey() + .getParentKeyName()); + assertEquals("valid_values", thirdDataTypeFifthProperty.getConstraints().iterator().next().getKey() + .getLocalName()); + assertTrue(((ToscaConstraintValidValues)(thirdDataTypeFifthProperty.getConstraints().iterator().next())) + .getValidValues().size() == 5);; + + ToscaProperty thirdDataTypeSixthProperty = thirdDataTypePropertiesIter.next(); + assertEquals("onap.datatypes.monitoring.thresholds", thirdDataTypeSixthProperty.getKey().getParentKeyName()); + assertEquals("thresholdValue", thirdDataTypeSixthProperty.getKey().getLocalName()); + assertEquals("integer", thirdDataTypeSixthProperty.getType().getName()); + assertTrue(thirdDataTypeSixthProperty.isRequired()); + assertEquals("Threshold value for the field Path inside CEF message", thirdDataTypeSixthProperty + .getDescription()); + + ToscaProperty thirdDataTypeSeventhProperty = thirdDataTypePropertiesIter.next(); + assertEquals("onap.datatypes.monitoring.thresholds", thirdDataTypeSeventhProperty.getKey().getParentKeyName()); + assertEquals("version", thirdDataTypeSeventhProperty.getKey().getLocalName()); + assertEquals("string", thirdDataTypeSeventhProperty.getType().getName()); + assertTrue(thirdDataTypeSeventhProperty.isRequired()); + assertEquals("Version number associated with the threshold", thirdDataTypeSeventhProperty.getDescription()); + } + + private void verifyCollectorInputDeserialization(ToscaServiceTemplate serviceTemplate) { + + // Sanity check the entire structure + assertNotNull(serviceTemplate); + LOGGER.info(serviceTemplate.validate(new PfValidationResult()).toString()); + assertTrue(serviceTemplate.validate(new PfValidationResult()).isValid()); + + // Check tosca_definitions_version + assertEquals("tosca_simple_yaml_1_0_0", serviceTemplate.getToscaDefinitionsVersion()); + + // Check policy_types + Map<PfConceptKey, ToscaPolicyType> policyTypesConceptMap = serviceTemplate.getPolicyTypes().getConceptMap(); + assertTrue(policyTypesConceptMap.size() == 2); + Iterator<Entry<PfConceptKey, ToscaPolicyType>> policyTypesIter = policyTypesConceptMap.entrySet().iterator(); + + Entry<PfConceptKey, ToscaPolicyType> firstPolicyType = policyTypesIter.next(); + assertEquals("onap.policies.Monitoring", firstPolicyType.getKey().getName()); + assertEquals("1.0.0", firstPolicyType.getKey().getVersion()); + assertEquals("tosca.policies.Root", firstPolicyType.getValue().getDerivedFrom().getName()); + assertEquals("a base policy type for all policies that govern monitoring provision", + firstPolicyType.getValue().getDescription()); + + Entry<PfConceptKey, ToscaPolicyType> secondPolicyType = policyTypesIter.next(); + assertEquals("onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server", + secondPolicyType.getKey().getName()); + assertEquals("1.0.0", secondPolicyType.getKey().getVersion()); + assertEquals("policy.nodes.Root", secondPolicyType.getValue().getDerivedFrom().getName()); + assertTrue(secondPolicyType.getValue().getProperties().size() == 2); + + Iterator<ToscaProperty> propertiesIter = secondPolicyType.getValue().getProperties().iterator(); + + ToscaProperty firstProperty = propertiesIter.next(); + assertEquals("onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server", + firstProperty.getKey().getParentKeyName()); + assertEquals("1.0.0", firstProperty.getKey().getParentKeyVersion()); + assertEquals("buscontroller_feed_publishing_endpoint", firstProperty.getKey().getLocalName()); + assertEquals("string", firstProperty.getType().getName()); + assertEquals("DMAAP Bus Controller feed endpoint", firstProperty.getDescription()); + + ToscaProperty secondProperty = propertiesIter.next(); + assertEquals("onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server", + secondProperty.getKey().getParentKeyName()); + assertEquals("1.0.0", secondProperty.getKey().getParentKeyVersion()); + assertEquals("datafile.policy", secondProperty.getKey().getLocalName()); + assertEquals("string", secondProperty.getType().getName()); + assertEquals("datafile Policy JSON as string", secondProperty.getDescription()); + } + + private String serializeMonitoringServiceTemplate(ToscaServiceTemplate serviceTemplate) { + return gson.toJson(serviceTemplate); + } +}
\ No newline at end of file |