Make POMBA able to detect dummy notifications
[oom.git] / kubernetes / pomba / charts / pomba-validation-service / resources / bundleconfig / etc / rules / poa-event / default-rules.groovy
index 1902a10..4a7f304 100644 (file)
@@ -76,6 +76,12 @@ entity {
       name 'Attribute-comparison'
       attributes 'context-list.ndcb.vnfList[*].vfModuleList[*].vmList[*]', 'context-list.aai.vnfList[*].vfModuleList[*].vmList[*]'
     }
+
+    // NDCB-AAI comparison: P-Interface list
+    useRule {
+      name 'Attribute-comparison'
+      attributes 'context-list.ndcb.pnfList[*].pInterfaceList[*]', 'context-list.aai.pnfList[*].pInterfaceList[*]'
+    }
        
        
     // SDNC-AAI comparison: Context level
@@ -132,8 +138,13 @@ entity {
       attributes 'context-list.sdnc.vnfList[*].vfModuleList[*].vmList[*]', 'context-list.aai.vnfList[*].vfModuleList[*].vmList[*]'
     }
 
-       
-       
+    // AAI-SDNC PNF name validation
+    useRule {
+      name 'AAI-SDNC-pnf-name-check'
+      attributes 'context-list.aai.pnfList[*].name', 'context-list.sdnc.pnfList[*].name'
+    }
+
+
     // SDNC-NDCB comparison: Context level
     useRule {
       name 'Attribute-comparison'
@@ -207,9 +218,27 @@ entity {
       name 'SDC-AAI-vf-module-instance-check'
       attributes 'context-list.sdc.vnfList[*].vfModuleList[*]', 'context-list.aai.vnfList[*].vfModuleList[*]'
     }
+
+    useRule {
+       name 'AAI-not-empty'
+       attributes 'context-list.aai.pnfList', 'context-list.aai.vnfList', 'context-list.aai.networkList'
+    }
   }
 }
 
+rule {
+    name        'AAI-not-empty'
+    category    'VNFC Consistency'
+    description 'Check if AAI collected anything'
+    errorText   'AAI section is empty'
+    severity    'ERROR'
+    attributes  'pnfList', 'vnfList', 'networkList'
+    validate    '''
+        // expect at least one not empty list
+        return !pnfList.isEmpty() || !vnfList.isEmpty() || !networkList.isEmpty()
+                '''
+}
+
 rule {
   name        'SDC-AAI-vnfc-type'
   category    'VNFC Consistency'
@@ -432,3 +461,52 @@ rule {
         return new Tuple2(success, details)
         '''
 }
+
+rule {
+  name        'AAI-SDNC-pnf-name-check'
+  category    'PNF Consistency'
+  description 'Validate that each PNF name in AAI matches a PNF name in the SDNC model'
+  errorText   'AAI PNF names do not match SDNC - {0}'
+  severity    'ERROR'
+  attributes  'aaiNames', 'sdncNames'
+  validate    '''
+        def addName = { values, key ->
+                values.add("$key")
+        }
+
+        List<String> errorReasons = new ArrayList();
+
+        if (aaiNames.size() != sdncNames.size()) {
+            errorReasons.add("Number of PNFs don't match; aai has ${aaiNames.size()}, sdnc has ${sdncNames.size()}")
+            return new Tuple2(false, errorReasons)
+        }
+
+        // collect all the "name" values from AAI and SDNC into two Sets.
+        Set aaiNameSet = new java.util.HashSet()
+        aaiNames.each {
+           aValue -> addName(aaiNameSet, aValue)
+        }
+
+        Set sdncNameSet = new java.util.HashSet()
+        sdncNames.each {
+            aValue -> addName(sdncNameSet, aValue)
+        }
+
+        // Validate that the names match by comparing the size of the two Sets.
+        if (aaiNameSet.size() != sdncNameSet.size()) {
+            errorReasons.add("Number of distinct PNF names don't match; aai: ${aaiNameSet}, sdnc: ${sdncNameSet}")
+            return new Tuple2(false, errorReasons)
+        }
+
+        Set combinedSet = new HashSet();
+        combinedSet.addAll(aaiNameSet);
+        combinedSet.addAll(sdncNameSet);
+        if (combinedSet.size() != aaiNameSet.size()) {
+            errorReasons.add("PNF names don't match; aai names: ${aaiNameSet}, sdnc names: ${sdncNameSet}")
+            return new Tuple2(false, errorReasons)
+        }
+
+        return true
+
+        '''
+}