1 | #!/usr/bin/python3 |
---|
2 | # PYTHON_ARGCOMPLETE_OK |
---|
3 | |
---|
4 | # Copyright 2019 Fiona Klute |
---|
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 | import os |
---|
19 | import sys |
---|
20 | import yaml |
---|
21 | |
---|
22 | from mgstest.tests import TestConnection |
---|
23 | |
---|
24 | if __name__ == "__main__": |
---|
25 | import argparse |
---|
26 | parser = argparse.ArgumentParser( |
---|
27 | description='Send HTTP requests through gnutls-cli', |
---|
28 | formatter_class=argparse.ArgumentDefaultsHelpFormatter) |
---|
29 | parser.add_argument('host', nargs='?', default=None, |
---|
30 | help='Access this host. Overrides TEST_TARGET, ' |
---|
31 | 'but not the test configuration file.') |
---|
32 | parser.add_argument('-p', '--port', default=None, |
---|
33 | help='Access this port. Overrides TEST_PORT, ' |
---|
34 | 'but not the test configuration file.') |
---|
35 | parser.add_argument('--timeout', type=float, |
---|
36 | help='Timeout for HTTP requests', default='5.0') |
---|
37 | parser.add_argument('--test-config', type=argparse.FileType('r'), |
---|
38 | required=True, help='load YAML test configuration') |
---|
39 | |
---|
40 | # enable bash completion if argcomplete is available |
---|
41 | try: |
---|
42 | import argcomplete |
---|
43 | argcomplete.autocomplete(parser) |
---|
44 | except ImportError: |
---|
45 | pass |
---|
46 | |
---|
47 | args = parser.parse_args() |
---|
48 | |
---|
49 | if args.host: |
---|
50 | os.environ['TEST_TARGET'] = args.host |
---|
51 | if args.port: |
---|
52 | os.environ['TEST_PORT'] = args.port |
---|
53 | |
---|
54 | conns = None |
---|
55 | |
---|
56 | config = yaml.load(args.test_config, Loader=yaml.Loader) |
---|
57 | if type(config) is TestConnection: |
---|
58 | conns = [config] |
---|
59 | elif type(config) is list: |
---|
60 | # assume list elements are connections |
---|
61 | conns = config |
---|
62 | else: |
---|
63 | raise TypeError(f'Unsupported configuration: {config!r}') |
---|
64 | print(conns) |
---|
65 | sys.stdout.flush() |
---|
66 | |
---|
67 | for i, test_conn in enumerate(conns): |
---|
68 | if test_conn.description: |
---|
69 | print(f'Running test connection {i}: {test_conn.description}') |
---|
70 | sys.stdout.flush() |
---|
71 | test_conn.run(timeout=args.timeout) |
---|