Linux Foundation Collaborative Projects
index
:
csit
master
oper-20230522
oper-20241028
oper-230327
oper-230403
oper-230411
oper-230417
oper-230424
oper-230502
oper-230509
oper-230515
oper-230529
oper-230605
oper-230612
oper-230619
oper-230626
oper-230710
oper-230717
oper-230724
oper-230731
oper-230807
oper-230814
oper-230821
oper-230905
oper-230911
oper-230918
oper-230925
oper-231002
oper-231009
oper-231016
oper-231023
oper-231030
oper-231106
oper-231113
oper-231120
oper-231127
oper-231204
oper-231211
oper-231218
oper-240115
oper-240122
oper-240124
oper-240129
oper-240205
oper-240212
oper-240219
oper-240226
oper-240304
oper-240311
oper-240318
oper-240325
oper-240402
oper-240408
oper-240415
oper-240422
oper-240429
oper-240506
oper-240513
oper-240520
oper-240527
oper-240603
oper-240610
oper-240617
oper-240624
oper-240701
oper-240708
oper-240715
oper-240722
oper-240729
oper-240805
oper-240812
oper-240902
oper-240909
oper-240916
oper-240923
oper-240930
oper-241014
oper-241021
oper-241028
oper-241104
oper-241111
oper-241117
oper-241125
oper-241202
oper-241209
oper-250108
oper-250113
oper-250120
oper-250127
oper-250203
oper-250210
oper-250217
oper-rls2210-221128
oper-rls2210-221205
oper-rls2302-230320
oper-rls2302-230327
oper-rls2306-230525
oper-rls2306-230529
oper-rls2306-230605
oper-rls2306-230612
oper-rls2306-230619
oper-rls2306-230626
oper-rls2306-230629
oper-rls2306-230710
oper-rls2310-230921
oper-rls2310-230925
oper-rls2310-231016
oper-rls2310-231023
oper-rls2310-231030
oper-rls2402-240125
oper-rls2402-240129
oper-rls2402-240205
oper-rls2402-240219
oper-rls2402-240304
oper-rls2406-240523
oper-rls2406-240603
oper-rls2406-240610
oper-rls2406-240617
oper-rls2406-240624
oper-rls2406-240701
oper-rls2406-240708
oper-rls2406-240715
oper-rls2406-240722
oper-rls2410-240926
oper-rls2410-241017
oper.highlight .hll { background-color: #ffffcc } .highlight .c { color: #888888 } /* Comment */ .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ .highlight .k { color: #008800; font-weight: bold } /* Keyword */ .highlight .ch { color: #888888 } /* Comment.Hashbang */ .highlight .cm { color: #888888 } /* Comment.Multiline */ .highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */ .highlight .cpf { color: #888888 } /* Comment.PreprocFile */ .highlight .c1 { color: #888888 } /* Comment.Single */ .highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */ .highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .gr { color: #aa0000 } /* Generic.Error */ .highlight .gh { color: #333333 } /* Generic.Heading */ .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ .highlight .go { color: #888888 } /* Generic.Output */ .highlight .gp { color: #555555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #666666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long *//* * ethernet/arp.c: IP v4 ARP node * * Copyright (c) 2010 Cisco and/or its affiliates. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef __ARP_PACKET_H__ #define __ARP_PACKET_H__ #include <vnet/arp/arp.h> /* Either we drop the packet or we send a reply to the sender. */ typedef enum { ARP_REPLY_NEXT_DROP, ARP_REPLY_NEXT_REPLY_TX, ARP_REPLY_N_NEXT, } arp_reply_next_t; static_always_inline u32 arp_mk_reply (vnet_main_t * vnm, vlib_buffer_t * p0, u32 sw_if_index0, const ip4_address_t * if_addr0, ethernet_arp_header_t * arp0, ethernet_header_t * eth_rx) { vnet_hw_interface_t *hw_if0; u8 *rewrite0, rewrite0_len; ethernet_header_t *eth_tx; u32 next0; /* Send a reply. An adjacency to the sender is not always present, so we use the interface to build us a rewrite string which will contain all the necessary tags. */ rewrite0 = ethernet_build_rewrite (vnm, sw_if_index0, VNET_LINK_ARP, eth_rx->src_address); rewrite0_len = vec_len (rewrite0); /* Figure out how much to rewind current data from adjacency. */ vlib_buffer_advance (p0, -rewrite0_len); eth_tx = vlib_buffer_get_current (p0); vnet_buffer (p0)->sw_if_index[VLIB_TX] = sw_if_index0; hw_if0 = vnet_get_sup_hw_interface (vnm, sw_if_index0); /* Send reply back through input interface */ vnet_buffer (p0)->sw_if_index[VLIB_TX] = sw_if_index0; next0 = ARP_REPLY_NEXT_REPLY_TX; arp0->opcode = clib_host_to_net_u16 (ETHERNET_ARP_OPCODE_reply); arp0->ip4_over_ethernet[1] = arp0->ip4_over_ethernet[0]; mac_address_from_bytes (&arp0->ip4_over_ethernet[0.highlight .hll { background-color: #ffffcc } .highlight .c { color: #888888 } /* Comment */ .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ .highlight .k { color: #008800; font-weight: bold } /* Keyword */ .highlight .ch { color: #888888 } /* Comment.Hashbang */ .highlight .cm { color: #888888 } /* Comment.Multiline */ .highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */ .highlight .cpf { color: #888888 } /* Comment.PreprocFile */ .highlight .c1 { color: #888888 } /* Comment.Single */ .highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */ .highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .gr { color: #aa0000 } /* Generic.Error */ .highlight .gh { color: #333333 } /* Generic.Heading */ .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ .highlight .go { color: #888888 } /* Generic.Output */ .highlight .gp { color: #555555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #666666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */#!/usr/bin/env python # Copyright (c) 2016 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """This is a helper script to make test execution easy.""" from __future__ import print_function import sys import os import time from string import ascii_lowercase from random import sample import argparse from pykwalify.core import Core from pykwalify.errors import PyKwalifyException from yaml import load import robot from robot.errors import DATA_ERROR, DataError, FRAMEWORK_ERROR, FrameworkError from robot.run import RobotFramework from robot.conf.settings import RobotSettings from robot.running.builder import TestSuiteBuilder from robot.running.model import TestSuite TOPOLOGIES_DIR = './topologies/enabled/' TESTS_DIR = './tests' OUTPUTS_DIR = './outputs' def get_suite_list(*datasources, **options): """Returns filtered test suites based on include exclude tags :param datasources: paths to tests :param options: Robot Framework options (robot.conf.settings.py) :return: list of Robot Framework TestSuites which contain tests """ class _MyRobotFramework(RobotFramework): """Custom implementation of RobotFramework main().""" def main(self, datasources, **options): # copied from robot.run.RobotFramework.main settings = RobotSettings(options) test_suite = TestSuiteBuilder(settings['SuiteNames'], settings['WarnOnSkipped']) # pylint: disable=star-args suite = test_suite.build(*datasources) suite.configure(**settings.suite_config) return suite # get all test cases list without run tests, execute runs overloaded main # function suite = _MyRobotFramework().execute(*datasources, output=None, dryrun=True, **options) if isinstance(suite, TestSuite): suites = [] suites.append(suite) append_new = True while append_new: append_new = False tmp = [] for suite in suites: # pylint: disable=protected-access if len(suite.suites._items) > 0: for i in suite.suites._items: tmp.append(i) append_new = True else: tmp.append(suite) suites = tmp return suites # TODO: check testcases Tags ? all tests should have same set of tags else: if suite == DATA_ERROR: raise DataError if suite == FRAMEWORK_ERROR: raise FrameworkError return [] def run_suites(tests_dir, suites, output_dir, output_prefix='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()