method that add objects necessary for basic testing. these test objects must be defin...
authorTony Mack <tmack@cs.princeton.edu>
Thu, 17 Jan 2008 21:28:37 +0000 (21:28 +0000)
committerTony Mack <tmack@cs.princeton.edu>
Thu, 17 Jan 2008 21:28:37 +0000 (21:28 +0000)
qaapi/qa/modules/api/add_test_data.py [new file with mode: 0644]

diff --git a/qaapi/qa/modules/api/add_test_data.py b/qaapi/qa/modules/api/add_test_data.py
new file mode 100644 (file)
index 0000000..5ba0366
--- /dev/null
@@ -0,0 +1,152 @@
+import os,sys
+from qa.Test import Test
+from qa import utils
+
+class add_test_data(Test):
+    """
+    Adds the test data found in config to the plc db
+    """   
+    def call(self):
+
+       api = self.config.api
+       auth = self.config.auth
+
+       # Make sure some required fields are in config
+       required_fields = ['TEST_SITE_NAME', 'TEST_SITE_LOGIN_BASE', 'TEST_SLICE_NAME', 'TEST_PERSON_EMAIL']
+       required_node_fields = ['TEST_NODE_TYPE', 'TEST_NODE_METHOD', 'TEST_NODE_HOSTNAME', 'TEST_NODE_IP',
+                               'TEST_NODE_GATEWAY', 'TEST_NODE_DNS', 'TEST_NODE_NETWORK', 'TEST_NODE_BROADCAST',
+                               'TEST_NODE_NETMASK']
+
+       for field in required_fields:
+           if not hasattr(self.config, field) or \
+                  len(getattr(self.config, field).strip()) < 1:
+               raise Exception, "%(field)s must be set and cannot be blank" % locals()
+
+       # Look for node configurations
+       node_params = {}
+        for attr in dir(self.config):
+            if attr.find("NODE") > 0:
+                parts = attr.split('_')
+                node_prefix = parts[1] +"_"+ parts[3]
+                name = "_".join(parts[:3])
+                value = getattr(self.config, attr)
+                # start a new node dictionary
+                if node_prefix not in node_params:
+                    node_params[node_prefix] = {'prefix': node_prefix}
+                node_params[node_prefix][name] = value
+
+       node_configs = node_params.values()
+       node_list = []
+
+       # Make sure required node fields are preset for each node config
+        for node_config in node_configs:
+           for field in required_node_fields:
+               if field not in node_config or len(node_config[field].strip()) < 1:
+                   raise Exception, "%s must be set for %s and cannot be blank" % (field, node_config['prefix'])
+           node = {'type': node_config['TEST_NODE_TYPE'],
+                   'method': node_config['TEST_NODE_METHOD'],
+                   'hostname': node_config['TEST_NODE_HOSTNAME'],
+                   'ip':  node_config['TEST_NODE_IP'],
+                   'gateway': node_config['TEST_NODE_GATEWAY'],
+                   'dns': node_config['TEST_NODE_DNS'],
+                   'broadcast': node_config['TEST_NODE_BROADCAST'], 
+                   'network': node_config['TEST_NODE_NETWORK'],
+                   'netmask': node_config['TEST_NODE_NETMASK'],
+                   'slice_ids': []}
+           node_list.append(node)
+           
+           
+       # Define test objects 
+       site_fields = {'name': self.config.TEST_SITE_NAME, 'login_base': self.config.TEST_SITE_LOGIN_BASE, 
+                      'url': 'http://google.com', 'enabled': True, 'max_slices': 1000, 
+                      'max_slivers': 1000, 'is_public': True, 'abbreviated_name': 'Test', 
+                      'person_ids': []}
+
+       slice_fields = {'name': self.config.TEST_SLICE_NAME, 'instantiation': 'plc-instantiated', 
+                       'max_nodes': 1000, 'description': 'blank', 'person_ids': [], 'node_ids': []}
+
+       person_fields = {'first_name': 'fname', 'last_name': 'lname', 'password': 'password',
+                        'email': self.config.TEST_PERSON_EMAIL, 'site_ids': [], 'slice_ids': []}
+
+
+       # Add Test site
+       sites = api.GetSites(auth, {'login_base': site_fields['login_base']})
+       if not sites:
+           site_id =  api.AddSite(auth, site_fields)
+           site_fields['site_id'] = site_id
+           site = site_fields
+           if self.config.verbose:
+               utils.header("Added test site")
+       else:
+           site = sites[0]
+           if self.config.verbose:
+               utils.header("Test site found")
+
+       # Add Test nodes
+       for node_fields in node_list:
+           nodes = api.GetNodes(auth, [node_fields['hostname']])
+           if not nodes:
+               node_id = api.AddNode(auth, site_fields['login_base'], node_fields)
+               node_fields['node_id'] = node_id
+               nodes.append(node_fields)
+               if self.config.verbose:
+                   utils.header("Added test node")
+           else:
+               if self.config.verbose:
+                   utils.header("Test node found")
+       
+       # Add Test slice
+       slices = api.GetSlices(auth, [slice_fields['name']])
+       if not slices:
+           slice_id = api.AddSlice(auth, slice_fields)
+           slice_fields['slice_id'] = slice_id
+           slice = slice_fields
+           if self.config.verbose:
+               utils.header("Added test slice")
+       else:
+           slice = slices[0]
+           if self.config.verbose:
+               utils.header("Test slice found")
+
+       # Add slice to nodes
+       node_ids = [n['node_id'] for n in nodes]
+       node_ids = filter(lambda node_id: node_id not in slice['node_ids'], node_ids)
+       if node_ids:
+           api.AddSliceToNodes(auth, slice['name'], node_ids)
+           if self.config.verbose:
+               utils.header("Added test slice to test nodes")
+       else:
+           if self.config.verbose:
+               utils.header("Test slice found on test nodes")
+
+       # Add test person
+       persons = api.GetPersons(auth, [person_fields['email']])
+       if not persons:
+           person_id = api.AddPerson(auth, person_fields)
+           person_fields['person_id'] = person_id
+           person = person_fields
+           if self.config.verbose:
+               utils.header("Added test person")
+       else:
+           person = persons[0]
+           if self.config.verbose:
+               utils.header("Test person found")
+
+       # Add person to site
+       if site['site_id'] not in person['site_ids']:   
+           api.AddPersonToSite(auth, person['email'], site['login_base'])
+           if self.config.verbose:
+               utils.header("Added test person to test site")
+       else:
+           if self.config.verbose:
+               utils.header("Test person found on test site")
+
+       # Add person to slice
+       if slice['slice_id'] not in person['slice_ids']:
+            api.AddPersonToSlice(auth, person_fields['email'], slice_fields['name'])
+           if self.config.verbose:
+               utils.header("Added test person to slice")
+       else:
+           if self.config.verbose:
+               utils.header("Test person found on test slice")
+