Add functest logger in ODL script
[functest.git] / testcases / Controllers / ODL / OpenDaylightTesting.py
1 #!/usr/bin/python
2
3 import argparse
4 import fileinput
5 import os
6 import re
7 import shutil
8 import sys
9 import functest.utils.functest_logger as ft_logger
10 from robot import run
11
12
13 class ODLTestCases:
14
15     repos = "/home/opnfv/repos/"
16     odl_test_repo = repos + "odl_test/"
17     neutron_suite_dir = odl_test_repo + "csit/suites/openstack/neutron/"
18     basic_suite_dir = odl_test_repo + "csit/suites/integration/basic/"
19     logger = ft_logger.Logger("opendaylight").getLogger()
20
21     @classmethod
22     def copy_opnf_testcases(cls):
23         opnfv_testcases_dir = (os.path.dirname(os.path.abspath(__file__)) +
24                                "/custom_tests/neutron/")
25         files = [opnfv_testcases_dir + "001__reachability.robot",
26                  opnfv_testcases_dir + "040__delete_ports.robot",
27                  opnfv_testcases_dir + "050__delete_subnets.robot",
28                  opnfv_testcases_dir + "060__delete_networks.robot"]
29         for f in files:
30             try:
31                 shutil.copy(f, cls.neutron_suite_dir)
32             except IOError as e:
33                 cls.logger.error(
34                     "Cannot copy OPNFV's testcases to ODL directory", e)
35                 return False
36         return True
37
38     @classmethod
39     def set_robotframework_vars(cls, odlusername="admin", odlpassword="admin"):
40         odl_variables_files = cls.odl_test_repo + 'csit/variables/Variables.py'
41         try:
42             cls.logger.debug(cls.neutron_suite_dir + '__init__.robot')
43             for line in fileinput.input(odl_variables_files,
44                                         inplace=True):
45                 print re.sub("AUTH = .*",
46                              ("AUTH = [u'" + odlusername + "', u'" +
47                               odlpassword + "']"),
48                              line.rstrip())
49             return True
50         except Exception as e:
51             cls.logger.error("Cannot set ODL creds", e)
52             return False
53
54     @classmethod
55     def run(cls, **kwargs):
56         dirs = [cls.basic_suite_dir, cls.neutron_suite_dir]
57         try:
58             odlusername = kwargs['odlusername']
59             odlpassword = kwargs['odlpassword']
60             variables = ['KEYSTONE:' + kwargs['keystoneip'],
61                          'NEUTRON:' + kwargs['neutronip'],
62                          'OSUSERNAME:"' + kwargs['osusername'] + '"',
63                          'OSTENANTNAME:"' + kwargs['ostenantname'] + '"',
64                          'OSPASSWORD:"' + kwargs['ospassword'] + '"',
65                          'ODL_SYSTEM_IP:' + kwargs['odlip'],
66                          'PORT:' + kwargs['odlwebport'],
67                          'RESTCONFPORT:' + kwargs['odlrestconfport']]
68         except KeyError as e:
69             cls.logger.error("Cannot run ODL testcases. Please check", e)
70             return False
71         res_dir = '/home/opnfv/functest/results/odl/'
72         if (cls.copy_opnf_testcases() and
73                 cls.set_robotframework_vars(odlusername, odlpassword)):
74             try:
75                 os.makedirs(res_dir)
76             except OSError:
77                 pass
78             stdout_file = res_dir + 'stdout.txt'
79             with open(stdout_file, 'w') as stdout:
80                 result = run(*dirs, variable=variables,
81                              output=res_dir + 'output.xml',
82                              log=res_dir + 'log.html',
83                              report=res_dir + 'report.html',
84                              stdout=stdout)
85
86             with open(stdout_file, 'r') as stdout:
87                 cls.logger.info("\n" + stdout.read())
88
89             return result
90         else:
91             return False
92
93
94 if __name__ == '__main__':
95     parser = argparse.ArgumentParser()
96     parser.add_argument('-k', '--keystoneip',
97                         help='Keystone IP',
98                         default='127.0.0.1')
99     parser.add_argument('-n', '--neutronip',
100                         help='Neutron IP',
101                         default='127.0.0.1')
102     parser.add_argument('-a', '--osusername',
103                         help='Username for OpenStack',
104                         default='admin')
105     parser.add_argument('-b', '--ostenantname',
106                         help='Tenantname for OpenStack',
107                         default='admin')
108     parser.add_argument('-c', '--ospassword',
109                         help='Password for OpenStack',
110                         default='admin')
111     parser.add_argument('-o', '--odlip',
112                         help='OpenDaylight IP',
113                         default='127.0.0.1')
114     parser.add_argument('-w', '--odlwebport',
115                         help='OpenDaylight Web Portal Port',
116                         default='8080')
117     parser.add_argument('-r', '--odlrestconfport',
118                         help='OpenDaylight RESTConf Port',
119                         default='8181')
120     parser.add_argument('-d', '--odlusername',
121                         help='Username for ODL',
122                         default='admin')
123     parser.add_argument('-e', '--odlpassword',
124                         help='Password for ODL',
125                         default='admin')
126     args = vars(parser.parse_args())
127     sys.exit(ODLTestCases.run(**args))