diff options
Diffstat (limited to 'javatoscachecker/checker')
3 files changed, 208 insertions, 146 deletions
diff --git a/javatoscachecker/checker/pom.xml b/javatoscachecker/checker/pom.xml index a408bc6..61a3041 100644 --- a/javatoscachecker/checker/pom.xml +++ b/javatoscachecker/checker/pom.xml @@ -10,97 +10,100 @@ <name>Checker</name> <build> - <sourceDirectory>src/main/java</sourceDirectory> - <plugins> - <plugin> - <artifactId>maven-compiler-plugin</artifactId> - <version>3.1</version> - <configuration> - <source>1.8</source> - <target>1.8</target> - <encoding>${project.build.sourceEncoding}</encoding> - </configuration> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-dependency-plugin</artifactId> - <version>2.10</version> - <executions> - <execution> - <id>copy-dependencies</id> - <phase>package</phase> - <goals> - <goal>copy-dependencies</goal> - </goals> - <configuration> - <outputDirectory>${project.build.directory}/deps</outputDirectory> - <overWriteReleases>false</overWriteReleases> - <overWriteSnapshots>false</overWriteSnapshots> - <overWriteIfNewer>true</overWriteIfNewer> - </configuration> - </execution> - </executions> - </plugin> - <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>buildnumber-maven-plugin</artifactId> - <version>1.4</version> - <executions> - <execution> - <phase>validate</phase> - <goals> - <goal>create</goal> - </goals> - </execution> - </executions> - <configuration> - <doCheck>false</doCheck> - <doUpdate>false</doUpdate> - </configuration> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-jar-plugin</artifactId> - <version>2.1</version> - <configuration> - <archive> - <manifest> - <addDefaultImplementationEntries>true</addDefaultImplementationEntries> - </manifest> - <manifestEntries> - <Implementation-Build>${buildNumber}</Implementation-Build> - </manifestEntries> - </archive> - </configuration> - </plugin> + <sourceDirectory>src/main/java</sourceDirectory> + <plugins> + <plugin> + <artifactId>maven-compiler-plugin</artifactId> + <version>3.1</version> + <configuration> + <source>1.8</source> + <target>1.8</target> + <encoding>${project.build.sourceEncoding}</encoding> + </configuration> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-dependency-plugin</artifactId> + <version>2.10</version> + <executions> + <execution> + <id>copy-dependencies</id> + <phase>package</phase> + <goals> + <goal>copy-dependencies</goal> + </goals> + <configuration> + <outputDirectory>${project.build.directory}/deps</outputDirectory> + <overWriteReleases>false</overWriteReleases> + <overWriteSnapshots>false</overWriteSnapshots> + <overWriteIfNewer>true</overWriteIfNewer> + </configuration> + </execution> + </executions> + </plugin> + + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>buildnumber-maven-plugin</artifactId> + <version>1.4</version> + <executions> + <execution> + <phase>validate</phase> + <goals> + <goal>create</goal> + </goals> + </execution> + </executions> + <configuration> + <doCheck>false</doCheck> + <doUpdate>false</doUpdate> + </configuration> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + <version>2.1</version> + <configuration> + <archive> + <manifest> + <addDefaultImplementationEntries>true</addDefaultImplementationEntries> + </manifest> + <manifestEntries> + <Implementation-Build>${buildNumber}</Implementation-Build> + </manifestEntries> + </archive> + </configuration> + </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-assembly-plugin</artifactId> - <version>2.6</version> - <configuration> - <descriptorRefs> - <descriptorRef>jar-with-dependencies</descriptorRef> - </descriptorRefs> - <archive> - <manifest> - <mainClass>org.onap.tosca.checker.Checker</mainClass> - </manifest> - <manifestEntries> - <Implementation-Build>${buildNumber}</Implementation-Build> - </manifestEntries> - </archive> - </configuration> - <executions> - <execution> - <id>make-assembly</id> <!-- this is used for inheritance merges --> - <phase>package</phase> <!-- bind to the packaging phase --> - <goals> - <goal>single</goal> - </goals> - </execution> - </executions> - </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-assembly-plugin</artifactId> + <version>2.6</version> + <configuration> + <descriptorRefs> + <descriptorRef>jar-with-dependencies</descriptorRef> + </descriptorRefs> + <archive> + <manifest> + <mainClass>org.onap.tosca.checker.Checker</mainClass> + </manifest> + <manifestEntries> + <Implementation-Build>${buildNumber}</Implementation-Build> + </manifestEntries> + </archive> + </configuration> + <executions> + <execution> + <id>make-assembly</id> <!-- this is used for inheritance merges --> + <phase>package</phase> <!-- bind to the packaging phase --> + <goals> + <goal>single</goal> + </goals> + </execution> + </executions> + </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> @@ -113,40 +116,66 @@ </goals> </execution> </executions> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-javadoc-plugin</artifactId> - <version>3.0.0-M1</version> - <configuration> - <doctitle>API for ${project.name} ${project.version}</doctitle> - <windowtitle>API for ${project.name} ${project.version}</windowtitle> - </configuration> - </plugin> - <!-- blackduck maven plugin --> - <plugin> - <groupId>com.blackducksoftware.integration</groupId> - <artifactId>hub-maven-plugin</artifactId> - <version>2.0.0</version> - <inherited>false</inherited> - <configuration> - <hubProjectName>${project.name}</hubProjectName> - <outputDirectory>${project.basedir}</outputDirectory> - <deployHubBdio>false</deployHubBdio> - </configuration> - <executions> - <execution> - <id>create-bdio-file</id> - <phase>package</phase> - <goals> - <goal>build-bom</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - <dependencies> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-javadoc-plugin</artifactId> + <version>3.0.0-M1</version> + <configuration> + <doctitle>API for ${project.name} ${project.version}</doctitle> + <windowtitle>API for ${project.name} ${project.version}</windowtitle> + </configuration> + </plugin> + + <plugin> + <groupId>org.sonatype.plugins</groupId> + <artifactId>nexus-staging-maven-plugin</artifactId> + <extensions>true</extensions> + <configuration> + <nexusUrl>${nexusproxy}</nexusUrl> + <stagingProfileId>176c31dfe190a</stagingProfileId> + <serverId>ecomp-staging</serverId> + </configuration> + </plugin> + + <!-- replace by the sonatype plugin ? + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-deploy-plugin</artifactId> + <configuration> + <skip /> + </configuration> + </plugin> + --> + + <!-- blackduck maven plugin --> + <!-- + <plugin> + <groupId>com.blackducksoftware.integration</groupId> + <artifactId>hub-maven-plugin</artifactId> + <version>2.0.0</version> + <inherited>false</inherited> + <configuration> + <hubProjectName>${project.name}</hubProjectName> + <outputDirectory>${project.basedir}</outputDirectory> + <deployHubBdio>false</deployHubBdio> + </configuration> + <executions> + <execution> + <id>create-bdio-file</id> + <phase>package</phase> + <goals> + <goal>build-bom</goal> + </goals> + </execution> + </executions> + </plugin> + --> + </plugins> + </build> + + <dependencies> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> diff --git a/javatoscachecker/checker/src/main/java/org/onap/tosca/checker/Checker.java b/javatoscachecker/checker/src/main/java/org/onap/tosca/checker/Checker.java index 5cc8233..4218b85 100644 --- a/javatoscachecker/checker/src/main/java/org/onap/tosca/checker/Checker.java +++ b/javatoscachecker/checker/src/main/java/org/onap/tosca/checker/Checker.java @@ -2821,7 +2821,7 @@ available and the available targets won't be re-processed. return true; } defs = Maps.newHashMap(defs); // - + boolean res = true; if (theSpecType == null) { theSpecType = (String)theSpec.get("type"); @@ -2838,8 +2838,6 @@ available and the available targets won't be re-processed. while (i.hasNext() && !defs.isEmpty()) { Map.Entry<String,Map> type = i.next(); -//System.out.println(" **** type : " + type.getKey() ); - Map<String, Map> typeDefs = (Map<String,Map>)type.getValue() .get(theFacet.name()); if (null == typeDefs) { @@ -2847,7 +2845,7 @@ available and the available targets won't be re-processed. } MapDifference<String, Map> diff = Maps.difference(defs, typeDefs); - + //this are the ones this type and the spec have in common (same key, //different values) Map<String, MapDifference.ValueDifference<Map>> facetDefs = diff --git a/javatoscachecker/checker/src/main/java/org/onap/tosca/checker/Data.java b/javatoscachecker/checker/src/main/java/org/onap/tosca/checker/Data.java index 9aab6ca..2a75cfd 100644 --- a/javatoscachecker/checker/src/main/java/org/onap/tosca/checker/Data.java +++ b/javatoscachecker/checker/src/main/java/org/onap/tosca/checker/Data.java @@ -294,15 +294,11 @@ public class Data { private static boolean evalCollection(Collection theVals, Map theDef, Checker.CheckContext theCtx) { - -//System.out.println("evalCollection: " + theDef + ", " + theVals); - Data.Type entryType = null; Map entryTypeDef = (Map)theDef.get("entry_schema"); if (null != entryTypeDef) entryType = typeByName((String)entryTypeDef.get("type")); -//System.out.println("evalCollection, entry definition: " + entryTypeDef); boolean res = true; for (Object val: theVals) { //check if the value is not a function call @@ -336,8 +332,6 @@ public class Data { private static boolean evalCollectionConstraints(Collection theVals, Map theDef, Checker.CheckContext theCtx) { -//System.out.println("evalCollectionConstraints: " + theDef + ", " + theVals); - //should check overall constraints if (theVals == null) @@ -350,8 +344,6 @@ public class Data { String entryTypeName = (String)entryTypeDef.get("type"); Data.Type entryType = typeByName(entryTypeName); -//System.out.println("evalCollectionConstraints, entry definition: " + entryTypeDef); - boolean res = true; for (Object val: theVals) { Evaluator entryEvaluator = entryType.constraintsEvaluator(); @@ -367,16 +359,13 @@ public class Data { } /* - * All required properties across the hierarchical defintion must be present - * TODO: The expr cannot contain any entry not specified in the type definition + * TODO: check that */ public static boolean evalUser(Object theVal, Map theDef, Checker.CheckContext theCtx) { -//System.out.println("evalUser: " + theDef + ", " + theVal); - boolean res = true; - Map val = (Map)theVal; + Map val = new HashMap((Map)theVal); //must be done with respect to the super-type(s) definition Iterator<Map.Entry> props = theCtx.catalog() .facets(Construct.Data, @@ -385,13 +374,11 @@ public class Data { while (props.hasNext()) { Map.Entry propEntry = props.next(); Map propDef = (Map)propEntry.getValue(); - Object propVal = val.get(propEntry.getKey()); + Object propVal = val.remove(propEntry.getKey()); if (propVal != null) { Data.Type propType = typeByName((String)propDef.get("type")); -//System.out.println("evalUser: " + propVal + " of type " + propType + "/" + propType.isScalar()); - if (!propType.evaluator().eval(propVal, propDef, theCtx)) { res= false; if (propType.isScalar()) { @@ -400,6 +387,12 @@ public class Data { } } } + + if (!val.isEmpty()) { + theCtx.addError("Entries " + val + " were not expected for type " + theDef.get("type"), null); + res = false; + } + return res; } @@ -550,11 +543,52 @@ public class Data { private static boolean evalConcat( Object theVal, Map theDef, Checker.CheckContext theCtx) { + + Map val = (Map)theVal; + Map.Entry entry = (Map.Entry)val.entrySet().iterator().next(); + + if (!(entry.getValue() instanceof List)) { + theCtx.addError("concat: argument expression not a list", null); + return false; + } + + List args = (List)entry.getValue(); + if (args.size() < 2) { + theCtx.addError("concat: requires a minimum of 2 arguments", null); + return false; + } + + //TODO: every argument must be or yield a String value + //cannot be done in full + return true; } private static boolean evalToken( Object theVal, Map theDef, Checker.CheckContext theCtx) { + + Map val = (Map)theVal; + Map.Entry entry = (Map.Entry)val.entrySet().iterator().next(); + + if (!(entry.getValue() instanceof List)) { + theCtx.addError("token: argument expression not a list", null); + return false; + } + + List args = (List)entry.getValue(); + if (args.size() != 3) { + theCtx.addError("token: requires 3 arguments", null); + return false; + } + + //the first 2 argument must be String expressions so require more elaborate estimation + //but the third one must be an integer + + if (!(args.get(2) instanceof Integer)) { + theCtx.addError("token: 3rd argument must be an integer (substring index), found " + args.get(2).getClass(),null); + return false; + } + return true; } @@ -564,7 +598,7 @@ public class Data { Map.Entry entry = (Map.Entry)val.entrySet().iterator().next(); if (!(entry.getValue() instanceof String)) { - theCtx.addError("get_input: argument must be a String" ,null); + theCtx.addError("get_input: argument must be a String", null); return false; } @@ -666,6 +700,8 @@ public class Data { return false; } + //follow all 'HSOTED_ON' relationships to find a host, if any .. + return true; } else { @@ -737,7 +773,6 @@ public class Data { { String facetName = (String)args.get(facetNameIndex); for (Facet facet: theFacets) { -//System.out.println("get_data: looking at " + facetConstruct + " " + facetConstructType + ", " + facet + " " + facetName); facetSpec = theCtx.catalog() .getFacetDefinition( facetConstruct, |