rm dependents, update tests 87/16187/1
authorUlas Kozat <ulas.kozat@gmail.com>
Thu, 30 Jun 2016 15:21:26 +0000 (08:21 -0700)
committerUlas Kozat <ulas.kozat@gmail.com>
Thu, 30 Jun 2016 15:23:22 +0000 (08:23 -0700)
Change-Id: Ib28582296eb93ae5ee8276cfbf0221f3fd03ecbc
Signed-off-by: Ulas Kozat <ulas.kozat@gmail.com>
lib/partitioner/partitioner.py
tests/run.sh
tests/test_partitioner.py [new file with mode: 0755]

index f5b1546..5177b1b 100644 (file)
@@ -9,20 +9,16 @@ import copy
 
 def partition_tosca(filepath, nodesite, tpl):
   file_paths = {} #holds the list of partitioned files
-  flag = {} #True when key exists
   sitenodes = {} #holds nodes in each site
   
   #identify the number of partitions
   for node in nodesite:
     if nodesite[node] != []:
-     flag[nodesite[node]] = True
      if sitenodes.has_key(nodesite[node]):
        sitenodes[nodesite[node]].append(node)
      else:
        sitenodes[nodesite[node]] = [node]
 
-  n_parts = len(flag)
-
   #prepare the nodes
   tpl_local = {}
   for site in sitenodes:
@@ -32,13 +28,14 @@ def partition_tosca(filepath, nodesite, tpl):
    for site in sitenodes:
      if node not in sitenodes[site]:
        del tpl_local[site]['topology_template']['node_templates'][node] 
+       rm_dependents(tpl_local[site]['topology_template']['node_templates'] , node)
        #remove from policy targets 
        if tpl_local[site]['topology_template'].has_key('policies'):
          for rule in tpl_local[site]['topology_template']['policies']:
            for key in rule: #there should be only one key
              if node in rule[key]['targets']:
                rule[key]['targets'].remove(node)
-             # remove the rule is there is no target left!
+             # remove the rule if there is no target left!
              if len(rule[key]['targets']) is 0:
                tpl_local[site]['topology_template']['policies'].remove(rule)
 
@@ -110,3 +107,21 @@ def write_obj(f, curr, prev, prepad):
     f.write('\n') 
     for item in curr:
       write_obj(f, item, curr, prepad )
+
+def rm_dependents(node_template , node):
+  del_list = []
+  #find the dependents
+  for nd in node_template:
+    if node_template[nd].has_key('requirements'):
+      for i in range(len(node_template[nd]['requirements'])):
+        if node_template[nd]['requirements'][i].has_key('virtualLink') and \
+          node_template[nd]['requirements'][i]['virtualLink'].has_key('node') and \
+          node_template[nd]['requirements'][i]['virtualLink']['node'] == node:
+          del_list.append(nd)
+        if node_template[nd]['requirements'][i].has_key('virtualBinding') and \
+          node_template[nd]['requirements'][i]['virtualBinding'].has_key('node') and \
+          node_template[nd]['requirements'][i]['virtualBinding']['node'] == node:
+          del_list.append(nd)
+  #remove the dependents
+  for i in range(len(del_list)):
+     del node_template[del_list[i]]
index 695f0da..33c2749 100755 (executable)
@@ -64,6 +64,10 @@ cleanup() {
 
   echo "Stopping Domino Server..."
   stop_server
+
+  if [ -f file1 ]; then
+    rm file1
+  fi
 }
 
 echo "domino/tests/run.sh has been executed."
diff --git a/tests/test_partitioner.py b/tests/test_partitioner.py
new file mode 100755 (executable)
index 0000000..246f6ba
--- /dev/null
@@ -0,0 +1,49 @@
+#!/usr/bin/env python
+
+#Copyright 2016 Open Platform for NFV Project, Inc. and its contributors
+#   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.
+
+import sys, os, glob
+
+sys.path.insert(0, glob.glob('./lib')[0])
+
+from toscaparser.tosca_template import ToscaTemplate
+
+from mapper import *
+from partitioner import *
+
+def main(argv):
+  try:
+    tosca = ToscaTemplate(argv[0])
+    # Extract Labels
+    node_labels = label.extract_labels( tosca )
+    print node_labels
+    site_id = 0
+    subscribed_labels = {}
+    for key in node_labels:
+      subscribed_labels[site_id] = node_labels[key]
+      site_id = site_id + 1
+
+    # Map nodes in the template to resource domains
+    site_map = label.map_nodes( subscribed_labels , node_labels )
+    print site_map 
+
+    # Select a site for each VNF
+    node_site = label.select_site( site_map )
+    print node_site
+
+    file_paths = partitioner.partition_tosca("./tests/tmp/tosca",node_site,tosca.tpl)
+    print file_paths
+  except:
+    print('Unexpected error: %s', sys.exc_info()[0])
+
+if __name__ == "__main__":
+   main(sys.argv[1:])