diff options
-rw-r--r-- | func/args_handler.py | 12 | ||||
-rw-r--r-- | func/cli.py | 2 | ||||
-rw-r--r-- | restful_server/db.py | 6 | ||||
-rw-r--r-- | restful_server/qtip_server.py | 31 | ||||
-rw-r--r-- | tests/qtip_server_test.py | 15 |
5 files changed, 36 insertions, 30 deletions
diff --git a/func/args_handler.py b/func/args_handler.py index e27d37e7..59712800 100644 --- a/func/args_handler.py +++ b/func/args_handler.py @@ -14,14 +14,14 @@ from func.spawn_vm import SpawnVM from func.driver import Driver -def get_files_in_test_list(suit_name, case_type='all'): - benchmark_list = json.load(file('test_list/{0}'.format(suit_name))) +def get_files_in_test_list(suite_name, case_type='all'): + benchmark_list = json.load(file('test_list/{0}'.format(suite_name))) return reduce(add, benchmark_list.values()) \ if case_type == 'all' else benchmark_list[case_type] -def get_files_in_test_case(lab, suit_name, case_type='all'): - test_case_all = os.listdir('./test_cases/{0}/{1}'.format(lab, suit_name)) +def get_files_in_test_case(lab, suite_name, case_type='all'): + test_case_all = os.listdir('./test_cases/{0}/{1}'.format(lab, suite_name)) return test_case_all if case_type == 'all' else \ filter(lambda x: case_type in x, test_case_all) @@ -30,8 +30,8 @@ def get_benchmark_path(lab, suit, benchmark): return './test_cases/{0}/{1}/{2}'.format(lab, suit, benchmark) -def check_suit_in_test_list(suit_name): - return True if os.path.isfile('test_list/' + suit_name) else False +def check_suite_in_test_list(suite_name): + return True if os.path.isfile('test_list/' + suite_name) else False def check_lab_name(lab_name): diff --git a/func/cli.py b/func/cli.py index 833437d5..9222da51 100644 --- a/func/cli.py +++ b/func/cli.py @@ -40,7 +40,7 @@ class cli: def __init__(self, args=sys.argv[1:]): args = self._parse_args(args) - if not args_handler.check_suit_in_test_list(args.file): + if not args_handler.check_suite_in_test_list(args.file): print('\n\n ERROR: Test File Does not exist in test_list/ please enter correct file \n\n') sys.exit(1) diff --git a/restful_server/db.py b/restful_server/db.py index cf6ebfbb..8da64187 100644 --- a/restful_server/db.py +++ b/restful_server/db.py @@ -23,7 +23,7 @@ def create_job(args): 'installer_ip': args["installer_ip"], 'pod_name': args["pod_name"], 'suite_name': args["suite_name"], - 'max-minutes': args["max-minutes"], + 'max_minutes': args["max_minutes"], 'type': args["type"], 'start_time': str(datetime.now()), 'end_time': None, @@ -73,7 +73,7 @@ def update_job_result_detail(job_id, benchmark, result): def is_job_timeout(job_id): period = datetime.now() - datetime.strptime(jobs[job_id]['start_time'], "%Y-%m-%d %H:%M:%S.%f") - return True if jobs[job_id]['max-minutes'] * 60 < period.total_seconds()\ + return True if jobs[job_id]['max_minutes'] * 60 < period.total_seconds()\ else False @@ -91,6 +91,6 @@ def stop_thread(job_id): del threads[job_id] -def update_benmark_state_in_state_detail(job_id, benchmark, benchmark_state): +def update_benchmark_state(job_id, benchmark, benchmark_state): filter(lambda x: x["benchmark"] == benchmark, get_job_info(job_id)["state_detail"])[0]['state'] = benchmark_state diff --git a/restful_server/qtip_server.py b/restful_server/qtip_server.py index 734a471c..a059ca3c 100644 --- a/restful_server/qtip_server.py +++ b/restful_server/qtip_server.py @@ -24,12 +24,13 @@ class JobModel: resource_fields = { 'installer_type': fields.String, 'installer_ip': fields.String, - 'max-minutes': fields.Integer, + 'max_minutes': fields.Integer, 'pod_name': fields.String, 'suite_name': fields.String, - 'type': fields.String + 'type': fields.String, + 'benchmark_name': fields.String } - required = ['installer_type', 'install_ip'] + required = ['installer_type', 'installer_ip'] @swagger.model @@ -91,7 +92,7 @@ class JobList(Resource): "installer_ip": The installer ip of the pod, -"max-minutes": If specified, the maximum duration in minutes +"max_minutes": If specified, the maximum duration in minutes for any single test iteration, default is '60', "pod_name": If specified, the Pod name, default is 'default', @@ -99,6 +100,8 @@ for any single test iteration, default is '60', "suite_name": If specified, Test suite name, for example 'compute', 'network', 'storage', default is 'compute' "type": BM or VM,default is 'BM' +"benchmark_name": If specified, benchmark name in suite, for example 'dhrystone_bm.yaml', +default is all benchmarks in suite with specified type """, "required": True, "type": "JobModel", @@ -123,15 +126,16 @@ default is 'compute' ) def post(self): parser = reqparse.RequestParser() - parser.add_argument('installer_type', type=str, required=True, help='Installer_type is required') - parser.add_argument('installer_ip', type=str, required=True, help='Installer_ip is required') - parser.add_argument('max-minutes', type=int, required=False, default=60, help='max-minutes should be integer') + parser.add_argument('installer_type', type=str, required=True, help='installer_type is required') + parser.add_argument('installer_ip', type=str, required=True, help='installer_ip is required') + parser.add_argument('max_minutes', type=int, required=False, default=60, help='max_minutes should be integer') parser.add_argument('pod_name', type=str, required=False, default='default', help='pod_name should be string') parser.add_argument('suite_name', type=str, required=False, default='compute', help='suite_name should be string') parser.add_argument('type', type=str, required=False, default='BM', help='type should be BM, VM and ALL') + parser.add_argument('benchmark_name', type=str, required=False, default='all', help='benchmark_name should be string') args = parser.parse_args() - if not args_handler.check_suit_in_test_list(args["suite_name"]): - return abort(404, 'message:Test Suit {0} does not exist in test_list'.format(args["suite_name"])) + if not args_handler.check_suite_in_test_list(args["suite_name"]): + return abort(404, 'message:Test suite {0} does not exist in test_list'.format(args["suite_name"])) if not args_handler.check_lab_name(args["pod_name"]): return abort(404, 'message: You have specified a lab {0}\ that is not present in test_cases'.format(args['pod_name'])) @@ -146,6 +150,11 @@ default is 'compute' args["suite_name"], args["type"].lower()) benchmarks_list = filter(lambda x: x in test_cases, benchmarks) + if args["benchmark_name"] in benchmarks_list: + benchmarks_list = [args["benchmark_name"]] + if (args["benchmark_name"] is not 'all') and args["benchmark_name"] not in benchmarks_list: + return abort(404, 'message: Benchmark name {0} does not exist in suit {1}'.format(args["benchmark_name"], + args["suite_name"])) state_detail = map(lambda x: {'benchmark': x, 'state': 'idle'}, benchmarks_list) db.update_job_state_detail(job_id, copy(state_detail)) thread_stop = threading.Event() @@ -162,14 +171,14 @@ default is 'compute' for benchmark in benchmarks_list: if db.is_job_timeout(job_id) or stop_event.is_set(): break - db.update_benmark_state_in_state_detail(job_id, benchmark, 'processing') + db.update_benchmark_state(job_id, benchmark, 'processing') result = args_handler.prepare_and_run_benchmark(installer_type, '/home', args_handler.get_benchmark_path(pod_name, suite_name, benchmark)) db.update_job_result_detail(job_id, benchmark, copy(result)) - db.update_benmark_state_in_state_detail(job_id, benchmark, 'finished') + db.update_benchmark_state(job_id, benchmark, 'finished') db.finish_job(job_id) diff --git a/tests/qtip_server_test.py b/tests/qtip_server_test.py index 511d209a..2f9eebf1 100644 --- a/tests/qtip_server_test.py +++ b/tests/qtip_server_test.py @@ -33,7 +33,7 @@ class TestClass: 'installer_ip': '10.20.0.2', 'pod_name': 'default', 'suite_name': 'compute', - 'max-minutes': 60, + 'max_minutes': 60, 'type': 'BM', 'state': 'finished', 'state_detail': [{'state': 'finished', 'benchmark': 'dhrystone_bm.yaml'}, @@ -45,22 +45,19 @@ class TestClass: ({'installer_type': 'fuel', 'installer_ip': '10.20.0.2', 'pod_name': 'zte-pod1', - 'max-minutes': 20, + 'max_minutes': 20, 'suite_name': 'compute', - 'type': 'VM'}, + 'type': 'VM', + 'benchmark_name': 'dhrystone_vm.yaml'}, {'job_id': '', 'installer_type': 'fuel', 'installer_ip': '10.20.0.2', 'pod_name': 'zte-pod1', 'suite_name': 'compute', - 'max-minutes': 20, + 'max_minutes': 20, 'type': 'VM', 'state': 'finished', - 'state_detail': [{u'state': u'finished', u'benchmark': u'dhrystone_vm.yaml'}, - {u'state': u'finished', u'benchmark': u'whetstone_vm.yaml'}, - {u'state': u'finished', u'benchmark': u'ramspeed_vm.yaml'}, - {u'state': u'finished', u'benchmark': u'dpi_vm.yaml'}, - {u'state': u'finished', u'benchmark': u'ssl_vm.yaml'}], + 'state_detail': [{u'state': u'finished', u'benchmark': u'dhrystone_vm.yaml'}], 'result': 0}) ]) @mock.patch('restful_server.qtip_server.args_handler.prepare_and_run_benchmark') |