5c10b279c11d0fecb796be70fadfa5c110061fea
[samplevnf.git] / VNFs / DPPD-PROX / helper-scripts / rapid / runrapid.py
1 #!/usr/bin/python
2
3 ##
4 ## Copyright (c) 2010-2020 Intel Corporation
5 ##
6 ## Licensed under the Apache License, Version 2.0 (the "License");
7 ## you may not use this file except in compliance with the License.
8 ## You may obtain a copy of the License at
9 ##
10 ##     http://www.apache.org/licenses/LICENSE-2.0
11 ##
12 ## Unless required by applicable law or agreed to in writing, software
13 ## distributed under the License is distributed on an "AS IS" BASIS,
14 ## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 ## See the License for the specific language governing permissions and
16 ## limitations under the License.
17 ##
18 from __future__ import print_function
19 from __future__ import print_function
20 from __future__ import division
21
22 from future import standard_library
23 standard_library.install_aliases()
24 from builtins import object
25 import sys
26 from rapid_cli import RapidCli
27 from rapid_log import RapidLog
28 from rapid_parser import RapidConfigParser
29 from rapid_defaults import RapidDefaults
30 from rapid_machine import RapidMachine
31 from rapid_generator_machine import RapidGeneratorMachine
32 from rapid_flowsizetest import FlowSizeTest
33 from rapid_corestatstest import CoreStatsTest
34 from rapid_portstatstest import PortStatsTest
35 from rapid_impairtest import ImpairTest
36 from rapid_irqtest import IrqTest
37 from rapid_warmuptest import WarmupTest
38
39 class RapidTestManager(object):
40     """
41     RapidTestManager Class
42     """
43     @staticmethod
44     def get_defaults():
45         return (RapidDefaults.test_params)
46
47     @staticmethod
48     def run_tests(test_params):
49         test_params = RapidConfigParser.parse_config(test_params)
50         RapidLog.debug(test_params)
51         monitor_gen = monitor_sut = False
52         background_machines = []
53         sut_machine = gen_machine = None
54         machines = []
55         for machine_params in test_params['machines']:
56             if 'gencores' in machine_params.keys():
57                 machine = RapidGeneratorMachine(test_params['key'],
58                         test_params['user'], test_params['vim_type'],
59                         test_params['rundir'], machine_params)
60                 if machine_params['monitor']:
61                     if monitor_gen:
62                         RapidLog.exception("Can only monitor 1 generator")
63                         raise Exception("Can only monitor 1 generator")
64                     else:
65                         monitor_gen = True
66                         gen_machine = machine
67                 else:
68                     background_machines.append(machine)
69             else:
70                 machine = RapidMachine(test_params['key'], test_params['user'],
71                         test_params['vim_type'], test_params['rundir'],
72                         machine_params)
73                 if machine_params['monitor']:
74                     if monitor_sut:
75                         RapidLog.exception("Can only monitor 1 sut")
76                         raise Exception("Can only monitor 1 sut")
77                     else:
78                         monitor_sut = True
79                         sut_machine = machine
80             machines.append(machine)
81         if test_params['configonly']:
82             sys.exit()
83         for machine in machines:
84             machine.start_prox()
85         result = True
86         for test_param in test_params['tests']:
87             RapidLog.info(test_param['test'])
88             if test_param['test'] in ['flowsizetest', 'TST009test',
89                     'fixed_rate']:
90                 test = FlowSizeTest(test_param, test_params['lat_percentile'],
91                         test_params['runtime'], test_params['pushgateway'],
92                         test_params['environment_file'], gen_machine,
93                         sut_machine, background_machines)
94             elif test_param['test'] in ['corestats']:
95                 test = CoreStatsTest(test_params['runtime'],
96                         test_params['pushgateway'],
97                         test_params['environment_file'], machines)
98             elif test_param['test'] in ['portstats']:
99                 test = PortStatsTest(test_params['runtime'],
100                         test_params['pushgateway'],
101                         test_params['environment_file'], machines)
102             elif test_param['test'] in ['impairtest']:
103                 test = ImpairTest(test_param, test_params['lat_percentile'],
104                         test_params['runtime'], test_params['pushgateway'],
105                         test_params['environment_file'], gen_machine,
106                         sut_machine)
107             elif test_param['test'] in ['irqtest']:
108                 test = IrqTest(test_params['runtime'], machines)
109             elif test_param['test'] in ['warmuptest']:
110                 test = WarmupTest(test_param, gen_machine)
111             else:
112                 RapidLog.debug('Test name ({}) is not valid:'.format(
113                     test_param['test']))
114             single_test_result = test.run()
115             if not single_test_result:
116                 result = False
117         return (result)
118
119 def main():
120     """Main function.
121     """
122     test_params = RapidTestManager.get_defaults()
123     # When no cli is used, the process_cli can be replaced by code modifying
124     # test_params
125     test_params = RapidCli.process_cli(test_params)
126     log_file = 'RUN{}.{}.log'.format(test_params['environment_file'],
127             test_params['test_file'])
128     RapidLog.log_init(log_file, test_params['loglevel'],
129             test_params['screenloglevel'] , test_params['version']  )
130     test_result = RapidTestManager.run_tests(test_params)
131     RapidLog.info('Test result is : {}'.format(test_result))
132
133 if __name__ == "__main__":
134     main()