d4983d61f7bc39e3ab6adba3580817c509392214
[tests.git] / qaapi / qa / tests / add_test_data.py
1 #!/usr/bin/env /usr/share/plc_api/plcsh
2
3 import os,sys
4 from Test import Test
5 from qa import utils
6
7 class add_test_data(Test):
8     """
9     Adds the test data found in config to the plc db
10     """   
11     def call(self):
12
13         # Make sure some required fields are in config
14         required_fields = ['TEST_SITE_NAME', 'TEST_SITE_LOGIN_BASE', 'TEST_SLICE_NAME', 'TEST_PERSON_EMAIL']
15         required_node_fields = ['TEST_NODE_TYPE', 'TEST_NODE_METHOD', 'TEST_NODE_HOSTNAME', 'TEST_NODE_IP',
16                                 'TEST_NODE_GATEWAY', 'TEST_NODE_DNS', 'TEST_NODE_NETWORK', 'TEST_NODE_BROADCAST',
17                                 'TEST_NODE_NETMASK']
18
19         for field in required_fields:
20             if not hasattr(self.config, field) or \
21                    len(getattr(self.config, field).strip()) < 1:
22                 raise Exception, "%(field)s must be set and cannot be blank" % locals()
23
24         # Look for node configurations
25         node_params = {}
26         for attr in dir(self.config):
27             if attr.find("NODE") > 0:
28                 parts = attr.split('_')
29                 node_prefix = parts[1] +"_"+ parts[3]
30                 name = "_".join(parts[:3])
31                 value = getattr(self.config, attr)
32                  # start a new node dictionary
33                 if node_prefix not in node_params:
34                     node_params[node_prefix] = {'prefix': node_prefix}
35                 node_params[node_prefix][name] = value
36
37         node_configs = node_params.values()
38         node_list = []
39
40         # Make sure required node fields are preset for each node config
41         for node_config in node_configs:
42             for field in required_node_fields:
43                 if field not in node_config or len(node_config[field].strip()) < 1:
44                     raise Exception, "%s must be set for %s and cannot be blank" % (field, node_config['prefix'])
45             node = {'type': node_config['TEST_NODE_TYPE'],
46                     'method': node_config['TEST_NODE_METHOD'],
47                     'hostname': node_config['TEST_NODE_HOSTNAME'],
48                     'ip':  node_config['TEST_NODE_IP'],
49                     'gateway': node_config['TEST_NODE_GATEWAY'],
50                     'dns1': node_config['TEST_NODE_DNS'],
51                     'broadcast': node_config['TEST_NODE_BROADCAST'], 
52                     'network': node_config['TEST_NODE_NETWORK'],
53                     'netmask': node_config['TEST_NODE_NETMASK'],
54                     'slice_ids': [],
55                     'nodenetwork_ids': []}
56             node_list.append(node)
57             
58             
59         # Define test objects 
60         site_fields = {'name': self.config.TEST_SITE_NAME, 'login_base': self.config.TEST_SITE_LOGIN_BASE, 
61                        'url': 'http://google.com', 'enabled': True, 'max_slices': 1000, 
62                        'max_slivers': 1000, 'is_public': True, 'abbreviated_name': 'Test', 
63                        'person_ids': []}
64
65         slice_fields = {'name': self.config.TEST_SLICE_NAME, 'instantiation': 'plc-instantiated', 
66                         'max_nodes': 1000, 'description': 'blank', 'person_ids': [], 'node_ids': []}
67
68         person_fields = {'first_name': 'fname', 'last_name': 'lname', 'password': 'password',
69                          'email': self.config.TEST_PERSON_EMAIL, 'site_ids': [], 'slice_ids': []}
70
71
72         # Add Test site
73         #sites = api.GetSites(auth, {'login_base': site_fields['login_base']})
74         sites = GetSites({'login_base': site_fields['login_base']})
75         if not sites:
76             #site_id =  api.AddSite(auth, site_fields)
77             site_id = AddSite(site_fields)
78             site_fields['site_id'] = site_id
79             site = site_fields
80             if self.config.verbose:
81                 utils.header("Added test site")
82         else:
83             site = sites[0]
84             if self.config.verbose:
85                 utils.header("Test site found")
86
87         # Add Test nodes
88         for node_fields in node_list:
89             #nodes = api.GetNodes(auth, [node_fields['hostname']])
90             nodes = GetNodes([node_fields['hostname']])
91             if not nodes:
92                 #node_id = api.AddNode(auth, site_fields['login_base'], node_fields)
93                 node_id = AddNode(site_fields['login_base'], node_fields)
94                 node_fields['node_id'] = node_id
95                 node = node_fields
96                 nodes.append(node_fields)
97                 if self.config.verbose:
98                     utils.header("Added test node")
99             else:
100                 node = nodes[0]
101                 if self.config.verbose:
102                     utils.header("Test node found")
103
104             # Add node network
105             if not node['nodenetwork_ids']:
106                 #nodenetwork_id = api.AddNodeNetwork(auth, node_fields['hostname'], node_fields)
107                 nodenetwork_id = AddNodeNetwork(node_fields['hostname'], node_fields)
108                 if self.config.verbose:
109                     utils.header("Added test nodenetwork")
110             else:
111                 if self.config.verbose:
112                     utils.header("Nodenetwork found")   
113         
114         # Add Test slice
115         #slices = api.GetSlices(auth, [slice_fields['name']])
116         slices = GetSlices([slice_fields['name']])
117         if not slices:
118             #slice_id = api.AddSlice(auth, slice_fields)
119             slice_id = AddSlice(slice_fields)
120             slice_fields['slice_id'] = slice_id
121             slice = slice_fields
122             if self.config.verbose:
123                 utils.header("Added test slice")
124         else:
125             slice = slices[0]
126             if self.config.verbose:
127                 utils.header("Test slice found")
128
129         # Add slice to nodes
130         node_ids = [n['node_id'] for n in nodes]
131         node_ids = filter(lambda node_id: node_id not in slice['node_ids'], node_ids)
132         if node_ids:
133             #api.AddSliceToNodes(auth, slice['name'], node_ids)
134             AddSliceToNodes(slice['name'], node_ids)
135             if self.config.verbose:
136                 utils.header("Added test slice to test nodes")
137         else:
138             if self.config.verbose:
139                 utils.header("Test slice found on test nodes")
140
141         # Add test person
142         #persons = api.GetPersons(auth, [person_fields['email']])
143         persons = GetPersons([person_fields['email']])
144         if not persons:
145             #person_id = api.AddPerson(auth, person_fields)
146             person_id = AddPerson(person_fields)
147             person_fields['person_id'] = person_id
148             person = person_fields
149             if self.config.verbose:
150                 utils.header("Added test person")
151         else:
152             person = persons[0]
153             if self.config.verbose:
154                 utils.header("Test person found")
155         
156         # Add roles to person
157         #api.AddRoleToPerson(auth, 'user', person['email'])
158         AddRoleToPerson('user', person['email'])
159         # Add person to site
160         if site['site_id'] not in person['site_ids']:   
161             #api.AddPersonToSite(auth, person['email'], site['login_base'])
162             AddPersonToSite(person['email'], site['login_base'])
163             if self.config.verbose:
164                 utils.header("Added test person to test site")
165         else:
166             if self.config.verbose:
167                 utils.header("Test person found on test site")
168
169         # Add person to slice
170         if slice['slice_id'] not in person['slice_ids']:
171             #api.AddPersonToSlice(auth, person_fields['email'], slice_fields['name'])
172             AddPersonToSlice(person_fields['email'], slice_fields['name'])
173             if self.config.verbose:
174                 utils.header("Added test person to slice")
175         else:
176             if self.config.verbose:
177                 utils.header("Test person found on test slice")
178         return 1
179
180 if __name__ == '__main__':
181     args = tuple(sys.argv[1:])
182     add_test_data()(*args)