diff options
Diffstat (limited to 'javatoscachecker/checker/src/main')
-rw-r--r-- | javatoscachecker/checker/src/main/java/org/onap/tosca/checker/Checker.java | 6 | ||||
-rw-r--r-- | javatoscachecker/checker/src/main/java/org/onap/tosca/checker/Data.java | 71 |
2 files changed, 55 insertions, 22 deletions
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, |