diff options
author | Kajur, Harish (vk250x) <vk250x@att.com> | 2019-04-14 21:32:42 -0400 |
---|---|---|
committer | Kajur, Harish (vk250x) <vk250x@att.com> | 2019-04-14 21:39:22 -0400 |
commit | 009a574339ba0bccca7c786c18af24203e4cecf3 (patch) | |
tree | 8a7cf23b7252fd3a7d3fafaf975a18d782c15015 /aai-schema/src | |
parent | 3501e74711a2e91ce84d0b4cbc989738f96e0891 (diff) |
Add missing model invariant indexes
Some of the properties in the schema are
missing the indexes for the dbalias properties
and if they are missing it could potentially cause
issues when the application runs the create db schema
Adding a junit to ensure that in the future
that such properties are properly highlighted
to ensure that this doesn't happen
Issue-ID: AAI-2374
Change-Id: I01efba764a61881056892458bdf705d94d458650
Signed-off-by: Kajur, Harish (vk250x) <vk250x@att.com>
Diffstat (limited to 'aai-schema/src')
-rw-r--r-- | aai-schema/src/main/resources/onap/oxm/v16/aai_oxm_v16.xml | 14 | ||||
-rw-r--r-- | aai-schema/src/test/java/org/onap/aai/schema/ValidateOXMTest.java | 119 |
2 files changed, 117 insertions, 16 deletions
diff --git a/aai-schema/src/main/resources/onap/oxm/v16/aai_oxm_v16.xml b/aai-schema/src/main/resources/onap/oxm/v16/aai_oxm_v16.xml index aaf9e5c..78f71f5 100644 --- a/aai-schema/src/main/resources/onap/oxm/v16/aai_oxm_v16.xml +++ b/aai-schema/src/main/resources/onap/oxm/v16/aai_oxm_v16.xml @@ -3845,7 +3845,7 @@ <xml-properties> <xml-property name="description" value="VPN binding"/> <xml-property name="nameProps" value="vpn-name,vpn-type"/> - <xml-property name="indexedProps" value="vpn-name,vpn-id,vpn-type,access-provider-id,access-client-id,access-topology-id,src-access-node-id,src-access-ltp-id,dst-access-node-id,dst-access-ltp-id,operational-status"/> + <xml-property name="indexedProps" value="vpn-name,vpn-id,vpn-type,access-provider-id,access-client-id,access-topology-id,src-access-node-id,src-access-ltp-id,dst-access-node-id,dst-access-ltp-id,operational-status,model-invariant-id,model-version-id"/> <xml-property name="searchable" value="vpn-id,vpn-name"/> <xml-property name="uniqueProps" value="vpn-id"/> <xml-property name="container" value="vpn-bindings"/> @@ -7718,7 +7718,7 @@ </java-attributes> <xml-properties> <xml-property name="description" value="Instance of an sp-partner"/> - <xml-property name="indexedProps" value="sp-partner-id,url,callsource"/> + <xml-property name="indexedProps" value="sp-partner-id,url,callsource,model-invariant-id,model-version-id"/> <xml-property name="nameProps" value="sp-partner-id"/> <xml-property name="searchable" value="sp-partner-id"/> <xml-property name="uniqueProps" value="sp-partner-id"/> @@ -7863,7 +7863,7 @@ </java-attributes> <xml-properties> <xml-property name="description" value="Instance of a connectivity"/> - <xml-property name="indexedProps" value="connectivity-id,etht-svc-name,bandwidth-profile-name,vpn-type,color-aware,coupling-flag,access-provider-id,access-client-id,access-topology-id,access-node-id,access-ltp-id,operational-status"/> + <xml-property name="indexedProps" value="connectivity-id,etht-svc-name,bandwidth-profile-name,vpn-type,color-aware,coupling-flag,access-provider-id,access-client-id,access-topology-id,access-node-id,access-ltp-id,operational-status,model-invariant-id,model-version-id"/> <xml-property name="nameProps" value="etht-svc-name"/> <xml-property name="searchable" value="connectivity-id"/> <xml-property name="uniqueProps" value="connectivity-id"/> @@ -8188,7 +8188,7 @@ </java-attributes> <xml-properties> <xml-property name="description" value="Instance of a site-resource"/> - <xml-property name="indexedProps" value="site-resource-id,site-resource-name,type,role,generated-site-id,operational-status"/> + <xml-property name="indexedProps" value="site-resource-id,site-resource-name,type,role,generated-site-id,operational-status,model-invariant-id,model-version-id"/> <xml-property name="nameProps" value="site-resource-name"/> <xml-property name="searchable" value="site-resource-id"/> <xml-property name="uniqueProps" value="site-resource-id"/> @@ -8291,7 +8291,7 @@ </java-attributes> <xml-properties> <xml-property name="description" value="Instance of an sdwan-vpn"/> - <xml-property name="indexedProps" value="sdwan-vpn-id,sdwan-vpn-name,vxlan-id,topology,operational-status"/> + <xml-property name="indexedProps" value="sdwan-vpn-id,sdwan-vpn-name,vxlan-id,topology,operational-status,model-invariant-id,model-version-id"/> <xml-property name="nameProps" value="sdwan-vpn-name"/> <xml-property name="searchable" value="sdwan-vpn-id"/> <xml-property name="uniqueProps" value="sdwan-vpn-id"/> @@ -8410,7 +8410,7 @@ </java-attributes> <xml-properties> <xml-property name="description" value="Instance of a device"/> - <xml-property name="indexedProps" value="device-id,device-name,esn,vendor,class,type,version,system-ip,system-ipv4,system-ipv6,operational-status"/> + <xml-property name="indexedProps" value="device-id,device-name,esn,vendor,class,type,version,system-ip,system-ipv4,system-ipv6,operational-status,model-invariant-id,model-version-id"/> <xml-property name="nameProps" value="device-name"/> <xml-property name="searchable" value="device-id"/> <xml-property name="uniqueProps" value="device-id"/> @@ -8555,7 +8555,7 @@ </java-attributes> <xml-properties> <xml-property name="description" value="Instance of a wan-port-config"/> - <xml-property name="indexedProps" value="wan-port-config-id,wan-port-config-name,device-id,ip-address,ipv4-address,ipv6-address,port-type,port-number,device-port-id,wan-port-id,operational-status"/> + <xml-property name="indexedProps" value="wan-port-config-id,wan-port-config-name,device-id,ip-address,ipv4-address,ipv6-address,port-type,port-number,device-port-id,wan-port-id,operational-status,model-invariant-id,model-version-id"/> <xml-property name="nameProps" value="wan-port-config-name"/> <xml-property name="searchable" value="wan-port-config-id"/> <xml-property name="uniqueProps" value="wan-port-config-id"/> diff --git a/aai-schema/src/test/java/org/onap/aai/schema/ValidateOXMTest.java b/aai-schema/src/test/java/org/onap/aai/schema/ValidateOXMTest.java index cd8c76f..0dcf1b3 100644 --- a/aai-schema/src/test/java/org/onap/aai/schema/ValidateOXMTest.java +++ b/aai-schema/src/test/java/org/onap/aai/schema/ValidateOXMTest.java @@ -20,10 +20,10 @@ package org.onap.aai.schema; -//import org.junit.Test; - import org.apache.commons.io.FileUtils; import org.apache.commons.io.filefilter.DirectoryFileFilter; +import org.apache.commons.io.filefilter.FileFileFilter; +import org.apache.commons.io.filefilter.FileFilterUtils; import org.apache.commons.io.filefilter.RegexFileFilter; import org.junit.Test; import org.w3c.dom.Document; @@ -39,14 +39,12 @@ import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; import java.io.*; +import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; -import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; public class ValidateOXMTest { @@ -54,7 +52,7 @@ public class ValidateOXMTest { @Test public void testFindXmlPropContainingSpace() throws XPathExpressionException, IOException, SAXException, ParserConfigurationException { boolean foundIssue = false; - List<File> fileList = getFiles(); + List<File> fileList = getLatestFiles(); StringBuilder msg = new StringBuilder(); for (File file : fileList) { @@ -101,7 +99,13 @@ public class ValidateOXMTest { msg.append("\n"); Document xmlDocument = getDocument(file); XPath xPath = XPathFactory.newInstance().newXPath(); - String expression = "/xml-bindings/java-types/java-type[count(xml-properties/xml-property[@name='container']) > 0 and count(xml-properties/xml-property[@name='uriTemplate']) = 0 ]"; + String expression = "/xml-bindings/java-types/java-type[" + + "(" + + "count(xml-properties/xml-property[@name='container']) > 0 " + + "or count(xml-properties/xml-property[@name='dependentOn']) > 0" + + ") " + + "and count(xml-properties/xml-property[@name='uriTemplate']) = 0 " + + "]"; NodeList nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET); for (int i = 0; i < nodeList.getLength(); i++) { @@ -122,16 +126,113 @@ public class ValidateOXMTest { } + + /** + * Verifies that all specified properties are indexed + * Currently set to check that "model-invariant-id","model-version-id" which are aliased are indexed + * @throws XPathExpressionException + * @throws IOException + * @throws SAXException + * @throws ParserConfigurationException + */ + @Test + public void aliasedIndexedPropsAreInIndexedListWithPropName() throws XPathExpressionException, IOException, SAXException, ParserConfigurationException { + + final List<String> props = Arrays.asList("model-invariant-id","model-version-id"); + + boolean foundIssue = false; + List<File> fileList = getLatestFiles(); + StringBuilder msg = new StringBuilder(); + + for (File file : fileList) { + msg.append(file.getAbsolutePath().replaceAll(".*aai-schema", "")); + msg.append("\n"); + for (String prop : props) { + Document xmlDocument = getDocument(file); + XPath xPath = XPathFactory.newInstance().newXPath(); + String expression = "/xml-bindings/java-types/java-type[" + + "(" + + "count(xml-properties/xml-property[@name='container']) > 0 " + + "or count(xml-properties/xml-property[@name='dependentOn']) > 0" + + ") " + + "and count(xml-properties/xml-property[@name='indexedProps' and not(contains(@value,'" + prop + "'))]) > 0 " + //prop is not in indexed props list + "and count(java-attributes/xml-element[@name='" + prop + "']) > 0 " + // prop is a property on obj + "]"; + + NodeList nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET); + + if (nodeList.getLength() > 0) { + msg.append("\t") + .append(prop) + .append("\n"); + } + for (int i = 0; i < nodeList.getLength(); i++) { + String name = nodeList.item(i).getAttributes().getNamedItem("name").getNodeValue(); + if (name.equals("InstanceFilter") || name.equals("InventoryResponseItems") || name.equals("InventoryResponseItem")) { + continue; + } + foundIssue = true; + msg.append("\t\t") + .append(name) + .append("\n"); + } + } + } + + if (foundIssue) { + System.out.println(msg.toString()); + fail("Missing index entry in oxm."); + } + + } + private List<File> getFiles() { Path currentRelativePath = Paths.get("../aai-schema/src/main/resources/").toAbsolutePath(); return FileUtils.listFiles( currentRelativePath.toFile(), new RegexFileFilter(".*\\.xml"), DirectoryFileFilter.DIRECTORY) - .stream().filter(file -> file.getAbsolutePath().contains("oxm")) + .stream() + .filter(file -> file.getAbsolutePath().contains("oxm")) + .filter(file -> !file.getAbsolutePath().contains("onap")) // skips onap for checks .collect(Collectors.toList()); } + /** + * Finds all of the oxm files for the latest version. + * @return list of the latest version of the oxm files. + */ + private List<File> getLatestFiles() { + List<String> latest = new ArrayList<>(); + Path currentRelativePath = Paths.get("../aai-schema/src/main/resources/").toAbsolutePath(); + List<File> subDirs = Arrays.asList(currentRelativePath.toFile().listFiles(File::isDirectory)); + for (File subDir : subDirs) { + String oxm = subDir.getAbsolutePath() + "/oxm"; + File[] oxms = new File(oxm).listFiles(File::isDirectory); + Arrays.stream(oxms).map(File::getAbsolutePath).max(new Comparator<String>() { + public int compare(String o1, String o2) { + return extractInt(o1) - extractInt(o2); + } + int extractInt(String s) { + String num = s.replaceAll("\\D", ""); + return num.isEmpty() ? 0 : Integer.parseInt(num); + } + }).ifPresent(latest::add); + } + + List<File> latestFiles = new ArrayList<>(); + latest.forEach(s -> + FileUtils.listFiles( + new File(s), + new RegexFileFilter(".*\\.xml"), + DirectoryFileFilter.DIRECTORY) + .stream() + .filter(file -> file.getAbsolutePath().contains("oxm")) + .forEach(latestFiles::add)); + + return latestFiles; + } + //TODO test that all oxm xml are valid xml |