FIX: NF_density tests
[csit.git] / README.md
1 # CSIT - Continuous System Integration Testing
2
3 1. [Architecture](#architecture)
4 1. [Directory Structure](#directory-structure)
5    1. [Tests](#tests)
6    1. [Keywords](#keywords)
7    1. [Other Resources](#other-resources)
8 1. [Quickstart](#quick-start)
9    1. [Vagrant](#vagrant)
10    1. [Physical Testbed](#physical-testbed)
11 1. [Report](#report)
12 1. [Trending](#trending)
13 1. [Code Documentation](#code-documentation)
14 1. [Coding Guidelines](#coding-guidelines)
15
16 ## Architecture
17
18 FD.io CSIT system design needs to meet continuously expanding requirements of
19 FD.io projects including VPP, related sub-systems (e.g. plugin applications,
20 DPDK drivers) and FD.io applications (e.g. DPDK applications), as well as
21 growing number of compute platforms running those applications. With CSIT
22 project scope and charter including both FD.io continuous testing AND
23 performance trending/comparisons, those evolving requirements further amplify
24 the need for CSIT framework modularity, flexibility and usability.
25
26 CSIT follows a hierarchical system design with SUTs and DUTs at the bottom level
27 of the hierarchy, presentation level at the top level and a number of functional
28 layers in-between. The current CSIT system design including CSIT framework is
29 depicted in the figure below.
30
31 ![csit design](docs/report/csit_framework_documentation/csit_design_picture.svg "CSIT architecture")
32
33 A brief bottom-up description is provided here:
34
35 1. SUTs, DUTs, TGs
36    - SUTs - Systems Under Test;
37    - DUTs - Devices Under Test;
38    - TGs - Traffic Generators;
39 1. Level-1 libraries - Robot and Python
40    - Lowest level CSIT libraries abstracting underlying test environment, SUT,
41      DUT and TG specifics;
42    - Used commonly across multiple L2 KWs;
43    - Performance and functional tests:
44      - L1 KWs (KeyWords) are implemented as RF libraries and Python
45        libraries;
46    - Performance TG L1 KWs:
47      - All L1 KWs are implemented as Python libraries:
48        - Support for TRex only today;
49    - Performance data plane traffic profiles:
50      - TG-specific stream profiles provide full control of:
51        - Packet definition – layers, MACs, IPs, ports, combinations thereof
52          e.g. IPs and UDP ports;
53        - Stream definitions - different streams can run together, delayed,
54          one after each other;
55        - Stream profiles are independent of CSIT framework and can be used
56          in any T-rex setup, can be sent anywhere to repeat tests with
57          exactly the same setup;
58        - Easily extensible – one can create a new stream profile that meets
59          tests requirements;
60        - Same stream profile can be used for different tests with the same
61          traffic needs;
62    - Functional data plane traffic scripts:
63      - Scapy specific traffic scripts;
64 1. Level-2 libraries - Robot resource files
65    - Higher level CSIT libraries abstracting required functions for executing
66      tests;
67    - L2 KWs are classified into the following functional categories:
68      - Configuration, test, verification, state report;
69      - Suite setup, suite teardown;
70      - Test setup, test teardown;
71 1. Tests - Robot
72    - Test suites with test cases;
73    - Performance tests using physical testbed environment:
74      - VPP;
75      - DPDK-Testpmd;
76      - DPDK-L3Fwd;
77      - VPP Container K8s orchestrated topologies;
78    - Tools:
79      - Documentation generator;
80      - Report generator;
81      - Testbed environment setup ansible playbooks;
82      - Operational debugging scripts;
83
84 ## Directory Structure
85
86 ### Tests
87
88 ```
89 .
90 └── tests
91     ├── dpdk
92     │   ├── dpdk_scripts            # DPDK helper scripts
93     │   └── perf                    # DPDK performance tests
94     ├── tldk
95     │   ├── func                    # TLDK functional VIRL tests
96     │   ├── tldk_scripts            # TLDK helper scripts
97     │   └── tldk_testconfig         # TLDK test configuration
98     └── vpp
99         ├── device                  # VPP device tests
100         ├── func                    # VPP functional VIRL tests
101         └── perf                    # VPP performance tests
102 ```
103
104 ### Keywords
105
106 ```
107 .
108 resources
109 └── libraries
110     ├── bash
111     │   ├── config
112     │   ├── entry                   # Main bootstrap entry directory
113     │   ├── function                # Bootstrap function library
114     │   └── shell                   # Various functions
115     ├── python                      # Python L1 KWs
116     └── robot                       # Robot Framework L2 KWs
117 ```
118
119 ### Other Resources
120
121 ```
122 .
123 ├── docs                            # Main documentaion
124 ├── PyPI                            # PyPI packages provided by CSIT
125 │   ├── jumpavg
126 │   └── MLRsearch
127 ├── resources
128 │   ├── templates                   # Templates (vpp_api_test, kubernetes, ...)
129 │   ├── test_data                   # Robot Test configuration
130 │   ├── tools
131 │   │   ├── disk-image-builder      # Utilities for building (DCR, VM) images
132 │   │   ├── doc_gen                 # Code documentation generator
133 │   │   ├── papi                    # PAPI driver
134 │   │   ├── presentation            # Report generator
135 │   │   ├── scripts                 # Various tools
136 │   │   ├── testbed-setup           # Physical testbed setup scripts
137 │   │   ├── topology                # Helper scripts for topology manipulation
138 │   │   ├── trex                    # TRex driver
139 │   │   ├── vagrant                 # VPP device vagrant environment
140 │   │   └── wrk                     # WRK driver
141 │   ├── topology_schemas
142 │   ├── traffic_profiles            # Performance tests traffic profiles
143 │   │   ├── trex
144 │   │   └── wrk
145 │   └── traffic_scripts             # Functional tests traffic profiles
146 │       ├── dhcp
147 │       └── lisp
148 └── topologies                      # Linux Foundation topology files
149     ├── available
150     └── enabled
151 ```
152
153 ## Quickstart
154
155 ### Vagrant
156
157 [Vagrant environment preparation](docs/testing_in_vagrant.rst) documentaion is
158 describing local VPP Device functional testing.
159
160 ### Physical Testbed
161
162 [Physical testbed preparation](resources/tools/testbed-setup/README.rst)
163 documentation is describing PXE and Ansible setup process. All the software
164 requirements for running Performance Teste are part of Ansible playbooks.
165
166 ## Report
167
168 [CSIT Report](https://docs.fd.io/csit/master/report/).
169
170 ## Trending
171
172 [CSIT Trending](https://docs.fd.io/csit/master/trending/).
173
174 ## Code Documentation
175
176 [CSIT Code Documentation](https://docs.fd.io/csit/master/doc/).
177
178 ## Coding Guidelines
179
180 If you are interested in contributing, please see the
181 [coding guidelines](docs/test_code_guidelines.rst).