summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--requirements.txt24
-rwxr-xr-xutils/generate-testcase-list/generate-testcases-list.py116
2 files changed, 128 insertions, 12 deletions
diff --git a/requirements.txt b/requirements.txt
index bb8dc80..b705689 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -2,16 +2,16 @@
# of appearance. Changing the order has an impact on the overall integration
# process, which may cause wedges in the gate later.
-pbr>=2.0.0,!=2.1.0 # Apache-2.0
-setuptools>=16.0,!=24.0.0,!=34.0.0,!=34.0.1,!=34.0.2,!=34.0.3,!=34.1.0,!=34.1.1,!=34.2.0,!=34.3.0,!=34.3.1,!=34.3.2 # PSF/ZPL
-tornado>=3.1,<=4.3 # Apache-2.0
-epydoc>=0.3.1
-six>=1.9.0 # MIT
-motor # Apache-2.0
-oauth2>=1.9.0
-jira>=1.0.10
-tlslite>=0.4.9
+pbr==4.0.4 # Apache-2.0
+setuptools==39.2.0 # PSF/ZPL
+tornado==4.3 # Apache-2.0
+epydoc==3.0.1
+six==1.11.0 # MIT
+motor==1.2.2 # Apache-2.0
+oauth2==1.9.0.post1
+jira==1.0.15
+tlslite==0.4.9
pyjwt>=1.5.2
-cryptography>=2.0.3
-python-cas>=1.2.0
-futures
+cryptography==2.2.2
+python-cas==1.2.0
+futures==3.2.0
diff --git a/utils/generate-testcase-list/generate-testcases-list.py b/utils/generate-testcase-list/generate-testcases-list.py
new file mode 100755
index 0000000..bafd329
--- /dev/null
+++ b/utils/generate-testcase-list/generate-testcases-list.py
@@ -0,0 +1,116 @@
+#!/usr/bin/env python
+
+##############################################################################
+# Copyright (c) 2018 Georg Kunz 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 argparse
+import os
+import json
+import yaml
+
+
+class TestcaseList:
+
+ def __init__(self, testsuite, testcase_dir, output_dir):
+ self.testsuite = testsuite
+ self.testcase_dir = testcase_dir
+ self.output_dir = output_dir
+
+ def generate(self, ):
+ testsuite_data = self._read_testsuite()
+ testcase_data = self._read_testcases()
+ self._generate_testcase_file(testsuite_data, testcase_data)
+
+ def _read_testsuite(self):
+ testsuite_data = None
+ try:
+ with open(self.testsuite, 'r') as testsuite:
+ testsuite_data = yaml.load(testsuite)
+ except IOError:
+ error = 'Testsuite definition file not found: "{}"'.\
+ format(self.testsuite)
+ print error
+ os.sys.exit(-1)
+ except yaml.scanner.ScannerError:
+ error = 'Reading test suite definition failed. ' \
+ 'Not a valid yaml file: "{}"'. \
+ format(self.testsuite)
+ print error
+ os.sys.exit(-1)
+ return testsuite_data
+
+ def _read_testcases(self):
+ testcases = {}
+ files = os.listdir(self.testcase_dir)
+ for file in files:
+ file_path = os.path.join(self.testcase_dir, file)
+ try:
+ with open(file_path, 'r') as f:
+ testcase_data = yaml.load(f)
+ name = testcase_data.keys()[0]
+ testcases[name] = testcase_data
+ except yaml.scanner.ScannerError:
+ error = 'Reading test case definition failed.' \
+ 'Not a valid yaml file: "{}"'. \
+ format(file_path)
+ print error
+ os.sys.exit(-1)
+ return testcases
+
+ def _generate_testcase_file(self, testsuite_data, testcase_data):
+
+ testcase_list = {
+ 'mandatory': {},
+ 'optional': {}
+ }
+
+ for area in ['mandatory', 'optional']:
+ testcase_names = testsuite_data.values()[0]['testcases_list'][area]
+ for name in testcase_names:
+ tc = {
+ 'cases': [],
+ 'total': 0
+ }
+
+ testcase = testcase_data[name][name]
+ if testcase['report']['sub_testcase_list'] is None:
+ tc['cases'] = [name]
+ tc['total'] = 1
+ else:
+ cases = testcase['report']['sub_testcase_list']
+ tc['cases'] = cases
+ tc['total'] = len(cases)
+
+ testcase_list[area][name] = tc
+
+ output_file = os.path.join(self.output_dir, 'testcases.json')
+ with open(output_file, 'w') as file:
+ json.dump(testcase_list, file, indent=4, sort_keys=True)
+
+
+def main():
+ parser = argparse.ArgumentParser(
+ description='Generate a testcases.json file for the web portal from '
+ 'test case descriptions.')
+ parser.add_argument('--testsuite',
+ required=True,
+ help='Test suite definition file (e.g. ovp.next.yaml)')
+ parser.add_argument('--testcase-dir',
+ required=True,
+ help='Directory containing all test case definitions')
+ parser.add_argument('--output-dir',
+ required=True,
+ help='Output directory for testcases.json file')
+
+ args = parser.parse_args()
+ TestcaseList(args.testsuite, args.testcase_dir, args.output_dir).generate()
+
+
+if __name__ == '__main__':
+ main()