Merge lp:~rodsmith/checkbox/intro-docs into lp:checkbox

Proposed by Rod Smith
Status: Merged
Approved by: Zygmunt Krynicki
Approved revision: 3230
Merged at revision: 3281
Proposed branch: lp:~rodsmith/checkbox/intro-docs
Merge into: lp:checkbox
Diff against target: 476 lines (+439/-1)
3 files modified
plainbox/docs/author/index.rst (+1/-0)
plainbox/docs/author/intro.rst (+419/-0)
plainbox/docs/glossary.rst (+19/-1)
To merge this branch: bzr merge lp:~rodsmith/checkbox/intro-docs
Reviewer Review Type Date Requested Status
Zygmunt Krynicki (community) Approve
Review via email: mp+234729@code.launchpad.net

This proposal supersedes a proposal from 2014-08-29.

Description of the change

Adds the notes from the training session with the server certification team as a part of the official Checkbox/PlainBox documentation. Note that I left the screen shots as such because this preserves reverse video formatting, which would be lost in a text-only conversion; however, I did crop the first two screen shots to reduce the amount of empty space.

Second submission addresses Daniel's comments.

Third submission addresses most of Zygmunt's comments; however:

- A few long lines exist because they involve extra-long URLs or code lines.
- It wasn't clear to me what Zygmunt wanted in his last two comments.
  I think it's best that he make his suggested edits himself to avoid the
  likelihood that I'd mangle his intended changes.

To post a comment you must log in.
Revision history for this message
Daniel Manrique (roadmr) wrote : Posted in a previous version of this proposal

Fantastic, thanks!

Some suggestions.

This document was meant to be stand-alone, so it includes a mini-glossary, but the plainbox documentation already has one here:

http://plainbox.readthedocs.org/en/latest/glossary.html

I'd suggest linking to that instead, you should be able to use :ref:`glossary` for that. Also, if my glossary has something different or missing in the global one, perhaps adding that to the global glossary to enrich it would be a good idea.

Next, see this section:

One way to deliver tests via PlainBox is to start your own provider. We have a very good document for Tutorial that:

http://plainbox.readthedocs.org/en/latest/author/tutorial.html

Since this lives in the same sphinx tree as the tutorial, you can use an internal reference to make this tidier. I'd change the above to:

One way to deliver tests via PlainBox is to start your own provider. To learn how to do that, see the :ref:`tutorial`.

Finally, maybe some gardening of the links at the end (so the ones referring to plainbox docs are turned into internal :ref: or :doc: links) would tidy things up a bit.

Still, this is good (thanks for cropping the screenshots, it's exactly what I was thinking about), so if you want to merge it as-is and iterate to improve it, I'd be fine with that.

Revision history for this message
Zygmunt Krynicki (zyga) wrote : Posted in a previous version of this proposal

General request: I'd like to ensure that we keep the <80 (typically 76-79) columns in all text files. I can correct this after it lands if you prefer. If you are using vim all you need to do is to select each paragraph with V and use 'gq' to reflow the text. Usually the outcome is much easier to read.

Revision history for this message
Zygmunt Krynicki (zyga) wrote : Posted in a previous version of this proposal

I'll give this a honest read over weekend. For now just one small inline comment down below

Revision history for this message
Zygmunt Krynicki (zyga) wrote : Posted in a previous version of this proposal

Some more random notes inline.

Revision history for this message
Rod Smith (rodsmith) wrote : Posted in a previous version of this proposal

Added comments on two of Zygmunt's suggested changes.

Revision history for this message
Daniel Manrique (roadmr) wrote :

Two replies to the comments (which may be outdated):

The syntax to run a plainbox job with -i involves giving the job name but it has to be fully namespaced. Example:

plainbox run -i 2013.com.canonical.certification::cpu/info

The prefix is normally 2013.com.canonical.certification unless you're using a custom namespace.

As for the sentence "I want to write a test to ensure that the ubuntu user exists", I'll play the non-native speaker card here. There should be no ambiguity since it uses "that" in a conjunction sense, rather than as a pronoun (http://www.merriam-webster.com/dictionary/that, I had to look that up). If I wrote this, it's probably an artifact of spanish where you always have to put the conjunction ('que' is used in that case). If you think it makes more sense to remove "that" (to ensure the ubuntu user exists) it can be done easily.

Revision history for this message
Zygmunt Krynicki (zyga) wrote : Posted in a previous version of this proposal

On Monday, September 15, 2014, Roderick Smith <email address hidden>
wrote:

> Added comments on two of Zygmunt's suggested changes.
>

Thanks for getting back to that merge request Rod. I'm sorry for neglecting
it myself. We were talking with Daniel about merging it and doing some
post-merge editing but we got lost in our daily tasks.

I'll read the updated diff and reply again.

Thanks
ZK

Revision history for this message
Brendan Donegan (brendan-donegan) wrote : Posted in a previous version of this proposal

Sorry but the form 'CheckBox' still drives me nuts :) It's 'Checkbox' as
per the project page: https://launchpad.net/checkbox !

</ocd> :)

On Mon, Sep 15, 2014 at 8:06 PM, Zygmunt Krynicki <
<email address hidden>> wrote:

> On Monday, September 15, 2014, Roderick Smith <email address hidden>
> wrote:
>
> > Added comments on two of Zygmunt's suggested changes.
> >
>
>
> Thanks for getting back to that merge request Rod. I'm sorry for neglecting
> it myself. We were talking with Daniel about merging it and doing some
> post-merge editing but we got lost in our daily tasks.
>
> I'll read the updated diff and reply again.
>
> Thanks
> ZK
>
> --
> https://code.launchpad.net/~rodsmith/checkbox/intro-docs/+merge/232753
> Your team Checkbox Developers is requested to review the proposed merge of
> lp:~rodsmith/checkbox/intro-docs into lp:checkbox.
>

Revision history for this message
Zygmunt Krynicki (zyga) wrote :

Let's merge it. Thanks a lot Rod, this is a good chunk of much needed introduction!

review: Approve
Revision history for this message
Rod Smith (rodsmith) wrote : Posted in a previous version of this proposal

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 09/16/2014 03:12 AM, Brendan Donegan wrote:
> Sorry but the form 'CheckBox' still drives me nuts :) It's
> 'Checkbox' as per the project page: https://launchpad.net/checkbox
> !

FWIW, I went with CheckBox because that's what's in the Glossary
(which I did not write) of the document I was editing:

http://plainbox.readthedocs.org/en/latest/glossary.html

> On Mon, Sep 15, 2014 at 8:06 PM, Zygmunt Krynicki <
> <email address hidden>> wrote:
>
>> On Monday, September 15, 2014, Roderick Smith
>> <email address hidden> wrote:
>>
>>> Added comments on two of Zygmunt's suggested changes.
>>>
>>
>>
>> Thanks for getting back to that merge request Rod. I'm sorry for
>> neglecting it myself. We were talking with Daniel about merging
>> it and doing some post-merge editing but we got lost in our daily
>> tasks.
>>
>> I'll read the updated diff and reply again.
>>
>> Thanks ZK
>>
>> --
>> https://code.launchpad.net/~rodsmith/checkbox/intro-docs/+merge/232753
>>
>>
Your team Checkbox Developers is requested to review the proposed merge of
>> lp:~rodsmith/checkbox/intro-docs into lp:checkbox.
>>
>

- --
Rod Smith
Server and Cloud Certification Engineer
<email address hidden>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iQEcBAEBAgAGBQJUGC0OAAoJEFgyRI+V0FjmOrsH/jPkxk0Htt1Yr3Cer5vaf18l
WgXmGV6m+/Hp/IwvOsFJwHoJlZ7QTs6Ur/5kJWv9PtNIfvRRJ9AeOlL1cdgiYOeP
XJHKipvZ7AmNR9Mgb9/7x/n7Vmh/ZwBez10/v9b7GGgfwzseId0Ybd0CzXvL4lrJ
j2e5Qos9diTfrPgJgOQ958HAomkxpVVBukIFcERDlqH42H+3SsnZEdwMTKetUNAn
D6PyHsl1xZTllABkYS27/axr+jumeYopo0/Xkl3FSjTMVzhsDfvSuaLrfE5AinsQ
0oNpHxzJlLyNxCNtAGSkXyGQMF6QAvPhkqAa0k7smMBgWdzSZ7qIHjI4AQGbxRc=
=FW9X
-----END PGP SIGNATURE-----

Revision history for this message
Brendan Donegan (brendan-donegan) wrote : Posted in a previous version of this proposal

On Tue, Sep 16, 2014 at 1:30 PM, Roderick Smith <email address hidden>
wrote:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On 09/16/2014 03:12 AM, Brendan Donegan wrote:
> > Sorry but the form 'CheckBox' still drives me nuts :) It's
> > 'Checkbox' as per the project page: https://launchpad.net/checkbox
> > !
>
> FWIW, I went with CheckBox because that's what's in the Glossary
> (which I did not write) of the document I was editing:
>
> http://plainbox.readthedocs.org/en/latest/glossary.html

Yeah - *somebody* decided to adopt that form in all the documentation they
wrote (looks at Zygmunt :P). Camel-case is just really unnatural and I hate
reading it in natural language. Code is fine because well we need to put up
with all sorts of unnatural structures in code, but camel-case should not
be permeating everywhere.

>
>
> > On Mon, Sep 15, 2014 at 8:06 PM, Zygmunt Krynicki <
> > <email address hidden>> wrote:
> >
> >> On Monday, September 15, 2014, Roderick Smith
> >> <email address hidden> wrote:
> >>
> >>> Added comments on two of Zygmunt's suggested changes.
> >>>
> >>
> >>
> >> Thanks for getting back to that merge request Rod. I'm sorry for
> >> neglecting it myself. We were talking with Daniel about merging
> >> it and doing some post-merge editing but we got lost in our daily
> >> tasks.
> >>
> >> I'll read the updated diff and reply again.
> >>
> >> Thanks ZK
> >>
> >> --
> >> https://code.launchpad.net/~rodsmith/checkbox/intro-docs/+merge/232753
> >>
> >>
> Your team Checkbox Developers is requested to review the proposed merge of
> >> lp:~rodsmith/checkbox/intro-docs into lp:checkbox.
> >>
> >
>
>
> - --
> Rod Smith
> Server and Cloud Certification Engineer
> <email address hidden>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1
>
> iQEcBAEBAgAGBQJUGC0OAAoJEFgyRI+V0FjmOrsH/jPkxk0Htt1Yr3Cer5vaf18l
> WgXmGV6m+/Hp/IwvOsFJwHoJlZ7QTs6Ur/5kJWv9PtNIfvRRJ9AeOlL1cdgiYOeP
> XJHKipvZ7AmNR9Mgb9/7x/n7Vmh/ZwBez10/v9b7GGgfwzseId0Ybd0CzXvL4lrJ
> j2e5Qos9diTfrPgJgOQ958HAomkxpVVBukIFcERDlqH42H+3SsnZEdwMTKetUNAn
> D6PyHsl1xZTllABkYS27/axr+jumeYopo0/Xkl3FSjTMVzhsDfvSuaLrfE5AinsQ
> 0oNpHxzJlLyNxCNtAGSkXyGQMF6QAvPhkqAa0k7smMBgWdzSZ7qIHjI4AQGbxRc=
> =FW9X
> -----END PGP SIGNATURE-----
>
> --
> https://code.launchpad.net/~rodsmith/checkbox/intro-docs/+merge/232753
> Your team Checkbox Developers is requested to review the proposed merge of
> lp:~rodsmith/checkbox/intro-docs into lp:checkbox.
>

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file 'plainbox/docs/author/cc1.png'
2Binary files plainbox/docs/author/cc1.png 1970-01-01 00:00:00 +0000 and plainbox/docs/author/cc1.png 2014-09-15 18:39:32 +0000 differ
3=== added file 'plainbox/docs/author/cc2.png'
4Binary files plainbox/docs/author/cc2.png 1970-01-01 00:00:00 +0000 and plainbox/docs/author/cc2.png 2014-09-15 18:39:32 +0000 differ
5=== added file 'plainbox/docs/author/cc3.png'
6Binary files plainbox/docs/author/cc3.png 1970-01-01 00:00:00 +0000 and plainbox/docs/author/cc3.png 2014-09-15 18:39:32 +0000 differ
7=== modified file 'plainbox/docs/author/index.rst'
8--- plainbox/docs/author/index.rst 2014-09-10 15:47:37 +0000
9+++ plainbox/docs/author/index.rst 2014-09-15 18:39:32 +0000
10@@ -7,6 +7,7 @@
11 core.
12
13 .. toctree::
14+ intro.rst
15 tutorial.rst
16 providers.rst
17 jobs.rst
18
19=== added file 'plainbox/docs/author/intro.rst'
20--- plainbox/docs/author/intro.rst 1970-01-01 00:00:00 +0000
21+++ plainbox/docs/author/intro.rst 2014-09-15 18:39:32 +0000
22@@ -0,0 +1,419 @@
23+Introduction to PlainBox
24+========================
25+
26+.. contents::
27+
28+What is PlainBox?
29+-----------------
30+
31+Many years ago, a dark sorcerer known only as CR3 created a testing tool
32+called ``hw-test`` with the vision of running tests against hardware to
33+bless the hardware and deem it as Ubuntu Certified. There was great
34+rejoicing. From the crowd that gathered around this tool came requests and
35+requirements for new features, new tests and new methods of doing things.
36+Over the subsequent years, a tool called CheckBox was created. It was the
37+product of the design by committee philosophy and soon grew ponderous and
38+difficult to understand except by a few known only as "The Developers."
39+CheckBox's goal was to function as a universal testing engine that could
40+drive several types of testing: end-users running tests on their systems,
41+certification testing with a larger set of tests, and even OEM-specific
42+testing with custom tests.
43+
44+A couple of years ago CheckBox started showing its age. The architecture
45+was difficult to understand and to extend and the core didn't really scale
46+to some things we wanted to do; however, the test suite itself was still
47+quite valuable.
48+
49+Thus PlainBox was created, as a "plain CheckBox" and again, there was much
50+rejoicing. It was originally meant to be a simpler library for creating
51+testing applications and as a requirement, it was designed to be compatible
52+with the CheckBox test/job definition format.
53+
54+Since then, PlainBox has become a large set of libraries and tools, but the
55+central aim is still to write testing applications. Note that the term
56+*CheckBox* is still used to refer to the test suite generically; *PlainBox*
57+is used to refer to the new tool set "under the hood."
58+
59+Goal
60+----
61+
62+The goal of these tools is of course to run tests. They use a test
63+description language that was inherited from CheckBox, so it has many
64+interesting quirks. Since CheckBox itself is now deprecated, we have been
65+adding new features and improving the test description language so this is
66+in some flux.
67+
68+Terminology
69+-----------
70+
71+In developing or using PlainBox, you'll run into several unfamiliar terms.
72+Check the :doc:`../glossary` to learn what they mean. In fact, you should
73+probably check it now. Pay particular attention to the terms *CheckBox*,
74+*PlainBox*, *job*, *provier*, and *whitelist*.
75+
76+Getting Started
77+---------------
78+
79+To get started, we'll install PlainBox and ``checkbox-ng`` along with some
80+tests and look at how they are organized and packaged.
81+
82+The newest versions are in our PPAs. We'll use the development PPA at
83+``ppa:checkbox-dev/ppa``. From there we'll install ``plainbox``,
84+``checkbox-ng``, and ``plainbox-provider-checkbox``.
85+
86+As an end user this is all I need to run some tests. We can quickly run
87+``checkbox-cli``, which will show a series of screens to facilitate running
88+tests. First up is a welcome screen:
89+
90+.. image:: cc1.png
91+ :height: 178
92+ :width: 800
93+ :scale: 100
94+ :alt: checkbox-cli presents an introductory message before enabling you to
95+ select tests.
96+
97+When you press the Enter key, ``checkbox-cli`` lets you select which
98+whitelist to use:
99+
100+.. image:: cc2.png
101+ :height: 343
102+ :width: 300
103+ :scale: 100
104+ :alt: checkbox-cli enables you to select which test suite to run.
105+
106+With a whitelist selected, you can choose the individual tests to run:
107+
108+.. image:: cc3.png
109+ :height: 600
110+ :width: 800
111+ :scale: 100
112+ :alt: checkbox-cli enables you to select or de-select specific tests.
113+
114+When the tests are run, the results are saved to files and the program
115+prompts to submit them to Launchpad.
116+
117+As mentioned, ``checkbox-cli`` is just a convenient front-end for some
118+PlainBox features but it lets us see some aspects of PlainBox.
119+
120+Looking Deeper
121+--------------
122+
123+Providers
124+`````````
125+
126+First, we installed some "provider" packages. Providers were designed to
127+encapsulate test descriptions and their related tools and data. Providers
128+are shipped in Debian packages, which allows us to express dependencies to
129+ensure required external packages are installed, and we can also separate
130+those dependencies; for instance, the provider used for server testing
131+doesn't actually contain the server-specific test definitions (we try to
132+keep all the test definitions in the CheckBox provider), but it does depend
133+on all the packages needed for server testing. Most users will want the
134+resource and CheckBox providers which contain many premade tests, but this
135+organization allows shipping the tiny core and a fully customized provider
136+without extraneous dependencies.
137+
138+A provider is described in a configuration file (stored in
139+``/usr/share/plainbox-providers-1``). This file describes where to find all
140+the files from the provider. This file is usually managed automatically
141+(more on this later). A provider can ship jobs, binaries, data and
142+whitelists.
143+
144+A **job** or **test** is the smallest unit or description that PlainBox
145+knows about. It describes a single test (historically they're called
146+jobs). The simplest possible job is::
147+
148+ id: a-job
149+ plugin: manual
150+ description: Ensure your computer is turned on. Is the computer turned on?
151+
152+Jobs are shipped in a provider's jobs directory. This ultra-simple example
153+has three fields: ``id``, ``plugin``, and ``description``. (A real job
154+should include a ``_summary`` field, too.) The ``id`` identifies the job
155+(of course) and the ``description`` provides a plain-text description of
156+the job. In the case of this example, the description is shown to the user,
157+who must respond because the ``plugin`` type is ``manual``. ``plugin``
158+types include (but are not limited to):
159+
160+ * ``manual`` -- A test that requires the user to perform some action and
161+ report the results.
162+ * ``shell`` -- An automated test that requires no user interaction; the
163+ test is passed or failed on the basis of the return value of the script
164+ or command.
165+ * ``local`` -- This type of job is similar to a ``shell`` test, but it
166+ supports creating multiple tests from a single definition (say, to test
167+ all the Ethernet ports on a computer). Jobs using the ``local`` plugin
168+ are run when PlainBox is initialized.
169+ * ``user-interact`` -- A test that asks the user to perform some action
170+ *before* the test is performed. The test then passes or fails
171+ automatically based on the output of the test. An example is
172+ ``keys/media-control``, which runs a tool to detect keypresses, asks the
173+ user to press volume keys, and then exits automatically once the last
174+ key has been pressed or the user clicks the skip button in the tool.
175+ * ``user-interact-verify`` -- This type of test is similar to the
176+ ``user-interact`` test, except that the test's output is displayed for
177+ the user, who must then decide whether it has passed or failed. An
178+ example of this would be the ``usb/disk_detect`` test, which asks the
179+ user to insert a USB key, click the ``test`` button, and then verify
180+ manually that the USB key was detected correctly.
181+ * ``user-verify`` -- A test that the user manually performs or runs
182+ automatically and requires the user to verify the result as passed or
183+ failed. An example of this is the graphics maximum resolution test
184+ which probes the system to determine the maximum supported resolution
185+ and then asks the user to confirm that the resolution is correct.
186+
187+A fairly complex example definition is::
188+
189+ plugin: local
190+ _summary: Automated test to walk multiple network cards and test each one in sequence.
191+ id: ethernet/multi_nic
192+ requires:
193+ device.category == 'NETWORK'
194+ _description: Automated test to walk multiple network cards and test each one in sequence.
195+ command:
196+ cat <<'EOF' | run_templates -s 'udev_resource | filter_templates -w "category=NETWORK" | awk "/path: / { print \$2 }" | xargs -n 1 sh -c "for i in \``ls /sys\$0/net 2>/dev/null\``; do echo \$0 \$i; done"'
197+ plugin: shell
198+ id: ethernet/multi_nic_$2
199+ requires:
200+ package.name == 'ethtool'
201+ package.name == 'nmap'
202+ device.path == "$1"
203+ user: root
204+ environ: TEST_TARGET_FTP TEST_TARGET_IPERF TEST_USER TEST_PASS
205+ command: network test -i $2 -t iperf --fail-threshold 80
206+ estimated_duration: 330.0
207+ description:
208+ Testing for NIC $2
209+ EOF
210+
211+Key points to note include:
212+
213+ * If a field name begins with an underscore, its value can be localized.
214+ * The values of fields can appear on the same line as their field names,
215+ as in ``plugin: local``; or they can appear on a subsequent line, which
216+ is indented, as in the preceding example's ``requires: device.category
217+ == 'NETWORK'``.
218+ * The ``requires`` field can be used to specify dependencies; if the
219+ specified condition is not met, the test does not run.
220+ * The ``command`` field specifies the command that's used to run the test.
221+ This can be a standard Linux command (or even a set of commands) or a
222+ CheckBox test script. In this example's ``local`` test definition, the
223+ first ``command`` line generates a list of network devices that is fed
224+ to an embedded test, which is defined beginning with the second
225+ ``plugin`` line immediately following the first ``command`` line.
226+ * In this example, the line that reads ``EOF`` ends the
227+ ``ethernet/ethtool_multi_nic_$2`` test's command; it's matched to the
228+ ``EOF`` that's part of ``cat << 'EOF'`` near the start of that command.
229+
230+Each provider has a ``bin`` directory and all binaries there are available
231+in the path.
232+
233+Whitelists
234+``````````
235+
236+In the job files we have a "universe" of known jobs. We don't normally want
237+to run them all; rather we want to select a subset depending on what we're
238+testing, and maybe give the user a way to fine-tune that selection. Also,
239+we need a way to determine the order in which they will run, beyond what
240+dependencies may provide. This is where the whitelist comes in; think of it
241+as a mask or selection filter from the universe of jobs. Whitelists support
242+regular expressions, and PlainBox will attempt to run tests in the order
243+shown in the whitelist. Again, providers ship whitelists in a specific
244+directory, and you can use ``plainbox`` to run a specific whitelist with
245+the ``-w`` option.
246+
247+You can also use ``plainbox`` to run a test with the ``-i`` syntax. This is
248+good for quickly running a job and ensuring it works well.
249+
250+Let's look at ``checkbox-cli`` for a moment. This is a "launcher"; it
251+specifies a set of configuration options for a specific testing purpose.
252+This enables us to create mini-clients for each testing purpose, without
253+changing the core utility (``checkbox-launcher``). For instance, let's look
254+at the launcher for ``canonical-certification-server``, which appears in
255+``./providers/plainbox-provider-certification-server/launcher/canonical-certification-server``
256+in the CheckBox source tree::
257+
258+ #!/usr/bin/env checkbox-launcher
259+ [welcome]
260+ text = Welcome to System Certification!
261+ This application will gather information from your system. Then you will be
262+ asked manual tests to confirm that the system is working properly. Finally,
263+ you will be asked for the Secure ID of the computer to submit the
264+ information to the certification.canonical.com database.
265+ To learn how to create or locate the Secure ID, please see here:
266+ https://certification.canonical.com/
267+
268+ [suite]
269+ # Whitelist(s) displayed in the suite selection screen
270+ whitelist_filter = ^((network|storage|usb|virtualization)-only)|(server-(full|functional)-14.04)$
271+ # Whitelist(s) pre-selected in the suite selection screen, default whitelist(s)
272+ whitelist_selection = ^server-full-14.04$
273+
274+ [transport]
275+ submit_to = certification
276+
277+ [config]
278+ config_filename = canonical-certification.conf
279+
280+A launcher such as this sets up an environment that includes introductory
281+text to be shown to users, a filter to determine what whitelists to present
282+as options, information on where to (optionally) submit results, and a
283+configuration filename. This allows each provider to ship a launcher or
284+binary with which to launch its relevant tests.
285+
286+Developing Tests
287+````````````````
288+
289+One way to deliver tests via PlainBox is to start your own provider. To
290+learn how to do that, see the :ref:`tutorial`.
291+
292+In other cases you want to add tests to the main CheckBox repository (which
293+is also what we recommend to keep tests centralized, unless they're so
294+purpose-specific that this makes no sense).
295+
296+This is a bit easier because the provider in question already exists. So
297+let's get started by branching a copy of ``lp:checkbox``. In brief, you
298+should change to your software development directory and type ``bzr branch
299+lp:checkbox my-branch`` to create a copy of the ``checkbox`` Launchpad
300+project in the ``my-branch`` subdirectory. You can then edit the files in
301+that subdirectory, upload the results to your own Launchpad account, and
302+request a merge.
303+
304+To begin, consider the files and subdirectories in the main CheckBox
305+development directory (``my-branch`` if you used the preceding ``bzr``
306+command without change):
307+
308+ * ``checkbox-gui`` -- CheckBox GUI components, used in desktop/laptop
309+ testing
310+ * ``checkbox-ng`` -- The PlainBox-based version of CheckBox
311+ * ``checkbox-support`` -- Support code for many providers
312+ * ``checkbox-touch`` -- A CheckBox frontend optimized for touch/tablet
313+ devices
314+ * ``mk-venv`` -- A symbolic link to a script used to set up an environment
315+ for testing CheckBox
316+ * ``plainbox`` -- A Python3 library and development tools at the heart of
317+ PlainBox
318+ * ``plainbox-client`` -- Unfinished Python3 interface for CheckBox
319+ * ``providers`` -- Provider definitions, including test scripts
320+ * ``README.md`` -- A file describing the contents of the subdirectory in
321+ greater detail
322+ * ``setup.py`` -- A setup script
323+ * ``support`` -- Support code that's not released
324+ * ``tarmac-verify`` -- A support script
325+ * ``test-in-lxc.sh`` -- A support script for testing in an LXC
326+ * ``test-in-vagrant.sh`` -- A support script for testing with Vagrant
327+ * ``test-with-coverage`` -- A link to a support script for testing with
328+ coverage
329+ * ``Vagrantfile`` -- A Vagrant configuration file
330+
331+Let's say I want to write a test to ensure that the ubuntu user exists in
332+``/etc/passwd``. You need to remove any existing CheckBox provider
333+packages, lest they interfere with your new or modified tests. The
334+``setup.py`` script will set up a PlainBox development environment for you.
335+
336+We can write a simple job here, then add a requirement, perhaps a
337+dependency, then a script in the directory. Note that scripts can be
338+anything that's executable, we usually prefer either shell or Python but
339+anything goes.
340+
341+PlainBox will supply two environment variables, ``PLAINBOX_PROVIDER_DATA``
342+and ``SHARE``, we usually try to use them in the job description only, not
343+in the scripts, to keep the scripts PlainBox-agnostic if possible.
344+
345+Once the test is running correctly, we can create a whitelist with a few
346+tests and name it.
347+
348+Once we get everything running correctly we can prepare and propose a merge
349+request using ``bzr`` as usual.
350+
351+Other Questions
352+---------------
353+
354+ **What Python modules are useful?**
355+ I usually Google for the description of the problem I'm trying to solve,
356+ and/or peruse the Python documentation in my spare time. I recommend the
357+ *Dive Into Python* books if you have experience with another language, as
358+ they are very focused on how to translate what you know into Python. This
359+ applies also to Pythonisms like iterators, comprehensions, and
360+ dictionaries which are quite versatile, and others. Again, the *Dive*
361+ books will show you how these work.
362+
363+ **Are there other tools to use?**
364+ ``flake8`` or ``pyflakes``, it's always a good idea to run this if you
365+ wrote a Python script, to ensure consistent syntax. ``manage.py
366+ validate`` and ``plainbox dev analyze`` are also good tools to know
367+ about.
368+
369+ **Is there a preferred editor for Python programming?**
370+ I don't really know of a good editor/IDE that will provide a lot of help
371+ when developing Python, as I usually prefer a minimalistic editor. I'm
372+ partial to ``vim`` as it has syntax coloring, decent formatting
373+ assistance, can interface with ``git`` and ``pyflakes`` and is just
374+ really fast. We even have a plugin for PlainBox job files. Another good
375+ option if you're not married to an editor is sublime text, Zygmunt has
376+ been happy with it and it seems easy to extend, plus it's very
377+ nice-looking. A recent survey identified Kate as a good alterntive. The
378+ same survey identified ``gedit`` as *not* a good alternative so I'd avoid
379+ that one. Finally if you're into cloud, ``cloud9.io`` may be an option
380+ although we don't have a specific PlainBox development setup for it.
381+
382+References
383+----------
384+
385+ :doc:`Reference on PlainBox test authoring <index>`
386+
387+ :doc:`jobs`
388+
389+ :doc:`PlainBox provider template <provider-template>`
390+
391+ :doc:`Provider and job writing tutorial <tutorial>`
392+
393+ :doc:`../dev/intro`
394+
395+ :doc:`What resources are and how they work <../dev/resources>`
396+
397+ :doc:`Man pages on special variables available to jobs <../manpages/PLAINBOX_SESSION_SHARE>`
398+
399+ :doc:`All the manpages <../manpages/index>`
400+
401+ `The CheckBox stack diagram`_
402+
403+.. _The CheckBox stack diagram:
404+ http://checkbox.readthedocs.org/en/latest/stack.html
405+
406+ `Old CheckBox documentation for nostalgia`_
407+
408+.. _Old CheckBox documentation for nostalgia:
409+ https://wiki.ubuntu.com/Testing/Automation/CheckBox
410+
411+ `Usual Python modules`_
412+
413+.. _Usual Python modules: https://docs.python.org/3.3/
414+
415+ `Document on upcoming template units feature`_
416+
417+.. _Document on upcoming template units feature:
418+ http://bazaar.launchpad.net/~checkbox-dev/checkbox/trunk/view/head:/plainbox/docs/manpages/plainbox-template-units.rst
419+
420+ `A quick introduction to Bazaar and bzr`_
421+
422+.. _A quick introduction to Bazaar and bzr:
423+ http://doc.bazaar.canonical.com/bzr.dev/en/mini-tutorial/
424+
425+ `A tool to use git locally but be able to pull/push from Launchpad`_
426+
427+.. _A tool to use git locally but be able to pull/push from Launchpad: http://zyga.github.io/git-lp/
428+
429+ `A video on using git with Launchpad`_
430+
431+.. _A video on using git with Launchpad:
432+ https://plus.google.com/115602646184989903283/posts/RCepekrA5gu
433+
434+ `A video on how to set up Sublime Text for PlainBox development`_
435+
436+.. _A video on how to set up Sublime Text for PlainBox development:
437+ https://www.youtube.com/watch?v=mrfyAgDg4ME&list=UURGrmUhQo5P9hTbVskIIjoQ
438+
439+ `CheckBox(ng) documentation home`_
440+
441+.. _CheckBox(ng) documentation home: http://checkbox.readthedocs.org
442
443=== modified file 'plainbox/docs/glossary.rst'
444--- plainbox/docs/glossary.rst 2014-03-12 20:05:37 +0000
445+++ plainbox/docs/glossary.rst 2014-09-15 18:39:32 +0000
446@@ -21,12 +21,30 @@
447 available at http://launchpad.net/checkbox. The ``checkbox`` package is
448 pre-installed on all Ubuntu systems
449
450+ Checkbox-ng
451+
452+ This is the actual direct replacement for CheckBox. It provides a
453+ few binaries that can do end-user testing, and which leverage
454+ PlainBox as a library to do the heavy lifting. This lives in the
455+ ``checkbox-ng`` package for the binaries, and
456+ ``python3-checkbox-ng`` for the core functionality.
457+
458 PlainBox
459
460 PlainBox is a rewrite of CheckBox with the aim of improving internal
461 architecture, testability, robustness, quality and speed. It is
462 currently under active development. It is not pre-installed on Ubuntu.
463- It is developed inside CheckBox code repository.
464+ It is developed inside the CheckBox code repository. In common
465+ use, the term *PlainBox* can refer to either of two things:
466+
467+ * The core library (``python3-plainbox``). ``python3-plainbox`` is
468+ usually installed implicitly, as most of our tools depend on it.
469+
470+ * The ``plainbox`` utility/binary, which is essentially a
471+ command-line swiss-army frontend to all of the library's
472+ functionality. It's useful for develoment and diagnostics but not
473+ necessary for end-user work. ``plainbox`` is usually installed
474+ explicitly if needed.
475
476 whitelist
477

Subscribers

People subscribed via source and target branches