summaryrefslogtreecommitdiff
path: root/doc/source/ref/run_tests.rst
blob: ca7c7ce18d225cac652c621aa81e9e4b713fc6ed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
===========================
The ``run_tests.sh`` Script
===========================

.. contents:: Contents:
   :local:

Horizon ships with a script called ``run_tests.sh`` at the root of the
repository. This script provides many crucial functions for the project,
and also makes several otherwise complex tasks trivial for you as a
developer.

First Run
=========

If you start with a clean copy of the Horizon repository, the first thing
you should do is to run ``./run_tests.sh`` from the root of the repository.
This will do two things for you:

    #. Set up a virtual environment for both the ``horizon`` module and
       the ``openstack-dashboard`` project using
       ``openstack-dashboard/tools/install_venv.py``.
    #. Run the tests for both ``horizon`` and ``openstack-dashboard`` using
       their respective environments and verify that evreything is working.

Setting up the environment the first time can take several minutes, but only
needs to be done once. If dependencies are added in the future, updating the
environments will be necessary but not as time consuming.

I just want to run the tests!
=============================

Running the full set of unit tests quickly and easily is the main goal of this
script. All you need to do is::

    ./run_tests.sh

Yep, that's it. However, for a more thorough test run you can include the
Selenium tests by using the ``--with-selenium`` flag::

    ./run_tests.sh --with-selenium

If you run horizon in a minimal installation VM, you will probably need
the following (steps for Fedora 18 minimal installation):

    #. Install these packages in the VM:
       ``yum install xorg-x11-xauth xorg-x11-fonts-Type1.noarch``.
    #. Install firefox in the VM:
       ``yum install firefox``.
    #. Connect to the VM by ``ssh -X``
       (if you run ``set|grep DISP``, you should see that the DISPLAY is set).
    #. Run
       ``./run_tests.sh --with-selenium``.

Running a subset of tests
-------------------------

Instead of running all tests, you can specify an individual directory, file,
class, or method that contains test code.

To run the tests in the ``horizon/test/tests/tables.py`` file::

    ./run_tests.sh horizon.test.tests.tables

To run the tests in the `WorkflowsTests` class in
``horizon/test/tests/workflows``::

    ./run_tests.sh horizon.test.tests.workflows:WorkflowsTests

To run just the `WorkflowsTests.test_workflow_view` test method::

    ./run_tests.sh horizon.test.tests.workflows:WorkflowsTests.test_workflow_view

Using Dashboard and Panel Templates
===================================

Horizon has a set of convenient management commands for creating new
dashboards and panels based on basic templates.

Dashboards
----------

To create a new dashboard, run the following:

    ./run_tests.sh -m startdash <dash_name>

This will create a directory with the given dashboard name, a ``dashboard.py``
module with the basic dashboard code filled in, and various other common
"boilerplate" code.

Available options:

* --target: the directory in which the dashboard files should be created.
  Default: A new directory within the current directory.

Panels
------

To create a new panel, run the following:

    ./run_tests -m startpanel <panel_name> --dashboard=<dashboard_path>

This will create a directory with the given panel name, and ``panel.py``
module with the basic panel code filled in, and various other common
"boilerplate" code.

Available options:

* -d, --dashboard: The dotted python path to your dashboard app (the module
  which containers the ``dashboard.py`` file.).
* --target: the directory in which the panel files should be created.
  If the value is ``auto`` the panel will be created as a new directory inside
  the dashboard module's directory structure. Default: A new directory within
  the current directory.

Give me metrics!
================

You can generate various reports and metrics using command line arguments
to ``run_tests.sh``.

Coverage
--------

To run coverage reports::

    ./run_tests.sh --coverage

The reports are saved to ``./reports/`` and ``./coverage.xml``.

PEP8
----

You can check for PEP8 violations as well::

    ./run_tests.sh --pep8

The results are saved to ``./pep8.txt``.

PyLint
------

For more detailed code analysis you can run::

    ./run_tests.sh --pylint

The output will be saved in ``./pylint.txt``.

Tab Characters
--------------

For those who dislike having a mix of tab characters and spaces for indentation
there's a command to check for that in Python, CSS, JavaScript and HTML files::

    ./run_tests.sh --tabs

This will output a total "tab count" and a list of the offending files.

Running the development server
==============================

As an added bonus, you can run Django's development server directly from
the root of the repository with ``run_tests.sh`` like so::

    ./run_tests.sh --runserver

This is effectively just an alias for::

    ./openstack-dashboard/tools/with_venv.sh ./openstack-dashboard/dashboard/manage.py runserver

Generating the documentation
============================

You can build Horizon's documentation automatically by running::

    ./run_tests.sh --docs

The output is stored in ``./doc/build/html/``.

Updating the translation files
==============================

You can update all of the translation files for both the ``horizon`` app and
``openstack_dashboard`` project with a single command:

    ./run_tests.sh --makemessages

or, more compactly:

    ./run_tests.sh --m

Starting clean
==============

If you ever want to start clean with a new environment for Horizon, you can
run::

    ./run_tests.sh --force

That will blow away the existing environments and create new ones for you.

Non-interactive Mode
====================

There is an optional flag which will run the script in a non-interactive
(and eventually less verbose) mode::

    ./run_tests.sh --quiet

This will automatically take the default action for actions which would
normally prompt for user input such as installing/updating the environment.

Environment Backups
===================

To speed up the process of doing clean checkouts, running continuous
integration tests, etc. there are options for backing up the current
environment and restoring from a backup.

    ./run_tests.sh --restore-environment
    ./run_tests.sh --backup-environment

The environment backup is stored in ``/tmp/.horizon_environment/``.

Environment Versioning
======================

Horizon keeps track of changes to the environment by incrementing an
``environment_version`` integer at the top of ``run_tests.sh``.

If you do anything which changes the environment (adding new dependencies
or renaming directories are both great examples) be sure to increment the
``environment_version`` counter as well.