~pieq/checkbox/add-30suspend-1reboot-cycles-support

2938.2.1 by Zygmunt Krynicki
checkbox-ng:docs: document the checkbox stack
1
The "Checkbox Stack"
2
====================
3
4
The Checkbox Stack is a collection of projects that together constitute a
5
complete testing and certification solution. It is composed of the following
2940.1.1 by Zygmunt Krynicki
checkbox-ng:docs: add architecture diagram
6
parts (see table below for extra details). All of the projects are linked to
7
from the `Launchpad project group <https://launchpad.net/checkbox-project>`_.
8
9
Architecture Diagram
10
--------------------
11
12
.. image:: _images/Checkbox-Stack-Architecture.svg
13
    :alt: Architecture Diagram
14
15
This diagram contains a high-level approximation of the current Checkbox
16
architecture. There are three main "pillars". On the left we have *end
17
products*. Those are actual tools that certification and engineers are using.
18
On the right we have the *test market*. This is a open market of tests vendors
19
and suppliers. The tests are wrapped in containers known as providers. In the
20
center we have three shared components. Those implement the bulk of the
21
framework and user interfaces for test execution. Finally in the bottom-left
22
corner there is a part of checkbox (a library) that is shared with HEXR for
23
certain tasks. HEXR is a out-of-scope web application used by part of the
24
certification process. Arrows imply communication with the shape of the arrow
25
shows who calls who.
26
27
As mentioned before, in the center column there are three main components of
28
shared code (shared by everyone using the end products that are discussed
29
below). The shared code is composed of plainbox, checkbox-ng and checkbox-gui.
30
Component responsibilities are discussed in more detail in the table below.
31
Here we can see that checkbox-gui used DBus API exposed by checkbox-ng, which
32
in turn uses checkbox-support (a helper library separated out so share some
33
code with HEXR) and plainbox.
34
35
In the right hand side column there are various test providers. The checkbox
36
project is producing and maintaining a number of providers (see the table
37
below) but it is expected that our downstream users will also produce their own
38
providers (specific to a customer or project). Eventually some providers may
39
come from third parties that will adopt the format.
40
41
Lastly in the bottom-left corner, the shared library, this library contains
42
many parsers of various file formats and output formats. Technically this
43
library is a dependency of HEXR, checkbox-ng *and* of providers. As an added
44
complexity the library needs to be called from python3 code and python2 code.
45
46
.. note::
47
    The communication between checkbox-ng and plainbox is bi-directional.
48
    Plainbox offers some base interfaces and extension points. Those are all
49
    exposed through plainbox (using common APIs) but some of those are actually
50
    implemented in checkbox-ng.
51
52
.. warning::
53
    All internal APIs are semi-unstable. The DBus API is more stable in
54
    practice but should not be relied upon. Projects are encouraged to be
55
    merged into lp:checkbox where API transitions can be handled gracefully.
56
    The only stable API is are file format specification (job definitions and
57
    whitelits). Launcher specification will be stabilized in the next release.
58
59
Component Descriptions
60
----------------------
2938.2.1 by Zygmunt Krynicki
checkbox-ng:docs: document the checkbox stack
61
62
+------------------------+---------------------------------------+-------------+
63
| Project                | Responsible for                       |    Type     |
64
+========================+=======================================+=============+
65
| Next Generation        | - The C++/QML user interface          | Application |
66
| Checkbox (GUI)         | - The graphical launcher for          |             |
67
|                        |   providers, e.g.                     |             |
68
|                        |   checkbox-certification-client       |             |
69
+------------------------+---------------------------------------+-------------+
70
| Next Generation        | - The python command-line interface   | Application |
71
| Checkbox (CLI)         |                                       |             |
72
|                        |   - the text user interface           |             |
73
|                        |   - the SRU testing command           |             |
74
|                        |                                       |             |
75
|                        | - Additional certification APIs       |             |
76
|                        |                                       |             |
77
|                        |   - sending data to Launchpad         |             |
78
|                        |   - sending data to HEXR              |             |
79
|                        |                                       |             |
80
|                        | - the DBus service needed by GUI      |             |
81
+------------------------+---------------------------------------+-------------+
82
| Client Certification   | - canonical-certification-client      | Provider    |
83
| Provider               |   executable                          |             |
84
|                        | - client certification whitelists     |             |
85
+------------------------+---------------------------------------+-------------+
86
| Server Certification   | - server certification whitelists     | Provider    |
87
| Provider               | - additional server whitelists        |             |
88
+------------------------+---------------------------------------+-------------+
89
| System-on-Chip Server  | - SoC server certification whitelists | Provider    |
90
| Certification Provider |                                       |             |
91
+------------------------+---------------------------------------+-------------+
92
| Checkbox Provider      | - Almost all job definitions          | Provider    |
93
|                        | - Most of custom "scripts"            |             |
94
|                        | - Default and SRU whitelist           |             |
95
+------------------------+---------------------------------------+-------------+
96
| Resource Provider      | - Almost all resource jobs            | Provider    |
97
|                        | - Almost all resource "scripts"       |             |
98
+------------------------+---------------------------------------+-------------+
99
| Checkbox Support       | - Support code for various providers  | Library     |
100
|                        | - Parsers for many text formats       |             |
101
+------------------------+---------------------------------------+-------------+
102
| PlainBox               | - Almost all core logic               | Library     |
103
|                        |                                       | and         |
104
|                        |   - RFC822 (job definition) parser    | Development |
105
|                        |   - Configuration handling            | Toolkit     |
106
|                        |   - Testing session (suspend/resume)  |             |
107
|                        |   - Job runner                        |             |
108
|                        |   - Trusted launcher                  |             |
109
|                        |   - Dependency resolver               |             |
110
|                        |   - Command line handling             |             |
111
|                        |   - The XML, HTML and XSLX exporters  |             |
112
|                        |   - and more...                       |             |
113
|                        |                                       |             |
114
|                        | - Provider development toolkit        |             |
115
|                        |                                       |             |
116
|                        |   - 'plainbox startprovider'          |             |
117
|                        |   - 'manage.py' implementation        |             |
118
+------------------------+---------------------------------------+-------------+
119
| Legacy Checkbox        | - Applications                        | Monolithic  |
120
| (no longer maintained) |                                       | Application |
121
|                        |   - Qt4 GUI                           | Library     |
122
|                        |   - Gtk2 GUI                          | and Data    |
123
|                        |   - Urwid (text) GUI                  |             |
124
|                        |                                       |             |
125
|                        | - Core                                |             |
126
|                        |                                       |             |
127
|                        |   - Plugin and Event / Message Engine |             |
128
|                        |   - Almost Every feature implemented  |             |
129
|                        |     a core plugin                     |             |
130
|                        |                                       |             |
131
|                        | - Data                                |             |
132
|                        |                                       |             |
133
|                        |   - Jobs and whitelists               |             |
134
+------------------------+---------------------------------------+-------------+