summaryrefslogtreecommitdiffstats
path: root/src/vppinfra
AgeCommit message (Expand)AuthorFilesLines
2019-06-14vppinfra: optimize elog_stringDave Barach2-5/+31
2019-06-05Switch atomic release API from __sync to __atomic builtin.Sirshak Das1-1/+1
2019-06-05Switch atomic test and set API from __sync to __atomic builtinSirshak Das1-1/+1
2019-06-04elog: make elog_string() multi-thread safeSteven Luong1-0/+2
2019-05-27vppinfra: add pclmulqdq x86 cpuid flagDamjan Marion1-0/+1
2019-05-24Add callback multiplex supportDave Barach2-0/+112
2019-05-17Add a debug-CLI leak-checkerDave Barach1-0/+2
2019-05-14Preallocate mhash key_tmps vectorDave Barach1-8/+1
2019-05-13Fix typoIgor Mikhailov (imichail)1-1/+1
2019-05-10zero-pad date string output.Paul Vinciguerra1-2/+2
2019-05-07bihash: Freeing up working_copy_lengths vectorVijayabhaskar Katamreddy1-1/+2
2019-05-07Improve lcov reported code coverage statsDave Barach1-3/+0
2019-05-07Add bihash statistics hookDave Barach10-5/+197
2019-05-01Enable NEON instructions in memcpy_leLijian.Zhang2-1/+9
2019-04-30elf: fix memcmp() overflowBenoît Ganne1-1/+1
2019-04-30vppinfra: fix buffer overflow in unformat_tokenBenoît Ganne1-2/+8
2019-04-26svm: fifo segment support for chunk allocationFlorin Coras1-2/+2
2019-04-24svm: fifo ooo reads/writes with multiple chunksFlorin Coras2-21/+21
2019-04-23vppinfra: fix one macro issue in clib_cpu_supports_aes()Zhiyong Yang1-1/+1
2019-04-19rbtree: add successor and predecessor functionsFlorin Coras2-0/+36
2019-04-17Use template-specific key compare fn when deleting recordsDave Barach1-2/+2
2019-04-17vppinfra: AVX512 interelaave, insert and permuteDamjan Marion1-0/+27
2019-04-16vppinfra: more AVX2 and AVX512 inlinesDamjan Marion2-0/+72
2019-04-16dlmalloc: honor 8 byte alignment requestsFlorin Coras1-1/+1
2019-04-16svm_fifo rework to avoid contention on cursizeSirshak Das1-0/+3
2019-04-16vppinfra: add basic rbtreeFlorin Coras3-0/+497
2019-04-15vppinfra: add SHA-2 family of hash algorithms (including HMAC)Damjan Marion3-0/+647
2019-04-12vppinfra: AVX-512 transpose (u32x16 and u64x8)Damjan Marion1-0/+126
2019-04-11vppinfra: fix the issue that mheap_get_trace record wrong pointerWei CHEN1-1/+1
2019-04-08host stack: update stale copyrightFlorin Coras2-2/+2
2019-04-08vppinfra: u32x8 transposeDamjan Marion1-0/+56
2019-04-06Doxygen: clean up vec.hDave Wallace1-8/+4
2019-04-02vppinfra: add u32x4 min / max sse4.2 inlinesDamjan Marion1-24/+49
2019-04-02vppinfra: fix sparse_vec_index() returning non-zero index for some nonexisten...Andrew Yourtchenko1-0/+4
2019-03-30VPP-1576: fix a class of spurious warningsDave Barach1-0/+5
2019-03-30vppinfra: add few more cpuid flagsDamjan Marion1-0/+7
2019-03-29Convince Coverity that s = format (0, ...) is OKDave Barach1-0/+4
2019-03-28Avoid overwrite in clib_memcpy_le{32,64}Damjan Marion1-27/+29
2019-03-26ipsec: esp-encrypt reworkDamjan Marion3-0/+101
2019-03-22svm/atomics: add clib_atomic_swap_rel_nFlorin Coras1-0/+1
2019-03-21vec: use memset in vec_resize_allocate_memoryFlorin Coras1-1/+1
2019-03-20cpu: fix rtype for fn selected by CLIB_MARCH_FNFlorin Coras1-1/+1
2019-03-20Re-enable aarch64 neon instruction in vlib_buffer_free_inlineLijian.Zhang1-2/+9
2019-03-18Fix build with newer linux headersDamjan Marion2-3/+6
2019-03-15Fix bihash bucket double unlock.Tom Seidenberg1-2/+1
2019-03-12Use AVX2 as default even on AVX512 systemsDamjan Marion1-1/+1
2019-02-27VPP-1576: fix Coverity issuesDave Barach1-1/+1
2019-02-26Fix vpp crashing when attempting to run in kubernetes PodArtem Belov1-0/+21
2019-02-21physmem: keep physmem VA in 39-bit address space on x86_64Damjan Marion3-5/+11
2019-02-02Deprecate old mutliarch code, phase 1Damjan Marion1-6/+2
9;suite', **options): """Execute RF's run with parameters.""" with open('{}/{}.out'.format(output_dir, output_prefix), 'w') as out: robot.run(tests_dir, suite=[s.longname for s in suites], output='{}/{}.xml'.format(output_dir, output_prefix), debugfile='{}/{}.log'.format(output_dir, output_prefix), log=None, report=None, stdout=out, **options) def parse_outputs(output_dir): """Parse output xmls from all executed tests.""" outs = [os.path.join(output_dir, file_name) for file_name in os.listdir(output_dir) if file_name.endswith('.xml')] # pylint: disable=star-args robot.rebot(*outs, merge=True) def topology_lookup(topology_paths, topo_dir, validate): """Make topology list and validate topologies against schema :param parsed_args: topology list, is empty then scans topologies in topo_dir :param topo_dir: scan directory for topologies :param validate: if True then validate topology :return: list of topologies """ ret_topologies = [] if topology_paths: for topo in topology_paths: if os.path.exists(topo): ret_topologies.append(topo) else: print("Topology file {} doesn't exist".format(topo), file=sys.stderr) else: ret_topologies = [os.path.join(topo_dir, file_name) for file_name in os.listdir(topo_dir) if file_name.lower().endswith('.yaml')] if len(ret_topologies) == 0: print('No valid topology found', file=sys.stderr) exit(1) # validate topologies against schema exit_on_error = False for topology_name in ret_topologies: try: with open(topology_name) as file_name: yaml_obj = load(file_name) core = Core(source_file=topology_name, schema_files=yaml_obj["metadata"]["schema"]) core.validate() except PyKwalifyException as ex: print('Unable to verify topology {}, schema error: {}'.\ format(topology_name, ex), file=sys.stderr) exit_on_error = True except KeyError as ex: print('Unable to verify topology {}, key error: {}'.\ format(topology_name, ex), file=sys.stderr) exit_on_error = True except Exception as ex: print('Unable to verify topology {}, {}'.format(topology_name, ex), file=sys.stderr) exit_on_error = True if exit_on_error and validate: exit(1) return ret_topologies def main(): """Main function.""" parser = argparse.ArgumentParser(description='A test runner') parser.add_argument('-i', '--include', action='append', help='include tests with tag') parser.add_argument('-e', '--exclude', action='append', help='exclude tests with tag') parser.add_argument('-s', '--suite', action='append', help='full name of suite to run') parser.add_argument('-t', '--topology', action='append', help='topology where tests should be run') parser.add_argument('-d', '--test_dir', nargs='?', default=TESTS_DIR, help='where tests are stored') parser.add_argument('-o', '--output_dir', nargs='?', default=OUTPUTS_DIR, help='where results are stored') parser.add_argument('-L', '--loglevel', nargs='?', default='INFO', type=str, choices=['TRACE', 'DEBUG', 'INFO', 'WARN', 'NONE'], help='robot frameworks level for logging') parser.add_argument('-n', '--no_validate', action="store_false", help='Do not exit if topology validation failed') args = parser.parse_args() i = args.include or [] excl = args.exclude or [] suite_filter = args.suite or [] test_dir = args.test_dir # prepare output subdir suite_output_dir = os.path.join(args.output_dir, time.strftime('%y%m%d%H%M%S')) os.makedirs(suite_output_dir) topologies = topology_lookup(args.topology, TOPOLOGIES_DIR, args.no_validate) suite_list = get_suite_list(test_dir, include=i, exclude=excl, suite=suite_filter) # TODO: do the topology suite mapping magic # for now all tests on single topology if len(topologies) > 1: print('Multiple topologies unsupported yet', file=sys.stderr) exit(1) topology_suite_mapping = {topologies[0]: suite_list} # on all topologies, run test # TODO: run parallel for topology_path, topology_suite_list in topology_suite_mapping.items(): topology_path_variable = 'TOPOLOGY_PATH:{}'.format(topology_path) variables = [topology_path_variable] print('Runing tests on topology {}'.format(topology_path)) run_suites(test_dir, topology_suite_list, variable=variables, output_dir=suite_output_dir, output_prefix=''.join(sample(ascii_lowercase, 5)), include=i, exclude=excl, loglevel=args.loglevel) print('Parsing test results') parse_outputs(suite_output_dir) if __name__ == "__main__": main()