From b15ed7b0efaa4205f7b69c19698d22896cd9b1b7 Mon Sep 17 00:00:00 2001
From: Tony Mack <tmack@cs.princeton.edu>
Date: Thu, 17 Jan 2008 21:28:37 +0000
Subject: [PATCH] method that add objects necessary for basic testing. these
 test objects must be defined in the config file qa_config

---
 qaapi/qa/modules/api/add_test_data.py | 152 ++++++++++++++++++++++++++
 1 file changed, 152 insertions(+)
 create mode 100644 qaapi/qa/modules/api/add_test_data.py

diff --git a/qaapi/qa/modules/api/add_test_data.py b/qaapi/qa/modules/api/add_test_data.py
new file mode 100644
index 0000000..5ba0366
--- /dev/null
+++ b/qaapi/qa/modules/api/add_test_data.py
@@ -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")
+
-- 
2.47.0