aboutsummaryrefslogtreecommitdiffstats
path: root/utils/cli.py
blob: def700613c9e3192238446a12bc73d5ce4973167 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
##############################################################################
# Copyright (c) 2015 Dell Inc  and others.
#
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################

import sys
import os
import args_handler
import argparse
import logger_utils

logger = logger_utils.QtipLogger('cli').get


class Cli:

    @staticmethod
    def _parse_args(args):
        parser = argparse.ArgumentParser()
        parser.add_argument('-l ', '--lab', required=True, help='Name of Lab '
                            'on which being tested, These can'
                            'be found in the test_plan/ directory. Please '
                            'ensure that you have edited the respective files '
                            'before using them. For testing other than through Jenkins'
                            ' The user should list default after -l . all the fields in'
                            ' the files are necessary and should be filled')
        parser.add_argument('-f', '--file', required=True, help='File in '
                            'benchmarks/suite/ with the list of tests. there are three files'
                            '\n compute '
                            '\n storage '
                            '\n network '
                            'They contain all the tests that will be run. They are listed by suite.'
                            'Please ensure there are no empty lines')
        parser.add_argument('-b', '--benchmark', help='Name of the benchmark.'
                            'Can be found in benchmarks/suite/file_name')

        return parser.parse_args(args)

    def __init__(self, args=sys.argv[1:]):

        args = self._parse_args(args)
        if not args_handler.check_suite(args.file):
            logger.error("ERROR: This suite file %s doesn't exist under benchmarks/suite/.\
                Please enter correct file." % str(args.file))
            sys.exit(1)

        if not args_handler.check_lab_name(args.lab):
            logger.error("You have specified a lab that is not present under test_plan/.\
                Please enter correct file. If unsure how to proceed, use -l default.")
            sys.exit(1)
        suite = args.file
        benchmarks = args_handler.get_files_in_suite(suite)
        test_cases = args_handler.get_files_in_test_plan(args.lab, suite)
        benchmarks_list = filter(lambda x: x in test_cases, benchmarks)

        if args.benchmark:
            if not args_handler.check_benchmark_name(args.lab, args.file, args.benchmark):
                logger.error("You have specified an incorrect benchmark.\
                    Please enter the correct one.")
                sys.exit(1)
            else:
                logger.info("Starting with " + args.benchmark)
                args_handler.prepare_and_run_benchmark(
                    os.environ['INSTALLER_TYPE'], os.environ['PWD'],
                    args_handler.get_benchmark_path(args.lab.lower(), args.file, args.benchmark))
        else:
            map(lambda x: args_handler.prepare_and_run_benchmark(
                os.environ['INSTALLER_TYPE'], os.environ['PWD'],
                args_handler.get_benchmark_path(args.lab.lower(), suite, x)), benchmarks_list)

        logger.info("{0} is not a Template in the Directory Enter a Valid file name.\
            or use qtip.py -h for list".format(filter(lambda x: x not in test_cases, benchmarks)))