aboutsummaryrefslogtreecommitdiffstats
path: root/docs/content/introduction
diff options
context:
space:
mode:
Diffstat (limited to 'docs/content/introduction')
-rw-r--r--docs/content/introduction/_index.md5
-rw-r--r--docs/content/introduction/automating_vpp_api_flag_day.md303
-rw-r--r--docs/content/introduction/bash_code_style.md651
-rw-r--r--docs/content/introduction/branches.md192
-rw-r--r--docs/content/introduction/dashboard_history.md17
-rw-r--r--docs/content/introduction/design.md148
-rw-r--r--docs/content/introduction/model_schema.md60
-rw-r--r--docs/content/introduction/perf_triggers_design.md44
-rw-r--r--docs/content/introduction/test_code_guidelines.md294
-rw-r--r--docs/content/introduction/test_naming.md107
-rw-r--r--docs/content/introduction/test_scenarios_overview.md61
-rw-r--r--docs/content/introduction/test_tag_description.md863
-rw-r--r--docs/content/introduction/testing_in_vagrant.md85
13 files changed, 0 insertions, 2830 deletions
diff --git a/docs/content/introduction/_index.md b/docs/content/introduction/_index.md
deleted file mode 100644
index e028786bd1..0000000000
--- a/docs/content/introduction/_index.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-bookFlatSection: true
-title: "Introduction"
-weight: 1
---- \ No newline at end of file
diff --git a/docs/content/introduction/automating_vpp_api_flag_day.md b/docs/content/introduction/automating_vpp_api_flag_day.md
deleted file mode 100644
index 131adeab9d..0000000000
--- a/docs/content/introduction/automating_vpp_api_flag_day.md
+++ /dev/null
@@ -1,303 +0,0 @@
----
-bookHidden: true
-title: "VPP API Flag Day Algorithms"
----
-
-# VPP API Flag Day Algorithm
-
-## Abstract
-
-This document describes the current solution to the problem of
-automating the detection of VPP API changes which are not backwards
-compatible with existing CSIT tests, by defining the "Flag Day"
-process of deploying a new set of CSIT tests which are compatible
-with the new version of the VPP API without causing a halt to the
-normal VPP/CSIT operational CI process. This is initially
-limited to changes in \*.api files contained in the vpp repo.
-Eventually the detection algorithm could be extended to include
-other integration points such as "directory" structure of stats
-segment or PAPI python library dependencies.
-
-## Motivation
-
-Aside of per-release activities (release report), CSIT also provides testing
-that requires somewhat tight coupling to the latest (merged but not released)
-VPP code. Currently, HEAD of one project is run against somewhat older codebase
-of the other project. Definition of what is the older codebase to use
-is maintained by CSIT project. For older CSIT codebase, there are so-called
-"oper" branches. For older VPP codebase, CSIT master HEAD contains identifiers
-for "stable" VPP builds. Such older codebases are also used for verify jobs,
-where HEAD of the other project is replaced by the commit under review.
-
-One particular type of jobs useful for VPP development is trending jobs.
-They test latests VPP build with latest oper branch of CSIT,
-and analytics is applied to detect regressions in preformance.
-For this to work properly, VPP project needs a warning against breaking
-the assumptions the current oper branch makes about VPP behavior.
-In the past, the most frequent type of such breakage was API change.
-
-Earlier attempts to create a process to minimize breakage have focused
-on creating a new verify job for VPP (called api-crc job) that
-votes -1 on a change that affects CRC values for API messages CSIT uses.
-The list of messages and CRC values (multiple "collections" are allowed)
-is maintained in CSIT repository (in oper branch).
-The process was less explicit on how should CSIT project maintain such list.
-As CSIT was not willing to support two incpompatible API messages
-by the same codebase (commit), there were unavoidable windows
-where either trenging jobs, or CSIT verify jobs were failing.
-
-Practice showed that human (or infra) errors can create two kinds of breakages.
-Either the unavoidable short window gets long, affecting a trending job run
-or two, or the api-crc job starts giving -1 to innocent changes
-because oper branch went out of sync with VPP HEAD codebase.
-This second type of failure prevents any merges to VPP for a long time
-(12 hours is the typical time, give time zone differences).
-
-The current version of this document introduces two new requirements.
-Firstly, the api-crc job should not give false -1, under any
-(reasonable) circumstances. That means, if a VPP change
-(nor any of its unmerged ancestor commits) does not affect any CRC values
-for messages used by CSIT, -1 should only mean "rebase is needed",
-and rebasing to HEAD should result in +1 from the api-crc job.
-Secondly, no more than one VPP change is allowed to be processed
-(at the same time).
-
-## Naming
-
-It is easier to define the process after chosing shorter names
-for notions that need long definition.
-
-Note: Everytime a single job is mentioned,
-in practice it can be a set of jobs covering parts of functionality.
-A "run" of the set of jobs passes only if each job within the set
-has been run (again) and passed.
-
-## Jobs
-
-+ A *vpp verify* job: Any job run automatically, and voting on open VPP changes.
- Some verify jobs compile and package VPP for target operating system
- and processor architecture, the packages are NOT archived (currently).
- They should be cached somewhere in future to speed up in downstream jobs,
- but currently each such downstream job can clone and build.
-
-+ The *api-crc* job: Quick verify job for VPP changes, that accesses
- CSIT repository (checkout latest oper branch HEAD) to figure out
- whether merging the change is safe from CSIT point of view.
- Here, -1 means CSIT is not ready. +1 means CSIT looks to be ready
- for the new CRC values, but there still may be failures on real tests.
-
-+ A *trending* job: Any job that is started by timer and performs testing.
- It checkouts CSIT latest oper branch HEAD, downloads the most recent
- completely uploaded VPP package, and unconditionally runs the tests.
- CRC checks are optional, ideally only written to console log
- without otherwise affecting the test cases.
-
-+ A *vpp-csit* job: A slower verify job for VPP changes, that accesses CSIT
- repository and runs tests from the correct CSIT commit (chosen as in trending)
- against the VPP (built from the VPP patch under review).
- Vote -1 means there were test failures. +1 means no test failures, meaning
- there either was no API change, or it was backward compatible.
-
-+ A *csit-vpp* job: Verify job for open CSIT changes. Downloads the
- (completely uploaded) VPP package marked as "stable", and runs a selection
- of tests (from the CSIT patch under review).
- Vote +1 means all tests have passed, so it is safe to merge
- the patch under review.
-
-+ A *patch-on-patch* job: Manually triggered non-voting job
- for open CSIT changes. Compiles and packages from VPP source
- (usually of an unmerged change). Then runs the same tests as csit-vpp job.
- This job is used to prove the CSIT patch under review is supporting
- the specified VPP code.
- In practice, this can be a vpp-csit job started with CSIT_REF set.
-
-+ A *manual verification* is done by a CSIT committer, locally executing steps
- equivalent to the patch-on-patch job. This can to save time and resources.
-
-## CRC Collections
-
-Any commit in/for the CSIT repository contains a file (supported_crcs.yaml),
-which contains either one or two collections. A collection is a mapping
-that maps API message name to its CRC value.
-
-A collection name specifies which VPP build is this collection for.
-An API message name is present in a collection if and only if
-it is used by a test implementation (can be in different CSIT commit)
-targeted at the VPP build (pointed out by the collection name).
-
-+ The *stable collection*: Usually required, listed first, has comments and name
- pointing to the VPP build this CSIT commit marks as stable.
- The stable collection is only missing in deactivating changes (see below)
- when not mergeable yet.
-
-+ The *active collection*: Optional, listed second, has comments and name
- pointing to the VPP Gerrit (including patch set number)
- the currently active API process is processing.
- The patch set number part can be behind the actual Gerrit state.
- This is safe, because api-crc job on the active API change will fail
- if the older patch is no longer API-equivalent to the newer patch.
-
-## Changes
-
-+ An *API change*: The name for any Gerrit Change for VPP repository
- that does not pass api-crc job right away, and needs this whole process.
- This usually means .api files are edited, but a patch that affects
- the way CRC values are computed is also an API change.
-
- Full name could be VPP API Change, but as no CSIT change is named "API change"
- (and this document does not talk about other FD.io or external projects),
- "API change" is shorter.
-
-+ A *blocked change*: The name for open Gerrit Change for VPP repository
- that got -1 from some of voting verify jobs.
-
-+ A *VPP-blocked change": A blocked change which got -1 from some "pure VPP"
- verify job, meaning no CSIT code has been involved in the vote.
- Example: "make test" fails.
-
- VPP contributor is expected to fix the change, or VPP developers
- are expected to found a cause in an earlier VPP change, and fix it.
- No interaction with CSIT developers is necessary.
-
-+ A *CSIT-blocked change*: A blocked change which is not VPP-blocked,
- but does not pass some vpp-csit job.
- To fix a CSIT-blocked change, an interaction with a CSIT committer
- is usually necessary. Even if a VPP developer is experienced enough
- to identify the cause of the failure, a merge to CSIT is usually needed
- for a full fix.
-
- This process does not specify what to do with CSIT-blocked changes
- that are not also API changes.
-
-+ A *candidate API change*: An API change that meets all requirements
- to become active (see below). Currently, the requirements are:
-
- + No -1 nor -2 from from any human reviewer.
-
- + All verify jobs (except vpp-csit ones) pass.
-
- + +1 from a VPP committer.
-
- The reason is to avoid situations where an API change becomes active,
- but the VPP committers are unwilling to merge it for some reason.
-
-+ The *active API change*: The candidate API change currently being processed
- by the API Flag Day Algorithm.
- While many API changes can be candidates at the same time,
- only one is allowed be active at a time.
-
-+ The *activating change*: The name for a Gerrit Change for CSIT repository
- that does not change the test code, but adds the active CRC collection.
- Merge of the opening change (to latest CSIT oper branch) defines
- which API change has become active.
-
-+ The *deactivating change*: The name for Gerrit Change for CSIT repository
- that only supports tests and CRC values for VPP with the active API change.
- That implies the previously stable CRC collection is deleted,
- and any edits to the test implementation are done here.
-
-+ The *mergeable deactivating change*: The deactivating change with additional
- requirements. Details on the requirements are listed in the next section.
- Merging this change finishes the process for the active API change.
-
-It is possible for a single CSIT change to act both as a mergeable
-deactivating change for one API change, and as an activating change
-for another API change. As English lacks a good adjective for such a thing,
-this document does not name this change.
-When this documents says a change is activating or deactivating,
-it allows the possibility for the change to fullfill also other purposes
-(e.g. acting as deactivating / activating change for another API change).
-
-## Algorithm Steps
-
-The following steps describe the application of the API "Flag Day" algorithm:
-
-#. A VPP patch for an API change is submitted to
- gerrit for review.
-#. The api-crc job detects the API CRC values have changed
- for some messages used by CSIT.
-#. The api-crc job runs in parallel with any other vpp-csit verify job,
- so those other jobs can hint at the impact on CSIT.
- Currently, any such vpp-csit job is non-voting,
- as the current process does not guarantee such jobs passes
- when the API change is merged.
-#. If the api-crc job fails, an email with the appropriate reason
- is sent to the VPP patch submitter and vpp-api-dev@lists.fd.io
- including the VPP patch information and .api files that are edited.
-#. The VPP patch developer works with a VPP committer
- to ensure the patch meets requirements to become a candidate (see above).
-#. The VPP patch developer and CSIT team create a CSIT JIRA ticket
- to identify the work required to support the new VPP API version.
-#. CSIT developer creates a patch of the deactivating change
- (upload to Gerrit not required yet).
-#. CSIT developer runs patch-on-patch job (or manual verification).
- Both developers iterate until the verification passes.
- Note that in this phase csit-vpp job is expected to vote -1,
- as the deactivating change is not mergeable yet.
-#. CSIT developer creates the activating change, uploads to Gerrit,
- waits for vote (usual review cycle applies).
-#. When CSIT committer is satisfied, the activating change is merged
- to CSIT master branch and cherry-picked to the latest oper branch.
- This enters a "critical section" of the process.
- Merges of other activating changes are not allowed from now on.
- The targeted API change becomes the active API change.
- This does not break any jobs.
-#. VPP developer (or CSIT committer) issues a recheck on the VPP patch.
-#. On failure, VPP and CSIT committers analyze what went wrong.
- Typically, the active CRC collection is matching only an older patch set,
- but a newer patch set needs different CRC values.
- Either due to improvements on the VPP change in question,
- or due to a rebase over previously merged (unrelated) API change.
- VPP perhaps needs to rebase, and CSIT definitely needs
- to merge edits to the active collection. Then issue a recheck again,
- and iterate until success.
-#. On success, VPP Committer merges the active API change patch.
- (This is also a delayed verification of the current active CRC collection.)
-#. VPP committer sends an e-mail to vpp-api-dev stating the support for
- the previous CRC values will soon be removed, implying other changes
- (whether API or not) should be rebased soon.
-#. VPP merge jobs create and upload new VPP packages.
- This breaks trending jobs, but both VPP and CSIT verify jobs still work.
-#. CSIT developer makes the deactivating change mergeable:
- The stable VPP build indicator is bumped to the build
- that contains the active API change. The active CRC collection
- (added by the activating change) is renamed to the new stable collection.
- (The previous stable collection has already been deleted.)
- At this time, the deactivating change should be uploaded to Gerrit and
- csit verify jobs should be triggered.
-#. CSIT committer reviews the code, perhaps triggering any additional jobs
- needed to verify the tests using the edited APIs are still working.
-#. When satisfied, CSIT committer merges the mergeable deactivating change
- (to both master and oper).
- The merge fixes trending jobs. VPP and CSIT verify jobs continue to work.
- The merge also breaks some verify jobs for old changes in VPP,
- as announced when the active API change was merged.
- The merge is the point where the process leaves the "critical section",
- thus allowing merges of activating changes for other API changes.
-#. CSIT committer sends an e-mail to vpp-api-dev stating the support for
- the previous CRC values has been removed, and rebase is needed
- for all affected VPP changes.
-#. Recheck of existing VPP patches in gerrit may cause the "VPP
- API Incompatible Change Test" to send an email to the patch
- submitter to rebase the patch to pick up the compatible VPP API
- version files.
-
-### Real life examples
-
-Simple API change: https://gerrit.fd.io/r/c/vpp/+/23829
-
-Activating change: https://gerrit.fd.io/r/c/csit/+/23956
-
-Mergeable deactivating change: https://gerrit.fd.io/r/c/csit/+/24280
-
-Less straightforward mergeable deactivating change:
-https://gerrit.fd.io/r/c/csit/+/22526
-It shows:
-
-+ Crc edits: supported_crcs.yaml
-+ Version bump: VPP_STABLE_VER_UBUNTU_BIONIC
-+ And even a way to work around failing tests:
- eth2p-ethicmpv4-ip4base-eth-1tap-dev.robot
-
-Simple change that is both deactivating and activating:
-https://gerrit.fd.io/r/c/csit/+/23969
diff --git a/docs/content/introduction/bash_code_style.md b/docs/content/introduction/bash_code_style.md
deleted file mode 100644
index bbd0c37196..0000000000
--- a/docs/content/introduction/bash_code_style.md
+++ /dev/null
@@ -1,651 +0,0 @@
----
-bookHidden: true
-title: "Bash Code Style"
----
-
-The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
-"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
-"MAY", and "OPTIONAL" in this document are to be interpreted as
-described in [BCP 14](https://tools.ietf.org/html/bcp14),
-[RFC2119](https://tools.ietf.org/html/rfc2119),
-[RFC8174](https://tools.ietf.org/html/rfc8174)
-when, and only when, they appear in all capitals, as shown here.
-
-This document SHALL describe guidelines for writing reliable, maintainable,
-reusable and readable code for CSIT.
-
-# Proposed Style
-
-# File Types
-
-Bash files SHOULD NOT be monolithic. Generally, this document
-considers two types of bash files:
-
-+ Entry script: Assumed to be called by user,
- or a script "external" in some way.
-
- + Sources bash libraries and calls functions defined there.
-
-+ Library file: To be sourced by entry scipts, possibly also by other libraries.
-
- + Sources other libraries for functions it needs.
-
- + Or relies on a related file already having sourced that.
-
- + Documentation SHALL imply which case it is.
-
- + Defines multiple functions other scripts can call.
-
-# Safety
-
-+ Variable expansions MUST be quoted, to prevent word splitting.
-
- + This includes special "variables" such as "${1}".
-
- + RECOMMENDED even if the value is safe, as in "$?" and "$#".
-
- + It is RECOMMENDED to quote strings in general,
- so text editors can syntax-highlight them.
-
- + Even if the string is a numeric value.
-
- + Commands and known options can get their own highlight, no need to quote.
-
- + Example: You do not need to quote every word of
- "pip install --upgrade virtualenv".
-
- + Code SHALL NOT quote glob characters you need to expand (obviously).
-
- + OPTIONALLY do not quote adjacent characters (such as dot or fore-slash),
- so that syntax highlighting makes them stand out compared to surrounding
- ordinary strings.
-
- + Example: cp "logs"/*."log" "."/
-
- + Command substitution on right hand side of assignment are safe
- without quotes.
-
- + Note that command substitution limits the scope for quotes,
- so it is NOT REQUIRED to escape the quotes in deeper levels.
-
- + Both backtics and "dollar round-bracket" provide command substitution.
- The folowing rules are RECOMMENDED:
-
- + For simple constructs, use "dollar round-bracket".
-
- + If there are round brackets in the surrounding text, use backticks,
- as some editor highlighting logic can get confused.
-
- + Avoid nested command substitution.
-
- + Put intermediate results into local variables,
- use "|| die" on each step of command substitution.
-
- + Code SHOULD NOT be structured in a way where
- word splitting is intended.
-
- + Example: Variable holding string of multiple command lines arguments.
-
- + Solution: Array variable should be used in this case.
-
- + Expansion MUST use quotes then: "${name[@]}".
-
- + Word splitting MAY be used when creating arrays from command substitution.
-
-+ Code MUST always check the exit code of commands.
-
- + Traditionally, error code checking is done either by "set -e"
- or by appending "|| die" after each command.
- The first is unreliable, due to many rules affecting "set -e" behavior
- (see <https://mywiki.wooledge.org/BashFAQ/105>), but "|| die"
- relies on humans identifying each command, which is also unreliable.
- When was the last time you checked error code of "echo" command,
- for example?
-
- + Another example: "set -e" in your function has no effect
- if any ancestor call is done with logical or,
- for example in "func || code=$?" construct.
-
- + As there is no reliable method of error detection, and there are two
- largely independent unreliable methods, the best what we can do
- is to apply both. So, code SHOULD explicitly
- check each command (with "|| die" and similar) AND have "set -e" applied.
-
- + Code MUST explicitly check each command, unless the command is well known,
- and considered safe (such as the aforementioned "echo").
-
- + The well known commands MUST still be checked implicitly via "set -e".
-
- + See below for specific "set -e" recommendations.
-
-+ Code SHOULD use "readlink -e" (or "-f" if target does not exist yet)
- to normalize any path value to absolute path without symlinks.
- It helps with debugging and identifies malformed paths.
-
-+ Code SHOULD use such normalized paths for sourcing.
-
-+ When exiting on a known error, code MUST print a longer, helpful message,
- in order for the user to fix their situation if possible.
-
-+ When error happens at an unexpected place, it is RECOMMENDED for the message
- to be short and generic, instead of speculative.
-
-# Bash Options
-
-+ Code MUST apply "-x" to make debugging easier.
-
- + Code MAY temporarily supress such output in order to avoid spam
- (e.g. in long busy loops), but it is still NOT RECOMMENDED to do so.
-
-+ Code MUST apply "-e" for early error detection.
-
- + But code still SHOULD use "|| die" for most commands,
- as "-e" has numerous rules and exceptions.
-
- + Code MAY apply "+e" temporarily for commands which (possibly nonzero)
- exit code it interested in.
-
- + Code MUST to store "$?" and call "set -e" immediatelly afterwards.
-
- + Code MUST NOT use this approach when calling functions.
-
- + That is because functions are instructed to apply "set -e" on their own
- which (when triggered) will exit the whole entry script.
-
- + Unless overriden by ERR trap.
- But code SHOULD NOT set any ERR trap.
-
- + If code needs exit code of a function, it is RECOMMENDED to use
- pattern 'code="0"; called_function || code="${?}"'.
-
- + In this case, contributor MUST make sure nothing in the
- called_function sub-graph relies on "set -e" behavior,
- because the call being part of "or construct" disables it.
-
- + Code MAY append "|| true" for benign commands,
- when it is clear non-zero exit codes make no difference.
-
- + Also in this case, the contributor MUST make sure nothing within
- the called sub-graph depends on "set -e", as it is disabled.
-
-+ Code MUST apply "-u" as unset variable is generally a typo, thus an error.
-
- + Code MAY temporarily apply "+u" if a command needs that to pass.
-
- + Virtualenv activation is the only known example so far.
-
-+ Code MUST apply "-o pipefail" to make sure "-e" picks errors
- inside piped construct.
-
- + Code MAY use "|| true" inside a pipe construct, in the (inprobable) case
- when non-zero exit code still results in a meaningful pipe output.
-
-+ All together: "set -exuo pipefail".
-
- + Code MUST put that line near start of every file, so we are sure
- the options are applied no matter what.
-
- + "Near start" means "before any nontrivial code".
-
- + Basically only copyright is RECOMMENDED to appear before.
-
- + Also code MUST put the line near start of function bodies
- and subshell invocations.
-
-# Functions
-
-There are (at least) two possibilities how a code from an external file
-can be executed. Either the file contains a code block to execute
-on each "source" invocation, or the file just defines functions
-which have to be called separately.
-
-This document considers the "function way" to be better,
-here are some pros and cons:
-
-+ Cons:
-
- + The function way takes more space. Files have more lines,
- and the code in function body is one indent deeper.
-
- + It is not easy to create functions for low-level argument manipulation,
- as "shift" command in the function code does not affect the caller context.
-
- + Call sites frequently refer to code two times,
- when sourcing the definition and when executing the function.
-
- + It is not clear when a library can rely on its relative
- to have performed the sourcing already.
-
- + Ideally, each library should detect if it has been sourced already
- and return early, which takes even more space.
-
-+ Pros:
-
- + Some code blocks are more useful when used as function,
- to make call site shorter.
-
- + Examples: Trap functions, "die" function.
-
- + The "import" part and "function" part usually have different side effects,
- making the documentation more focused (even if longer overall).
-
- + There is zero risk of argument-less invocation picking arguments
- from parent context.
-
- + This safety feature is the main reason for chosing the "function way".
-
- + This allows code blocks to support optional arguments.
-
-+ Rules:
-
- + Library files MUST be only "source"d. For example if "tox" calls a script,
- it is an entry script.
-
- + Library files (upon sourcing) MUST minimize size effect.
-
- + The only permitted side effects MUST by directly related to:
-
- + Defining functions (without executing them).
-
- + Sourcing sub-library files.
-
- + If a bash script indirectly call another bash script,
- it is not a "source" operation, variables are not shared,
- so the called script MUST be considered an entry script,
- even if it implements logic fitting into a single function.
-
- + Entry scripts SHOULD avoid duplicating any logic.
-
- + Clear duplicated blocks MUST be moved into libraries as functions.
-
- + Blocks with low amount of duplication MAY remain in entry scripts.
-
- + Usual motives for not creating functions are:
-
- + The extracted function would have too much logic for processing
- arguments (instead of hardcoding values as in entry script).
-
- + The arguments needed would be too verbose.
-
- + And using "set +x" would take too much vertical space
- (when compared to entry script implementation).
-
-# Variables
-
-This document describes two kinds of variables: called "local" and "global".
-
-+ Local variables:
-
- + Variable name MUST contain only lower case letters, digits and underscores.
-
- + Code MUST NOT export local variables.
-
- + Code MUST NOT rely on local variables set in different contexts.
-
- + Documentation is NOT REQUIRED.
-
- + Variable name SHOULD be descriptive enough.
-
- + Local variable MUST be initialized before first use.
-
- + Code SHOULD have a comment if a reader might have missed
- the initialization.
-
- + Unset local variables when leaving the function.
-
- + Explicitly typeset by "local" builtin command.
-
- + Require strict naming convention, e.g. function_name__variable_name.
-
-+ Global variables:
-
- + Variable name MUST contain only upper case letters, digits and underscores.
-
- + They SHOULD NOT be exported, unless external commands need them
- (e.g. PYTHONPATH).
-
- + Code MUST document if a function (or its inner call)
- reads a global variable.
-
- + Code MUST document if a function (or its inner call)
- sets or rewrites a global variable.
-
- + If a function "wants to return a value", it SHOULD be implemented
- as the function setting (or rewriting) a global variable,
- and the call sites reading that variable.
-
- + If a function "wants to accept an argument", it IS RECOMMENDED
- to be implemented as the call sites setting or rewriting global variables,
- and the function reading that variables.
- But see below for direct arguments.
-
-+ Code MUST use curly brackets when referencing variables,
- e.g. "${my_variable}".
-
- + It makes related constructs (such as ${name:-default}) less surprising.
-
- + It looks more similar to Robot Framework variables (which is good).
-
-# Arguments
-
-Bash scripts and functions MAY accept arguments, named "${1}", "${2}" and so on.
-As a whole available via "$@".
-You MAY use "shift" command to consume an argument.
-
-## Contexts
-
-Functions never have access to parent arguments, but they can read and write
-variables set or read by parent contexts.
-
-### Arguments Or Variables
-
-+ Both arguments and global variables MAY act as an input.
-
-+ In general, if the caller is likely to supply the value already placed
- in a global variable of known name, it is RECOMMENDED
- to use that global variable.
-
-+ Construct "${NAME:-value}" can be used equally well for arguments,
- so default values are possible for both input methods.
-
-+ Arguments are positional, so there are restrictions on which input
- is optional.
-
-+ Functions SHOULD either look at arguments (possibly also
- reading global variables to use as defaults), or look at variables only.
-
-+ Code MUST NOT rely on "${0}", it SHOULD use "${BASH_SOURCE[0]}" instead
- (and apply "readlink -e") to get the current block location.
-
-+ For entry scripts, it is RECOMMENDED to use standard parsing capabilities.
-
- + For most Linux distros, "getopt" is RECOMMENDED.
-
-# Working Directory Handling
-
-+ Functions SHOULD act correctly without neither assuming
- what the currect working directory is, nor changing it.
-
- + That is why global variables and arguments SHOULD contain
- (normalized) full paths.
-
- + Motivation: Different call sites MAY rely on different working directories.
-
-+ A function MAY return (also with nonzero exit code) when working directory
- is changed.
-
- + In this case the function documentation MUST clearly state where (and when)
- is the working directory changed.
-
- + Exception: Functions with undocumented exit code.
-
- + Those functions MUST return nonzero code only on "set -e" or "die".
-
- + Note that both "set -e" and "die" by default result in exit of the whole
- entry script, but the caller MAY have altered that behavior
- (by registering ERR trap, or redefining die function).
-
- + Any callers which use "set +e" or "|| true" MUST make sure
- their (and their caller ancestors') assumption on working directory
- are not affected.
-
- + Such callers SHOULD do that by restoring the original working directory
- either in their code,
-
- + or contributors SHOULD do such restoration in the function code,
- (see below) if that is more convenient.
-
- + Motivation: Callers MAY rely on this side effect to simplify their logic.
-
-+ A function MAY assume a particular directory is already set
- as the working directory (to save space).
-
- + In this case function documentation MUST clearly state what the assumed
- working directory is.
-
- + Motivation: Callers MAY call several functions with common
- directory of interest.
-
- + Example: Several dowload actions to execute in sequence,
- implemented as functions assuming ${DOWNLOAD_DIR}
- is the working directory.
-
-+ A function MAY change the working directory transiently,
- before restoring it back before return.
-
- + Such functions SHOULD use command "pushd" to change the working directory.
-
- + Such functions SHOULD use "trap 'trap - RETURN; popd' RETURN"
- imediately after the pushd.
-
- + In that case, the "trap - RETURN" part MUST be included,
- to restore any trap set by ancestor.
-
- + Functions MAY call "trap - RETURN; popd" exlicitly.
-
- + Such functions MUST NOT call another pushd (before an explicit popd),
- as traps do not stack within a function.
-
-+ If entry scripts also use traps to restore working directory (or other state),
- they SHOULD use EXIT traps instead.
-
- + That is because "exit" command, as well as the default behavior
- of "die" or "set -e" cause direct exit (without skipping function returns).
-
-# Function Size
-
-+ In general, code SHOULD follow reasoning similar to how pylint
- limits code complexity.
-
-+ It is RECOMMENDED to have functions somewhat simpler than Python functions,
- as Bash is generally more verbose and less readable.
-
-+ If code contains comments in order to partition a block
- into sub-blocks, the sub-blocks SHOULD be moved into separate functions.
-
- + Unless the sub-blocks are essentially one-liners,
- not readable just because external commands do not have
- obvious enough parameters. Use common sense.
-
-# Documentation
-
-+ The library path and filename is visible from source sites. It SHOULD be
- descriptive enough, so reader do not need to look inside to determine
- how and why is the sourced file used.
-
- + If code would use several functions with similar names,
- it is RECOMMENDED to create a (well-named) sub-library for them.
-
- + Code MAY create deep library trees if needed, it SHOULD store
- common path prefixes into global variables to make sourcing easier.
-
- + Contributors, look at other files in the subdirectory. You SHOULD
- improve their filenames when adding-removing other filenames.
-
- + Library files SHOULD NOT have executable flag set.
-
- + Library files SHOULD have an extension .sh (or perhaps .bash).
-
- + It is RECOMMENDED for entry scripts to also have executable flag unset
- and have .sh extension.
-
-+ Each entry script MUST start with a shebang.
-
- + "#!/bin/usr/env bash" is RECOMMENDED.
-
- + Code SHOULD put an empty line after shebang.
-
- + Library files SHOULD NOT contain a shebang, as "source" is the primary
- method to include them.
-
-+ Following that, there SHOULD be a block of comment lines with copyright.
-
- + It is a boilerplate, but human eyes are good at ignoring it.
-
- + Overhead for git is also negligible.
-
-+ Following that, there MUST be "set -exuo pipefail".
-
- + It acts as an anchor for humans to start paying attention.
-
-Then it depends on script type.
-
-## Library Documentation
-
-+ Following "set -exuo pipefail" SHALL come the "import part" documentation.
-
-+ Then SHALL be the import code
- ("source" commands and a bare minimum they need).
-
-+ Then SHALL be the function definitions, and inside:
-
- + The body SHALL sart with the function documentation explaining API contract.
- Similar to Robot [Documentation] or Python function-level docstring.
-
- + See below.
-
- + "set -exuo pipefail" SHALL be the first executable line
- in the function body, except functions which legitimely need
- different flags. Those SHALL also start with appropriate "set" command(s).
-
- + Lines containing code itself SHALL follow.
-
- + "Code itself" SHALL include comment lines
- explaining any non-obvious logic.
-
- + There SHALL be two empty lines between function definitions.
-
-More details on function documentation:
-
-Generally, code SHOULD use comments to explain anything
-not obvious from the funtion name.
-
-+ Function documentation SHOULD start with short description of function
- operation or motivation, but only if not obvious from function name.
-
-+ Documentation SHOULD continue with listing any non-obvious side effect:
-
- + Documentation MUST list all read global variables.
-
- + Documentation SHOULD include descriptions of semantics
- of global variable values.
- It is RECOMMENDED to mention which function is supposed to set them.
-
- + The "include descriptions" part SHOULD apply to other items as well.
-
- + Documentation MUST list all global variables set, unset, reset,
- or otherwise updated.
-
- + It is RECOMMENDED to list all hardcoded values used in code.
-
- + Not critical, but can hint at future improvements.
-
- + Documentation MUST list all files or directories read
- (so caller can make sure their content is ready).
-
- + Documentation MUST list all files or directories updated
- (created, deleted, emptied, otherwise edited).
-
- + Documentation SHOULD list all functions called (so reader can look them up).
-
- + Documentation SHOULD mention where are the functions defined,
- if not in the current file.
-
- + Documentation SHOULD list all external commands executed.
-
- + Because their behavior can change "out of bounds", meaning
- the contributor changing the implementation of the extrenal command
- can be unaware of this particular function interested in its side effects.
-
- + Documentation SHOULD explain exit code (coming from
- the last executed command).
-
- + Usually, most functions SHOULD be "pass or die",
- but some callers MAY be interested in nonzero exit codes
- without using global variables to store them.
-
- + Remember, "exit 1" ends not only the function, but all scripts
- in the source chain, so code MUST NOT use it for other purposes.
-
- + Code SHOULD call "die" function instead. This way the caller can
- redefine that function, if there is a good reason for not exiting
- on function failure.
-
-## Entry Script Documentation
-
-+ After "set -exuo pipefail", high-level description SHALL come.
-
- + Entry scripts are rarely reused, so detailed side effects
- are OPTIONAL to document.
-
- + But code SHOULD document the primary side effects.
-
-+ Then SHALL come few commented lines to import the library with "die" function.
-
-+ Then block of "source" commands for sourcing other libraries needed SHALL be.
-
- + In alphabetical order, any "special" library SHOULD be
- in the previous block (for "die").
-
-+ Then block os commands processing arguments SHOULD be (if needed).
-
-+ Then SHALL come block of function calls (with parameters as needed).
-
-# Other General Recommendations
-
-+ Code SHOULD NOT not repeat itself, even in documentation:
-
- + For hardcoded values, a general description SHOULD be written
- (instead of copying the value), so when someone edits the value
- in the code, the description still applies.
-
- + If affected directory name is taken from a global variable,
- documentation MAY distribute the directory description
- over the two items.
-
- + If most of side effects come from an inner call,
- documentation MAY point the reader to the documentation
- of the called function (instead of listing all the side effects).
-
-+ But documentation SHOULD repeat it if the information crosses functions.
-
- + Item description MUST NOT be skipped just because the reader
- should have read parent/child documentation already.
-
- + Frequently it is RECOMMENDED to copy&paste item descriptions
- between functions.
-
- + But sometimes it is RECOMMENDED to vary the descriptions. For example:
-
- + A global variable setter MAY document how does it figure out the value
- (without caring about what it will be used for by other functions).
-
- + A global variable reader MAY document how does it use the value
- (without caring about how has it been figured out by the setter).
-
-+ When possible, Bash code SHOULD be made to look like Python
- (or Robot Framework). Those are three primary languages CSIT code relies on,
- so it is nicer for the readers to see similar expressions when possible.
- Examples:
-
- + Code MUST use indentation, 1 level is 4 spaces.
-
- + Code SHOULD use "if" instead of "&&" constructs.
-
- + For comparisons, code SHOULD use operators such as "!=" (needs "[[").
-
-+ Code MUST NOT use more than 80 characters per line.
-
- + If long external command invocations are needed,
- code SHOULD use array variables to shorten them.
-
- + If long strings (or arrays) are needed, code SHOULD use "+=" operator
- to grow the value over multiple lines.
-
- + If "|| die" does not fit with the command, code SHOULD use curly braces:
-
- + Current line has "|| {",
-
- + Next line has the die commands (indented one level deeper),
-
- + Final line closes with "}" at original intent level.
diff --git a/docs/content/introduction/branches.md b/docs/content/introduction/branches.md
deleted file mode 100644
index 20759b9c78..0000000000
--- a/docs/content/introduction/branches.md
+++ /dev/null
@@ -1,192 +0,0 @@
----
-bookHidden: true
-title: "Git Branches in CSIT"
----
-
-# Git Branches in CSIT
-
-## Overview
-
-This document describes how to create and remove git branches in CSIT project.
-
-To be able to perform everything described in this file, you must be **logged
-in as a committer**.
-
-## Operational Branches
-
-For more information about operational branches see
-[CSIT/Branching Strategy](https://wiki.fd.io/view/CSIT/Branching_Strategy) and
-[CSIT/Jobs](https://wiki.fd.io/view/CSIT/Jobs) on
-[fd.io](https://fd.io) [wiki](https://wiki.fd.io/view/CSIT) pages.
-
-> Note: The branch `rls2009_lts` is used here only as an example.
-
-### Pre-requisites
-
-1. The last builds of weekly and semiweekly jobs must finish with status
- *"Success"*.
-1. If any of watched jobs failed, try to find the root cause, fix it and run it
- again.
-
-The watched jobs are:
-
-- master:
- - [csit-vpp-device-master-ubuntu1804-1n-skx-weekly](https://jenkins.fd.io/view/csit/job/csit-vpp-device-master-ubuntu1804-1n-skx-weekly)
- - [csit-vpp-device-master-ubuntu1804-1n-skx-semiweekly](https://jenkins.fd.io/view/csit/job/csit-vpp-device-master-ubuntu1804-1n-skx-semiweekly)
-- 2009_lts:
- - [csit-vpp-device-2009_lts-ubuntu1804-1n-skx-weekly](https://jenkins.fd.io/view/csit/job/csit-vpp-device-2009_lts-ubuntu1804-1n-skx-weekly)
- - [csit-vpp-device-2009_lts-ubuntu1804-1n-skx-semiweekly](https://jenkins.fd.io/view/csit/job/csit-vpp-device-2009_lts-ubuntu1804-1n-skx-semiweekly)
-
-### Procedure
-
-**A. CSIT Operational Branch**
-1. Take the revision string from the last successful build of the **weekly**
- job, e.g. **Revision**: 0f9b20775b4a656b67c7039e2dda4cf676af2b21.
-1. Open [Gerrit](https://gerrit.fd.io).
-1. Go to
- [Browse --> Repositories --> csit --> Branches](https://gerrit.fd.io/r/admin/repos/csit,branches).
-1. Click `CREATE NEW`.
-1. Fill in the revision number and the name of the new operational branch. Its
- format is: `oper-YYMMDD` for master and `oper-rls{RELEASE}-{YYMMDD}` or
- `oper-rls{RELEASE}_lts-{YYMMDD}` for release branches.
-1. Click "CREATE".
-1. If needed, delete old operational branches by clicking "DELETE".
-
-**B. VPP Stable version**
-1. Open the console log of the last successful **semiweekly** build and search
- for VPP version (e.g. vpp_21 ...).
-1. You should find the string with this structure:
- `vpp_21.01-rc0~469-g7acab3790~b368_amd64.deb`
-1. Modify [VPP_STABLE_VER_UBUNTU_BIONIC](../../VPP_STABLE_VER_UBUNTU_BIONIC)
- and [VPP_STABLE_VER_CENTOS](../../VPP_STABLE_VER_CENTOS) files.
-1. Use a string with the build number, e.g. `21.01-rc0~469_g7acab3790~b129`
- for [VPP_STABLE_VER_CENTOS](../../VPP_STABLE_VER_CENTOS) and a string
- without the build number, e.g. `21.01-rc0~469_g7acab3790` for
- [VPP_STABLE_VER_UBUNTU_BIONIC](../../VPP_STABLE_VER_UBUNTU_BIONIC).
-1. Update the stable versions in master and in all LTS branches.
-
-## Release Branches
-
-> Note: VPP release 21.01 is used here only as an example.
-
-### Pre-requisites
-
-1. VPP release manager sends the information email to announce that the RC1
- milestone for VPP {release}, e.g. 21.01, is complete, and the artifacts are
- available.
-1. The artifacts (*.deb and *.rpm) should be available at
- `https://packagecloud.io/fdio/{release}`. For example see artifacts for the
- [VPP release 20.01](https://packagecloud.io/fdio/2101). The last available
- build is to be used.
-1. All CSIT patches for the release are merged in CSIT master branch.
-
-### Procedure
-
-**A. Release branch**
-
-1. Open [Gerrit](https://gerrit.fd.io).
-1. Go to
- [Browse --> Repositories --> csit --> Branches](https://gerrit.fd.io/r/admin/repos/csit,branches).
-1. Save the revision string of master for further use.
-1. Click `CREATE NEW`.
-1. Fill in the revision number and the name of the new release branch. Its
- format is: `rlsYYMM`, e.g. rls2101.
-1. Click "CREATE".
-
-**B. Jenkins jobs**
-
-See ["Add CSIT rls2101 branch"](https://gerrit.fd.io/r/c/ci-management/+/30439)
-and ["Add report jobs to csit rls2101 branch"](https://gerrit.fd.io/r/c/ci-management/+/30462)
-patches as an example.
-
-1. [csit.yaml](https://github.com/FDio/ci-management/blob/master/jjb/csit/csit.yaml):
- Documentation of the source code and the Report
- - Add release branch (rls2101) for `csit-docs-merge-{stream}` and
- `csit-report-merge-{stream}` (project --> stream).
-1. [csit-perf.yaml](https://github.com/FDio/ci-management/blob/master/jjb/csit/csit-perf.yaml):
- Verify jobs
- - Add release branch (rls2101) to `project --> jobs -->
- csit-vpp-perf-verify-{stream}-{node-arch} --> stream`.
- - Add release branch (rls2101) to `project --> project: 'csit' --> stream`.
- - Add release branch (rls2101) to `project --> project: 'csit' --> stream_report`.
-1. [csit-tox.yaml](https://github.com/FDio/ci-management/blob/master/jjb/csit/csit-tox.yaml):
- tox
- - Add release branch (rls2101) to `project --> stream`.
-1. [csit-vpp-device.yaml](https://github.com/FDio/ci-management/blob/master/jjb/csit/csit-vpp-device.yaml):
- csit-vpp-device
- - Add release branch (rls2101) to `project --> jobs (weekly / semiweekly) --> stream`.
- - Add release branch (rls2101) to `project --> project: 'csit' --> stream`.
-
-**C. VPP Stable version**
-
-See the patch
-[Update of VPP_REPO_URL and VPP_STABLE_VER files](https://gerrit.fd.io/r/c/csit/+/30461)
-and / or
-[rls2101: Update VPP_STABLE_VER files to release version](https://gerrit.fd.io/r/c/csit/+/30976)
-as an example.
-
-1. Find the last successful build on the
- [Package Cloud](https://packagecloud.io) for the release, e.g.
- [VPP release 20.01](https://packagecloud.io/fdio/2101).
-1. Clone the release branch to your PC:
- `git clone --depth 1 ssh://<user>@gerrit.fd.io:29418/csit --branch rls{RELEASE}`
-1. Modify [VPP_STABLE_VER_UBUNTU_BIONIC](../../VPP_STABLE_VER_UBUNTU_BIONIC)
- and [VPP_STABLE_VER_CENTOS](../../VPP_STABLE_VER_CENTOS) files with the last
- successful build.
-1. Modify [VPP_REPO_URL](../../VPP_REPO_URL) to point to the new release, e.g.
- `https://packagecloud.io/install/repositories/fdio/2101`.
-1. You can also modify the [.gitreview](../../.gitreview) file and set the new
- default branch.
-1. Wait until the verify jobs
- - [csit-vpp-device-2101-ubuntu1804-1n-skx](https://jenkins.fd.io/job/csit-vpp-device-2101-ubuntu1804-1n-skx)
- - [csit-vpp-device-2101-ubuntu1804-1n-tx2](https://jenkins.fd.io/job/csit-vpp-device-2101-ubuntu1804-1n-tx2)
-
- successfully finish and merge the patch.
-
-**D. CSIT Operational Branch**
-
-1. Manually start (Build with Parameters) the weekly job
- [csit-vpp-device-2101-ubuntu1804-1n-skx-weekly](https://jenkins.fd.io/view/csit/job/csit-vpp-device-2101-ubuntu1804-1n-skx-weekly)
-1. When it successfully finishes, take the revision string e.g. **Revision**:
- 876b6c1ae05bfb1ad54ff253ea021f3b46780fd4 to create a new operational branch
- for the new release.
-1. Open [Gerrit](https://gerrit.fd.io).
-1. Go to
- [Browse --> Repositories --> csit --> Branches](https://gerrit.fd.io/r/admin/repos/csit,branches).
-1. Click `CREATE NEW`.
-1. Fill in the revision number and the name of the new operational branch. Its
- format is: `oper-rls{RELEASE}-YYMMDD` e.g. `oper-rls2101-201217`.
-1. Click "CREATE".
-1. Manually start (Build with Parameters) the semiweekly job
- [csit-vpp-device-2101-ubuntu1804-1n-skx-semiweekly](https://jenkins.fd.io/view/csit/job/csit-vpp-device-2101-ubuntu1804-1n-skx-semiweekly)
-1. When it successfully finishes check in console log if it used the right VPP
- version (search for `VPP_VERSION=`) from the right repository (search for
- `REPO_URL=`).
-
-**E. Announcement**
-
-If everything is as it should be, send the announcement email to
-`csit-dev@lists.fd.io` mailing list.
-
-*Example:*
-
-Subject:
-```text
-CSIT rls2101 branch pulled out
-```
-
-Body:
-```text
-CSIT rls2101 branch [0] is created and fully functional.
-
-Corresponding operational branch (oper-rls2101-201217) has been created too.
-
-We are starting dry runs for performance ndrpdr iterative tests to get initial
-ndrpdr values with available rc1 packages as well as to test all the infra
-before starting report data collection runs.
-
-Regards,
-<signature>
-
-[0] https://git.fd.io/csit/log/?h=rls2101
-```
diff --git a/docs/content/introduction/dashboard_history.md b/docs/content/introduction/dashboard_history.md
deleted file mode 100644
index f7f9db576a..0000000000
--- a/docs/content/introduction/dashboard_history.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: "Dashboard History"
-weight: 1
----
-
-# Dashboard History
-
-FD.io {{< release_csit >}} Dashboard History and per .[ww] revision changes are
-listed below.
-
- **.[ww] Revision** | **Changes**
---------------------|------------------
- .10 | Initial revision
-
-FD.io CSIT Revision follow CSIT-[yy][mm].[ww] numbering format, with version
-denoted by concatenation of two digit year [yy] and two digit month [mm], and
-maintenance revision identified by two digit calendar week number [ww].
diff --git a/docs/content/introduction/design.md b/docs/content/introduction/design.md
deleted file mode 100644
index ba31477c4d..0000000000
--- a/docs/content/introduction/design.md
+++ /dev/null
@@ -1,148 +0,0 @@
----
-title: "Design"
-weight: 3
----
-
-# Design
-
-FD.io CSIT system design needs to meet continuously expanding requirements of
-FD.io projects including VPP, related sub-systems (e.g. plugin applications,
-DPDK drivers) and FD.io applications (e.g. DPDK applications), as well as
-growing number of compute platforms running those applications. With CSIT
-project scope and charter including both FD.io continuous testing AND
-performance trending/comparisons, those evolving requirements further amplify
-the need for CSIT framework modularity, flexibility and usability.
-
-## Design Hierarchy
-
-CSIT follows a hierarchical system design with SUTs and DUTs at the bottom level
-of the hierarchy, presentation level at the top level and a number of functional
-layers in-between. The current CSIT system design including CSIT framework is
-depicted in the figure below.
-
-{{< figure src="/cdocs/csit_design_picture.svg" title="CSIT Design" >}}
-
-A brief bottom-up description is provided here:
-
-1. SUTs, DUTs, TGs
- - SUTs - Systems Under Test;
- - DUTs - Devices Under Test;
- - TGs - Traffic Generators;
-2. Level-1 libraries - Robot and Python
- - Lowest level CSIT libraries abstracting underlying test environment, SUT,
- DUT and TG specifics;
- - Used commonly across multiple L2 KWs;
- - Performance and functional tests:
- - L1 KWs (KeyWords) are implemented as RF libraries and Python
- libraries;
- - Performance TG L1 KWs:
- - All L1 KWs are implemented as Python libraries:
- - Support for TRex only today;
- - CSIT IXIA drivers in progress;
- - Performance data plane traffic profiles:
- - TG-specific stream profiles provide full control of:
- - Packet definition - layers, MACs, IPs, ports, combinations thereof
- e.g. IPs and UDP ports;
- - Stream definitions - different streams can run together, delayed,
- one after each other;
- - Stream profiles are independent of CSIT framework and can be used
- in any T-rex setup, can be sent anywhere to repeat tests with
- exactly the same setup;
- - Easily extensible - one can create a new stream profile that meets
- tests requirements;
- - Same stream profile can be used for different tests with the same
- traffic needs;
- - Functional data plane traffic scripts:
- - Scapy specific traffic scripts;
-3. Level-2 libraries - Robot resource files:
- - Higher level CSIT libraries abstracting required functions for executing
- tests;
- - L2 KWs are classified into the following functional categories:
- - Configuration, test, verification, state report;
- - Suite setup, suite teardown;
- - Test setup, test teardown;
-4. Tests - Robot:
- - Test suites with test cases;
- - Performance tests using physical testbed environment:
- - VPP;
- - DPDK-Testpmd;
- - DPDK-L3Fwd;
- - Tools:
- - Documentation generator;
- - Report generator;
- - Testbed environment setup ansible playbooks;
- - Operational debugging scripts;
-
-5. Test Lifecycle Abstraction
-
-A well coded test must follow a disciplined abstraction of the test
-lifecycles that includes setup, configuration, test and verification. In
-addition to improve test execution efficiency, the commmon aspects of
-test setup and configuration shared across multiple test cases should be
-done only once. Translating these high-level guidelines into the Robot
-Framework one arrives to definition of a well coded RF tests for FD.io
-CSIT. Anatomy of Good Tests for CSIT:
-
-1. Suite Setup - Suite startup Configuration common to all Test Cases in suite:
- uses Configuration KWs, Verification KWs, StateReport KWs;
-2. Test Setup - Test startup Configuration common to multiple Test Cases: uses
- Configuration KWs, StateReport KWs;
-3. Test Case - uses L2 KWs with RF Gherkin style:
- - prefixed with {Given} - Verification of Test setup, reading state: uses
- Configuration KWs, Verification KWs, StateReport KWs;
- - prefixed with {When} - Test execution: Configuration KWs, Test KWs;
- - prefixed with {Then} - Verification of Test execution, reading state: uses
- Verification KWs, StateReport KWs;
-4. Test Teardown - post Test teardown with Configuration cleanup and
- Verification common to multiple Test Cases - uses: Configuration KWs,
- Verification KWs, StateReport KWs;
-5. Suite Teardown - Suite post-test Configuration cleanup: uses Configuration
- KWs, Verification KWs, StateReport KWs;
-
-## RF Keywords Functional Classification
-
-CSIT RF KWs are classified into the functional categories matching the test
-lifecycle events described earlier. All CSIT RF L2 and L1 KWs have been grouped
-into the following functional categories:
-
-1. Configuration;
-2. Test;
-3. Verification;
-4. StateReport;
-5. SuiteSetup;
-6. TestSetup;
-7. SuiteTeardown;
-8. TestTeardown;
-
-## RF Keywords Naming Guidelines
-
-Readability counts: "..code is read much more often than it is written."
-Hence following a good and consistent grammar practice is important when
-writing Robot Framework KeyWords and Tests. All CSIT test cases
-are coded using Gherkin style and include only L2 KWs references. L2 KWs are
-coded using simple style and include L2 KWs, L1 KWs, and L1 python references.
-To improve readability, the proposal is to use the same grammar for both
-Robot Framework KW styles, and to formalize the grammar of English
-sentences used for naming the Robot Framework KWs. Robot
-Framework KWs names are short sentences expressing functional description of
-the command. They must follow English sentence grammar in one of the following
-forms:
-
-1. **Imperative** - verb-object(s): *"Do something"*, verb in base form.
-2. **Declarative** - subject-verb-object(s): *"Subject does something"*, verb in
- a third-person singular present tense form.
-3. **Affirmative** - modal_verb-verb-object(s): *"Subject should be something"*,
- *"Object should exist"*, verb in base form.
-4. **Negative** - modal_verb-Not-verb-object(s): *"Subject should not be
- something"*, *"Object should not exist"*, verb in base form.
-
-Passive form MUST NOT be used. However a usage of past participle as an
-adjective is okay. See usage examples provided in the Coding guidelines
-section below. Following sections list applicability of the above
-grammar forms to different Robot Framework KW categories. Usage
-examples are provided, both good and bad.
-
-## Coding Guidelines
-
-Coding guidelines can be found on
-[Design optimizations wiki page](https://wiki.fd.io/view/CSIT/Design_Optimizations). \ No newline at end of file
diff --git a/docs/content/introduction/model_schema.md b/docs/content/introduction/model_schema.md
deleted file mode 100644
index ae3ba38fd7..0000000000
--- a/docs/content/introduction/model_schema.md
+++ /dev/null
@@ -1,60 +0,0 @@
----
-bookHidden: true
-title: "Model Schema"
----
-
-# Model Schema
-
-This document describes what is currently implemented in CSIT,
-especially the export side (UTI), not import side (PAL).
-
-## Version
-
-This document is valid for CSIT model version 1.4.0.
-
-It is recommended to use semantic versioning: https://semver.org/
-That means, if the new model misses a field present in the old model,
-bump the major version. If the new model adds a field
-not present in the old model, bump the minor version.
-Any other edit in the implmenetation (or documentation) bumps the patch version.
-If you change value type or formatting,
-consider whether the parser (PAL) understands the new value correctly.
-Renaming a field is the same as adding a new one and removing the old one.
-Parser (PAL) has to know exact major version and minimal minor version,
-and unless bugs, it can ignore patch version and bumped minor version.
-
-## UTI
-
-UTI stands for Unified Test Interface.
-It mainly focuses on exporting information gathered during test run
-into JSON output files.
-
-### Output Structure
-
-UTI outputs come in filesystem tree structure (single tree), where directories
-correspond to suite levels and files correspond to suite setup, suite teardown
-or any test case at this level of suite.
-The directory name comes from SUITE_NAME Robot variable (the last part
-as the previous parts are higher level suites), converted to lowercase.
-If the suite name contains spaces (Robot converts underscores to spaces),
-they are replaced with underscores.
-
-The filesystem tree is rooted under tests/ (as suites in git are there),
-and for each component (test case, suite setup, suite teardown).
-
-Although we expect only ASCII text in the exported files,
-we manipulate files using UTF-8 encoding,
-so if Robot Framework uses a non-ascii character, it will be handled.
-
-### JSON schemas
-
-CSIT model is formally defined as a collection of JSON schema documents,
-one for each output file type.
-
-The current version specifies only one output file type:
-Info output for test case.
-
-The authoritative JSON schema documents are in JSON format.
-Git repository also contains YAML formatted document and conversion utility,
-which simplifies maintaining of the JSON document
-(no need to track brackets and commas), but are not authoritative.
diff --git a/docs/content/introduction/perf_triggers_design.md b/docs/content/introduction/perf_triggers_design.md
deleted file mode 100644
index 445846f4d9..0000000000
--- a/docs/content/introduction/perf_triggers_design.md
+++ /dev/null
@@ -1,44 +0,0 @@
----
-bookHidden: true
-title: "Performance Triggers Design"
----
-
-# Performance Triggers Design
-
-*Syntax*
- trigger_keyword [{tag1} {tag2}AND{tag3} !{tag4} !{tag5}]
-
-*Inputs*
- - trigger_keyword for vpp-* jobs: 'perftest'
- - trigger_keyword for csit-* jobs: 'csit-perftest'
- - tags: existing CSIT tags [4]_ i.e. ip4base, ip6base, iacldst, memif
-
-Set of default tags appended to user input, under control by CSIT
- - always-on for vpp-csit*.job: 'mrr' 'nic_intel_x710-da2' '1t1c'
- - if input with no tags, following set applied:
- - 'mrrANDnic_intel-x710AND1t1cAND64bANDip4base'
- - 'mrrANDnic_intel-x710AND1t1cAND78bANDip6base'
- - 'mrrANDnic_intel-x710AND1t1cAND64bANDl2bdbase'
-
-Examples
- input: 'perftest'
- expanded: 'mrrANDnic_intel_x710-da2AND1t1cAND64bANDl2bdbase mrrANDnic_intel_x710-da2AND1t1cAND64bANDip4base mrrANDnic_intel_x710-da2AND1t1cAND78bANDip6base'
- input: 'perftest l2bdbase l2xcbase'
- expanded: 'mrrANDnic_intel_x710-da2ANDl2bdbase mrrANDnic_intel_x710-da2ANDl2xcbase'
- input: 'perftest ip4base !feature'
- expanded: 'mrrANDnic_intel_x710-da2ANDip4base' not 'feature'
- input: 'perftest ip4base !feature !lbond_dpdk'
- expanded: 'mrrANDnic_intel_x710-da2ANDip4base' not 'feature' not 'lbond_dpdk'
- input: 'perftestxyx ip4base !feature !lbond_dpdk'
- invalid: detected as error
- input: 'perftestip4base !feature !lbond_dpdk'
- invalid: detected as error
- input: 'perftest ip4base!feature!lbond_dpdk'
- invalid expand: 'mrrANDnic_intel_x710-da2ANDip4base!feature!lbond_dpdk'
- execution of RobotFramework will fail
-
-Constrains
- Trigger keyword must be different for every job to avoid running multiple jobs
- at once. Trigger keyword must not be substring of job name or any other
- message printed by JJB bach to gerrit message which can lead to recursive
- execution.
diff --git a/docs/content/introduction/test_code_guidelines.md b/docs/content/introduction/test_code_guidelines.md
deleted file mode 100644
index 9707d63ea6..0000000000
--- a/docs/content/introduction/test_code_guidelines.md
+++ /dev/null
@@ -1,294 +0,0 @@
----
-bookHidden: true
-title: "CSIT Test Code Guidelines"
----
-
-# CSIT Test Code Guidelines
-
-The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
-"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
-"MAY", and "OPTIONAL" in this document are to be interpreted as
-described in [BCP 14](https://tools.ietf.org/html/bcp14),
-[RFC2119](https://tools.ietf.org/html/rfc2119),
-[RFC8174](https://tools.ietf.org/html/rfc8174)
-when, and only when, they appear in all capitals, as shown here.
-
-This document SHALL describe guidelines for writing reliable, maintainable,
-reusable and readable code for CSIT.
-
-# RobotFramework test case files and resource files
-
-+ General
-
- + Contributors SHOULD look at requirements.txt in root CSIT directory
- for the currently used Robot Framework version.
- Contributors SHOULD read
- [Robot Framework User Guide](http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html)
- for more details.
-
- + RobotFramework test case files and resource files
- SHALL use special extension .robot
-
- + Pipe and space separated file format (without trailing pipe
- and without pipe aligning) SHALL be used.
- Tabs are invisible characters, which are error prone.
- 4-spaces separation is prone to accidental double space
- acting as a separator.
-
- + Files SHALL be encoded in UTF-8 (the default Robot source file encoding).
- Usage of non-ASCII characters SHOULD be avoided if possible.
- It is RECOMMENDED to
- [escape](http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#escaping)
- non-ASCII characters.
-
- + Line length SHALL be limited to 80 characters.
-
- + There SHALL be licence text present at the beginning of each file.
-
- + Copy-pasting of the code NOT RECOMMENDED practice, any code that could be
- re-used SHOULD be put into a library (Robot resource, Python library, ...).
-
-+ Test cases
-
- + It is RECOMMENDED to use data-driven test case definitions
- anytime suite contains test cases similar in structure.
- Typically, a suite SHOULD define a Template keyword, and test cases
- SHOULD only specify tags and argument values
-
- *** Settings ***
- | Test Template | Local Template
- ...
-
- *** Test Cases ***
- | tc01-64B-1c-eth-l2patch-mrr
- | | [Tags] | 64B | 1C
- | | framesize=${64} | phy_cores=${1}
-
- + Test case templates (or testcases) SHALL be written in Behavior-driven style
- i.e. in readable English, so that even non-technical project stakeholders
- can understand it
-
- *** Keywords ***
- | Local Template
- | | [Documentation]
- | | ... | [Cfg] DUT runs L2 patch config with ${phy_cores} phy core(s).
- | | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
- | | ...
- | | ... | *Arguments:*
- | | ... | - frame_size - Framesize in Bytes in integer
- | | ... | or string (IMIX_v4_1). Type: integer, string
- | | ... | - phy_cores - Number of physical cores. Type: integer
- | | ... | - rxq - Number of RX queues, default value: ${None}.
- | | ... | Type: integer
- | | ...
- | | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
- | | ...
- | | Set Test Variable | \${frame_size}
- | | ...
- | | Given Add worker threads and rxqueues to all DUTs
- | | ... | ${phy_cores} | ${rxq}
- | | And Add PCI devices to all DUTs
- | | Set Max Rate And Jumbo And Handle Multi Seg
- | | And Apply startup configuration on all VPP DUTs
- | | When Initialize L2 patch
- | | Then Find NDR and PDR intervals using optimized search
-
- + Every suite and test case template (or testcase)
- SHALL contain short documentation.
- Generated CSIT web pages display the documentation.
-
- + You SHOULD NOT use hard-coded constants.
- It is RECOMMENDED to use the variable table
- (\*\*\*Variables\*\*\*) to define test case specific values.
- You SHALL use the assignment sign = after the variable name
- to make assigning variables slightly more explicit
-
- *** Variables ***
- | ${traffic_profile}= | trex-stl-2n-ethip4-ip4src254
-
- + Common test case specific settings of the test environment SHALL be done
- in Test Setup keyword defined in the Setting table.
-
- + Run Keywords construction is RECOMMENDED if it is more readable
- than a keyword.
-
- + Separate keyword is RECOMMENDED if the construction is less readable.
-
- + Post-test cleaning and processing actions SHALL be done in Test Teardown
- part of the Setting table (e.g. download statistics from VPP nodes).
- This part is executed even if the test case has failed. On the other hand
- it is possible to disable the tear-down from command line, thus leaving
- the system in “broken” state for investigation.
-
- + Every testcase SHALL be correctly tagged. List of defined tags is in
- csit/docs/introduction/test_tag_documentation.rst
-
- + Whenever possible, common tags SHALL be set using Force Tags
- in Settings table.
-
- + User high-level keywords specific for the particular test suite
- SHOULD be implemented in the Keywords table of suitable Robot resource file
- to enable readability and code-reuse.
-
- + Such keywords MAY be implemented in Keywords table of the suite instead,
- if the contributor believes no other test will use such keywords.
- But this is NOT RECOMMENDED in general, as keywords in Resources
- are easier to maintain.
-
- + All test case names (and suite names) SHALL conform
- to current naming convention.
- https://wiki.fd.io/view/CSIT/csit-test-naming
-
- + Frequently, different suites use the same test case layout.
- It is RECOMMENDED to use autogeneration scripts available,
- possibly extending them if their current functionality is not sufficient.
-
-+ Resource files
-
- + SHALL be used to implement higher-level keywords that are used in test cases
- or other higher-level (or medium-level) keywords.
-
- + Every keyword SHALL contain Documentation where the purpose and arguments
- of the keyword are described. Also document types, return values,
- and any specific assumptions the particular keyword relies on.
-
- + A keyword usage example SHALL be the part of the Documentation.
- The example SHALL use pipe and space separated format
- (with escaped pipes and) with a trailing pipe.
-
- + The reason was possbile usage of Robot's libdoc tool
- to generate tests and resources documentation. In that case
- example keyword usage would be rendered in table.
-
- + Keyword name SHALL describe what the keyword does,
- specifically and in a reasonable length (“short sentence”).
-
- + Keyword names SHALL be short enough for call sites
- to fit within line length limit.
-
- + If a keyword argument has a most commonly used value, it is RECOMMENDED
- to set it as default. This makes keyword code longer,
- but suite code shorter, and readability (and maintainability)
- of suites SHALL always more important.
-
- + If there is intermediate data (created by one keyword, to be used
- by another keyword) of singleton semantics (it is clear that the test case
- can have at most one instance of such data, even if the instance
- is complex, for example ${nodes}), it is RECOMMENDED to store it
- in test variables. You SHALL document test variables read or written
- by a keyword. This makes the test template code less verbose.
- As soon as the data instance is not unique, you SHALL pass it around
- via arguments and return values explicitly (this makes lower level keywords
- more reusable and less bug prone).
-
- + It is RECOMMENDED to pass arguments explicitly via [Arguments] line.
- Setting test variables takes more space and is less explicit.
- Using arguments embedded in keyword name makes them less visible,
- and it makes it harder for the line containing the resulting long name
- to fit into the maximum character limit, so you SHOULD NOT use them.
-
-# Python library files
-
-+ General
-
- + SHALL be used to implement low-level keywords that are called from
- resource files (of higher-level keywords) or from test cases.
-
- + Higher-level keywords MAY be implemented in python library file too.
- it is RECOMMENDED especially in the case that their implementation
- in resource file would be too difficult or impossible,
- e.g. complex data structures or functional programming.
-
- + Every keyword, Python module, class, method, enum SHALL contain
- docstring with the short description and used input parameters
- and possible return value(s) or raised exceptions.
-
- + The docstrings SHOULD conform to
- [PEP 257](https://www.python.org/dev/peps/pep-0257/)
- and other quality standards.
-
- + CSIT contributions SHALL use a specific formatting for documenting
- arguments, return values and similar.
-
- + Keyword usage examples MAY be grouped and used
- in the class/module documentation string, to provide better overview
- of the usage and relationships between keywords.
-
- + Keyword name SHALL describe what the keyword does,
- specifically and in a reasonable length (“short sentence”).
- See https://wiki.fd.io/view/CSIT/csit-test-naming
-
- + Python implementation of a keyword is a function,
- so its name in the python library should be lowercase_with_underscores.
- Robot call sites should usename with first letter capitalized, and spaces.
-
-+ Coding
-
- + It is RECOMMENDED to use some standard development tool
- (e.g. PyCharm Community Edition) and follow
- [PEP-8](https://www.python.org/dev/peps/pep-0008/) recommendations.
-
- + All python code (not only Robot libraries) SHALL adhere to PEP-8 standard.
- This is reported by CSIT Jenkins verify job.
-
- + Indentation: You SHALL NOT use tab for indents!
- Indent is defined as four spaces.
-
- + Line length: SHALL be limited to 80 characters.
-
- + CSIT Python code assumes PYTHONPATH is set
- to the root of cloned CSIT git repository, creating a tree of sub-packages.
- You SHALL use that tree for importing, for example
-
- from resources.libraries.python.ssh import exec_cmd_no_error
-
- + Imports SHALL be grouped in the following order:
-
- 1. standard library imports,
- 2. related third party imports,
- 3. local application/library specific imports.
-
- You SHALL put a blank line between each group of imports.
-
- + You SHALL use two blank lines between top-level definitions,
- one blank line between method definitions.
-
- + You SHALL NOT execute any active code on library import.
-
- + You SHALL NOT use global variables inside library files.
-
- + You MAY define constants inside library files.
-
- + It is NOT RECOMMENDED to use hard-coded constants (e.g. numbers,
- paths without any description). It is RECOMMENDED to use
- configuration file(s), like /csit/resources/libraries/python/Constants.py,
- with appropriate comments.
-
- + The code SHALL log at the lowest possible level of implementation,
- for debugging purposes. You SHALL use same style for similar events.
- You SHALL keep logging as verbose as necessary.
-
- + You SHALL use the most appropriate exception not general one (Exception)
- if possible. You SHOULD create your own exception
- if necessary and implement there logging, level debug.
-
- + You MAY use RuntimeException for generally unexpected failures.
-
- + It is RECOMMENDED to use RuntimeError also for
- infrastructure failures, e.g. losing SSH connection to SUT.
-
- + You MAY use EnvironmentError and its cublasses instead,
- if the distinction is informative for callers.
-
- + It is RECOMMENDED to use AssertionError when SUT is at fault.
-
- + For each class (e.g. exception) it is RECOMMENDED to implement __repr__()
- which SHALL return a string usable as a constructor call
- (including repr()ed arguments).
- When logging, you SHOULD log the repr form, unless the internal structure
- of the object in question would likely result in too long output.
- This is helpful for debugging.
-
- + For composing and formatting strings, you SHOULD use .format()
- with named arguments.
- Example: "repr() of name: {name!r}".format(name=name)
diff --git a/docs/content/introduction/test_naming.md b/docs/content/introduction/test_naming.md
deleted file mode 100644
index 22e2c0bf8a..0000000000
--- a/docs/content/introduction/test_naming.md
+++ /dev/null
@@ -1,107 +0,0 @@
----
-title: "Test Naming"
-weight: 4
----
-
-# Test Naming
-
-## Background
-
-{{< release_csit >}} follows a common structured naming convention for all
-performance and system functional tests, introduced in CSIT 17.01.
-
-The naming should be intuitive for majority of the tests. Complete
-description of CSIT test naming convention is provided on
-[CSIT test naming wiki page](https://wiki.fd.io/view/CSIT/csit-test-naming).
-Below few illustrative examples of the naming usage for test suites across CSIT
-performance, functional and Honeycomb management test areas.
-
-## Naming Convention
-
-The CSIT approach is to use tree naming convention and to encode following
-testing information into test suite and test case names:
-
-1. packet network port configuration
- * port type, physical or virtual;
- * number of ports;
- * NIC model, if applicable;
- * port-NIC locality, if applicable;
-2. packet encapsulations;
-3. VPP packet processing
- * packet forwarding mode;
- * packet processing function(s);
-4. packet forwarding path
- * if present, network functions (processes, containers, VMs) and their
- topology within the computer;
-5. main measured variable, type of test.
-
-Proposed convention is to encode ports and NICs on the left (underlay),
-followed by outer-most frame header, then other stacked headers up to the
-header processed by vSwitch-VPP, then VPP forwarding function, then encap on
-vhost interface, number of vhost interfaces, number of VMs. If chained VMs
-present, they get added on the right. Test topology is expected to be
-symmetric, in other words packets enter and leave SUT through ports specified
-on the left of the test name. Here some examples to illustrate the convention
-followed by the complete legend, and tables mapping the new test filenames to
-old ones.
-
-## Naming Examples
-
-CSIT test suite naming examples (filename.robot) for common tested VPP
-topologies:
-
-1. **Physical port to physical port - a.k.a. NIC-to-NIC, Phy-to-Phy, P2P**
- * *PortNICConfig-WireEncapsulation-PacketForwardingFunction-
- PacketProcessingFunction1-...-PacketProcessingFunctionN-TestType*
- * *10ge2p1x520-dot1q-l2bdbasemaclrn-ndrdisc.robot* => 2 ports of 10GE on Intel
- x520 NIC, dot1q tagged Ethernet, L2 bridge-domain baseline switching with
- MAC learning, NDR throughput discovery.
- * *10ge2p1x520-ethip4vxlan-l2bdbasemaclrn-ndrchk.robot* => 2 ports of 10GE on
- Intel x520 NIC, IPv4 VXLAN Ethernet, L2 bridge-domain baseline switching
- with MAC learning, NDR throughput discovery.
- * *10ge2p1x520-ethip4-ip4base-ndrdisc.robot* => 2 ports of 10GE on Intel x520
- NIC, IPv4 baseline routed forwarding, NDR throughput discovery.
- * *10ge2p1x520-ethip6-ip6scale200k-ndrdisc.robot* => 2 ports of 10GE on Intel
- x520 NIC, IPv6 scaled up routed forwarding, NDR throughput discovery.
- * *10ge2p1x520-ethip4-ip4base-iacldstbase-ndrdisc.robot* => 2 ports of 10GE on
- Intel x520 NIC, IPv4 baseline routed forwarding, ingress Access Control
- Lists baseline matching on destination, NDR throughput discovery.
- * *40ge2p1vic1385-ethip4-ip4base-ndrdisc.robot* => 2 ports of 40GE on Cisco
- vic1385 NIC, IPv4 baseline routed forwarding, NDR throughput discovery.
- * *eth2p-ethip4-ip4base-func.robot* => 2 ports of Ethernet, IPv4 baseline
- routed forwarding, functional tests.
-2. **Physical port to VM (or VM chain) to physical port - a.k.a. NIC2VM2NIC,
- P2V2P, NIC2VMchain2NIC, P2V2V2P**
- * *PortNICConfig-WireEncapsulation-PacketForwardingFunction-
- PacketProcessingFunction1-...-PacketProcessingFunctionN-VirtEncapsulation-
- VirtPortConfig-VMconfig-TestType*
- * *10ge2p1x520-dot1q-l2bdbasemaclrn-eth-2vhost-1vm-ndrdisc.robot* => 2 ports
- of 10GE on Intel x520 NIC, dot1q tagged Ethernet, L2 bridge-domain switching
- to/from two vhost interfaces and one VM, NDR throughput discovery.
- * *10ge2p1x520-ethip4vxlan-l2bdbasemaclrn-eth-2vhost-1vm-ndrdisc.robot* => 2
- ports of 10GE on Intel x520 NIC, IPv4 VXLAN Ethernet, L2 bridge-domain
- switching to/from two vhost interfaces and one VM, NDR throughput discovery.
- * *10ge2p1x520-ethip4vxlan-l2bdbasemaclrn-eth-4vhost-2vm-ndrdisc.robot* => 2
- ports of 10GE on Intel x520 NIC, IPv4 VXLAN Ethernet, L2 bridge-domain
- switching to/from four vhost interfaces and two VMs, NDR throughput
- discovery.
- * *eth2p-ethip4vxlan-l2bdbasemaclrn-eth-2vhost-1vm-func.robot* => 2 ports of
- Ethernet, IPv4 VXLAN Ethernet, L2 bridge-domain switching to/from two vhost
- interfaces and one VM, functional tests.
-3. **API CRUD tests - Create (Write), Read (Retrieve), Update (Modify), Delete
- (Destroy) operations for configuration and operational data**
- * *ManagementTestKeyword-ManagementOperation-ManagedFunction1-...-
- ManagedFunctionN-ManagementAPI1-ManagementAPIN-TestType*
- * *mgmt-cfg-lisp-apivat-func* => configuration of LISP with VAT API calls,
- functional tests.
- * *mgmt-cfg-l2bd-apihc-apivat-func* => configuration of L2 Bridge-Domain with
- Honeycomb API and VAT API calls, functional tests.
- * *mgmt-oper-int-apihcnc-func* => reading status and operational data of
- interface with Honeycomb NetConf API calls, functional tests.
- * *mgmt-cfg-int-tap-apihcnc-func* => configuration of tap interfaces with
- Honeycomb NetConf API calls, functional tests.
- * *mgmt-notif-int-subint-apihcnc-func* => notifications of interface and
- sub-interface events with Honeycomb NetConf Notifications, functional tests.
-
-For complete description of CSIT test naming convention please refer to
-[CSIT test naming wiki page](https://wiki.fd.io/view/CSIT/csit-test-naming>).
diff --git a/docs/content/introduction/test_scenarios_overview.md b/docs/content/introduction/test_scenarios_overview.md
deleted file mode 100644
index 415ee3403f..0000000000
--- a/docs/content/introduction/test_scenarios_overview.md
+++ /dev/null
@@ -1,61 +0,0 @@
----
-title: "Test Scenarios Overview"
-weight: 2
----
-
-# Test Scenarios Overview
-
-FD.io CSIT Dashboard includes multiple test scenarios of VPP
-centric applications, topologies and use cases. In addition it also
-covers baseline tests of DPDK sample applications. Tests are executed in
-physical (performance tests) and virtual environments (functional
-tests).
-
-Brief overview of test scenarios covered in this documentation:
-
-1. **VPP Performance**: VPP performance tests are executed in physical
- FD.io testbeds, focusing on VPP network data plane performance in
- NIC-to-NIC switching topologies. VPP application runs in
- bare-metal host user-mode handling NICs. TRex is used as a traffic generator.
-2. **VPP Vhostuser Performance with KVM VMs**: VPP VM service switching
- performance tests using vhostuser virtual interface for
- interconnecting multiple NF-in-VM instances. VPP vswitch
- instance runs in bare-metal user-mode handling NICs and connecting
- over vhost-user interfaces to VM instances each running VPP with virtio
- virtual interfaces. Similarly to VPP Performance, tests are run across a
- range of configurations. TRex is used as a traffic generator.
-3. **VPP Memif Performance with LXC and Docker Containers**: VPP
- Container service switching performance tests using memif virtual
- interface for interconnecting multiple VPP-in-container instances.
- VPP vswitch instance runs in bare-metal user-mode handling NICs and
- connecting over memif (Slave side) interfaces to more instances of
- VPP running in LXC or in Docker Containers, both with memif
- interfaces (Master side). Similarly to VPP Performance, tests are
- run across a range of configurations. TRex is used as a traffic
- generator.
-4. **DPDK Performance**: VPP uses DPDK to drive the NICs and physical
- interfaces. DPDK performance tests are used as a baseline to
- profile performance of the DPDK sub-system. Two DPDK applications
- are tested: Testpmd and L3fwd. DPDK tests are executed in the same
- testing environment as VPP tests. DPDK Testpmd and L3fwd
- applications run in host user-mode. TRex is used as a traffic
- generator.
-5. **T-Rex Performance**: T-Rex perfomance tests are executed in physical
- FD.io testbeds, focusing on T-Rex data plane performance in NIC-to-NIC
- loopback topologies.
-6. **VPP Functional**: VPP functional tests are executed in virtual
- FD.io testbeds, focusing on VPP packet processing functionality,
- including both network data plane and in-line control plane. Tests
- cover vNIC-to-vNIC vNIC-to-nestedVM-to-vNIC forwarding topologies.
- Scapy is used as a traffic generator.
-
-All CSIT test data included in this report is auto-generated from Robot
-Framework json output files produced by Linux Foundation FD.io Jenkins jobs
-executed against {{< release_vpp >}} artifacts.
-
-FD.io CSIT system is developed using two main coding platforms: Robot
-Framework and Python. {{< release_csit >}} source code for the executed test
-suites is available in corresponding CSIT branch in the directory
-`./tests/<name_of_the_test_suite>`. A local copy of CSIT source code
-can be obtained by cloning CSIT git repository - `git clone
-https://gerrit.fd.io/r/csit`.
diff --git a/docs/content/introduction/test_tag_description.md b/docs/content/introduction/test_tag_description.md
deleted file mode 100644
index 630afa864e..0000000000
--- a/docs/content/introduction/test_tag_description.md
+++ /dev/null
@@ -1,863 +0,0 @@
----
-title: "Test Tags Descriptions"
-weight: 5
----
-
-# Test Tags Descriptions
-
-All CSIT test cases are labelled with Robot Framework tags used to allow for
-easy test case type identification, test case grouping and selection for
-execution. Following sections list currently used CSIT tags and their
-descriptions.
-
-## Testbed Topology Tags
-
-**2_NODE_DOUBLE_LINK_TOPO**
-
- 2 nodes connected in a circular topology with two links interconnecting
- the devices.
-
-**2_NODE_SINGLE_LINK_TOPO**
-
- 2 nodes connected in a circular topology with at least one link
- interconnecting devices.
-
-**3_NODE_DOUBLE_LINK_TOPO**
-
- 3 nodes connected in a circular topology with two links interconnecting
- the devices.
-
-**3_NODE_SINGLE_LINK_TOPO**
-
- 3 nodes connected in a circular topology with at least one link
- interconnecting devices.
-
-## Objective Tags
-
-**SKIP_PATCH**
-
- Test case(s) marked to not run in case of vpp-csit-verify (i.e. VPP patch)
- and csit-vpp-verify jobs (i.e. CSIT patch).
-
-**SKIP_VPP_PATCH**
-
- Test case(s) marked to not run in case of vpp-csit-verify (i.e. VPP patch).
-
-## Environment Tags
-
-**HW_ENV**
-
- DUTs and TGs are running on bare metal.
-
-**VM_ENV**
-
- DUTs and TGs are running in virtual environment.
-
-**VPP_VM_ENV**
-
- DUTs with VPP and capable of running Virtual Machine.
-
-## NIC Model Tags
-
-**NIC_Intel-X520-DA2**
-
- Intel X520-DA2 NIC.
-
-**NIC_Intel-XL710**
-
- Intel XL710 NIC.
-
-**NIC_Intel-X710**
-
- Intel X710 NIC.
-
-**NIC_Intel-XXV710**
-
- Intel XXV710 NIC.
-
-**NIC_Cisco-VIC-1227**
-
- VIC-1227 by Cisco.
-
-**NIC_Cisco-VIC-1385**
-
- VIC-1385 by Cisco.
-
-**NIC_Amazon-Nitro-50G**
-
- Amazon EC2 ENA NIC.
-
-## Scaling Tags
-
-**FIB_20K**
-
- 2x10,000 entries in single fib table
-
-**FIB_200K**
-
- 2x100,000 entries in single fib table
-
-**FIB_1M**
-
- 2x500,000 entries in single fib table
-
-**FIB_2M**
-
- 2x1,000,000 entries in single fib table
-
-**L2BD_1**
-
- Test with 1 L2 bridge domain.
-
-**L2BD_10**
-
- Test with 10 L2 bridge domains.
-
-**L2BD_100**
-
- Test with 100 L2 bridge domains.
-
-**L2BD_1K**
-
- Test with 1000 L2 bridge domains.
-
-**VLAN_1**
-
- Test with 1 VLAN sub-interface.
-
-**VLAN_10**
-
- Test with 10 VLAN sub-interfaces.
-
-**VLAN_100**
-
- Test with 100 VLAN sub-interfaces.
-
-**VLAN_1K**
-
- Test with 1000 VLAN sub-interfaces.
-
-**VXLAN_1**
-
- Test with 1 VXLAN tunnel.
-
-**VXLAN_10**
-
- Test with 10 VXLAN tunnels.
-
-**VXLAN_100*
-
- Test with 100 VXLAN tunnels.
-
-**VXLAN_1K**
-
- Test with 1000 VXLAN tunnels.
-
-**TNL_{t}**
-
- IPSec in tunnel mode - {t} tunnels.
-
-**SRC_USER_{u}**
-
- Traffic flow with {u} unique IPs (users) in one direction.
- {u}=(1,10,100,1000,2000,4000).
-
-**100_FLOWS**
-
- Traffic stream with 100 unique flows (10 IPs/users x 10 UDP ports) in one
- direction.
-
-**10k_FLOWS**
-
- Traffic stream with 10 000 unique flows (10 IPs/users x 1000 UDP ports) in
- one direction.
-
-**100k_FLOWS**
-
- Traffic stream with 100 000 unique flows (100 IPs/users x 1000 UDP ports) in
- one direction.
-
-**HOSTS_{h}**
-
- Stateless or stateful traffic stream with {h} client source IP4 addresses,
- usually with 63 flow differing in source port number. Could be UDP or TCP.
- If NAT is used, the clients are inside. Outside IP range can differ.
- {h}=(1024,4096,16384,65536,262144).
-
-**GENEVE4_{t}TUN**
-
- Test with {t} GENEVE IPv4 tunnel. {t}=(1,4,16,64,256,1024)
-
-## Test Category Tags
-
-**DEVICETEST*
-
- All vpp_device functional test cases.
-
-**PERFTEST**
-
- All performance test cases.
-
-## VPP Device Type Tags
-
-**SCAPY**
-
- All test cases that uses Scapy for packet generation and validation.
-
-## erformance Type Tags
-
-**NDRPDR**
-
- Single test finding both No Drop Rate and Partial Drop Rate simultaneously.
- The search is done by optimized algorithm which performs
- multiple trial runs at different durations and transmit rates.
- The results come from the final trials, which have duration of 30 seconds.
-
-**MRR**
-
- Performance tests where TG sends the traffic at maximum rate (line rate)
- and reports total sent/received packets over trial duration.
- The result is an average of 10 trials of 1 second duration.
-
-**SOAK**
-
- Performance tests using PLRsearch to find the critical load.
-
-**RECONF**
-
- Performance tests aimed to measure lost packets (time) when performing
- reconfiguration while full throughput offered load is applied.
-
-## Ethernet Frame Size Tags
-
-These are describing the traffic offered by Traffic Generator,
-"primary" traffic in case of asymmetric load.
-For traffic between DUTs, or for "secondary" traffic, see ${overhead} value.
-
-**{b}B**
-
- {b} Bytes frames used for test.
-
-**IMIX**
-
- IMIX frame sequence (28x 64B, 16x 570B, 4x 1518B) used for test.
-
-## Test Type Tags
-
-**BASE**
-
- Baseline test cases, no encapsulation, no feature(s) configured in tests.
- No scaling whatsoever, beyond minimum needed for RSS.
-
-**IP4BASE**
-
- IPv4 baseline test cases, no encapsulation, no feature(s) configured in
- tests. Minimal number of routes. Other quantities may be scaled.
-
-**IP6BASE**
-
- IPv6 baseline test cases, no encapsulation, no feature(s) configured in
- tests.
-
-**L2XCBASE**
-
- L2XC baseline test cases, no encapsulation, no feature(s) configured in
- tests.
-
-**L2BDBASE**
-
- L2BD baseline test cases, no encapsulation, no feature(s) configured in
- tests.
-
-**L2PATCH**
-
- L2PATCH baseline test cases, no encapsulation, no feature(s) configured in
- tests.
-
-**SCALE**
-
- Scale test cases. Other tags specify which quantities are scaled.
- Also applies if scaling is set on TG only (e.g. DUT works as IP4BASE).
-
-**ENCAP**
-
- Test cases where encapsulation is used. Use also encapsulation tag(s).
-
-**FEATURE**
-
- At least one feature is configured in test cases. Use also feature tag(s).
-
-**UDP**
-
- Tests which use any kind of UDP traffic (STL or ASTF profile).
-
-**TCP**
-
- Tests which use any kind of TCP traffic (STL or ASTF profile).
-
-**TREX**
-
- Tests which test trex traffic without any software DUTs in the traffic path.
-
-**UDP_UDIR**
-
- Tests which use unidirectional UDP traffic (STL profile only).
-
-**UDP_BIDIR**
-
- Tests which use bidirectional UDP traffic (STL profile only).
-
-**UDP_CPS**
-
- Tests which measure connections per second on minimal UDP pseudoconnections.
- This implies ASTF traffic profile is used.
- This tag selects specific output processing in PAL.
-
-**TCP_CPS**
-
- Tests which measure connections per second on empty TCP connections.
- This implies ASTF traffic profile is used.
- This tag selects specific output processing in PAL.
-
-**TCP_RPS**
-
- Tests which measure requests per second on empty TCP connections.
- This implies ASTF traffic profile is used.
- This tag selects specific output processing in PAL.
-
-**UDP_PPS**
-
- Tests which measure packets per second on lightweight UDP transactions.
- This implies ASTF traffic profile is used.
- This tag selects specific output processing in PAL.
-
-**TCP_PPS**
-
- Tests which measure packets per second on lightweight TCP transactions.
- This implies ASTF traffic profile is used.
- This tag selects specific output processing in PAL.
-
-**HTTP**
-
- Tests which use traffic formed of valid HTTP requests (and responses).
-
-**LDP_NGINX**
-
- LDP NGINX is un-modified NGINX with VPP via LD_PRELOAD.
-
-**NF_DENSITY**
-
- Performance tests that measure throughput of multiple VNF and CNF
- service topologies at different service densities.
-
-## NF Service Density Tags
-
-**CHAIN**
-
- NF service density tests with VNF or CNF service chain topology(ies).
-
-**PIPE**
-
- NF service density tests with CNF service pipeline topology(ies).
-
-**NF_L3FWDIP4**
-
- NF service density tests with DPDK l3fwd IPv4 routing as NF workload.
-
-**NF_VPPIP4**
-
- NF service density tests with VPP IPv4 routing as NF workload.
-
-**{r}R{c}C**
-
- Service density matrix locator {r}R{c}C, {r}Row denoting number of
- service instances, {c}Column denoting number of NFs per service
- instance. {r}=(1,2,4,6,8,10), {c}=(1,2,4,6,8,10).
-
-**{n}VM{t}T**
-
- Service density {n}VM{t}T, {n}Number of NF Qemu VMs, {t}Number of threads
- per NF.
-
-**{n}DCRt}T**
-
- Service density {n}DCR{t}T, {n}Number of NF Docker containers, {t}Number of
- threads per NF.
-
-**{n}_ADDED_CHAINS**
-
- {n}Number of chains (or pipelines) added (and/or removed)
- during RECONF test.
-
-## Forwarding Mode Tags
-
-**L2BDMACSTAT**
-
- VPP L2 bridge-domain, L2 MAC static.
-
-**L2BDMACLRN**
-
- VPP L2 bridge-domain, L2 MAC learning.
-
-**L2XCFWD**
-
- VPP L2 point-to-point cross-connect.
-
-**IP4FWD**
-
- VPP IPv4 routed forwarding.
-
-**IP6FWD**
-
- VPP IPv6 routed forwarding.
-
-**LOADBALANCER_MAGLEV**
-
- VPP Load balancer maglev mode.
-
-**LOADBALANCER_L3DSR**
-
- VPP Load balancer l3dsr mode.
-
-**LOADBALANCER_NAT4**
-
- VPP Load balancer nat4 mode.
-
-**N2N**
-
- Mode, where NICs from the same physical server are directly
- connected with a cable.
-
-## Underlay Tags
-
-**IP4UNRLAY**
-
- IPv4 underlay.
-
-**IP6UNRLAY**
-
- IPv6 underlay.
-
-**MPLSUNRLAY**
-
- MPLS underlay.
-
-## Overlay Tags
-
-**L2OVRLAY**
-
- L2 overlay.
-
-**IP4OVRLAY**
-
- IPv4 overlay (IPv4 payload).
-
-**IP6OVRLAY**
-
- IPv6 overlay (IPv6 payload).
-
-## Tagging Tags
-
-**DOT1Q**
-
- All test cases with dot1q.
-
-**DOT1AD**
-
- All test cases with dot1ad.
-
-## Encapsulation Tags
-
-**ETH**
-
- All test cases with base Ethernet (no encapsulation).
-
-**LISP**
-
- All test cases with LISP.
-
-**LISPGPE**
-
- All test cases with LISP-GPE.
-
-**LISP_IP4o4**
-
- All test cases with LISP_IP4o4.
-
-**LISPGPE_IP4o4**
-
- All test cases with LISPGPE_IP4o4.
-
-**LISPGPE_IP6o4**
-
- All test cases with LISPGPE_IP6o4.
-
-**LISPGPE_IP4o6**
-
- All test cases with LISPGPE_IP4o6.
-
-**LISPGPE_IP6o6**
-
- All test cases with LISPGPE_IP6o6.
-
-**VXLAN**
-
- All test cases with Vxlan.
-
-**VXLANGPE**
-
- All test cases with VXLAN-GPE.
-
-**GRE**
-
- All test cases with GRE.
-
-**GTPU**
-
- All test cases with GTPU.
-
-**GTPU_HWACCEL**
-
- All test cases with GTPU_HWACCEL.
-
-**IPSEC**
-
- All test cases with IPSEC.
-
-**WIREGUARD**
-
- All test cases with WIREGUARD.
-
-**SRv6**
-
- All test cases with Segment routing over IPv6 dataplane.
-
-**SRv6_1SID**
-
- All SRv6 test cases with single SID.
-
-**SRv6_2SID_DECAP**
-
- All SRv6 test cases with two SIDs and with decapsulation.
-
-**SRv6_2SID_NODECAP**
-
- All SRv6 test cases with two SIDs and without decapsulation.
-
-**GENEVE**
-
- All test cases with GENEVE.
-
-**GENEVE_L3MODE**
-
- All test cases with GENEVE tunnel in L3 mode.
-
-**FLOW**
-
- All test cases with FLOW.
-
-**FLOW_DIR**
-
- All test cases with FLOW_DIR.
-
-**FLOW_RSS**
-
- All test cases with FLOW_RSS.
-
-**NTUPLE**
-
- All test cases with NTUPLE.
-
-**L2TPV3**
-
- All test cases with L2TPV3.
-
-## Interface Tags
-
-**PHY**
-
- All test cases which use physical interface(s).
-
-**GSO**
-
- All test cases which uses Generic Segmentation Offload.
-
-**VHOST**
-
- All test cases which uses VHOST.
-
-**VHOST_1024**
-
- All test cases which uses VHOST DPDK driver with qemu queue size set
- to 1024.
-
-**VIRTIO**
-
- All test cases which uses VIRTIO native VPP driver.
-
-**VIRTIO_1024**
-
- All test cases which uses VIRTIO native VPP driver with qemu queue size set
- to 1024.
-
-**CFS_OPT**
-
- All test cases which uses VM with optimised scheduler policy.
-
-**TUNTAP*
-
- All test cases which uses TUN and TAP.
-
-**AFPKT**
-
- All test cases which uses AFPKT.
-
-**NETMAP**
-
- All test cases which uses Netmap.
-
-**MEMIF**
-
- All test cases which uses Memif.
-
-**SINGLE_MEMIF**
-
- All test cases which uses only single Memif connection per DUT. One DUT
- instance is running in container having one physical interface exposed to
- container.
-
-**LBOND**
-
- All test cases which uses link bonding (BondEthernet interface).
-
-**LBOND_DPDK**
-
- All test cases which uses DPDK link bonding.
-
-**LBOND_VPP**
-
- All test cases which uses VPP link bonding.
-
-**LBOND_MODE_XOR**
-
- All test cases which uses link bonding with mode XOR.
-
-**LBOND_MODE_LACP**
-
- All test cases which uses link bonding with mode LACP.
-
-**LBOND_LB_L34**
-
- All test cases which uses link bonding with load-balance mode l34.
-
-**LBOND_{n}L**
-
- All test cases which use {n} link(s) for link bonding.
-
-**DRV_{d}**
-
- All test cases which NIC Driver for DUT is set to {d}. Default is VFIO_PCI.
- {d}=(AVF, RDMA_CORE, VFIO_PCI, AF_XDP).
-
-**TG_DRV_{d}**
-
- All test cases which NIC Driver for TG is set to {d}. Default is IGB_UIO.
- {d}=(RDMA_CORE, IGB_UIO).
-
-**RXQ_SIZE_{n}**
-
- All test cases which RXQ size (RX descriptors) are set to {n}. Default is 0,
- which means VPP (API) default.
-
-**TXQ_SIZE_{n}**
-
- All test cases which TXQ size (TX descriptors) are set to {n}. Default is 0,
- which means VPP (API) default.
-
-## Feature Tags
-
-**IACLDST**
-
- iACL destination.
-
-**ADLALWLIST**
-
- ADL allowlist.
-
-**NAT44**
-
- NAT44 configured and tested.
-
-**NAT64**
-
- NAT44 configured and tested.
-
-**ACL**
-
- ACL plugin configured and tested.
-
-**IACL**
-
- ACL plugin configured and tested on input path.
-
-**OACL**
-
- ACL plugin configured and tested on output path.
-
-**ACL_STATELESS**
-
- ACL plugin configured and tested in stateless mode (permit action).
-
-**ACL_STATEFUL**
-
- ACL plugin configured and tested in stateful mode (permit+reflect action).
-
-**ACL1**
-
- ACL plugin configured and tested with 1 not-hitting ACE.
-
-**ACL10**
-
- ACL plugin configured and tested with 10 not-hitting ACEs.
-
-**ACL50**
-
- ACL plugin configured and tested with 50 not-hitting ACEs.
-
-**SRv6_PROXY**
-
- SRv6 endpoint to SR-unaware appliance via proxy.
-
-**SRv6_PROXY_STAT**
-
- SRv6 endpoint to SR-unaware appliance via static proxy.
-
-**SRv6_PROXY_DYN**
-
- SRv6 endpoint to SR-unaware appliance via dynamic proxy.
-
-**SRv6_PROXY_MASQ**
-
- SRv6 endpoint to SR-unaware appliance via masquerading proxy.
-
-## Encryption Tags
-
-**IPSECSW**
-
- Crypto in software.
-
-**IPSECHW**
-
- Crypto in hardware.
-
-**IPSECTRAN**
-
- IPSec in transport mode.
-
-**IPSECTUN**
-
- IPSec in tunnel mode.
-
-**IPSECINT**
-
- IPSec in interface mode.
-
-**AES**
-
- IPSec using AES algorithms.
-
-**AES_128_CBC**
-
- IPSec using AES 128 CBC algorithms.
-
-**AES_128_GCM**
-
- IPSec using AES 128 GCM algorithms.
-
-**AES_256_GCM**
-
- IPSec using AES 256 GCM algorithms.
-
-**HMAC**
-
- IPSec using HMAC integrity algorithms.
-
-**HMAC_SHA_256**
-
- IPSec using HMAC SHA 256 integrity algorithms.
-
-**HMAC_SHA_512**
-
- IPSec using HMAC SHA 512 integrity algorithms.
-
-**SCHEDULER**
-
- IPSec using crypto sw scheduler engine.
-
-**FASTPATH**
-
- IPSec policy mode with spd fast path enabled.
-
-## Client-Workload Tags
-
-**VM**
-
- All test cases which use at least one virtual machine.
-
-**LXC**
-
- All test cases which use Linux container and LXC utils.
-
-**DRC**
-
- All test cases which use at least one Docker container.
-
-**DOCKER**
-
- All test cases which use Docker as container manager.
-
-**APP**
-
- All test cases with specific APP use.
-
-## Container Orchestration Tags
-
-**{n}VSWITCH**
-
- {n} VPP running in {n} Docker container(s) acting as a VSWITCH.
- {n}=(1).
-
-**{n}VNF**
-
- {n} VPP running in {n} Docker container(s) acting as a VNF work load.
- {n}=(1).
-
-## Multi-Threading Tags
-
-**STHREAD**
-
- *Dynamic tag*.
- All test cases using single poll mode thread.
-
-**MTHREAD**
-
- *Dynamic tag*.
- All test cases using more then one poll mode driver thread.
-
-**{n}NUMA**
-
- All test cases with packet processing on {n} socket(s). {n}=(1,2).
-
-**{c}C**
-
- {c} worker thread pinned to {c} dedicated physical core; or if
- HyperThreading is enabled, {c}*2 worker threads each pinned to a separate
- logical core within 1 dedicated physical core. Main thread pinned to core 1.
- {t}=(1,2,4).
-
-**{t}T{c}C**
-
- *Dynamic tag*.
- {t} worker threads pinned to {c} dedicated physical cores. Main thread
- pinned to core 1. By default CSIT is configuring same amount of receive
- queues per interface as worker threads. {t}=(1,2,4,8), {t}=(1,2,4).
diff --git a/docs/content/introduction/testing_in_vagrant.md b/docs/content/introduction/testing_in_vagrant.md
deleted file mode 100644
index 34ca596d0a..0000000000
--- a/docs/content/introduction/testing_in_vagrant.md
+++ /dev/null
@@ -1,85 +0,0 @@
----
-bookHidden: true
-title: "Running CSIT locally in Vagrant"
----
-
-# Running CSIT locally in Vagrant
-
-## Install prerequisites
-
-Run all commands from command line.
-
-1. Download and install virtualbox from
- [official page](https://www.virtualbox.org/wiki/Downloads).
- To verify the installation, run VBoxManage
-
- - on windows
-
- "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" --version
-
- - on nix
-
- VBoxManage --version
- Tested version: 6.1.16r140961
-
-2. Download and install latest vagrant from
- [official page](https://www.vagrantup.com/downloads.html).
- To verify the installtion, run
-
- vagrant -v
- Tested version: Vagrant 2.2.15
-
-3. Install vagrant plugins::
-
- vagrant plugin install vagrant-vbguest
- vagrant plugin install vagrant-cachier
-
- If you are behind a proxy, install proxyconf plugin and update proxy
- settings in Vagrantfile::
-
- vagrant plugin install vagrant-proxyconf
-
-## Set up and run Vagrant virtualbox
-
-Before running following commands change working directory to Vagrant specific directory
-(from within root CSIT directory)
-
- cd csit.infra.vagrant
-
-This allows Vagrant to automatically find Vagrantfile and corresponding Vagrant environment.
-
-Start the provisioning
-
- vagrant up --provider virtualbox
-
-Your new VPP Device virtualbox machine will be created and configured.
-Master branch of csit project will be cloned inside virtual machine into
-/home/vagrant/csit folder.
-
-Once the process is finished, you can login to the box using
-
- vagrant ssh
-
-In case you need to completely rebuild the box and start from scratch,
-run these commands
-
- vagrant destroy -f
- vagrant up --provider virtualbox
-
-## Run tests
-
-From within the box run the tests using
-
- cd /home/vagrant/csit/resources/libraries/bash/entry
- ./bootstrap_vpp_device.sh csit-vpp-device-master-ubuntu2004-1n-vbox
-
-To run only selected tests based on TAGS, export environment variables before
-running the test suite
-
- export GERRIT_EVENT_TYPE="comment-added"
- export GERRIT_EVENT_COMMENT_TEXT="devicetest memif"
-
- # now it will run tests, selected based on tags
- ./bootstrap_vpp_device.sh csit-vpp-device-master-ubuntu2004-1n-vbox
-
-