d20d859076f5bac63bc0a75a50f4b95adf9ba744
[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    - Functional tests using VIRL environment:
74      - VPP;
75      - NSH_SFC;
76      - DMM;
77      - TLDK;
78    - Performance tests using physical testbed environment:
79      - VPP;
80      - DPDK-Testpmd;
81      - DPDK-L3Fwd;
82      - VPP Container K8s orchestrated topologies;
83    - Tools:
84      - Documentation generator;
85      - Report generator;
86      - Testbed environment setup ansible playbooks;
87      - Operational debugging scripts;
88
89 ## Directory Structure
90
91 ### Tests
92
93 ```
94 .
95 └── tests
96     ├── dmm
97     │   └── func                    # DMM functional VIRL tests
98     ├── dpdk
99     │   ├── dpdk_scripts            # DPDK helper scripts
100     │   └── perf                    # DPDK performance tests
101     ├── kubernetes
102     │   └── perf                    # VPP K8S orchestration performance tests
103     ├── nsh_sfc
104     │   ├── func                    # NSH_SFC functional tests
105     │   └── sfc_scripts             # NSH_SFC helper scripts
106     ├── tldk
107     │   ├── func                    # TLDK functional VIRL tests
108     │   ├── tldk_scripts            # TLDK helper scripts
109     │   └── tldk_testconfig         # TLDK test configuration
110     └── vpp
111         ├── device                  # VPP device tests
112         ├── func                    # VPP functional VIRL tests
113         └── perf                    # VPP performance tests
114 ```
115
116 ### Keywords
117
118 ```
119 .
120 resources
121 └── libraries
122     ├── bash
123     │   ├── config
124     │   ├── entry                   # Main bootstrap entry directory
125     │   ├── function                # Bootstrap function library
126     │   ├── qemu_patches            # Custom QEMU patches (see KVM methodology)
127     │   └── shell                   # Various functions
128     ├── python                      # Python L1 KWs
129     └── robot                       # Robot Framework L2 KWs
130 ```
131
132 ### Other Resources
133
134 ```
135 .
136 ├── docs                            # Main documentaion
137 ├── PyPI                            # PyPI packages provided by CSIT
138 │   ├── jumpavg
139 │   └── MLRsearch
140 ├── resources
141 │   ├── templates                   # Templates (vpp_api_test, kubernetes, ...)
142 │   ├── test_data                   # Robot Test configuration
143 │   ├── tools
144 │   │   ├── disk-image-builder      # Utilities for building (DCR, VM) images
145 │   │   ├── doc_gen                 # Code documentation generator
146 │   │   ├── papi                    # PAPI driver
147 │   │   ├── presentation            # Report generator
148 │   │   ├── scripts                 # Various tools
149 │   │   ├── testbed-setup           # Physical testbed setup scripts
150 │   │   ├── topology                # Helper scripts for topology manipulation
151 │   │   ├── trex                    # TRex driver
152 │   │   ├── vagrant                 # VPP device vagrant environment
153 │   │   ├── virl                    # VIRL helper scripts
154 │   │   └── wrk                     # WRK driver
155 │   ├── topology_schemas
156 │   ├── traffic_profiles            # Performance tests traffic profiles
157 │   │   ├── trex
158 │   │   └── wrk
159 │   └── traffic_scripts             # Functional tests traffic profiles
160 │       ├── dhcp
161 │       └── lisp
162 └── topologies                      # Linux Foundation topology files
163     ├── available
164     └── enabled
165 ```
166
167 ## Quickstart
168
169 ### Vagrant
170
171 [Vagrant environment preparation](docs/testing_in_vagrant.rst) documentaion is
172 describing local VPP Device functional testing.
173
174 ### Physical Testbed
175
176 [Physical testbed preparation](resources/tools/testbed-setup/README.rst)
177 documentation is describing PXE and Ansible setup process. All the software
178 requirements for running Performance Teste are part of Ansible playbooks.
179
180 ## Report
181
182 [CSIT Report](https://docs.fd.io/csit/master/report/).
183
184 ## Trending
185
186 [CSIT Trending](https://docs.fd.io/csit/master/trending/).
187
188 ## Code Documentation
189
190 [CSIT Code Documentation](https://docs.fd.io/csit/master/doc/).
191
192 ## Coding Guidelines
193
194 If you are interested in contributing, please see the
195 [coding guidelines](docs/test_code_guidelines.rst).