Merge lp:~roadmr/ubuntu/saucy/checkbox/0.16 into lp:ubuntu/saucy/checkbox

Proposed by Daniel Manrique
Status: Merged
Merged at revision: 1882
Proposed branch: lp:~roadmr/ubuntu/saucy/checkbox/0.16
Merge into: lp:ubuntu/saucy/checkbox
Diff against target: 58223 lines (+46783/-2840)
308 files modified
Vagrantfile (+25/-16)
bin/checkbox-hw-collection (+19/-0)
checkbox/contrib/xrandr.py (+132/-59)
checkbox/lib/fifo.py (+6/-1)
checkbox/lib/template.py (+4/-4)
checkbox/message.py (+17/-15)
checkbox/parsers/submission.py (+1/-1)
checkbox/parsers/tests/fixtures/submission_info_memory.xml (+1/-1)
checkbox/parsers/tests/test_cputable.py (+4/-4)
checkbox/parsers/tests/test_description.py (+17/-17)
checkbox/parsers/tests/test_dmi.py (+13/-13)
checkbox/parsers/tests/test_efi.py (+5/-5)
checkbox/parsers/tests/test_submission.py (+43/-50)
checkbox/parsers/tests/test_xinput.py (+21/-26)
checkbox/parsers/udevadm.py (+3/-2)
checkbox/test_resource.py (+347/-0)
checkbox/tests/__init__.py (+49/-0)
checkbox/tests/test_job.py (+5/-4)
checkbox/tests/test_message_files.py (+3/-2)
checkbox/tests/test_setup_files.py (+4/-2)
checkbox/user_interface.py (+6/-11)
checkbox/variables.py (+2/-1)
checkbox_cli/cli_interface.py (+3/-3)
checkbox_gtk/gtk_interface.py (+2/-2)
checkbox_qt/qt_interface.py (+3/-3)
checkbox_urwid/urwid_interface.py (+2/-2)
data/whitelists/hwsubmit.whitelist (+24/-0)
data/whitelists/sru.whitelist (+114/-0)
debian/changelog (+142/-0)
debian/checkbox-hw-collection.install (+2/-0)
debian/checkbox-hw-collection.links (+1/-0)
debian/checkbox-hw-collection.postinst (+7/-0)
debian/checkbox.install (+1/-0)
debian/control (+13/-0)
debian/po/ast.po (+3/-4)
debian/po/cs.po (+3/-4)
debian/po/de.po (+5/-5)
debian/po/en_AU.po (+3/-4)
debian/po/en_GB.po (+3/-4)
debian/po/es.po (+7/-6)
debian/po/fr.po (+3/-4)
debian/po/gl.po (+3/-4)
debian/po/he.po (+3/-4)
debian/po/hu.po (+3/-4)
debian/po/id.po (+3/-4)
debian/po/it.po (+3/-4)
debian/po/ja.po (+3/-4)
debian/po/nl.po (+3/-4)
debian/po/oc.po (+3/-4)
debian/po/pl.po (+3/-4)
debian/po/pt_BR.po (+3/-4)
debian/po/ro.po (+3/-4)
debian/po/ru.po (+3/-4)
debian/po/tr.po (+3/-4)
debian/po/uk.po (+3/-4)
debian/po/zh_CN.po (+3/-4)
debian/po/zh_TW.po (+3/-4)
debian/rules (+1/-0)
examples/checkbox-cli.ini (+3/-0)
examples/checkbox-hw-collection.ini (+18/-0)
examples/checkbox-qt.ini (+4/-0)
examples/checkbox-urwid.ini (+3/-0)
examples/network.cfg (+4/-0)
jobs/audio.txt.in (+4/-0)
jobs/benchmarks.txt.in (+68/-0)
jobs/camera.txt.in (+0/-1)
jobs/esata.txt.in (+1/-1)
jobs/firewire.txt.in (+1/-1)
jobs/graphics.txt.in (+3/-1)
jobs/hibernate.txt.in (+8/-2)
jobs/info.txt.in (+1/-1)
jobs/input.txt.in (+11/-1)
jobs/keys.txt.in (+8/-2)
jobs/led.txt.in (+45/-14)
jobs/local.txt.in (+7/-0)
jobs/mediacard.txt.in (+50/-33)
jobs/miscellanea.txt.in (+52/-1)
jobs/mobilebroadband.txt.in (+21/-0)
jobs/monitor.txt.in (+4/-4)
jobs/networking.txt.in (+4/-4)
jobs/power-management.txt.in (+57/-21)
jobs/rendercheck.txt.in (+1/-1)
jobs/resource.txt.in (+13/-0)
jobs/stress.txt.in (+15/-3)
jobs/suspend.txt.in (+96/-39)
jobs/usb.txt.in (+6/-6)
jobs/virtualization.txt.in (+16/-0)
jobs/wireless.txt.in (+13/-13)
plainbox/.coveragerc (+11/-0)
plainbox/MANIFEST.in (+5/-0)
plainbox/README.md (+0/-122)
plainbox/README.rst (+23/-0)
plainbox/Vagrantfile (+42/-0)
plainbox/daily-package-testing/README (+18/-0)
plainbox/daily-package-testing/Vagrantfile (+48/-0)
plainbox/daily-package-testing/test-in-vagrant.sh (+59/-0)
plainbox/docs/appdev/index.rst (+39/-0)
plainbox/docs/author/index.rst (+63/-0)
plainbox/docs/conf.py (+13/-1)
plainbox/docs/dev/architecture.rst (+7/-305)
plainbox/docs/dev/config.rst (+253/-0)
plainbox/docs/dev/index.rst (+12/-7)
plainbox/docs/dev/old.rst (+339/-0)
plainbox/docs/dev/reference.rst (+15/-0)
plainbox/docs/dev/resources.rst (+259/-0)
plainbox/docs/index.rst (+8/-5)
plainbox/docs/usage.rst (+29/-5)
plainbox/mk-interesting-graphs.sh (+2/-2)
plainbox/mk-venv.sh (+181/-26)
plainbox/plainbox/data/org.freedesktop.policykit.pkexec.policy (+30/-0)
plainbox/plainbox/data/plainbox-ci-mailer.conf (+44/-0)
plainbox/plainbox/data/plainbox.conf (+26/-0)
plainbox/plainbox/data/plainbox.desktop (+10/-0)
plainbox/plainbox/data/report/hardware-1_0.rng (+533/-0)
plainbox/plainbox/impl/applogic.py (+173/-0)
plainbox/plainbox/impl/box.py (+13/-386)
plainbox/plainbox/impl/checkbox.py (+161/-74)
plainbox/plainbox/impl/commands/check_config.py (+92/-0)
plainbox/plainbox/impl/commands/checkbox.py (+101/-0)
plainbox/plainbox/impl/commands/run.py (+319/-0)
plainbox/plainbox/impl/commands/special.py (+133/-0)
plainbox/plainbox/impl/commands/sru.py (+270/-0)
plainbox/plainbox/impl/commands/test_run.py (+28/-0)
plainbox/plainbox/impl/commands/test_sru.py (+63/-0)
plainbox/plainbox/impl/config.py (+538/-0)
plainbox/plainbox/impl/depmgr.py (+59/-5)
plainbox/plainbox/impl/exporter/__init__.py (+53/-8)
plainbox/plainbox/impl/exporter/json.py (+12/-5)
plainbox/plainbox/impl/exporter/rfc822.py (+5/-2)
plainbox/plainbox/impl/exporter/test_init.py (+22/-3)
plainbox/plainbox/impl/exporter/test_json.py (+13/-7)
plainbox/plainbox/impl/exporter/test_rfc822.py (+47/-0)
plainbox/plainbox/impl/exporter/test_text.py (+43/-0)
plainbox/plainbox/impl/exporter/test_xml.py (+96/-0)
plainbox/plainbox/impl/exporter/text.py (+3/-3)
plainbox/plainbox/impl/exporter/xml.py (+385/-0)
plainbox/plainbox/impl/integration_tests.py (+8/-5)
plainbox/plainbox/impl/job.py (+36/-46)
plainbox/plainbox/impl/mock_job.py (+1/-1)
plainbox/plainbox/impl/rfc822.py (+4/-19)
plainbox/plainbox/impl/runner.py (+90/-42)
plainbox/plainbox/impl/secure/__init__.py (+27/-0)
plainbox/plainbox/impl/secure/checkbox_trusted_launcher.py (+402/-0)
plainbox/plainbox/impl/secure/test_checkbox_trusted_launcher.py (+268/-0)
plainbox/plainbox/impl/session.py (+95/-9)
plainbox/plainbox/impl/test_applogic.py (+108/-0)
plainbox/plainbox/impl/test_box.py (+24/-9)
plainbox/plainbox/impl/test_checkbox.py (+83/-0)
plainbox/plainbox/impl/test_config.py (+153/-0)
plainbox/plainbox/impl/test_depmgr.py (+22/-2)
plainbox/plainbox/impl/test_job.py (+142/-66)
plainbox/plainbox/impl/test_result.py (+2/-2)
plainbox/plainbox/impl/test_rfc822.py (+27/-19)
plainbox/plainbox/impl/test_runner.py (+62/-0)
plainbox/plainbox/impl/test_session.py (+123/-11)
plainbox/plainbox/impl/testing_utils.py (+1/-1)
plainbox/plainbox/impl/transport/__init__.py (+95/-0)
plainbox/plainbox/impl/transport/certification.py (+132/-0)
plainbox/plainbox/impl/transport/test_certification.py (+183/-0)
plainbox/plainbox/impl/transport/test_init.py (+68/-0)
plainbox/plainbox/test-data/xml-exporter/example-data.json (+19037/-0)
plainbox/plainbox/test-data/xml-exporter/example-data.xml (+15749/-0)
plainbox/plainbox/test-data/xml-exporter/test_dump_with_binary_attachment.json (+7/-0)
plainbox/plainbox/test-data/xml-exporter/test_dump_with_binary_attachment.xml (+21/-0)
plainbox/plainbox/test-data/xml-exporter/test_dump_with_comments.json (+13/-0)
plainbox/plainbox/test-data/xml-exporter/test_dump_with_comments.xml (+30/-0)
plainbox/plainbox/test-data/xml-exporter/test_dump_with_hardware_info.json (+10/-0)
plainbox/plainbox/test-data/xml-exporter/test_dump_with_hardware_info.xml (+22/-0)
plainbox/plainbox/test-data/xml-exporter/test_dump_with_io_log.json (+14/-0)
plainbox/plainbox/test-data/xml-exporter/test_dump_with_io_log.xml (+30/-0)
plainbox/plainbox/test-data/xml-exporter/test_dump_with_text_attachment.json (+7/-0)
plainbox/plainbox/test-data/xml-exporter/test_dump_with_text_attachment.xml (+21/-0)
plainbox/plainbox/testing_utils/__init__.py (+50/-1)
plainbox/requirements/rtfd.txt (+5/-0)
plainbox/setup.py (+20/-2)
plainbox/test-in-vagrant.sh (+82/-0)
plainbox/test-with-coverage.sh (+4/-4)
plugins/environment_info.py (+7/-0)
plugins/hexr_prompt.py (+32/-0)
plugins/hexr_transport.py (+169/-0)
plugins/jobs_prompt.py (+0/-1)
plugins/launchpad_exchange.py (+1/-1)
plugins/launchpad_prompt.py (+3/-2)
plugins/launchpad_report.py (+2/-1)
plugins/lock_prompt.py (+16/-8)
plugins/message_info.py (+4/-2)
plugins/persist_info.py (+1/-1)
po/POTFILES.in (+1/-0)
po/ace.po (+3/-3)
po/af.po (+3/-3)
po/am.po (+3/-3)
po/ar.po (+3/-3)
po/ast.po (+3/-3)
po/az.po (+3/-3)
po/be.po (+3/-3)
po/bg.po (+3/-3)
po/bn.po (+3/-3)
po/bo.po (+3/-3)
po/br.po (+3/-3)
po/bs.po (+5/-5)
po/ca.po (+3/-3)
po/ca@valencia.po (+3/-3)
po/ckb.po (+3/-3)
po/cs.po (+13/-3)
po/cy.po (+3/-3)
po/da.po (+3/-3)
po/de.po (+3/-3)
po/dv.po (+3/-3)
po/el.po (+3/-3)
po/en_AU.po (+3/-3)
po/en_CA.po (+3/-3)
po/en_GB.po (+3/-3)
po/eo.po (+3/-3)
po/es.po (+113/-113)
po/et.po (+3/-3)
po/eu.po (+3/-3)
po/fa.po (+3/-3)
po/fi.po (+3/-3)
po/fr.po (+3/-3)
po/ga.po (+3/-3)
po/gd.po (+3/-3)
po/gl.po (+242/-213)
po/he.po (+3/-3)
po/hi.po (+3/-3)
po/hr.po (+3/-3)
po/hu.po (+3/-3)
po/hy.po (+3/-3)
po/id.po (+3/-3)
po/is.po (+3/-3)
po/it.po (+11/-10)
po/ja.po (+174/-160)
po/jbo.po (+3/-3)
po/ka.po (+3/-3)
po/kk.po (+3/-3)
po/km.po (+3/-3)
po/kn.po (+3/-3)
po/ko.po (+3/-3)
po/ku.po (+3/-3)
po/ky.po (+3/-3)
po/lt.po (+3/-3)
po/lv.po (+4/-4)
po/mk.po (+3/-3)
po/ml.po (+3/-3)
po/mr.po (+3/-3)
po/ms.po (+3/-3)
po/my.po (+3/-3)
po/nb.po (+3/-3)
po/nds.po (+3/-3)
po/ne.po (+3/-3)
po/nl.po (+3/-3)
po/nn.po (+3/-3)
po/oc.po (+5/-5)
po/pl.po (+3/-3)
po/ps.po (+3/-3)
po/pt.po (+20/-20)
po/pt_BR.po (+14/-14)
po/ro.po (+3/-3)
po/ru.po (+5/-5)
po/sd.po (+3/-3)
po/shn.po (+3/-3)
po/si.po (+3/-3)
po/sk.po (+3/-3)
po/sl.po (+43/-43)
po/sq.po (+3/-3)
po/sr.po (+3/-3)
po/sv.po (+3/-3)
po/ta.po (+3/-3)
po/te.po (+3/-3)
po/th.po (+3/-3)
po/tr.po (+3/-3)
po/ug.po (+3/-3)
po/uk.po (+3/-3)
po/ur.po (+3/-3)
po/uz.po (+3/-3)
po/vi.po (+3/-3)
po/zh_CN.po (+3/-3)
po/zh_HK.po (+3/-3)
po/zh_TW.po (+3/-3)
qt/frontend/qtfront.cpp (+11/-1)
qt/frontend/qtfront.h (+2/-1)
qt/frontend/qtfront.ui (+20/-4)
scripts/alsa_record_playback (+1/-1)
scripts/bluetooth_test (+1/-1)
scripts/camera_test (+76/-46)
scripts/cpu_offlining (+25/-13)
scripts/cpu_topology (+1/-1)
scripts/create_connection (+172/-55)
scripts/fwts_test (+26/-23)
scripts/glob_test (+121/-0)
scripts/gpu_test (+74/-71)
scripts/gputest_benchmark (+110/-0)
scripts/graphics_stress_test (+6/-0)
scripts/lsmod_info (+6/-3)
scripts/memory_compare (+6/-3)
scripts/mm-test (+527/-0)
scripts/network (+382/-0)
scripts/network_check (+5/-1)
scripts/network_device_info (+11/-10)
scripts/rendercheck_test (+7/-0)
scripts/sleep_test_log_check (+72/-0)
scripts/sources_test (+11/-8)
scripts/virtualization (+82/-29)
scripts/xen_test (+74/-0)
setup.cfg (+1/-0)
setup.py (+6/-6)
tarmac-verify (+15/-5)
test-in-vagrant.sh (+101/-20)
test_scripts/tests/test_gputest_benchmark.py (+82/-0)
To merge this branch: bzr merge lp:~roadmr/ubuntu/saucy/checkbox/0.16
Reviewer Review Type Date Requested Status
Daniel Manrique (community) Approve
Ubuntu branches Pending
Review via email: mp+163215@code.launchpad.net

Description of the change

New version of checkbox for Ubuntu, bringing it in sync with checkbox trunk.

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

Self-approving.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'Vagrantfile'
2--- Vagrantfile 2013-03-07 15:52:02 +0000
3+++ Vagrantfile 2013-05-09 20:11:45 +0000
4@@ -3,45 +3,54 @@
5
6 Vagrant::Config.run do |config|
7
8+ config.ssh.timeout = 60
9+
10+ # Define a Ubuntu Server image (cloud) for the 12.04 release (precise)
11+ config.vm.define :precise do |precise_config|
12+ precise_config.vm.box = "precise-cloud-i386"
13+ precise_config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/precise/current/precise-server-cloudimg-i386-vagrant-disk1.box"
14+ end
15+
16 # Define a Ubuntu Server image (cloud) for the 12.10 release (quantal)
17 config.vm.define :quantal do |quantal_config|
18 quantal_config.vm.box = "quantal-cloud-i386"
19 quantal_config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/quantal/current/quantal-server-cloudimg-i386-vagrant-disk1.box"
20 end
21
22- # Define a Ubuntu Server image (cloud) for the 12.04 release (precise)
23- config.vm.define :precise do |precise_config|
24- precise_config.vm.box = "precise-cloud-i386"
25- precise_config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/precise/current/precise-server-cloudimg-i386-vagrant-disk1.box"
26+ # Define a Ubuntu Server image (cloud) for the 13.04 release (raring)
27+ config.vm.define :raring do |raring_config|
28+ raring_config.vm.box = "raring-cloud-i386"
29+ raring_config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/raring/current/raring-server-cloudimg-i386-vagrant-disk1.box"
30 end
31
32 # For debugging and later future GUI testing
33- # config.vm.boot_mode = :gui
34+ if ENV.key? "VAGRANT_GUI"
35+ config.vm.boot_mode = :gui
36+ end
37+
38+ # Setup an apt cache if one is available
39+ if ENV.key? "VAGRANT_APT_CACHE"
40+ config.vm.provision :shell, :inline => "echo 'Acquire::http { Proxy \"#{ENV['VAGRANT_APT_CACHE']}\"; };' > /etc/apt/apt.conf"
41+ end
42
43 # Update to have the latest packages, this is needed because the image comes
44 # with an old (and no longer working) apt cache and links to many packages no
45 # longer work.
46- config.vm.provision :shell, :inline => "apt-get update && apt-get dist-upgrade --yes"
47+ config.vm.provision :shell, :inline => "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade --yes"
48 # Install dependencies from native packages
49- config.vm.provision :shell, :inline => "apt-get install --yes python3-setuptools python3-lxml"
50+ config.vm.provision :shell, :inline => "apt-get install --yes python3-setuptools python3-pkg-resources python3-lxml"
51 # Install python3-mock so that we can create mock objects for testing
52 config.vm.provision :shell, :inline => "apt-get install --yes python3-mock"
53+ # Install python3-sphinx so that we can build documentation
54+ config.vm.provision :shell, :inline => "apt-get install --yes python3-sphinx"
55 # Install policykit-1 so that we have pkexec
56 config.vm.provision :shell, :inline => "apt-get install --yes policykit-1"
57 # Install some checkbox script dependencies:
58 # Later on those could be installed on demand to test how we behave without
59 # them but for now that's good enough. Little by little...
60 config.vm.provision :shell, :inline => "apt-get install --yes fwts"
61- # Install python3-dev so that we can build native bits of other dependencies later
62- config.vm.provision :shell, :inline => "apt-get install --yes python3-dev"
63- # Install PIP so that we can install the rest from source
64- config.vm.provision :shell, :inline => "apt-get install --yes python-pip"
65- # Update distribute as the version from ubuntu is too old to install coverage
66- config.vm.provision :shell, :inline => "pip install -U distribute"
67- # Install coverage
68- config.vm.provision :shell, :inline => "pip install -U coverage"
69 # Develop plainbox so that we have it in $PATH
70 config.vm.provision :shell, :inline => "cd /vagrant/plainbox/ && python3 setup.py develop"
71 # Create a cool symlink so that everyone knows where to go to
72- config.vm.provision :shell, :inline => "ln -fs /vagrant /home/vagrant/checkbox"
73+ config.vm.provision :shell, :inline => "ln --no-dereference --force --symbolic /vagrant /home/vagrant/checkbox"
74 end
75
76=== added file 'bin/checkbox-hw-collection'
77--- bin/checkbox-hw-collection 1970-01-01 00:00:00 +0000
78+++ bin/checkbox-hw-collection 2013-05-09 20:11:45 +0000
79@@ -0,0 +1,19 @@
80+#!/bin/bash
81+
82+set -e
83+
84+export CHECKBOX_DATA=${CHECKBOX_DATA:-~/.checkbox-hw-collection}
85+export CHECKBOX_SHARE=${CHECKBOX_SHARE:-.}
86+export CHECKBOX_OPTIONS=${CHECKBOX_OPTIONS:---whitelist-file=$CHECKBOX_SHARE/data/whitelists/hwsubmit.whitelist}
87+export PYTHONPATH=$PYTHONPATH:$CHECKBOX_SHARE
88+
89+if [ $CHECKBOX_DATA != '.' ]
90+then
91+ old_data=$HOME/.checkbox-hw-collection
92+ if [ -d $old_data ] && [ ! -d $CHECKBOX_DATA ]
93+ then
94+ mv -f $old_data $CHECKBOX_DATA
95+ fi
96+fi
97+
98+python3 $CHECKBOX_SHARE/run "$@" $CHECKBOX_SHARE/configs/$(basename $0).ini
99
100=== modified file 'checkbox/contrib/xrandr.py'
101--- checkbox/contrib/xrandr.py 2012-09-03 13:51:52 +0000
102+++ checkbox/contrib/xrandr.py 2013-05-09 20:11:45 +0000
103@@ -32,9 +32,21 @@
104 #
105 # You should have received a copy of the GNU Lesser General Public
106 # License along with this library; if not, write to the Free Software
107-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
108+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
109+# MA 02110-1301 USA
110
111-from ctypes import *
112+from ctypes import (
113+ POINTER,
114+ Structure,
115+ byref,
116+ c_char_p,
117+ c_void_p,
118+ c_int,
119+ c_long,
120+ c_ulong,
121+ c_ushort,
122+ cdll,
123+)
124 import os
125
126 RR_ROTATE_0 = 1
127@@ -90,10 +102,11 @@
128 xlib = cdll.LoadLibrary('libX11.so.6')
129 rr = cdll.LoadLibrary('libXrandr.so.2')
130
131+
132 # query resources
133 class _XRRModeInfo(Structure):
134 _fields_ = [
135- ("id", RRMode), # XID is c_long
136+ ("id", RRMode), # XID is c_long
137 ("width", c_int),
138 ("height", c_int),
139 ("dotClock", c_long),
140@@ -109,6 +122,7 @@
141 ("modeFlags", c_long),
142 ]
143
144+
145 class _XRRScreenSize(Structure):
146 _fields_ = [
147 ("width", c_int),
148@@ -117,6 +131,7 @@
149 ("mheight", c_int)
150 ]
151
152+
153 class _XRRCrtcInfo(Structure):
154 _fields_ = [
155 ("timestamp", Time),
156@@ -133,6 +148,7 @@
157 ("possible", POINTER(RROutput)),
158 ]
159
160+
161 class _XRRScreenResources(Structure):
162 _fields_ = [
163 ("timestamp", Time),
164@@ -145,16 +161,19 @@
165 ("modes", POINTER(_XRRModeInfo)),
166 ]
167
168+
169 class RRError(Exception):
170 """Base exception class of the module"""
171 pass
172
173+
174 class UnsupportedRRError(RRError):
175 """Raised if the required XRandR extension version is not available"""
176 def __init__(self, required, current):
177 self.required = required
178 self.current = current
179
180+
181 # XRRGetOutputInfo
182 class _XRROutputInfo(Structure):
183 _fields_ = [
184@@ -175,6 +194,7 @@
185 ("modes", POINTER(RRMode))
186 ]
187
188+
189 class _XRRCrtcGamma(Structure):
190 _fields_ = [
191 ('size', c_int),
192@@ -183,13 +203,15 @@
193 ('blue', POINTER(c_ushort)),
194 ]
195
196-def _array_conv(array, type, conv = lambda x:x):
197+
198+def _array_conv(array, type, conv=lambda x: x):
199 length = len(array)
200- res = (type*length)()
201+ res = (type * length)()
202 for i in range(length):
203 res[i] = conv(array[i])
204 return res
205
206+
207 class Output:
208 """The output is a reference to a supported output jacket of the graphics
209 card. Outputs are attached to a hardware pipe to be used. Furthermore
210@@ -220,16 +242,22 @@
211 """Frees the internal reference to the output info if the output gets
212 removed"""
213 rr.XRRFreeOutputInfo(self._info)
214+
215 def get_physical_width(self):
216 """Returns the display width reported by the connected output device"""
217 return self._info.contents.mm_width
218+
219 def get_physical_height(self):
220- """Returns the display height reported by the connected output device"""
221+ """
222+ Returns the display height reported by the connected output device
223+ """
224 return self._info.contents.mm_height
225+
226 def get_crtc(self):
227 """Returns the xid of the hardware pipe to which the output is
228 attached. If the output is disabled it will return 0"""
229 return self._info.contents.crtc
230+
231 def get_crtcs(self):
232 """Returns the xids of the hardware pipes to which the output could
233 be attached"""
234@@ -290,7 +318,8 @@
235
236 def disable(self):
237 """Disables the output"""
238- if not self.is_active(): return
239+ if not self.is_active():
240+ return
241 self._mode = None
242 self._crtc._outputs.remove(self)
243 self._crtc = None
244@@ -342,9 +371,11 @@
245 else:
246 return self._changes != CHANGES_NONE
247
248+
249 class Crtc:
250 """The crtc is a reference to a hardware pipe that is provided by the
251 graphics device. Outputs can be attached to crtcs"""
252+
253 def __init__(self, info, xid, screen):
254 """Initializes the hardware pipe object"""
255 self._info = info
256@@ -437,24 +468,34 @@
257 return False
258 if len(self._outputs):
259 for other in self._outputs:
260- if other == output: continue
261- if other._x != output._x: return False
262- if other._y != output._y: return False
263- if other._mode != output._mode: return False
264- if other._rotation != output._rotation: return False
265+ if other == output:
266+ continue
267+ if other._x != output._x:
268+ return False
269+ if other._y != output._y:
270+ return False
271+ if other._mode != output._mode:
272+ return False
273+ if other._rotation != output._rotation:
274+ return False
275 #FIXME: pick_crtc is still missing
276 elif self._info.contents.noutput > 0:
277- if self._info.contents.x != output._x: return False
278- if self._info.contents.y != output._y: return False
279- if self._info.contents.mode_info != output._mode: return False
280- if self._info.rotation != output._rotation: return False
281+ if self._info.contents.x != output._x:
282+ return False
283+ if self._info.contents.y != output._y:
284+ return False
285+ if self._info.contents.mode_info != output._mode:
286+ return False
287+ if self._info.rotation != output._rotation:
288+ return False
289 return True
290
291 def supports_rotation(self, rotation):
292 """Check if the given rotation is supported by the crtc"""
293 rotations = self._info.contents.rotations
294- dir = rotation & (RR_ROTATE_0|RR_ROTATE_90|RR_ROTATE_180|RR_ROTATE_270)
295- reflect = rotation & (RR_REFLECT_X|RR_REFLECT_Y)
296+ dir = rotation & (RR_ROTATE_0 | RR_ROTATE_90 | RR_ROTATE_180 |
297+ RR_ROTATE_270)
298+ reflect = rotation & (RR_REFLECT_X | RR_REFLECT_Y)
299 if (((rotations & dir) != 0) and ((rotations & reflect) == reflect)):
300 return True
301 return False
302@@ -467,10 +508,13 @@
303 for i in range(self._info.contents.noutput):
304 id = self._info.contents.outputs[i]
305 output = self._screen.get_output_by_id(id)
306- if not output in self._outputs: return True
307- if output.has_changed(): return True
308+ if not output in self._outputs:
309+ return True
310+ if output.has_changed():
311+ return True
312 return False
313
314+
315 class Screen:
316 def __init__(self, dpy, screen=-1):
317 """Initializes the screen"""
318@@ -500,7 +544,7 @@
319 self._load_config()
320 (self._width, self._height,
321 self._width_mm, self._height_mm) = self.get_size()
322- if XRANDR_VERSION >= (1,2):
323+ if XRANDR_VERSION >= (1, 2):
324 self._load_screen_size_range()
325 self._load_crtcs()
326 self._load_outputs()
327@@ -596,7 +640,7 @@
328
329 def get_current_rate(self):
330 """Returns the currently used refresh rate"""
331- _check_required_version((1,0))
332+ _check_required_version((1, 0))
333 xccr = rr.XRRConfigCurrentRate
334 xccr.restype = c_int
335 return xccr(self._config)
336@@ -605,7 +649,7 @@
337 """Returns the refresh rates that are supported by the screen for
338 the given resolution. See get_available_sizes for the resolution to
339 which size_index points"""
340- _check_required_version((1,0))
341+ _check_required_version((1, 0))
342 rates = []
343 nrates = c_int()
344 rr.XRRConfigRates.restype = POINTER(c_ushort)
345@@ -617,14 +661,14 @@
346 def get_current_rotation(self):
347 """Returns the currently used rotation. Can be RR_ROTATE_0,
348 RR_ROTATE_90, RR_ROTATE_180 or RR_ROTATE_270"""
349- _check_required_version((1,0))
350+ _check_required_version((1, 0))
351 current = c_ushort()
352- rotations = rr.XRRConfigRotations(self._config, byref(current))
353+ rr.XRRConfigRotations(self._config, byref(current))
354 return current.value
355
356 def get_available_rotations(self):
357 """Returns a binary flag that holds the available resolutions"""
358- _check_required_version((1,0))
359+ _check_required_version((1, 0))
360 current = c_ushort()
361 rotations = rr.XRRConfigRotations(self._config, byref(current))
362 return rotations
363@@ -632,7 +676,7 @@
364 def get_current_size_index(self):
365 """Returns the position of the currently used resolution size in the
366 list of available resolutions. See get_available_sizes"""
367- _check_required_version((1,0))
368+ _check_required_version((1, 0))
369 rotation = c_ushort()
370 size = rr.XRRConfigCurrentConfiguration(self._config,
371 byref(rotation))
372@@ -641,7 +685,7 @@
373 def get_available_sizes(self):
374 """Returns the available resolution sizes of the screen. The size
375 index points to the corresponding resolution of this list"""
376- _check_required_version((1,0))
377+ _check_required_version((1, 0))
378 sizes = []
379 nsizes = c_int()
380 xcs = rr.XRRConfigSizes
381@@ -655,7 +699,7 @@
382 """Configures the screen with the given resolution at the given size
383 index, rotation and refresh rate. To get in effect call
384 Screen.apply_config()"""
385- _check_required_version((1,0))
386+ _check_required_version((1, 0))
387 self.set_size_index(size_index)
388 self.set_refresh_rate(rate)
389 self.set_rotation(rotation)
390@@ -710,7 +754,7 @@
391
392 def print_info(self, verbose=False):
393 """Prints some information about the detected screen and its outputs"""
394- _check_required_version((1,0))
395+ _check_required_version((1, 0))
396 print("Screen %s: minimum %s x %s, current %s x %s, maximum %s x %s" %\
397 (self._screen,
398 self._width_min, self._height_min,
399@@ -728,20 +772,25 @@
400 i = 0
401 print("Sizes @ Refresh Rates:")
402 for s in self.get_available_sizes():
403- print(" [%s] %s x %s @ %s" % (i, s.width, s.height,
404- self.get_available_rates_for_size_index(i)))
405+ print(" [%s] %s x %s @ %s" % (
406+ i, s.width, s.height,
407+ self.get_available_rates_for_size_index(i)))
408 i += 1
409 print("Rotations:")
410 rots = self.get_available_rotations()
411- if rots & RR_ROTATE_0: print("normal")
412- if rots & RR_ROTATE_90: print("right")
413- if rots & RR_ROTATE_180: print("inverted")
414- if rots & RR_ROTATE_270: print("left")
415+ if rots & RR_ROTATE_0:
416+ print("normal")
417+ if rots & RR_ROTATE_90:
418+ print("right")
419+ if rots & RR_ROTATE_180:
420+ print("inverted")
421+ if rots & RR_ROTATE_270:
422+ print("left")
423 print("")
424 print("Outputs:")
425 for o in list(self.outputs.keys()):
426 output = self.outputs[o]
427- print(" %s" % o)
428+ print(" %s" % o)
429 if output.is_connected():
430 print("(%smm x %smm)" % (output.get_physical_width(),
431 output.get_physical_height()))
432@@ -761,40 +810,45 @@
433 print("")
434 print(" Rotations:")
435 rots = output.get_available_rotations()
436- if rots & RR_ROTATE_0: print("normal")
437- if rots & RR_ROTATE_90: print("right")
438- if rots & RR_ROTATE_180: print("inverted")
439- if rots & RR_ROTATE_270: print("left")
440+ if rots & RR_ROTATE_0:
441+ print("normal")
442+ if rots & RR_ROTATE_90:
443+ print("right")
444+ if rots & RR_ROTATE_180:
445+ print("inverted")
446+ if rots & RR_ROTATE_270:
447+ print("left")
448 print("")
449 else:
450 print("(not connected)")
451 if verbose:
452 print(" Core properties:")
453- for (f,t) in output._info.contents._fields_:
454- print(" %s: %s" % (f,
455- getattr(output._info.contents, f)))
456+ for (f, t) in output._info.contents._fields_:
457+ print(" %s: %s" % (
458+ f, getattr(output._info.contents, f)))
459
460 def get_outputs(self):
461 """Returns the outputs of the screen"""
462- _check_required_version((1,2))
463+ _check_required_version((1, 2))
464 return list(self.outputs.values())
465
466 def get_output_names(self):
467- _check_required_version((1,2))
468+ _check_required_version((1, 2))
469 return list(self.outputs.keys())
470
471 def set_size(self, width, height, width_mm, height_mm):
472 """Apply the given pixel and physical size to the screen"""
473- _check_required_version((1,2))
474+ _check_required_version((1, 2))
475 # Check if we really need to apply the changes
476- if (width, height, width_mm, height_mm) == self.get_size(): return
477+ if (width, height, width_mm, height_mm) == self.get_size():
478+ return
479 rr.XRRSetScreenSize(self._display, self._root,
480 c_int(width), c_int(height),
481 c_int(width_mm), c_int(height_mm))
482
483 def apply_output_config(self):
484 """Used for instantly applying RandR 1.2 changes"""
485- _check_required_version((1,2))
486+ _check_required_version((1, 2))
487 self._arrange_outputs()
488 self._calculate_size()
489 self.set_size(self._width, self._height,
490@@ -802,7 +856,8 @@
491
492 # Assign all active outputs to crtcs
493 for output in list(self.outputs.values()):
494- if not output._mode or output._crtc: continue
495+ if not output._mode or output._crtc:
496+ continue
497 for crtc in output.get_crtcs():
498 if crtc and crtc.supports_output(output):
499 crtc.add_output(output)
500@@ -819,7 +874,7 @@
501
502 def apply_config(self):
503 """Used for instantly applying RandR 1.0 changes"""
504- _check_required_version((1,0))
505+ _check_required_version((1, 0))
506 status = rr.XRRSetScreenConfigAndRate(self._display,
507 self._config,
508 self._root,
509@@ -834,7 +889,8 @@
510 for output in self.get_outputs():
511 # Skip not changed and not used outputs
512 if not output.has_changed(CHANGES_RELATION) or \
513- output._mode == None: continue
514+ output._mode == None:
515+ continue
516 relative = output._relative_to
517 mode = self.get_mode_by_xid(output._mode)
518 mode_relative = self.get_mode_by_xid(relative._mode)
519@@ -867,11 +923,15 @@
520 min_x = 32768
521 min_y = 32768
522 for output in self.get_outputs():
523- if output._mode == None: continue
524- if output._x < min_x: min_x = output._x
525- if output._y < min_y: min_y = output._y
526+ if output._mode == None:
527+ continue
528+ if output._x < min_x:
529+ min_x = output._x
530+ if output._y < min_y:
531+ min_y = output._y
532 for output in self.get_outputs():
533- if output._mode == None: continue
534+ if output._mode == None:
535+ continue
536 output._x -= min_x
537 output._y -= min_y
538 output._changes = output._changes | CHANGES_POSITION
539@@ -882,14 +942,17 @@
540 width = self._width
541 height = self._height
542 for output in self.get_outputs():
543- if not output._mode: continue
544+ if not output._mode:
545+ continue
546 mode = self.get_mode_by_xid(output._mode)
547 x = output._x
548 y = output._y
549 w = get_mode_width(mode, output._rotation)
550 h = get_mode_height(mode, output._rotation)
551- if x + w > width: width = x + w
552- if y + h > height: height = y + h
553+ if x + w > width:
554+ width = x + w
555+ if y + h > height:
556+ height = y + h
557 if width > self._width_max or height > self._height_max:
558 raise RRError("The required size is not supported",
559 (width, height), (self._width_max, self._width_min))
560@@ -904,6 +967,7 @@
561 self._width = width
562 #FIXME: Physical size is missing
563
564+
565 def get_current_display():
566 """Returns the currently used display"""
567 display_url = os.getenv("DISPLAY")
568@@ -918,16 +982,19 @@
569 dpy = open_display(display_url.encode('utf-8'))
570 return dpy
571
572+
573 def get_current_screen():
574 """Returns the currently used screen"""
575 screen = Screen(get_current_display())
576 return screen
577
578+
579 def get_screen_of_display(display, count):
580 """Returns the screen of the given display"""
581 dpy = xlib.XOpenDisplay(display)
582 return Screen(dpy, count)
583
584+
585 def get_version():
586 """Returns a tuple containing the major and minor version of the xrandr
587 extension or None if the extension is not available"""
588@@ -939,12 +1006,14 @@
589 return (major.value, minor.value)
590 return None
591
592+
593 def has_extension():
594 """Returns True if the xrandr extension is available"""
595 if XRANDR_VERSION:
596 return True
597 return False
598
599+
600 def _to_gamma(gamma):
601 g = rr.XRRAllocGamma(len(gamma[0]))
602 for i in range(gamma[0]):
603@@ -953,6 +1022,7 @@
604 g.blue[i] = gamma[2][i]
605 return g
606
607+
608 def _from_gamma(g):
609 gamma = ([], [], [])
610 for i in range(g.size):
611@@ -961,12 +1031,14 @@
612 gamma[2].append(g.blue[i])
613 rr.XRRFreeGamma(g)
614
615+
616 def _check_required_version(version):
617 """Raises an exception if the given or a later version of xrandr is not
618 available"""
619 if XRANDR_VERSION == None or XRANDR_VERSION < version:
620 raise UnsupportedRRError(version, XRANDR_VERSION)
621
622+
623 def get_mode_height(mode, rotation):
624 """Return the height of the given mode taking the rotation into account"""
625 if rotation & (RR_ROTATE_0 | RR_ROTATE_180):
626@@ -976,6 +1048,7 @@
627 else:
628 return 0
629
630+
631 def get_mode_width(mode, rotation):
632 """Return the width of the given mode taking the rotation into account"""
633 if rotation & (RR_ROTATE_0 | RR_ROTATE_180):
634
635=== modified file 'checkbox/lib/fifo.py'
636--- checkbox/lib/fifo.py 2012-06-09 15:50:39 +0000
637+++ checkbox/lib/fifo.py 2013-05-09 20:11:45 +0000
638@@ -18,6 +18,7 @@
639 #
640 import os
641 import struct
642+import logging
643
644 from checkbox.contrib.bpickle import dumps, loads
645 from checkbox.lib.selector import Selector, SelectorIO
646@@ -36,7 +37,11 @@
647 self.close()
648
649 def close(self):
650- os.close(self.fileno)
651+ try:
652+ os.close(self.fileno)
653+ except OSError as e:
654+ logging.warning("Problem closing the fifo")
655+ logging.warning(e)
656
657 def wait_for(self, operation):
658 if self._timeout is not None:
659
660=== modified file 'checkbox/lib/template.py'
661--- checkbox/lib/template.py 2012-10-16 21:42:45 +0000
662+++ checkbox/lib/template.py 2013-05-09 20:11:45 +0000
663@@ -65,8 +65,8 @@
664 def dump_filename(self, elements, filename):
665 logging.info("Dumping elements to filename: %s", filename)
666
667- file = open(filename, "w")
668- return self.dump_file(elements, file, filename)
669+ with open(filename, "w") as stream:
670+ return self.dump_file(elements, stream, filename)
671
672 def load_file(self, file, filename="<stream>"):
673 elements = []
674@@ -139,5 +139,5 @@
675 def load_filename(self, filename):
676 logging.info("Loading elements from filename: %s", filename)
677
678- file = open(filename, "r", encoding="utf-8")
679- return self.load_file(file, filename)
680+ with open(filename, "r", encoding="utf-8") as stream:
681+ return self.load_file(stream, filename)
682
683=== modified file 'checkbox/message.py'
684--- checkbox/message.py 2012-06-01 21:34:18 +0000
685+++ checkbox/message.py 2013-05-09 20:11:45 +0000
686@@ -20,7 +20,6 @@
687 import logging
688 import itertools
689 import posixpath
690-import sys
691
692 from checkbox.contrib import bpickle
693 from checkbox.lib.safe import safe_close
694@@ -41,11 +40,12 @@
695 class MessageStore:
696 """A message store which stores its messages in a file system hierarchy."""
697
698- #This caches everything but a message's data, making it manageable to keep in memory.
699+ # This caches everything but a message's data, making it manageable to keep
700+ # in memory.
701 _message_cache = {}
702
703- #Setting this to False speeds things up considerably, at the expense
704- #of a higher risk of data loss during a crash
705+ # Setting this to False speeds things up considerably, at the expense of a
706+ # higher risk of data loss during a crash
707 safe_file_closing = True
708
709 def __init__(self, persist, directory, directory_size=1000):
710@@ -128,11 +128,12 @@
711
712 def delete_old_messages(self):
713 """Delete messages which are unlikely to be needed in the future."""
714- filenames = self._get_sorted_filenames()
715- for fn in itertools.islice(self._walk_messages(exclude=HELD+BROKEN),
716- self.get_pending_offset()):
717- os.unlink(fn)
718- containing_dir = posixpath.split(fn)[0]
719+ filenames = itertools.islice(
720+ self._walk_messages(exclude=HELD + BROKEN),
721+ self.get_pending_offset())
722+ for filename in filenames:
723+ os.unlink(filename)
724+ containing_dir = os.path.dirname(filename)
725 if not os.listdir(containing_dir):
726 os.rmdir(containing_dir)
727
728@@ -194,8 +195,9 @@
729 def _walk_pending_messages(self):
730 """Walk the files which are definitely pending."""
731 pending_offset = self.get_pending_offset()
732- for i, filename in enumerate(self._walk_messages(exclude=HELD+BROKEN)):
733- if i >= pending_offset:
734+ filenames = self._walk_messages(exclude=HELD + BROKEN)
735+ for index, filename in enumerate(filenames):
736+ if index >= pending_offset:
737 yield filename
738
739 def _walk_messages(self, exclude=None):
740@@ -235,12 +237,12 @@
741 dirname, basename = posixpath.split(path)
742 new_path = posixpath.join(dirname, basename.split("_")[0])
743 if flags:
744- new_path += "_"+"".join(sorted(set(flags)))
745+ new_path += "_" + "".join(sorted(set(flags)))
746 os.rename(path, new_path)
747 return new_path
748
749 def _add_flags(self, path, flags):
750- self._set_flags(path, self._get_flags(path)+flags)
751+ self._set_flags(path, self._get_flags(path) + flags)
752
753 def _load_message(self, data):
754 return bpickle.loads(data)
755@@ -251,7 +253,7 @@
756 def _read_message(self, filename, cache=False):
757 #cache basically indicates whether the caller cares about having "data"
758 if cache and filename in self._message_cache:
759- return Message(self._message_cache[filename],filename)
760+ return Message(self._message_cache[filename], filename)
761
762 data = self._get_content(filename)
763 message = self._load_message(data)
764@@ -271,7 +273,7 @@
765
766 #Strip the big data element and shove it in the cache
767
768- temp_message=dict(message)
769+ temp_message = dict(message)
770 if "data" in temp_message:
771 temp_message["data"] = None
772
773
774=== modified file 'checkbox/parsers/submission.py'
775--- checkbox/parsers/submission.py 2012-10-12 21:30:46 +0000
776+++ checkbox/parsers/submission.py 2013-05-09 20:11:45 +0000
777@@ -99,7 +99,7 @@
778
779 context_parsers = {
780 "/proc/cpuinfo": self.parseCpuinfo,
781- "/proc/meminfo": self.parseMeminfo,
782+ "meminfo": self.parseMeminfo,
783 "dmidecode": DmidecodeParser,
784 "udevadm": self.parseUdevadm,
785 "efi": EfiParser,
786
787=== modified file 'checkbox/parsers/tests/fixtures/submission_info_memory.xml'
788--- checkbox/parsers/tests/fixtures/submission_info_memory.xml 2012-10-12 21:19:04 +0000
789+++ checkbox/parsers/tests/fixtures/submission_info_memory.xml 2013-05-09 20:11:45 +0000
790@@ -1,7 +1,7 @@
791 <?xml version="1.0" ?>
792 <system version="1.0">
793 <context>
794-<info command="cat /proc/meminfo">MemTotal: 1976036 kB
795+<info command="meminfo_attachment">MemTotal: 1976036 kB
796 MemFree: 590948 kB
797 Buffers: 100976 kB
798 Cached: 465660 kB
799
800=== modified file 'checkbox/parsers/tests/test_cputable.py'
801--- checkbox/parsers/tests/test_cputable.py 2012-10-09 13:32:06 +0000
802+++ checkbox/parsers/tests/test_cputable.py 2013-05-09 20:11:45 +0000
803@@ -60,7 +60,7 @@
804
805 def test_empty(self):
806 result = self.getResult("")
807- self.assertEquals(result.cpus, [])
808+ self.assertEqual(result.cpus, [])
809
810 def test_i386(self):
811 result = self.getResult("""
812@@ -68,7 +68,7 @@
813 i386 i686 (i[3456]86|pentium) 32 little
814 """)
815 debian_cpu = result.getByDebianName("i386")
816- self.assertNotEquals(debian_cpu, None)
817+ self.assertNotEqual(debian_cpu, None)
818 gnu_cpu = result.getByGnuName("i686")
819- self.assertNotEquals(gnu_cpu, None)
820- self.assertEquals(debian_cpu, gnu_cpu)
821+ self.assertNotEqual(gnu_cpu, None)
822+ self.assertEqual(debian_cpu, gnu_cpu)
823
824=== modified file 'checkbox/parsers/tests/test_description.py'
825--- checkbox/parsers/tests/test_description.py 2012-10-09 13:32:06 +0000
826+++ checkbox/parsers/tests/test_description.py 2013-05-09 20:11:45 +0000
827@@ -46,22 +46,22 @@
828
829 def test_one_line(self):
830 line = PURPOSE_RE.sub(r"", "1. foo\n")
831- self.assertEquals(line, "foo\n")
832+ self.assertEqual(line, "foo\n")
833
834 def test_two_lines(self):
835 line = PURPOSE_RE.sub(r"", "1. foo\n2. bar\n")
836- self.assertEquals(line, "foo\nbar\n")
837+ self.assertEqual(line, "foo\nbar\n")
838
839
840 class TestStepsRe(TestCase):
841
842 def test_one_line(self):
843 line = STEPS_RE.sub(r"\1.\2", "1: foo\n")
844- self.assertEquals(line, "1. foo\n")
845+ self.assertEqual(line, "1. foo\n")
846
847 def test_two_lines(self):
848 line = STEPS_RE.sub(r"\1.\2", "1: foo\n2: bar\n")
849- self.assertEquals(line, "1. foo\n2. bar\n")
850+ self.assertEqual(line, "1. foo\n2. bar\n")
851
852
853 class TestDescriptionParser(TestCase):
854@@ -78,14 +78,14 @@
855
856 def assertResult(
857 self, result, purpose=None, steps=None, verification=None, info=None):
858- self.assertEquals(result.purpose, purpose)
859- self.assertEquals(result.steps, steps)
860- self.assertEquals(result.verification, verification)
861- self.assertEquals(result.info, info)
862+ self.assertEqual(result.purpose, purpose)
863+ self.assertEqual(result.steps, steps)
864+ self.assertEqual(result.verification, verification)
865+ self.assertEqual(result.info, info)
866
867 def test_empty(self):
868 result = self.getResult("")
869- self.assertEquals(result.purpose, None)
870+ self.assertEqual(result.purpose, None)
871
872 def test_purpose(self):
873 result = self.getResult("""
874@@ -151,10 +151,10 @@
875 VERIFICACIÓN:
876 ¿Son las pantallas y los modos de vídeo correctos?
877 """)
878- self.assertNotEquals(result.purpose, None)
879- self.assertNotEquals(result.steps, None)
880- self.assertNotEquals(result.verification, None)
881- self.assertEquals(result.info, "$output\n")
882+ self.assertNotEqual(result.purpose, None)
883+ self.assertNotEqual(result.steps, None)
884+ self.assertNotEqual(result.verification, None)
885+ self.assertEqual(result.info, "$output\n")
886
887 def test_ru(self):
888 result = self.getResult("""
889@@ -166,10 +166,10 @@
890 ПРОВЕРКА:
891 Был ли слышен звук в наушниках и был ли он воспроизведён в ваших наушниках без искажений, щелчков или других искажённых звуков?"
892 """)
893- self.assertNotEquals(result.purpose, None)
894- self.assertNotEquals(result.steps, None)
895- self.assertNotEquals(result.verification, None)
896- self.assertEquals(result.info, None)
897+ self.assertNotEqual(result.purpose, None)
898+ self.assertNotEqual(result.steps, None)
899+ self.assertNotEqual(result.verification, None)
900+ self.assertEqual(result.info, None)
901
902 def test_substitute_purpose(self):
903 result = self.getResult("""
904
905=== modified file 'checkbox/parsers/tests/test_dmi.py'
906--- checkbox/parsers/tests/test_dmi.py 2012-10-09 13:32:06 +0000
907+++ checkbox/parsers/tests/test_dmi.py 2013-05-09 20:11:45 +0000
908@@ -45,36 +45,36 @@
909
910 def test_devices(self):
911 result = self.getResult()
912- self.assertEquals(len(result.devices), 4)
913+ self.assertEqual(len(result.devices), 4)
914
915 def test_bios(self):
916 result = self.getResult()
917 device = result.getDevice("BIOS")
918 self.assertTrue(device)
919- self.assertEquals(device.product, "BIOS PRODUCT")
920- self.assertEquals(device.vendor, "BIOS VENDOR")
921- self.assertEquals(device.serial, None)
922+ self.assertEqual(device.product, "BIOS PRODUCT")
923+ self.assertEqual(device.vendor, "BIOS VENDOR")
924+ self.assertEqual(device.serial, None)
925
926 def test_board(self):
927 result = self.getResult()
928 device = result.getDevice("BOARD")
929 self.assertTrue(device)
930- self.assertEquals(device.product, None)
931- self.assertEquals(device.vendor, None)
932- self.assertEquals(device.serial, None)
933+ self.assertEqual(device.product, None)
934+ self.assertEqual(device.vendor, None)
935+ self.assertEqual(device.serial, None)
936
937 def test_chassis(self):
938 result = self.getResult()
939 device = result.getDevice("CHASSIS")
940 self.assertTrue(device)
941- self.assertEquals(device.product, "Notebook")
942- self.assertEquals(device.vendor, "CHASSIS VENDOR")
943- self.assertEquals(device.serial, None)
944+ self.assertEqual(device.product, "Notebook")
945+ self.assertEqual(device.vendor, "CHASSIS VENDOR")
946+ self.assertEqual(device.serial, None)
947
948 def test_system(self):
949 result = self.getResult()
950 device = result.getDevice("SYSTEM")
951 self.assertTrue(device)
952- self.assertEquals(device.product, "SYSTEM PRODUCT")
953- self.assertEquals(device.vendor, "SYSTEM VENDOR")
954- self.assertEquals(device.serial, "SYSTEM SERIAL")
955+ self.assertEqual(device.product, "SYSTEM PRODUCT")
956+ self.assertEqual(device.vendor, "SYSTEM VENDOR")
957+ self.assertEqual(device.serial, "SYSTEM SERIAL")
958
959=== modified file 'checkbox/parsers/tests/test_efi.py'
960--- checkbox/parsers/tests/test_efi.py 2012-10-09 13:32:06 +0000
961+++ checkbox/parsers/tests/test_efi.py 2013-05-09 20:11:45 +0000
962@@ -46,18 +46,18 @@
963
964 def test_empty(self):
965 result = self.getResult("")
966- self.assertEquals(result.device, None)
967+ self.assertEqual(result.device, None)
968
969 def test_product(self):
970 result = self.getResult("""
971 Foo Bar
972 """)
973- self.assertEquals(result.device.vendor, None)
974- self.assertEquals(result.device.product, "Foo Bar")
975+ self.assertEqual(result.device.vendor, None)
976+ self.assertEqual(result.device.product, "Foo Bar")
977
978 def test_vendor_product(self):
979 result = self.getResult("""
980 Foo by Bar
981 """)
982- self.assertEquals(result.device.vendor, "Foo")
983- self.assertEquals(result.device.product, "Bar")
984+ self.assertEqual(result.device.vendor, "Foo")
985+ self.assertEqual(result.device.product, "Bar")
986
987=== modified file 'checkbox/parsers/tests/test_submission.py'
988--- checkbox/parsers/tests/test_submission.py 2013-03-07 15:52:02 +0000
989+++ checkbox/parsers/tests/test_submission.py 2013-05-09 20:11:45 +0000
990@@ -18,7 +18,6 @@
991 # along with Checkbox. If not, see <http://www.gnu.org/licenses/>.
992 #
993 import os
994-import gzip
995
996 from unittest import TestCase
997
998@@ -64,28 +63,22 @@
999
1000 class TestSubmissionParser(TestCase):
1001
1002- def getFixture(self, name):
1003- return os.path.join(os.path.dirname(__file__), "fixtures", name)
1004-
1005- def getParser(self, name):
1006- fixture = self.getFixture(name)
1007- stream = open(fixture)
1008- return SubmissionParser(stream)
1009-
1010 def getResult(self, name, project="test"):
1011 result = {}
1012- parser = self.getParser(name)
1013- parser.run(SubmissionRun, result=result, project=project)
1014+ fixture = os.path.join(os.path.dirname(__file__), "fixtures", name)
1015+ with open(fixture) as stream:
1016+ parser = SubmissionParser(stream)
1017+ parser.run(SubmissionRun, result=result, project=project)
1018 return result
1019
1020 def test_distribution(self):
1021 """Distribution information is in the lsbrelease element."""
1022 result = self.getResult("submission_lsbrelease.xml")
1023 self.assertTrue("distribution" in result)
1024- self.assertEquals(result["distribution"]["release"], "12.10")
1025- self.assertEquals(result["distribution"]["codename"], "quantal")
1026- self.assertEquals(result["distribution"]["distributor_id"], "Ubuntu")
1027- self.assertEquals(
1028+ self.assertEqual(result["distribution"]["release"], "12.10")
1029+ self.assertEqual(result["distribution"]["codename"], "quantal")
1030+ self.assertEqual(result["distribution"]["distributor_id"], "Ubuntu")
1031+ self.assertEqual(
1032 result["distribution"]["description"],
1033 "Ubuntu quantal (development branch)")
1034
1035@@ -93,45 +86,45 @@
1036 """Memory state is in an info element."""
1037 result = self.getResult("submission_info_memory.xml")
1038 self.assertTrue("memory_state" in result)
1039- self.assertEquals(result["memory_state"]["total"], 2023460864)
1040- self.assertEquals(result["memory_state"]["swap"], 2067787776)
1041+ self.assertEqual(result["memory_state"]["total"], 2023460864)
1042+ self.assertEqual(result["memory_state"]["swap"], 2067787776)
1043
1044 def test_processor(self):
1045 """Processor information can be in a processors element."""
1046 result = self.getResult("submission_processors.xml")
1047 self.assertTrue("processor_state" in result)
1048- self.assertEquals(result["processor_state"]["bogomips"], 1197)
1049- self.assertEquals(result["processor_state"]["cache"], 1048576)
1050- self.assertEquals(result["processor_state"]["count"], 1)
1051- self.assertEquals(result["processor_state"]["make"], "GenuineIntel")
1052- self.assertEquals(
1053+ self.assertEqual(result["processor_state"]["bogomips"], 1197)
1054+ self.assertEqual(result["processor_state"]["cache"], 1048576)
1055+ self.assertEqual(result["processor_state"]["count"], 1)
1056+ self.assertEqual(result["processor_state"]["make"], "GenuineIntel")
1057+ self.assertEqual(
1058 result["processor_state"]["model"],
1059 "Intel(R) Pentium(R) M processor 1100MHz")
1060- self.assertEquals(result["processor_state"]["model_number"], "6")
1061- self.assertEquals(result["processor_state"]["model_revision"], "5")
1062- self.assertEquals(result["processor_state"]["model_version"], "9")
1063- self.assertEquals(
1064+ self.assertEqual(result["processor_state"]["model_number"], "6")
1065+ self.assertEqual(result["processor_state"]["model_revision"], "5")
1066+ self.assertEqual(result["processor_state"]["model_version"], "9")
1067+ self.assertEqual(
1068 result["processor_state"]["other"],
1069 """fpu vme de pse tsc msr mce cx8 apic sep mtrr pge mca cmov """
1070 """pat clflush dts acpi mmx fxsr sse sse2 tm pbe up bts est tm2""")
1071- self.assertEquals(result["processor_state"]["platform_name"], "i386")
1072- self.assertEquals(result["processor_state"]["speed"], 597)
1073+ self.assertEqual(result["processor_state"]["platform_name"], "i386")
1074+ self.assertEqual(result["processor_state"]["speed"], 597)
1075
1076 def test_processor_info(self):
1077 """Processor information can be in an info element."""
1078 result = self.getResult("submission_info_cpuinfo.xml")
1079 self.assertTrue("processor_state" in result)
1080- self.assertEquals(result["processor_state"]["bogomips"], 4788)
1081- self.assertEquals(result["processor_state"]["cache"], 3145728)
1082- self.assertEquals(result["processor_state"]["count"], 1)
1083- self.assertEquals(result["processor_state"]["make"], "GenuineIntel")
1084- self.assertEquals(
1085+ self.assertEqual(result["processor_state"]["bogomips"], 4788)
1086+ self.assertEqual(result["processor_state"]["cache"], 3145728)
1087+ self.assertEqual(result["processor_state"]["count"], 1)
1088+ self.assertEqual(result["processor_state"]["make"], "GenuineIntel")
1089+ self.assertEqual(
1090 result["processor_state"]["model"],
1091 "Intel(R) Core(TM) i5 CPU M 520 @ 2.40GHz")
1092- self.assertEquals(result["processor_state"]["model_number"], "6")
1093- self.assertEquals(result["processor_state"]["model_revision"], "2")
1094- self.assertEquals(result["processor_state"]["model_version"], "37")
1095- self.assertEquals(
1096+ self.assertEqual(result["processor_state"]["model_number"], "6")
1097+ self.assertEqual(result["processor_state"]["model_revision"], "2")
1098+ self.assertEqual(result["processor_state"]["model_version"], "37")
1099+ self.assertEqual(
1100 result["processor_state"]["other"],
1101 """fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca """
1102 """cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm """
1103@@ -140,51 +133,51 @@
1104 """dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm """
1105 """sse4_1 sse4_2 popcnt aes lahf_lm ida arat dtherm tpr_shadow """
1106 """vnmi flexpriority ept vpid""")
1107- self.assertEquals(result["processor_state"]["platform_name"], "x86_64")
1108- self.assertEquals(result["processor_state"]["speed"], 1865)
1109+ self.assertEqual(result["processor_state"]["platform_name"], "x86_64")
1110+ self.assertEqual(result["processor_state"]["speed"], 1865)
1111
1112 def test_attachments(self):
1113 """Attachments are in info elements."""
1114 result = self.getResult("submission_attachment.xml")
1115 self.assertTrue("attachments" in result)
1116- self.assertEquals(len(result["attachments"]), 1)
1117+ self.assertEqual(len(result["attachments"]), 1)
1118
1119 def test_device_udev(self):
1120 """Device states can be in the udev element."""
1121 result = self.getResult("submission_udev.xml")
1122 self.assertTrue("device_states" in result)
1123- self.assertEquals(len(result["device_states"]), 82)
1124+ self.assertEqual(len(result["device_states"]), 84)
1125
1126 def test_device_udevadm(self):
1127 """Device states can be in a udevadm info element."""
1128 result = self.getResult("submission_info_udevadm.xml")
1129 self.assertTrue("device_states" in result)
1130- self.assertEquals(len(result["device_states"]), 82)
1131+ self.assertEqual(len(result["device_states"]), 84)
1132
1133 def test_device_dmidecode(self):
1134 """Device states can be in a dmidecode info element."""
1135 result = self.getResult("submission_info_dmidecode.xml")
1136 self.assertTrue("device_states" in result)
1137- self.assertEquals(len(result["device_states"]), 5)
1138+ self.assertEqual(len(result["device_states"]), 5)
1139
1140 def test_package_versions(self):
1141 """Package versions are in the packages element."""
1142 result = self.getResult("submission_packages.xml")
1143 self.assertTrue("package_versions" in result)
1144- self.assertEquals(len(result["package_versions"]), 1)
1145+ self.assertEqual(len(result["package_versions"]), 1)
1146
1147 package_version = result["package_versions"][0]
1148- self.assertEquals(package_version["name"], "accountsservice")
1149- self.assertEquals(package_version["version"], "0.6.21-6ubuntu2")
1150+ self.assertEqual(package_version["name"], "accountsservice")
1151+ self.assertEqual(package_version["version"], "0.6.21-6ubuntu2")
1152
1153 def test_test_results(self):
1154 """Test results are in the questions element."""
1155 result = self.getResult("submission_questions.xml")
1156 self.assertTrue("test_results" in result)
1157- self.assertEquals(len(result["test_results"]), 1)
1158+ self.assertEqual(len(result["test_results"]), 1)
1159
1160 test_result = result["test_results"][0]
1161- self.assertEquals(
1162+ self.assertEqual(
1163 test_result["name"], "audio/alsa_record_playback_external")
1164- self.assertEquals(test_result["output"], "")
1165- self.assertEquals(test_result["status"], "pass")
1166+ self.assertEqual(test_result["output"], "")
1167+ self.assertEqual(test_result["status"], "pass")
1168
1169=== modified file 'checkbox/parsers/tests/test_xinput.py'
1170--- checkbox/parsers/tests/test_xinput.py 2012-10-22 19:43:04 +0000
1171+++ checkbox/parsers/tests/test_xinput.py 2013-05-09 20:11:45 +0000
1172@@ -38,8 +38,8 @@
1173 """⎡ Virtual core pointer """
1174 """id=2 [master pointer (3)]""")
1175 self.assertTrue(match)
1176- self.assertEquals(match.group("name"), "Virtual core pointer")
1177- self.assertEquals(match.group("id"), "2")
1178+ self.assertEqual(match.group("name"), "Virtual core pointer")
1179+ self.assertEqual(match.group("id"), "2")
1180
1181
1182 class TestAttributeRe(TestCase):
1183@@ -47,8 +47,8 @@
1184 def test_string(self):
1185 match = ATTRIBUTE_RE.match("""Buttons supported: 12""")
1186 self.assertTrue(match)
1187- self.assertEquals(match.group("key"), "Buttons supported")
1188- self.assertEquals(match.group("value"), "12")
1189+ self.assertEqual(match.group("key"), "Buttons supported")
1190+ self.assertEqual(match.group("value"), "12")
1191
1192
1193 class TestClassValueRe(TestCase):
1194@@ -56,7 +56,7 @@
1195 def test_string(self):
1196 match = CLASS_VALUE_RE.match("""12. Type: XIButtonClass""")
1197 self.assertTrue(match)
1198- self.assertEquals(match.group("class"), "XIButtonClass")
1199+ self.assertEqual(match.group("class"), "XIButtonClass")
1200
1201
1202 class TestListValueRe(TestCase):
1203@@ -65,10 +65,10 @@
1204 elements = LIST_VALUE_RE.split(
1205 """"Button Horiz Wheel Right" None None""")[1::2]
1206 self.assertTrue(elements)
1207- self.assertEquals(len(elements), 3)
1208- self.assertEquals(elements[0], '"Button Horiz Wheel Right"')
1209- self.assertEquals(elements[1], "None")
1210- self.assertEquals(elements[2], "None")
1211+ self.assertEqual(len(elements), 3)
1212+ self.assertEqual(elements[0], '"Button Horiz Wheel Right"')
1213+ self.assertEqual(elements[1], "None")
1214+ self.assertEqual(elements[2], "None")
1215
1216
1217 class XinputResult(IXinputResult):
1218@@ -86,50 +86,45 @@
1219
1220 class TestXinputParser(TestCase):
1221
1222- def getFixture(self, name):
1223- return os.path.join(os.path.dirname(__file__), "fixtures", name)
1224-
1225- def getParser(self, name):
1226- fixture = self.getFixture(name)
1227- stream = open(fixture, encoding="utf-8")
1228- return XinputParser(stream)
1229
1230 def getResult(self, name):
1231- parser = self.getParser(name)
1232+ fixture = os.path.join(os.path.dirname(__file__), "fixtures", name)
1233 result = XinputResult()
1234- parser.run(result)
1235+ with open(fixture, encoding="utf-8") as stream:
1236+ parser = XinputParser(stream)
1237+ parser.run(result)
1238 return result
1239
1240 def test_number_of_devices_with_spaces(self):
1241 """The toshiba xinput with spaces contains 12 devices."""
1242 result = self.getResult("xinput_toshiba.txt")
1243- self.assertEquals(len(result.devices), 12)
1244+ self.assertEqual(len(result.devices), 12)
1245
1246 def test_number_of_devices_without_spaces(self):
1247 """The quantal xinput without spaces contains 14 devices."""
1248 result = self.getResult("xinput_quantal.txt")
1249- self.assertEquals(len(result.devices), 14)
1250+ self.assertEqual(len(result.devices), 14)
1251
1252 def test_multitouch_touchpad_device(self):
1253 """The toshiba xinput contains a multitouch touchpad device."""
1254 result = self.getResult("xinput_toshiba.txt")
1255 devices = [device for device in result.devices.values()
1256 if device["name"] == "AlpsPS/2 ALPS DualPoint TouchPad"]
1257- self.assertEquals(len(devices), 1)
1258+ self.assertEqual(len(devices), 1)
1259
1260 classes = [cls for cls in devices[0]["classes"]
1261 if cls["device_class"] == "XITouchClass"]
1262- self.assertEquals(len(classes), 1)
1263- self.assertEquals(classes[0]["touch_mode"], "dependent")
1264+ self.assertEqual(len(classes), 1)
1265+ self.assertEqual(classes[0]["touch_mode"], "dependent")
1266
1267 def test_multitouch_touchscreen_device(self):
1268 """The quantal xinput contains a multitouch touchscreen device."""
1269 result = self.getResult("xinput_quantal.txt")
1270 devices = [device for device in result.devices.values()
1271 if device["name"] == "Quanta OpticalTouchScreen"]
1272- self.assertEquals(len(devices), 1)
1273+ self.assertEqual(len(devices), 1)
1274
1275 classes = [cls for cls in devices[0]["classes"]
1276 if cls["device_class"] == "XITouchClass"]
1277- self.assertEquals(len(classes), 1)
1278- self.assertEquals(classes[0]["touch_mode"], "direct")
1279+ self.assertEqual(len(classes), 1)
1280+ self.assertEqual(classes[0]["touch_mode"], "direct")
1281
1282=== modified file 'checkbox/parsers/udevadm.py'
1283--- checkbox/parsers/udevadm.py 2013-03-22 16:14:06 +0000
1284+++ checkbox/parsers/udevadm.py 2013-05-09 20:11:45 +0000
1285@@ -454,8 +454,9 @@
1286 if device.bus == "ieee80211":
1287 return False
1288
1289- # Ignore devices without product information
1290- if not device.product and device.product_id is None:
1291+ # Ignore devices without product AND vendor information
1292+ if (device.product is None and device.product_id is None and
1293+ device.vendor is None and device.vendor_id is None):
1294 return True
1295
1296 # Ignore invalid subsystem information
1297
1298=== added file 'checkbox/test_resource.py'
1299--- checkbox/test_resource.py 1970-01-01 00:00:00 +0000
1300+++ checkbox/test_resource.py 2013-05-09 20:11:45 +0000
1301@@ -0,0 +1,347 @@
1302+# This file is part of Checkbox.
1303+#
1304+# Copyright 2013 Canonical Ltd.
1305+# Written by:
1306+# Zygmunt Krynicki <zygmunt.krynicki@canonical.com>
1307+#
1308+# Checkbox is free software: you can redistribute it and/or modify
1309+# it under the terms of the GNU General Public License as published by
1310+# the Free Software Foundation, either version 3 of the License, or
1311+# (at your option) any later version.
1312+#
1313+# Checkbox is distributed in the hope that it will be useful,
1314+# but WITHOUT ANY WARRANTY; without even the implied warranty of
1315+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1316+# GNU General Public License for more details.
1317+#
1318+# You should have received a copy of the GNU General Public License
1319+# along with Checkbox. If not, see <http://www.gnu.org/licenses/>.
1320+
1321+"""
1322+checkbox.test_resource
1323+======================
1324+
1325+Test definitions for :mod:`checkbox.resource`
1326+"""
1327+
1328+from unittest import TestCase
1329+
1330+from checkbox.resource import ResourceIterator
1331+from checkbox.resource import ResourceMap
1332+
1333+
1334+class ResourceMapTests(TestCase):
1335+
1336+ def setUp(self):
1337+ # Create a resource map with two resources:
1338+ #
1339+ # 'resource_list' is a list with two values, each with an 'attr'
1340+ # attribute. This is how resources with multiple values are normally
1341+ # stored.
1342+ #
1343+ # 'resource_tuple' is similar to 'resource_list', holding the same data
1344+ # but using a tuple instead of a list.
1345+ #
1346+ # 'resource_dict' is a dictionary with one attribute 'name'. This is
1347+ # how resources with one value might be stored.
1348+ self.resource_map = ResourceMap({
1349+ 'resource_list': [
1350+ {"attr": "value"},
1351+ {"attr": "other-value"}
1352+ ],
1353+ 'resource_tuple': (
1354+ {"attr": "value"},
1355+ {"attr": "other-value"}
1356+ ),
1357+ 'resource_dict': {"attr": "value"},
1358+ 'resource_int': 42,
1359+ })
1360+ # This is an empty map, it is used by some of the tests
1361+ self.empty_map = ResourceMap()
1362+
1363+ def test_resource_map_is_a_dict(self):
1364+ # While it's a derived class it's still a dictionary
1365+ self.assertIsInstance(self.resource_map, dict)
1366+
1367+ def test_missing_resource(self):
1368+ # Missing resources just raise KeyError as they normally would in a
1369+ # dictionary
1370+ with self.assertRaises(KeyError):
1371+ self.resource_map['resource_missing']
1372+
1373+ def test_existing_resource_list(self):
1374+ # Accessing a resource wrapped in a list returns a ResourceIterator
1375+ thing = self.resource_map['resource_list']
1376+ self.assertIsInstance(thing, ResourceIterator)
1377+
1378+ def test_existing_resource_tuple(self):
1379+ # Accessing a resource wrapped in a tuple returns a ResourceIterator
1380+ thing = self.resource_map['resource_tuple']
1381+ self.assertIsInstance(thing, ResourceIterator)
1382+
1383+ def test_existing_resource_dict(self):
1384+ # Accessing a resource wrapped in a dict returns a ResourceIterator
1385+ thing = self.resource_map['resource_dict']
1386+ self.assertIsInstance(thing, ResourceIterator)
1387+
1388+ def test_existing_resource_int(self):
1389+ # Accessing a resource wrapped in a int returns the value directly
1390+ thing = self.resource_map['resource_int']
1391+ self.assertIsInstance(thing, int)
1392+ # The helper integer is 42
1393+ self.assertEqual(thing, 42)
1394+
1395+ def test_eval_smoke(self):
1396+ # Evaluating anything valid against an empty map returns None
1397+ self.assertIs(None, self.empty_map.eval("resource.attr == 'value'"))
1398+ # Evaluating borked code against an empty map also returns None
1399+ self.assertIs(None, self.empty_map.eval("adpasdasd .asdaasd asd a"))
1400+
1401+ def test_under_results(self):
1402+ # The resource map has an instance variable, _results that is only
1403+ # assigned after the call to ResourceMap.eval().
1404+ with self.assertRaises(AttributeError):
1405+ self.empty_map._results
1406+ # Calling eval() initializes/overrides it
1407+ self.empty_map.eval('')
1408+ # With an empty list (that list may contain other values normally but
1409+ # with an empty resource map it is always empty)
1410+ self.assertEqual(self.empty_map._results, [])
1411+
1412+ def test_eval_globals(self):
1413+ # ResourceMap.eval() has a fixed list of globals
1414+ #
1415+ # We can poke at that list by using specially crafted expressions.
1416+ # Each time the expression evaluates to 1, we get an empty list back.
1417+ self.assertEqual([], self.empty_map.eval("'bool' in globals() and 1"))
1418+ self.assertEqual([], self.empty_map.eval("'float' in globals() and 1"))
1419+ self.assertEqual([], self.empty_map.eval("'int' in globals() and 1"))
1420+ self.assertEqual([], self.empty_map.eval("'str' in globals() and 1"))
1421+ # Each of those globals is a special ResourceBuiltin object
1422+ self.assertEqual([], self.resource_map.eval(
1423+ "bool.__class__.__name__ == 'ResourceBuiltin'"))
1424+ self.assertEqual([], self.resource_map.eval(
1425+ "float.__class__.__name__ == 'ResourceBuiltin'"))
1426+ self.assertEqual([], self.resource_map.eval(
1427+ "int.__class__.__name__ == 'ResourceBuiltin'"))
1428+ self.assertEqual([], self.resource_map.eval(
1429+ "str.__class__.__name__ == 'ResourceBuiltin'"))
1430+ # Unfortunately, __builtins__ is also in the global scope
1431+ #
1432+ # With builtins being available we have a way to access anything in
1433+ # python via __import__
1434+ self.assertEqual([], self.empty_map.eval(
1435+ "'__builtins__' in globals() and 1"))
1436+ # There are no other globals than what was checked for above:
1437+ #
1438+ # The goal is to ensure that there are only particular globals
1439+ # in the context that is being used to evaluate the expression.
1440+ #
1441+ # We cannot return the value directly and compare it outside
1442+ # (well we can but that trick is used later to keep this code
1443+ # simple and portable across changes in checkbox)
1444+ #
1445+ # The return value of globals().keys() is a special dict_keys() proxy
1446+ # that returns the items in undetermined order.
1447+ #
1448+ # The result is a simple comparison of two sorted list generated by
1449+ # list comprehensions from iterating over all the keys in global() and
1450+ # in the list of expected global symbols
1451+ self.assertEqual([], self.empty_map.eval(
1452+ "sorted([x for x in globals().keys()])"
1453+ " == "
1454+ "sorted(['__builtins__', 'bool', 'float', 'int', 'str'])"))
1455+
1456+ def test_eval_locals(self):
1457+ # As with the globals test above, this test checks what kind of locals
1458+ # are available inside the execution context.
1459+ #
1460+ # In the example of an empty map, the result is -- no locals!
1461+ self.assertEqual([], self.empty_map.eval(
1462+ "sorted([x for x in locals().keys()])"
1463+ " == "
1464+ "[]"))
1465+ # In the example of a resource map with several resources the result
1466+ # are those resources (after wrapping in ResourceIterator)
1467+ self.assertEqual([], self.resource_map.eval(
1468+ "sorted([x for x in locals().keys()])"
1469+ " == "
1470+ "sorted(['resource_list', 'resource_tuple',"
1471+ " 'resource_dict', 'resource_int'])"))
1472+ # Let's just ensure that those are not the raw values anymore Note that
1473+ # we cannot use 'int', 'list', etc. directly they are wrapped in
1474+ # ResourceBuiltin objects (see test_eval_globals() above)
1475+ self.assertEqual([], self.resource_map.eval(
1476+ "locals()['resource_int'] != (0).__class__"))
1477+ self.assertEqual([], self.resource_map.eval(
1478+ "locals()['resource_dict'] != ({}).__class__"))
1479+ self.assertEqual([], self.resource_map.eval(
1480+ "locals()['resource_list'] != ([]).__class__"))
1481+ self.assertEqual([], self.resource_map.eval(
1482+ "locals()['resource_tuple'] != (()).__class__"))
1483+
1484+ def test_eval_import(self):
1485+ # The expression can import arbitrary python package
1486+ #
1487+ # Here we import the subprocess module, execute /bin/false which
1488+ # returns 1, this makes the expression True in the terms of checkbox
1489+ # resource programs.
1490+ self.assertEqual([], self.empty_map.eval(
1491+ "__import__('subprocess').call('/bin/false')"))
1492+
1493+ def test_eval_can_mutate_results(self):
1494+ # The ResourceMap._results object can be accessed and mutated
1495+ # by using locals(). Calling locals() inside the expression literally
1496+ # returns the ResourceMap instance.
1497+ #
1498+ # Using that trick, any operation can be performed, including mutating
1499+ # or replacing the results object.
1500+ results = self.empty_map.eval(
1501+ "1 "
1502+ "if getattr(locals(), '_results').append('payload') "
1503+ "is None "
1504+ "else 0")
1505+ self.assertIs(self.empty_map._results, results)
1506+ self.assertEqual(results, ['payload'])
1507+
1508+ def test_eval_return_value_for_int_resources(self):
1509+ # This test explores how resource_map.eval() result gets
1510+ # computed and what it really is in practice.
1511+ #
1512+ # The important aspect of this code is that it relies on
1513+ # ResourceMap._results being shared by ResourceMap, ResourceIterator
1514+ # and ResourceObject. This makes testing the behavior in isolation
1515+ # difficult.
1516+ #
1517+ # Technically _results are mutated only in ResourceIterator (in the
1518+ # __contains__ function) and in the ResourceObject (in the _try
1519+ # function that is in turn called from all overridden special functions
1520+ # like __eq__) both of those places call _results.append().
1521+ #
1522+ # The appended value is either the element of the ResourceIterator
1523+ # (technically the value) and the converted value of the attribute in
1524+ # ResourceObject._try. This is rather confusing so let's see what
1525+ # happens in practice.
1526+ #
1527+ # Let's explore resource_list first (the flow is the same for all other
1528+ # types so the explanations are only given once).
1529+ #
1530+ # Here each value was a simple dictionary with 'attr' key wrapped in a
1531+ # list. As checked earlier by test_existing_resource_list() that list
1532+ # is converted to a ResourceIterator. Accessing any attribute on the
1533+ # resource iterator creates a ResourceObject bound to that attribute
1534+ # name and the iterator. Calling the equality operator on a
1535+ # ResourceObject calls ResourceObject.__eq__() which in turns calls
1536+ # ResourceObject._try() The _try() function iterates over the
1537+ # ResourceIterator and checks of any of the items returned (which are
1538+ # the raw items as passed to ResourceMap initially) have an entry
1539+ # corresponding to the attribute name (that was accessed on
1540+ # ResourceIterator), if so, the value is looked up, converted using the
1541+ # convert function (identity by default), and passed to the helper
1542+ # function (that corresponds to the logical operation performed by
1543+ # whatever called _try, for example, __eq__ calls lambda a, b: a == b).
1544+ # If the return value of that function matches the expected sentinel
1545+ # object (True is used by default) then the loop over the iterator
1546+ # (inside _try()) is broken and the original item (the dictionary or
1547+ # other object that was initially passed to the ResourceMap) is
1548+ # appended. Lastly the _try() method returns the sentinel object (True
1549+ # by default) there was a match (the loop got broken) or the default
1550+ # value (False by default) otherwise. This is all pretty complicated
1551+ # but in the case of all-defaults it's pretty much equivalent to:
1552+ #
1553+ # results = [
1554+ # object
1555+ # for object in resource_map[resource_name]
1556+ # if object.get(resource_attr) == expected_value]
1557+ #
1558+ # Let's see how that works in practice.
1559+ # Note that the == operator can be replaced by any operator
1560+ # supported by ResourceObject (<, <=, >, >=, =, !=, in)
1561+ self.assertEqual(
1562+ self.resource_map.eval("resource_list.attr == 'value'"),
1563+ [{'attr': 'value'}])
1564+ self.assertEqual(
1565+ self.resource_map.eval("resource_list.attr in ['value']"),
1566+ [{'attr': 'value'}])
1567+ self.assertEqual(
1568+ self.resource_map.eval("resource_list.attr != 'value'"),
1569+ [{'attr': 'other-value'}])
1570+ # The inequality operator used with a value that does not exist in the
1571+ # resource produces the full list of resources back.
1572+ self.assertEqual(
1573+ self.resource_map.eval("resource_list.attr != 'foo'"),
1574+ [{'attr': 'value'}, {'attr': 'other-value'}])
1575+
1576+ def test_eval_return_value_for_tuple_resources(self):
1577+ # Set of identical tests for resource_tuple
1578+ self.assertEqual(
1579+ self.resource_map.eval("resource_tuple.attr == 'value'"),
1580+ [{'attr': 'value'}])
1581+ self.assertEqual(
1582+ self.resource_map.eval("resource_tuple.attr in ['value']"),
1583+ [{'attr': 'value'}])
1584+ self.assertEqual(
1585+ self.resource_map.eval("resource_tuple.attr != 'value'"),
1586+ [{'attr': 'other-value'}])
1587+
1588+ def test_eval_return_value_for_dict_resources(self):
1589+ # Set of identical tests for resource_dict
1590+ self.assertEqual(
1591+ self.resource_map.eval("resource_dict.attr == 'value'"),
1592+ [{'attr': 'value'}])
1593+ self.assertEqual(
1594+ self.resource_map.eval("resource_dict.attr in ['value']"),
1595+ [{'attr': 'value'}])
1596+ # Here the result is slightly different. This is because there are no
1597+ # matches (there is no 'other-value' like in previous cases). In such
1598+ # case the whole expression does not evaluate to True and the return
1599+ # value is None.
1600+ self.assertEqual(
1601+ self.resource_map.eval("resource_dict.attr != 'value'"),
1602+ None)
1603+
1604+ def test_eval_return_value_for_other_resources(self):
1605+ # Set of identical tests for resource_int
1606+ #
1607+ # Here resource_int is not wrapped in a ResourceIterator and unexpected
1608+ # things start to happen. There is no logic to modify the result in
1609+ # such case so although the result of the comparison is True the result
1610+ # of the eval() function is the empty results list.
1611+ #
1612+ # I suspect that such cases were never meant to happen and are an
1613+ # oversight from the initial implementation and lack of testing beyond
1614+ # the expected working cases.
1615+ self.assertEqual(
1616+ self.resource_map.eval("resource_int == 42"),
1617+ [])
1618+ # Confusingly enough, but consistently, when the expression evaluates
1619+ # the False the eval() function returns None.
1620+ self.assertEqual(
1621+ self.resource_map.eval("resource_int != 42"),
1622+ None)
1623+
1624+ def test_eval_return_logic_bool(self):
1625+ # There is some extra logic in eval() that should be documented.
1626+ # The return value of the low-level eval() call inside the
1627+ # ResourceMap.eval() method is passed to a set of tests to determine if
1628+ # it is 'true enough' to return the results. Those tests include:
1629+ # 1) A boolean value which is True
1630+ self.assertEqual([], self.empty_map.eval("True"))
1631+ self.assertEqual(None, self.empty_map.eval("False"))
1632+
1633+ def test_eval_return_logic_int(self):
1634+ # 2) A non-zero integer
1635+ self.assertEqual([], self.empty_map.eval("1"))
1636+ self.assertEqual(None, self.empty_map.eval("0"))
1637+
1638+ def test_eval_return_logic_tuple(self):
1639+ # 3) A tuple with at least one True object
1640+ self.assertEqual([], self.empty_map.eval("(True,)"))
1641+ self.assertEqual([], self.empty_map.eval("(False, True, 7)"))
1642+ self.assertEqual(None, self.empty_map.eval("(False, 7)"))
1643+ self.assertEqual(None, self.empty_map.eval("(7,)"))
1644+ self.assertEqual(None, self.empty_map.eval("()"))
1645+
1646+ def test_eval_return_logic_list(self):
1647+ # Sadly this does not apply to lists
1648+ self.assertEqual(None, self.empty_map.eval("[True]"))
1649
1650=== modified file 'checkbox/tests/__init__.py'
1651--- checkbox/tests/__init__.py 2007-09-18 15:26:03 +0000
1652+++ checkbox/tests/__init__.py 2013-05-09 20:11:45 +0000
1653@@ -0,0 +1,49 @@
1654+# This file is part of Checkbox.
1655+#
1656+# Copyright 2013 Canonical Ltd.
1657+# Written by:
1658+# Zygmunt Krynicki <zygmunt.krynicki@canonical.com>
1659+#
1660+# Checkbox is free software: you can redistribute it and/or modify
1661+# it under the terms of the GNU General Public License as published by
1662+# the Free Software Foundation, either version 3 of the License, or
1663+# (at your option) any later version.
1664+#
1665+# Checkbox is distributed in the hope that it will be useful,
1666+# but WITHOUT ANY WARRANTY; without even the implied warranty of
1667+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1668+# GNU General Public License for more details.
1669+#
1670+# You should have received a copy of the GNU General Public License
1671+# along with Checkbox. If not, see <http://www.gnu.org/licenses/>.
1672+
1673+"""
1674+:mod:`checkbox.tests` -- auxiliary test loaders for checkbox
1675+============================================================
1676+"""
1677+
1678+from inspect import getabsfile
1679+from unittest.loader import defaultTestLoader
1680+import os
1681+
1682+import checkbox
1683+
1684+
1685+def load_unit_tests():
1686+ """
1687+ Load all unit tests and return a TestSuite object
1688+ """
1689+ # Discover all unit tests. By simple convention those are kept in
1690+ # python modules that start with the word 'test_' .
1691+ return defaultTestLoader.discover(
1692+ os.path.dirname(getabsfile(checkbox)))
1693+
1694+
1695+def test_suite():
1696+ """
1697+ Test suite function used by setuptools test loader.
1698+
1699+ Uses unittest test discovery system to get a list of test cases defined
1700+ inside checkbox. See setup.py setup(test_suite=...) for a matching entry
1701+ """
1702+ return load_unit_tests()
1703
1704=== modified file 'checkbox/tests/test_job.py'
1705--- checkbox/tests/test_job.py 2012-10-09 13:32:06 +0000
1706+++ checkbox/tests/test_job.py 2013-05-09 20:11:45 +0000
1707@@ -16,22 +16,23 @@
1708 # You should have received a copy of the GNU General Public License
1709 # along with Checkbox. If not, see <http://www.gnu.org/licenses/>.
1710 #
1711-import os
1712 import unittest
1713+
1714 from checkbox.job import Job
1715
1716+
1717 class JobTest(unittest.TestCase):
1718
1719 def test_command_not_found(self):
1720- job = Job('xwonkt','',10)
1721+ job = Job('xwonkt', '', 10)
1722 status, data, duration = job.execute()
1723 #data is expected to be bytes
1724 self.assertTrue(isinstance(data, bytes))
1725
1726 def test_existing_command(self):
1727 test_string = 'checkbox'
1728- job = Job('echo -n "%s"' % test_string,'',10)
1729+ job = Job('echo -n "%s"' % test_string, '', 10)
1730 status, data, duration = job.execute()
1731 #data is expected to be bytes
1732 self.assertTrue(isinstance(data, bytes))
1733- self.assertEquals(data, test_string.encode())
1734+ self.assertEqual(data, test_string.encode())
1735
1736=== modified file 'checkbox/tests/test_message_files.py'
1737--- checkbox/tests/test_message_files.py 2012-12-12 13:13:12 +0000
1738+++ checkbox/tests/test_message_files.py 2013-05-09 20:11:45 +0000
1739@@ -74,13 +74,14 @@
1740 if 'environ' in message:
1741 environ_variables = re.findall(environ_variables_regex,
1742 message['environ'])
1743- self.assertEquals(set(environ_variables),
1744+ self.assertEqual(set(environ_variables),
1745 set(shell_variables),
1746 message['name'])
1747
1748 def test_jobs_comply_with_schema(self):
1749 globals = {}
1750- exec(open("plugins/jobs_info.py").read(), globals)
1751+ with open("plugins/jobs_info.py", "rt") as stream:
1752+ exec(stream.read(), globals)
1753 job_schema = globals["job_schema"]
1754 for message in self.messages:
1755 long_ext = "_extended"
1756
1757=== modified file 'checkbox/tests/test_setup_files.py'
1758--- checkbox/tests/test_setup_files.py 2012-10-09 13:32:06 +0000
1759+++ checkbox/tests/test_setup_files.py 2013-05-09 20:11:45 +0000
1760@@ -37,7 +37,8 @@
1761 self.assertEqual(rfc822deb_from_config, existing_files)
1762
1763 def test_job_files_in_potfiles(self):
1764- potfile_lines = [line.strip() for line in open('po/POTFILES.in','r')]
1765+ with open('po/POTFILES.in', 'rt') as stream:
1766+ potfile_lines = [line.strip() for line in stream]
1767 potfile_jobfiles = [file for file in potfile_lines if "rfc822deb" in file]
1768 potfile_jobfiles = [line.split(']')[1].strip()
1769 for line in potfile_jobfiles if ']' in line]
1770@@ -47,7 +48,8 @@
1771 self.assertEqual(potfile_jobfiles, existing_files)
1772
1773 def test_job_files_in_local_txt(self):
1774- local_lines = [line.strip() for line in open('jobs/local.txt.in','r')]
1775+ with open('jobs/local.txt.in','rt') as stream:
1776+ local_lines = [line.strip() for line in stream]
1777 local_jobfiles = [file for file in local_lines if "$CHECKBOX_SHARE/jobs" in file]
1778 local_jobfiles = [re.search('\$CHECKBOX_SHARE\/(?P<job_file>jobs\/(.+)\.txt)\?.*',
1779 file).group('job_file')+".in" for file in local_jobfiles]
1780
1781=== modified file 'checkbox/user_interface.py'
1782--- checkbox/user_interface.py 2012-10-17 19:00:19 +0000
1783+++ checkbox/user_interface.py 2013-05-09 20:11:45 +0000
1784@@ -16,25 +16,20 @@
1785 # You should have received a copy of the GNU General Public License
1786 # along with Checkbox. If not, see <http://www.gnu.org/licenses/>.
1787 #
1788-import re
1789+import gettext
1790+import logging
1791 import os
1792 import pwd
1793-import sys
1794-import logging
1795+import re
1796 import subprocess
1797 import webbrowser
1798
1799-import gettext
1800-from gettext import gettext as _
1801-
1802 from checkbox.contrib.REThread import REThread
1803-
1804 from checkbox.lib.environ import (
1805 add_variable,
1806 get_variable,
1807 remove_variable,
1808 )
1809-
1810 from checkbox.job import (
1811 FAIL,
1812 PASS,
1813@@ -134,10 +129,10 @@
1814 return
1815
1816 def show_text(self, text, previous=None, next=None):
1817- return
1818+ print(text)
1819
1820- def show_entry(self, text, value, label=None, previous=None, next=None):
1821- return value
1822+ def show_entry(self, text, value, label=None, showSubmitToHexr=False, previous=None, next=None):
1823+ return (value, False)
1824
1825 def show_check(self, text, options=[], default=[]):
1826 return default
1827
1828=== modified file 'checkbox/variables.py'
1829--- checkbox/variables.py 2012-06-01 15:45:08 +0000
1830+++ checkbox/variables.py 2013-05-09 20:11:45 +0000
1831@@ -215,7 +215,7 @@
1832 for schema in self._schemas:
1833 try:
1834 # Only check that the value can be coerced
1835- dummy = schema(value=value).get()
1836+ schema(value=value).get()
1837 return value
1838 except ValueError:
1839 pass
1840@@ -287,6 +287,7 @@
1841 def get_variable(obj, attribute):
1842 return get_variables(obj)[attribute]
1843
1844+
1845 def get_variables(obj):
1846 from checkbox.attribute import get_attributes
1847
1848
1849=== modified file 'checkbox_cli/cli_interface.py'
1850--- checkbox_cli/cli_interface.py 2012-10-14 01:04:59 +0000
1851+++ checkbox_cli/cli_interface.py 2013-05-09 20:11:45 +0000
1852@@ -342,10 +342,10 @@
1853 dialog = CLIChoiceDialog(text)
1854 dialog.run()
1855
1856- def show_entry(self, text, value, label=None, previous=None, next=None):
1857+ def show_entry(self, text, value, showSubmitToHexr=False, label=None, previous=None, next=None):
1858 dialog = CLILineDialog(text)
1859
1860- return dialog.run()
1861+ return (dialog.run(), False)
1862
1863 def show_check(self, text, options=[], default=[]):
1864 dialog = CLIChoiceDialog(text)
1865@@ -363,7 +363,7 @@
1866 result = options[response]
1867 self._toggle_results(result, options, results)
1868
1869- return results
1870+ return (results, False)
1871
1872 def show_radio(self, text, options=[], default=None):
1873 dialog = CLIChoiceDialog(text)
1874
1875=== modified file 'checkbox_gtk/gtk_interface.py'
1876--- checkbox_gtk/gtk_interface.py 2012-06-12 15:03:42 +0000
1877+++ checkbox_gtk/gtk_interface.py 2013-05-09 20:11:45 +0000
1878@@ -288,7 +288,7 @@
1879 self._set_button("button_next", next_state)
1880
1881 @GTKHack
1882- def show_entry(self, text, value, label=None, previous=None, next=None):
1883+ def show_entry(self, text, value, showSubmitToHexr=False, label=None, previous=None, next=None):
1884 #Reset window title
1885 self._set_main_title()
1886 # Set buttons
1887@@ -310,7 +310,7 @@
1888
1889 entered_value = self._get_text("entry")
1890 self._set_text("entry","")
1891- return entered_value
1892+ return (entered_value, False)
1893
1894 @GTKHack
1895 def show_check(self, text, options=[], default=[]):
1896
1897=== modified file 'checkbox_qt/qt_interface.py'
1898--- checkbox_qt/qt_interface.py 2012-09-27 15:27:01 +0000
1899+++ checkbox_qt/qt_interface.py 2013-05-09 20:11:45 +0000
1900@@ -111,7 +111,7 @@
1901 self.qtiface.showText(text)
1902 self.wait_on_signals(fullTestsClicked=onFullTestsClicked)
1903
1904- def show_entry(self, text, value, label='', previous=None, next=None):
1905+ def show_entry(self, text, value, label='', showSubmitToHexr=False, previous=None, next=None):
1906 def onSubmitTestsClicked():
1907 self.loop.quit()
1908
1909@@ -127,9 +127,9 @@
1910 if value is None:
1911 value = ''
1912
1913- self.qtiface.showEntry(text, value, label)
1914+ self.qtiface.showEntry(text, value, label, showSubmitToHexr)
1915 self.wait_on_signals(submitTestsClicked=onSubmitTestsClicked)
1916- return self.qtiface.getSubmissionData()
1917+ return (self.qtiface.getSubmissionData(), self.qtiface.getSubmitToHexr())
1918
1919 def show_check(self, text, options=[], default=[]):
1920 return False
1921
1922=== modified file 'checkbox_urwid/urwid_interface.py'
1923--- checkbox_urwid/urwid_interface.py 2012-06-12 15:03:42 +0000
1924+++ checkbox_urwid/urwid_interface.py 2013-05-09 20:11:45 +0000
1925@@ -977,10 +977,10 @@
1926 return dialog.response
1927
1928
1929- def show_entry(self, text, value, label=None, previous=None, next=None):
1930+ def show_entry(self, text, value, showSubmitToHexr=False, label=None, previous=None, next=None):
1931 dialog = InputDialog(text).run()
1932 self.direction = dialog.direction
1933- return dialog.response
1934+ return (dialog.response, False)
1935
1936
1937 def show_check(self, text, options=[], default=None):
1938
1939=== added file 'data/whitelists/hwsubmit.whitelist'
1940--- data/whitelists/hwsubmit.whitelist 1970-01-01 00:00:00 +0000
1941+++ data/whitelists/hwsubmit.whitelist 2013-05-09 20:11:45 +0000
1942@@ -0,0 +1,24 @@
1943+cdimage
1944+cpuinfo
1945+device
1946+dmi
1947+dpkg
1948+gconf
1949+lsb
1950+meminfo
1951+module
1952+package
1953+uname
1954+usb
1955+__info__
1956+cpuinfo_attachment
1957+dmesg_attachment
1958+dmi_attachment
1959+dmidecode_attachment
1960+lsmod_attachment
1961+lspci_attachment
1962+modprobe_attachment
1963+modules_attachment
1964+sysfs_attachment
1965+sysctl_attachment
1966+udev_attachment
1967
1968=== added file 'data/whitelists/sru.whitelist'
1969--- data/whitelists/sru.whitelist 1970-01-01 00:00:00 +0000
1970+++ data/whitelists/sru.whitelist 2013-05-09 20:11:45 +0000
1971@@ -0,0 +1,114 @@
1972+## This whitelist contains tests that are useful for validating a Stable
1973+## Release Update (SRU) on Ubuntu Certified systems. This whitelist is not
1974+## recommended for, nor will it be accepted for self-testing purposes.
1975+cpuinfo
1976+cdimage
1977+dmi
1978+dpkg
1979+efi
1980+environment
1981+gconf
1982+lsb
1983+meminfo
1984+memory_card
1985+module
1986+package
1987+device
1988+uname
1989+sleep
1990+block_device
1991+xinput
1992+#File Attachment Jobs
1993+__info__
1994+acpi_sleep_attachment
1995+codecs_attachment
1996+cpuinfo_attachment
1997+dmesg_attachment
1998+dmi_attachment
1999+dmidecode_attachment
2000+efi_attachment
2001+lspci_attachment
2002+meminfo_attachment
2003+modprobe_attachment
2004+modules_attachment
2005+sysctl_attachment
2006+sysfs_attachment
2007+udev_attachment
2008+lsmod_attachment
2009+#SRU Test Suite Jobs
2010+__audio__
2011+audio/alsa_record_playback_automated
2012+__bluetooth__
2013+bluetooth/detect-output
2014+__camera__
2015+camera/multiple-resolution-images
2016+__cpu__
2017+cpu/scaling_test
2018+cpu/scaling_test-log-attach
2019+cpu/offlining_test
2020+cpu/topology
2021+__disk__
2022+disk/read_performance
2023+disk/read_performance_.*
2024+__graphics__
2025+graphics/xorg-version
2026+graphics/compiz_check
2027+graphics/xorg-failsafe
2028+graphics/xorg-process
2029+graphics/screenshot
2030+screenshot.jpg
2031+graphics/screenshot_fullscreen_video
2032+screenshot_fullscreen_video.jpg
2033+__install__
2034+install/apt-get-gets-updates
2035+__mediacard__
2036+mediacard/sd-preinserted
2037+__memory__
2038+memory/info
2039+memory/check
2040+__networking__
2041+networking/detect
2042+networking/http
2043+networking/internet
2044+networking/ping
2045+__power-management__
2046+power-management/tickless_idle
2047+power-management/rtc
2048+power-management/fwts_wakealarm
2049+power-management/fwts_wakealarm-log-attach
2050+__usb__
2051+usb/detect
2052+usb/storage-preinserted
2053+__wireless__
2054+wireless/wireless_scanning
2055+wireless/wireless_connection_wpa_bg
2056+wireless/wireless_connection_open_bg
2057+wireless/wireless_connection_wpa_n
2058+wireless/wireless_connection_open_n
2059+wireless/monitor_wireless_connection_udp
2060+__suspend__
2061+suspend/audio_before_suspend
2062+suspend/bluetooth_obex_send_before_suspend
2063+suspend/bluetooth_obex_browse_before_suspend
2064+suspend/bluetooth_obex_get_before_suspend
2065+suspend/cpu_before_suspend
2066+suspend/network_before_suspend
2067+suspend/memory_before_suspend
2068+suspend/suspend_advanced_auto
2069+suspend/suspend-single-log-check
2070+suspend/audio_after_suspend_auto
2071+suspend/network_resume_time_auto
2072+suspend/wifi_resume_time_auto
2073+suspend/record_playback_after_suspend_auto
2074+suspend/bluetooth_obex_send_after_suspend_auto
2075+suspend/bluetooth_obex_browse_after_suspend_auto
2076+suspend/bluetooth_obex_get_after_suspend_auto
2077+suspend/cpu_after_suspend_auto
2078+suspend/memory_after_suspend_auto
2079+suspend/wireless_connection_after_suspend_wpa_bg_auto
2080+suspend/wireless_connection_after_suspend_open_bg_auto
2081+suspend/wireless_connection_after_suspend_wpa_n_auto
2082+suspend/wireless_connection_after_suspend_open_n_auto
2083+suspend/gpu_lockup_after_suspend
2084+suspend/screenshot_after_suspend
2085+screenshot_after_suspend.jpg
2086
2087=== modified file 'debian/changelog'
2088--- debian/changelog 2013-03-22 16:14:06 +0000
2089+++ debian/changelog 2013-05-09 20:11:45 +0000
2090@@ -1,3 +1,145 @@
2091+checkbox (0.16) saucy; urgency=low
2092+
2093+ * New upstream release (LP: #1178403):
2094+
2095+ * Launchpad automated translation updates
2096+
2097+ [ Jeff Lane ]
2098+ * scripts/cpu_offlining: Modified script to no longer offline cpu0 to resolve
2099+ a bug on ARM. Modified output so most of it is redirected to stderr for
2100+ fail cases, we don't need that much for success cases. (LP: #1078897)
2101+ * jobs/mediacard.txt.in: Modified test instructions to be less confusing
2102+ (LP: #970857)
2103+ * scripts/cpu_topology: define the cpuinfo nested dicts on creation rather
2104+ than define elements during parsing of /proc/cpuinfo (LP: #1111878)
2105+ * scripts/lsmod_info: Corrected error handling for the check_output() call to
2106+ trap the correct error. (LP: #1103647)
2107+ * jobs/camera.txt.in: removed an extraneous requres line for gir1.2
2108+ scripts/camera_test: added code to determine what version of gst we're
2109+ using and set video type and plugin accordingly. (LP: #1100594)
2110+ * scripts/network_check: added ability to specify custom target URL for
2111+ debugging failures (LP: #1128017)
2112+ * scripts/sleep_test_log_check: added new script to parse fwts logs for
2113+ errors
2114+ jobs/hibernate.txt.in, jobs/stress.txt.in, jobs/suspend.txt.in: added jobs
2115+ to use the sleep_test_log_check script after s3/s4 tests. Modified current
2116+ s3/s4 tests to use the new None fail level for fwts_test
2117+ scripts/fwts_test: no longer fails on fwts errors if "-f none" is chosen.
2118+ Now it should only fail by manual indication if the actual sleep action
2119+ fails. (LP: #1169922)
2120+ * scripts/bluetooth_test: test no longer generates odd Broken Pipe error when
2121+ the dpkg bit verifies obexftp is installed (LP: #1169488)
2122+ * jobs/networking.txt.in: fixed networking/info jobs that were not being run
2123+ because $output was being resolved too early (LP: #1065983)
2124+ * scripts/memory_compare: cleaned up the output to be more explanatory and
2125+ easier to visually parse (LP: #1072666)
2126+ * jobs/miscellanea.txt.in: Added jobs for manual verification of PXE boot and
2127+ remote IPMI to improve server test coverage.
2128+ * jobs/led.txt.in: Modified Jobs: led/power, led/wlan, led/wlan-disabled. New
2129+ jobs: led/power-blink-suspend, led/suspend, led/mute
2130+ jobs/keys.txt.in: modified keys/wireless
2131+ * plugins/lock_prompt.py: added a lock release to cleanly clear lock on stop.
2132+ plugins/persist_prompt.py: promoted save to run before lock release.
2133+ checkbox/lib/fifo.py: trap OSError exception at close when the input/output
2134+ fifo fds disappear before fifo.close() can get to them. (LP: #115561)
2135+ * jobs/info.txt.in: fixed bad driver name in audio_codecs job (LP: #1165215)
2136+ * jobs/mediacard.txt.in: reduce test file size for MMC to 64MB (LP: #1167214)
2137+ * jobs/led.txt.in, jobs/suspend.txt.in: removed bits about WLAN LED flashing
2138+ from the WLAN jobs as that no longer happens on data tx/rx (LP: #1157606)
2139+ * jobs/power-management.txt.in: added manual reboot and shutdown tests for
2140+ server and Xen testing. Took the opportunity to correct punctuation in the
2141+ descriptions or other manual jobs.
2142+ jobs/virtualization.txt.in: added virtualization/xen_ok and
2143+ virtualization/xen_check_vms jobs for Xen testing
2144+ scripts/xen_test: added script to perform Xen testing
2145+ * jobs/various: Changed the jobs that use removable_storage_watcher to
2146+ generate ~256MB files to combat problems where the files are cached and not
2147+ written directly to devices during test. (LP: #1149213)
2148+
2149+
2150+ [ Sylvain Pineau ]
2151+ * jobs/suspend.txt.in, scripts/gpu_test: Remove the need of running the script
2152+ with the root user, restore the workspaces switch and the HTML5 video
2153+ playback ; remove the extra suspend/resume (LP: #1172851)
2154+ * checkbox/parsers/udevadm.py: Only filter devices without product AND vendor
2155+ information (LP: #1167733)
2156+ * debian/control: Added python3-mock as a build dependency.
2157+ * debian/rules: Clean __pycache__ directory after running scripts unit tests.
2158+ * scripts/gputest_benchmark: Added a wrapper for the Geeks3D GpuTest
2159+ benchmark.
2160+ * jobs/benchmarks.txt.in: Added the corresponding GpuTest jobs (Furmark,
2161+ Gimark and Tessmark)
2162+
2163+ [ Brendan Donegan ]
2164+ * scripts/rendercheck_test - change nargs='+' to action='append' for blacklist
2165+ option so it works as expected.
2166+ jobs/rendercheck.txt.in - blacklist gradients test as it is known to produce
2167+ false positives. (LP: #1093718)
2168+ * plugins/hexr_transport.py - added plugin for submitting to HEXR and
2169+ certification based on certify_new_transport from checkbox-certification.
2170+ examples/checkbox-qt.ini - blacklisted hexr_transport as we won't use it
2171+ examples/checkbox-cli.ini - blacklisted hexr_transport as we won't use it
2172+ examples/checkbox-urwid.ini - blacklisted hexr_transport as we won't use it
2173+ * Add hidden 'Submit to HEXR' checkbox on submission screen, so that it can
2174+ be utilised in checkbox-certification.
2175+ * checkbox/user_interface.py - fixed keyword argument in show_entry.
2176+ checkbox_cli/cli_interface.py - return tuple as expected. (LP: #1173103)
2177+ * scripts/sources_test - modified script so that it takes sources list
2178+ location and repository list as arguments
2179+ * jobs/miscellanea.txt.in - provide REPOSITORY and SOURCES_LIST environment
2180+ variables to the sources_test script (LP: #1149288)
2181+ * Added mobile broadband tests and updated create_connection script to allow
2182+ creation of mobile broadband connections.
2183+ * scripts/rendercheck_test, scripts/graphics_stress_test,
2184+ jobs/rendercheck.txt.in, jobs/stress.txt.in - Allow blacklisting of
2185+ specific rendercheck tests and use this to exclude the 'repeat' test
2186+ from the set of rendercheck tests that run (LP: #1164566)
2187+ * jobs/benchmarks.txt.in - fix typo in command field of
2188+ benchmarks/graphics/globs job (LP: #1157615)
2189+ * data/whitelists/sru.whitelist - remove bluetooth_obex_before_suspend
2190+ as it is made redundant by browse/get/send (LP: #1155325)
2191+
2192+ [ Po-Hsu Lin ]
2193+ * jobs/led.txt.in: Modified the description of led/power-blink-suspend test to
2194+ cover more cases.
2195+ jobs/suspend.txt.in: Modified the description of suspend/suspend_advanced
2196+ test cover more cases. (LP: #1172108)
2197+ * jobs/monitor.txt.in: Modified the description of dim_brightness test to make
2198+ it consistent with the code. (LP: #1170244)
2199+
2200+ [ Daniel Manrique ]
2201+ * scripts/alsa_record_playback: Replaced alsasrc with autoaudiosrc
2202+ (LP: #1059544)
2203+ * checkbox/parsers/submission.py: Fixed incorrect context for memory
2204+ parsing, which resulted in absent memory information when parsing
2205+ xml files.
2206+ * scripts/glob_test: Fixed swapping of repetitions and time parameters.
2207+ jobs/benchmarks.txt.in: Set a 26 FPS threshold for passing globs
2208+ benchmark.
2209+ * Added sru.whitelist used to test stable release update kernels.
2210+
2211+ [ Jeff Marcom ]
2212+ * scripts/network: added new script for testing and retrieving information for
2213+ network interfaces.
2214+ * configs,examples/network.cfg: added config file
2215+ for network test configuration and setup
2216+ * scripts/virtualization - Fixes issue where console terminal would
2217+ remain hijacked by child kvm process (LP: #1164028)
2218+ * jobs/input.txt.in: Added manual check job for accelerometer hardware
2219+ * scripts/virtualization: Fixed issue where specifying test timeout via
2220+ vitualization.cfg was pulled in as a string rather than integer.
2221+ * scripts/virtualization: Added classmethod for generating cloud
2222+ config data based on ISO in use
2223+
2224+ [ Zygmunt Krynicki ]
2225+ * jobs/graphics.txt.in, jobs/suspend.txt.in: convert package resource
2226+ programs to be compatible with plainbox
2227+ * debian/control: add missing build dependency on python3-setuptools
2228+ * debian/control: add another missing build dependency on python-setuptools
2229+ (apparently needed because dh_auth_xxx) poke setup.py as python2)
2230+
2231+ -- Daniel Manrique <roadmr@ubuntu.com> Thu, 09 May 2013 14:39:23 -0400
2232+
2233 checkbox (0.15.5) raring; urgency=low
2234
2235 * New upstream release (LP: #1158798)
2236
2237=== added file 'debian/checkbox-hw-collection.install'
2238--- debian/checkbox-hw-collection.install 1970-01-01 00:00:00 +0000
2239+++ debian/checkbox-hw-collection.install 2013-05-09 20:11:45 +0000
2240@@ -0,0 +1,2 @@
2241+usr/bin/checkbox-hw-collection
2242+usr/share/checkbox/examples/checkbox-hw-collection.ini
2243
2244=== added file 'debian/checkbox-hw-collection.links'
2245--- debian/checkbox-hw-collection.links 1970-01-01 00:00:00 +0000
2246+++ debian/checkbox-hw-collection.links 2013-05-09 20:11:45 +0000
2247@@ -0,0 +1,1 @@
2248+usr/share/man/man1/checkbox.1.gz usr/share/man/man1/checkbox-hw-collection.1.gz
2249
2250=== added file 'debian/checkbox-hw-collection.postinst'
2251--- debian/checkbox-hw-collection.postinst 1970-01-01 00:00:00 +0000
2252+++ debian/checkbox-hw-collection.postinst 2013-05-09 20:11:45 +0000
2253@@ -0,0 +1,7 @@
2254+#! /bin/sh -e
2255+
2256+base_package="checkbox"
2257+. /usr/share/debconf/confmodule
2258+. /usr/share/checkbox/install/postinst
2259+
2260+#DEBHELPER#
2261
2262=== modified file 'debian/checkbox.install'
2263--- debian/checkbox.install 2012-07-12 16:35:37 +0000
2264+++ debian/checkbox.install 2013-05-09 20:11:45 +0000
2265@@ -10,6 +10,7 @@
2266 usr/share/checkbox/plugins/*
2267 usr/share/checkbox/report/*
2268 usr/share/checkbox/examples/checkbox.ini
2269+usr/share/checkbox/examples/network.cfg
2270 usr/lib/python*/*-packages/checkbox/*
2271 usr/lib/checkbox/bin/*
2272 usr/share/apport/package-hooks/source_checkbox.py
2273
2274=== modified file 'debian/control'
2275--- debian/control 2013-01-09 21:20:03 +0000
2276+++ debian/control 2013-05-09 20:11:45 +0000
2277@@ -10,10 +10,13 @@
2278 po-debconf,
2279 python,
2280 python-distutils-extra,
2281+ python-setuptools,
2282+ python3-setuptools,
2283 python3-all,
2284 python3-distutils-extra,
2285 python3-gi,
2286 python3-lxml,
2287+ python3-mock,
2288 python3-pkg-resources,
2289 qt4-qmake
2290 Vcs-Bzr: https://code.launchpad.net/~hardware-certification/checkbox/trunk
2291@@ -41,6 +44,7 @@
2292 Suggests: bonnie++,
2293 bootchart,
2294 checkbox-cli | checkbox-gtk,
2295+ curl,
2296 ethtool,
2297 fwts,
2298 git-core,
2299@@ -110,3 +114,12 @@
2300 results can then be sent to Launchpad.
2301 .
2302 This package provides a QT4 interface for answering tests.
2303+
2304+Package: checkbox-hw-collection
2305+Architecture: any
2306+Depends: checkbox (>= ${source:Version}),
2307+ ${misc:Depends}
2308+Description: CLI tool for collecting HW information from a system
2309+ .
2310+ This package provides a tool for collecting hardware information from
2311+ a system and sending it to the HEXR hardware database.
2312
2313=== modified file 'debian/po/ast.po'
2314--- debian/po/ast.po 2013-03-22 16:14:06 +0000
2315+++ debian/po/ast.po 2013-05-09 20:11:45 +0000
2316@@ -6,17 +6,16 @@
2317 msgid ""
2318 msgstr ""
2319 "Project-Id-Version: checkbox\n"
2320-"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"
2321+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2322 "POT-Creation-Date: 2012-09-21 11:25-0400\n"
2323 "PO-Revision-Date: 2012-03-21 15:41+0000\n"
2324 "Last-Translator: Xandru <xandru@softastur.org>\n"
2325 "Language-Team: Asturian <ast@li.org>\n"
2326-"Language: ast\n"
2327 "MIME-Version: 1.0\n"
2328 "Content-Type: text/plain; charset=UTF-8\n"
2329 "Content-Transfer-Encoding: 8bit\n"
2330-"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"
2331-"X-Generator: Launchpad (build 16506)\n"
2332+"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
2333+"X-Generator: Launchpad (build 16580)\n"
2334
2335 #. Type: string
2336 #. Description
2337
2338=== modified file 'debian/po/cs.po'
2339--- debian/po/cs.po 2013-03-22 16:14:06 +0000
2340+++ debian/po/cs.po 2013-05-09 20:11:45 +0000
2341@@ -6,17 +6,16 @@
2342 msgid ""
2343 msgstr ""
2344 "Project-Id-Version: checkbox\n"
2345-"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"
2346+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2347 "POT-Creation-Date: 2012-09-21 11:25-0400\n"
2348 "PO-Revision-Date: 2012-03-05 19:27+0000\n"
2349 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
2350 "Language-Team: Czech <cs@li.org>\n"
2351-"Language: cs\n"
2352 "MIME-Version: 1.0\n"
2353 "Content-Type: text/plain; charset=UTF-8\n"
2354 "Content-Transfer-Encoding: 8bit\n"
2355-"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"
2356-"X-Generator: Launchpad (build 16506)\n"
2357+"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
2358+"X-Generator: Launchpad (build 16580)\n"
2359
2360 #. Type: string
2361 #. Description
2362
2363=== modified file 'debian/po/de.po'
2364--- debian/po/de.po 2013-03-22 16:14:06 +0000
2365+++ debian/po/de.po 2013-05-09 20:11:45 +0000
2366@@ -6,17 +6,16 @@
2367 msgid ""
2368 msgstr ""
2369 "Project-Id-Version: checkbox\n"
2370-"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"
2371+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2372 "POT-Creation-Date: 2012-09-21 11:25-0400\n"
2373 "PO-Revision-Date: 2012-10-06 22:02+0000\n"
2374 "Last-Translator: Dennis Baudys <Unknown>\n"
2375 "Language-Team: German <de@li.org>\n"
2376-"Language: de\n"
2377 "MIME-Version: 1.0\n"
2378 "Content-Type: text/plain; charset=UTF-8\n"
2379 "Content-Transfer-Encoding: 8bit\n"
2380-"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"
2381-"X-Generator: Launchpad (build 16506)\n"
2382+"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
2383+"X-Generator: Launchpad (build 16580)\n"
2384
2385 #. Type: string
2386 #. Description
2387@@ -204,7 +203,8 @@
2388 #. Description
2389 #: ../checkbox.templates:15001
2390 msgid "The SSID of the 802.11n router with open security."
2391-msgstr "Die SSID des 802.11n-Routers mit »Open«-Sicherheitsmodell (unsicher)."
2392+msgstr ""
2393+"Die SSID des 802.11n-Routers mit »Open«-Sicherheitsmodell (unsicher)."
2394
2395 #. Type: string
2396 #. Description
2397
2398=== modified file 'debian/po/en_AU.po'
2399--- debian/po/en_AU.po 2013-03-22 16:14:06 +0000
2400+++ debian/po/en_AU.po 2013-05-09 20:11:45 +0000
2401@@ -6,17 +6,16 @@
2402 msgid ""
2403 msgstr ""
2404 "Project-Id-Version: checkbox\n"
2405-"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"
2406+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2407 "POT-Creation-Date: 2012-09-21 11:25-0400\n"
2408 "PO-Revision-Date: 2011-07-21 02:39+0000\n"
2409 "Last-Translator: Jared Norris <jrnorris@gmail.com>\n"
2410 "Language-Team: English (Australia) <en_AU@li.org>\n"
2411-"Language: \n"
2412 "MIME-Version: 1.0\n"
2413 "Content-Type: text/plain; charset=UTF-8\n"
2414 "Content-Transfer-Encoding: 8bit\n"
2415-"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"
2416-"X-Generator: Launchpad (build 16506)\n"
2417+"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
2418+"X-Generator: Launchpad (build 16580)\n"
2419
2420 #. Type: string
2421 #. Description
2422
2423=== modified file 'debian/po/en_GB.po'
2424--- debian/po/en_GB.po 2013-03-22 16:14:06 +0000
2425+++ debian/po/en_GB.po 2013-05-09 20:11:45 +0000
2426@@ -6,17 +6,16 @@
2427 msgid ""
2428 msgstr ""
2429 "Project-Id-Version: checkbox\n"
2430-"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"
2431+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2432 "POT-Creation-Date: 2012-09-21 11:25-0400\n"
2433 "PO-Revision-Date: 2012-09-26 09:33+0000\n"
2434 "Last-Translator: Biffaboy <Unknown>\n"
2435 "Language-Team: English (United Kingdom) <en_GB@li.org>\n"
2436-"Language: \n"
2437 "MIME-Version: 1.0\n"
2438 "Content-Type: text/plain; charset=UTF-8\n"
2439 "Content-Transfer-Encoding: 8bit\n"
2440-"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"
2441-"X-Generator: Launchpad (build 16506)\n"
2442+"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
2443+"X-Generator: Launchpad (build 16580)\n"
2444
2445 #. Type: string
2446 #. Description
2447
2448=== modified file 'debian/po/es.po'
2449--- debian/po/es.po 2013-03-22 16:14:06 +0000
2450+++ debian/po/es.po 2013-05-09 20:11:45 +0000
2451@@ -6,17 +6,16 @@
2452 msgid ""
2453 msgstr ""
2454 "Project-Id-Version: checkbox\n"
2455-"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"
2456+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2457 "POT-Creation-Date: 2012-09-21 11:25-0400\n"
2458 "PO-Revision-Date: 2012-09-21 18:40+0000\n"
2459 "Last-Translator: Daniel Manrique <daniel.manrique@canonical.com>\n"
2460 "Language-Team: Spanish <es@li.org>\n"
2461-"Language: es\n"
2462 "MIME-Version: 1.0\n"
2463 "Content-Type: text/plain; charset=UTF-8\n"
2464 "Content-Transfer-Encoding: 8bit\n"
2465-"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"
2466-"X-Generator: Launchpad (build 16506)\n"
2467+"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
2468+"X-Generator: Launchpad (build 16580)\n"
2469
2470 #. Type: string
2471 #. Description
2472@@ -42,7 +41,8 @@
2473 #. Description
2474 #: ../checkbox.templates:2001
2475 msgid "List of jobs to run when testing with checkbox."
2476-msgstr "Lista de tareas a ejecutar mientras se realizan pruebas con checkbox."
2477+msgstr ""
2478+"Lista de tareas a ejecutar mientras se realizan pruebas con checkbox."
2479
2480 #. Type: string
2481 #. Description
2482@@ -151,7 +151,8 @@
2483 #. Description
2484 #: ../checkbox.templates:11001
2485 msgid "The PSK of the 802.11b/g router with WPA security."
2486-msgstr "Llave de encriptación (PSK) del enrutador 802.11b/g con seguridad WPA."
2487+msgstr ""
2488+"Llave de encriptación (PSK) del enrutador 802.11b/g con seguridad WPA."
2489
2490 #. Type: string
2491 #. Description
2492
2493=== modified file 'debian/po/fr.po'
2494--- debian/po/fr.po 2013-03-22 16:14:06 +0000
2495+++ debian/po/fr.po 2013-05-09 20:11:45 +0000
2496@@ -6,17 +6,16 @@
2497 msgid ""
2498 msgstr ""
2499 "Project-Id-Version: checkbox\n"
2500-"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"
2501+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2502 "POT-Creation-Date: 2012-09-21 11:25-0400\n"
2503 "PO-Revision-Date: 2012-09-25 09:16+0000\n"
2504 "Last-Translator: Sylvie Gallet <Unknown>\n"
2505 "Language-Team: French <fr@li.org>\n"
2506-"Language: fr\n"
2507 "MIME-Version: 1.0\n"
2508 "Content-Type: text/plain; charset=UTF-8\n"
2509 "Content-Transfer-Encoding: 8bit\n"
2510-"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"
2511-"X-Generator: Launchpad (build 16506)\n"
2512+"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
2513+"X-Generator: Launchpad (build 16580)\n"
2514
2515 #. Type: string
2516 #. Description
2517
2518=== modified file 'debian/po/gl.po'
2519--- debian/po/gl.po 2013-03-22 16:14:06 +0000
2520+++ debian/po/gl.po 2013-05-09 20:11:45 +0000
2521@@ -6,17 +6,16 @@
2522 msgid ""
2523 msgstr ""
2524 "Project-Id-Version: checkbox\n"
2525-"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"
2526+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2527 "POT-Creation-Date: 2012-09-21 11:25-0400\n"
2528 "PO-Revision-Date: 2012-10-03 21:33+0000\n"
2529 "Last-Translator: Antón Méixome <meixome@gmail.com>\n"
2530 "Language-Team: Galician <gl@li.org>\n"
2531-"Language: gl\n"
2532 "MIME-Version: 1.0\n"
2533 "Content-Type: text/plain; charset=UTF-8\n"
2534 "Content-Transfer-Encoding: 8bit\n"
2535-"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"
2536-"X-Generator: Launchpad (build 16506)\n"
2537+"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
2538+"X-Generator: Launchpad (build 16580)\n"
2539
2540 #. Type: string
2541 #. Description
2542
2543=== modified file 'debian/po/he.po'
2544--- debian/po/he.po 2013-03-22 16:14:06 +0000
2545+++ debian/po/he.po 2013-05-09 20:11:45 +0000
2546@@ -6,17 +6,16 @@
2547 msgid ""
2548 msgstr ""
2549 "Project-Id-Version: checkbox\n"
2550-"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"
2551+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2552 "POT-Creation-Date: 2012-09-21 11:25-0400\n"
2553 "PO-Revision-Date: 2011-07-26 09:45+0000\n"
2554 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
2555 "Language-Team: Hebrew <he@li.org>\n"
2556-"Language: he\n"
2557 "MIME-Version: 1.0\n"
2558 "Content-Type: text/plain; charset=UTF-8\n"
2559 "Content-Transfer-Encoding: 8bit\n"
2560-"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"
2561-"X-Generator: Launchpad (build 16506)\n"
2562+"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
2563+"X-Generator: Launchpad (build 16580)\n"
2564
2565 #. Type: string
2566 #. Description
2567
2568=== modified file 'debian/po/hu.po'
2569--- debian/po/hu.po 2013-03-22 16:14:06 +0000
2570+++ debian/po/hu.po 2013-05-09 20:11:45 +0000
2571@@ -6,17 +6,16 @@
2572 msgid ""
2573 msgstr ""
2574 "Project-Id-Version: checkbox\n"
2575-"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"
2576+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2577 "POT-Creation-Date: 2012-09-21 11:25-0400\n"
2578 "PO-Revision-Date: 2011-07-18 12:57+0000\n"
2579 "Last-Translator: Richard Somlói <ricsipontaz@gmail.com>\n"
2580 "Language-Team: Hungarian <hu@li.org>\n"
2581-"Language: hu\n"
2582 "MIME-Version: 1.0\n"
2583 "Content-Type: text/plain; charset=UTF-8\n"
2584 "Content-Transfer-Encoding: 8bit\n"
2585-"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"
2586-"X-Generator: Launchpad (build 16506)\n"
2587+"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
2588+"X-Generator: Launchpad (build 16580)\n"
2589
2590 #. Type: string
2591 #. Description
2592
2593=== modified file 'debian/po/id.po'
2594--- debian/po/id.po 2013-03-22 16:14:06 +0000
2595+++ debian/po/id.po 2013-05-09 20:11:45 +0000
2596@@ -6,17 +6,16 @@
2597 msgid ""
2598 msgstr ""
2599 "Project-Id-Version: checkbox\n"
2600-"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"
2601+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2602 "POT-Creation-Date: 2012-09-21 11:25-0400\n"
2603 "PO-Revision-Date: 2012-08-13 10:30+0000\n"
2604 "Last-Translator: Mei Hua Song <Unknown>\n"
2605 "Language-Team: Indonesian <id@li.org>\n"
2606-"Language: id\n"
2607 "MIME-Version: 1.0\n"
2608 "Content-Type: text/plain; charset=UTF-8\n"
2609 "Content-Transfer-Encoding: 8bit\n"
2610-"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"
2611-"X-Generator: Launchpad (build 16506)\n"
2612+"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
2613+"X-Generator: Launchpad (build 16580)\n"
2614
2615 #. Type: string
2616 #. Description
2617
2618=== modified file 'debian/po/it.po'
2619--- debian/po/it.po 2013-03-22 16:14:06 +0000
2620+++ debian/po/it.po 2013-05-09 20:11:45 +0000
2621@@ -6,17 +6,16 @@
2622 msgid ""
2623 msgstr ""
2624 "Project-Id-Version: checkbox\n"
2625-"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"
2626+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2627 "POT-Creation-Date: 2012-09-21 11:25-0400\n"
2628 "PO-Revision-Date: 2011-09-22 14:07+0000\n"
2629 "Last-Translator: Sergio Zanchetta <primes2h@ubuntu.com>\n"
2630 "Language-Team: Italian <it@li.org>\n"
2631-"Language: it\n"
2632 "MIME-Version: 1.0\n"
2633 "Content-Type: text/plain; charset=UTF-8\n"
2634 "Content-Transfer-Encoding: 8bit\n"
2635-"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"
2636-"X-Generator: Launchpad (build 16506)\n"
2637+"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
2638+"X-Generator: Launchpad (build 16580)\n"
2639
2640 #. Type: string
2641 #. Description
2642
2643=== modified file 'debian/po/ja.po'
2644--- debian/po/ja.po 2013-03-22 16:14:06 +0000
2645+++ debian/po/ja.po 2013-05-09 20:11:45 +0000
2646@@ -6,17 +6,16 @@
2647 msgid ""
2648 msgstr ""
2649 "Project-Id-Version: checkbox\n"
2650-"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"
2651+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2652 "POT-Creation-Date: 2012-09-21 11:25-0400\n"
2653 "PO-Revision-Date: 2011-07-25 17:03+0000\n"
2654 "Last-Translator: Fumihito YOSHIDA <hito@kugutsu.org>\n"
2655 "Language-Team: Japanese <ja@li.org>\n"
2656-"Language: ja\n"
2657 "MIME-Version: 1.0\n"
2658 "Content-Type: text/plain; charset=UTF-8\n"
2659 "Content-Transfer-Encoding: 8bit\n"
2660-"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"
2661-"X-Generator: Launchpad (build 16506)\n"
2662+"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
2663+"X-Generator: Launchpad (build 16580)\n"
2664
2665 #. Type: string
2666 #. Description
2667
2668=== modified file 'debian/po/nl.po'
2669--- debian/po/nl.po 2013-03-22 16:14:06 +0000
2670+++ debian/po/nl.po 2013-05-09 20:11:45 +0000
2671@@ -6,17 +6,16 @@
2672 msgid ""
2673 msgstr ""
2674 "Project-Id-Version: checkbox\n"
2675-"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"
2676+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2677 "POT-Creation-Date: 2012-09-21 11:25-0400\n"
2678 "PO-Revision-Date: 2011-08-17 12:02+0000\n"
2679 "Last-Translator: Rachid <Unknown>\n"
2680 "Language-Team: Dutch <nl@li.org>\n"
2681-"Language: nl\n"
2682 "MIME-Version: 1.0\n"
2683 "Content-Type: text/plain; charset=UTF-8\n"
2684 "Content-Transfer-Encoding: 8bit\n"
2685-"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"
2686-"X-Generator: Launchpad (build 16506)\n"
2687+"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
2688+"X-Generator: Launchpad (build 16580)\n"
2689
2690 #. Type: string
2691 #. Description
2692
2693=== modified file 'debian/po/oc.po'
2694--- debian/po/oc.po 2013-03-22 16:14:06 +0000
2695+++ debian/po/oc.po 2013-05-09 20:11:45 +0000
2696@@ -6,17 +6,16 @@
2697 msgid ""
2698 msgstr ""
2699 "Project-Id-Version: checkbox\n"
2700-"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"
2701+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2702 "POT-Creation-Date: 2012-09-21 11:25-0400\n"
2703 "PO-Revision-Date: 2012-02-24 07:45+0000\n"
2704 "Last-Translator: Cédric VALMARY (Tot en òc) <cvalmary@yahoo.fr>\n"
2705 "Language-Team: Occitan (post 1500) <oc@li.org>\n"
2706-"Language: \n"
2707 "MIME-Version: 1.0\n"
2708 "Content-Type: text/plain; charset=UTF-8\n"
2709 "Content-Transfer-Encoding: 8bit\n"
2710-"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"
2711-"X-Generator: Launchpad (build 16506)\n"
2712+"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
2713+"X-Generator: Launchpad (build 16580)\n"
2714
2715 #. Type: string
2716 #. Description
2717
2718=== modified file 'debian/po/pl.po'
2719--- debian/po/pl.po 2013-03-22 16:14:06 +0000
2720+++ debian/po/pl.po 2013-05-09 20:11:45 +0000
2721@@ -6,17 +6,16 @@
2722 msgid ""
2723 msgstr ""
2724 "Project-Id-Version: checkbox\n"
2725-"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"
2726+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2727 "POT-Creation-Date: 2012-09-21 11:25-0400\n"
2728 "PO-Revision-Date: 2011-07-18 21:11+0000\n"
2729 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
2730 "Language-Team: Polish <pl@li.org>\n"
2731-"Language: pl\n"
2732 "MIME-Version: 1.0\n"
2733 "Content-Type: text/plain; charset=UTF-8\n"
2734 "Content-Transfer-Encoding: 8bit\n"
2735-"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"
2736-"X-Generator: Launchpad (build 16506)\n"
2737+"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
2738+"X-Generator: Launchpad (build 16580)\n"
2739
2740 #. Type: string
2741 #. Description
2742
2743=== modified file 'debian/po/pt_BR.po'
2744--- debian/po/pt_BR.po 2013-03-22 16:14:06 +0000
2745+++ debian/po/pt_BR.po 2013-05-09 20:11:45 +0000
2746@@ -6,17 +6,16 @@
2747 msgid ""
2748 msgstr ""
2749 "Project-Id-Version: checkbox\n"
2750-"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"
2751+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2752 "POT-Creation-Date: 2012-09-21 11:25-0400\n"
2753 "PO-Revision-Date: 2012-05-12 03:33+0000\n"
2754 "Last-Translator: eniomarconcini <Unknown>\n"
2755 "Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
2756-"Language: pt_BR\n"
2757 "MIME-Version: 1.0\n"
2758 "Content-Type: text/plain; charset=UTF-8\n"
2759 "Content-Transfer-Encoding: 8bit\n"
2760-"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"
2761-"X-Generator: Launchpad (build 16506)\n"
2762+"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
2763+"X-Generator: Launchpad (build 16580)\n"
2764
2765 #. Type: string
2766 #. Description
2767
2768=== modified file 'debian/po/ro.po'
2769--- debian/po/ro.po 2013-03-22 16:14:06 +0000
2770+++ debian/po/ro.po 2013-05-09 20:11:45 +0000
2771@@ -6,17 +6,16 @@
2772 msgid ""
2773 msgstr ""
2774 "Project-Id-Version: checkbox\n"
2775-"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"
2776+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2777 "POT-Creation-Date: 2012-09-21 11:25-0400\n"
2778 "PO-Revision-Date: 2011-10-27 20:38+0000\n"
2779 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
2780 "Language-Team: Romanian <ro@li.org>\n"
2781-"Language: ro\n"
2782 "MIME-Version: 1.0\n"
2783 "Content-Type: text/plain; charset=UTF-8\n"
2784 "Content-Transfer-Encoding: 8bit\n"
2785-"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"
2786-"X-Generator: Launchpad (build 16506)\n"
2787+"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
2788+"X-Generator: Launchpad (build 16580)\n"
2789
2790 #. Type: string
2791 #. Description
2792
2793=== modified file 'debian/po/ru.po'
2794--- debian/po/ru.po 2013-03-22 16:14:06 +0000
2795+++ debian/po/ru.po 2013-05-09 20:11:45 +0000
2796@@ -6,17 +6,16 @@
2797 msgid ""
2798 msgstr ""
2799 "Project-Id-Version: checkbox\n"
2800-"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"
2801+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2802 "POT-Creation-Date: 2012-09-21 11:25-0400\n"
2803 "PO-Revision-Date: 2011-07-18 12:09+0000\n"
2804 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
2805 "Language-Team: Russian <ru@li.org>\n"
2806-"Language: ru\n"
2807 "MIME-Version: 1.0\n"
2808 "Content-Type: text/plain; charset=UTF-8\n"
2809 "Content-Transfer-Encoding: 8bit\n"
2810-"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"
2811-"X-Generator: Launchpad (build 16506)\n"
2812+"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
2813+"X-Generator: Launchpad (build 16580)\n"
2814
2815 #. Type: string
2816 #. Description
2817
2818=== modified file 'debian/po/tr.po'
2819--- debian/po/tr.po 2013-03-22 16:14:06 +0000
2820+++ debian/po/tr.po 2013-05-09 20:11:45 +0000
2821@@ -6,17 +6,16 @@
2822 msgid ""
2823 msgstr ""
2824 "Project-Id-Version: checkbox\n"
2825-"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"
2826+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2827 "POT-Creation-Date: 2012-09-21 11:25-0400\n"
2828 "PO-Revision-Date: 2012-05-18 12:51+0000\n"
2829 "Last-Translator: Hasan Yılmaz <iletisim@hasanyilmaz.net>\n"
2830 "Language-Team: Turkish <tr@li.org>\n"
2831-"Language: tr\n"
2832 "MIME-Version: 1.0\n"
2833 "Content-Type: text/plain; charset=UTF-8\n"
2834 "Content-Transfer-Encoding: 8bit\n"
2835-"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"
2836-"X-Generator: Launchpad (build 16506)\n"
2837+"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
2838+"X-Generator: Launchpad (build 16580)\n"
2839
2840 #. Type: string
2841 #. Description
2842
2843=== modified file 'debian/po/uk.po'
2844--- debian/po/uk.po 2013-03-22 16:14:06 +0000
2845+++ debian/po/uk.po 2013-05-09 20:11:45 +0000
2846@@ -6,17 +6,16 @@
2847 msgid ""
2848 msgstr ""
2849 "Project-Id-Version: checkbox\n"
2850-"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"
2851+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2852 "POT-Creation-Date: 2012-09-21 11:25-0400\n"
2853 "PO-Revision-Date: 2012-01-21 07:24+0000\n"
2854 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
2855 "Language-Team: Ukrainian <uk@li.org>\n"
2856-"Language: uk\n"
2857 "MIME-Version: 1.0\n"
2858 "Content-Type: text/plain; charset=UTF-8\n"
2859 "Content-Transfer-Encoding: 8bit\n"
2860-"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"
2861-"X-Generator: Launchpad (build 16506)\n"
2862+"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
2863+"X-Generator: Launchpad (build 16580)\n"
2864
2865 #. Type: string
2866 #. Description
2867
2868=== modified file 'debian/po/zh_CN.po'
2869--- debian/po/zh_CN.po 2013-03-22 16:14:06 +0000
2870+++ debian/po/zh_CN.po 2013-05-09 20:11:45 +0000
2871@@ -6,17 +6,16 @@
2872 msgid ""
2873 msgstr ""
2874 "Project-Id-Version: checkbox\n"
2875-"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"
2876+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2877 "POT-Creation-Date: 2012-09-21 11:25-0400\n"
2878 "PO-Revision-Date: 2012-05-09 02:09+0000\n"
2879 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
2880 "Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
2881-"Language: \n"
2882 "MIME-Version: 1.0\n"
2883 "Content-Type: text/plain; charset=UTF-8\n"
2884 "Content-Transfer-Encoding: 8bit\n"
2885-"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"
2886-"X-Generator: Launchpad (build 16506)\n"
2887+"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
2888+"X-Generator: Launchpad (build 16580)\n"
2889
2890 #. Type: string
2891 #. Description
2892
2893=== modified file 'debian/po/zh_TW.po'
2894--- debian/po/zh_TW.po 2013-03-22 16:14:06 +0000
2895+++ debian/po/zh_TW.po 2013-05-09 20:11:45 +0000
2896@@ -6,17 +6,16 @@
2897 msgid ""
2898 msgstr ""
2899 "Project-Id-Version: checkbox\n"
2900-"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"
2901+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2902 "POT-Creation-Date: 2012-09-21 11:25-0400\n"
2903 "PO-Revision-Date: 2011-07-26 15:03+0000\n"
2904 "Last-Translator: Cheng-Chia Tseng <pswo10680@gmail.com>\n"
2905 "Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
2906-"Language: \n"
2907 "MIME-Version: 1.0\n"
2908 "Content-Type: text/plain; charset=UTF-8\n"
2909 "Content-Transfer-Encoding: 8bit\n"
2910-"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"
2911-"X-Generator: Launchpad (build 16506)\n"
2912+"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
2913+"X-Generator: Launchpad (build 16580)\n"
2914
2915 #. Type: string
2916 #. Description
2917
2918=== modified file 'debian/rules'
2919--- debian/rules 2012-10-11 20:12:47 +0000
2920+++ debian/rules 2013-05-09 20:11:45 +0000
2921@@ -20,6 +20,7 @@
2922 # drop LD_PRELOAD to avoid running under fakeroot; drop TMPDIR to work
2923 # around LP#972324 (set by autopkgtest)
2924 env -u LD_PRELOAD -u TMPDIR CHECKBOX_PACKAGING=1 ./test
2925+ rm -rf scripts/__pycache__
2926 endif
2927
2928 override_dh_installdeb:
2929
2930=== modified file 'examples/checkbox-cli.ini'
2931--- examples/checkbox-cli.ini 2008-09-01 01:32:14 +0000
2932+++ examples/checkbox-cli.ini 2013-05-09 20:11:45 +0000
2933@@ -12,3 +12,6 @@
2934 # Class implementing the UserInterface interface.
2935 interface_class = CLIInterface
2936
2937+[checkbox/plugins]
2938+
2939+blacklist = hexr_prompt hexr_transport
2940
2941=== added file 'examples/checkbox-hw-collection.ini'
2942--- examples/checkbox-hw-collection.ini 1970-01-01 00:00:00 +0000
2943+++ examples/checkbox-hw-collection.ini 2013-05-09 20:11:45 +0000
2944@@ -0,0 +1,18 @@
2945+[DEFAULT]
2946+
2947+# Space separated list of files to include as a dependency
2948+includes = %(checkbox_share)s/configs/checkbox.ini
2949+
2950+[checkbox/plugins/user_interface]
2951+
2952+# Module where the user interface implementation is defined.
2953+interface_module = checkbox.user_interface
2954+
2955+# Class implementing the UserInterface interface.
2956+interface_class = UserInterface
2957+
2958+[checkbox/plugins/intro_prompt]
2959+welcome_text = Gathering hardware information. You may be prompted for your sudo password. This process will take approximately 20 seconds and you will be provided with a URL through which you can confirm and register your hardware submission.
2960+
2961+[checkbox/plugins]
2962+blacklist = launchpad_prompt launchpad_exchange final_prompt
2963
2964=== modified file 'examples/checkbox-qt.ini'
2965--- examples/checkbox-qt.ini 2012-05-16 11:36:56 +0000
2966+++ examples/checkbox-qt.ini 2013-05-09 20:11:45 +0000
2967@@ -14,3 +14,7 @@
2968
2969 # Path where qt files are stored.
2970 data_path = %(checkbox_share)s/qt
2971+
2972+[checkbox/plugins]
2973+
2974+blacklist = hexr_prompt hexr_transport
2975
2976=== modified file 'examples/checkbox-urwid.ini'
2977--- examples/checkbox-urwid.ini 2010-05-20 09:00:22 +0000
2978+++ examples/checkbox-urwid.ini 2013-05-09 20:11:45 +0000
2979@@ -12,3 +12,6 @@
2980 # Class implementing the UserInterface interface.
2981 interface_class = UrwidInterface
2982
2983+[checkbox/plugins]
2984+
2985+blacklist = hexr_prompt hexr_transport
2986
2987=== added file 'examples/network.cfg'
2988--- examples/network.cfg 1970-01-01 00:00:00 +0000
2989+++ examples/network.cfg 2013-05-09 20:11:45 +0000
2990@@ -0,0 +1,4 @@
2991+[FTP]
2992+Target: canonical.com
2993+User: anonymous
2994+Pass:
2995
2996=== modified file 'jobs/audio.txt.in'
2997--- jobs/audio.txt.in 2012-12-03 22:24:40 +0000
2998+++ jobs/audio.txt.in 2013-05-09 20:11:45 +0000
2999@@ -68,6 +68,7 @@
3000 device.category == 'AUDIO'
3001 package.name == 'alsa-base'
3002 package.name == 'pulseaudio-utils'
3003+ package.name == 'gstreamer1.0-plugins-good' or package.name == 'gstreamer0.10-plugins-good'
3004 command: audio_settings store --file=$CHECKBOX_DATA/pulseaudio_settings; audio_settings set --device=pci --volume=50; alsa_record_playback; EXIT_CODE=$?; audio_settings restore --file=$CHECKBOX_DATA/pulseaudio_settings; exit $EXIT_CODE
3005 _description:
3006 PURPOSE:
3007@@ -86,6 +87,7 @@
3008 device.category == 'AUDIO'
3009 package.name == 'alsa-base'
3010 package.name == 'pulseaudio-utils'
3011+ package.name == 'gstreamer1.0-plugins-good' or package.name == 'gstreamer0.10-plugins-good'
3012 command: audio_settings store --file=$CHECKBOX_DATA/pulseaudio_settings; audio_settings set --device=pci --volume=50; alsa_record_playback; EXIT_CODE=$?; audio_settings restore --file=$CHECKBOX_DATA/pulseaudio_settings; exit $EXIT_CODE
3013 _description:
3014 PURPOSE:
3015@@ -103,6 +105,7 @@
3016 device.category == 'AUDIO'
3017 package.name == 'alsa-base'
3018 package.name == 'pulseaudio-utils'
3019+ package.name == 'gstreamer1.0-plugins-good' or package.name == 'gstreamer0.10-plugins-good'
3020 command: audio_settings store --file=$CHECKBOX_DATA/pulseaudio_settings; audio_settings set --device=usb --volume=50; alsa_record_playback; EXIT_CODE=$?; audio_settings restore --file=$CHECKBOX_DATA/pulseaudio_settings; exit $EXIT_CODE
3021 _description:
3022 PURPOSE:
3023@@ -202,6 +205,7 @@
3024 device.category == 'AUDIO'
3025 package.name == 'alsa-base'
3026 package.name == 'pulseaudio-utils'
3027+ package.name == 'gstreamer1.0-plugins-good' or package.name == 'gstreamer0.10-plugins-good'
3028 command: audio_settings store --file=$CHECKBOX_DATA/pulseaudio_settings; audio_settings set --device=pci --volume=50; alsa_record_playback; EXIT_CODE=$?; audio_settings restore --file=$CHECKBOX_DATA/pulseaudio_settings; exit $EXIT_CODE
3029 _description:
3030 PURPOSE:
3031
3032=== modified file 'jobs/benchmarks.txt.in'
3033--- jobs/benchmarks.txt.in 2012-10-09 15:21:35 +0000
3034+++ jobs/benchmarks.txt.in 2013-05-09 20:11:45 +0000
3035@@ -83,6 +83,14 @@
3036 _description: Run GLmark2 benchmark
3037
3038 plugin: shell
3039+name: benchmarks/graphics/globs
3040+requires:
3041+ package.name == 'globs'
3042+ cpuinfo.platform in ("i386", "x86_64")
3043+command: glob_test --min-fps=26 --ignore-problems
3044+_description: Run globs benchmark
3045+
3046+plugin: shell
3047 name: benchmarks/graphics/unigine-sanctuary
3048 requires: package.name == 'phoronix-test-suite'
3049 command: pts_run unigine-sanctuary
3050@@ -213,3 +221,63 @@
3051 requires: package.name == 'sysstat'
3052 command: iostat -x -m 1 10 | python3 -c 'import sys, re; lines="".join(sys.stdin.readlines()); l=[float(n) for n in (re.findall("util\n.*?(\S+)\n", lines))]; print(sum(l)/len(l),"%")'
3053 _description: Disk utilization on an idle system.
3054+
3055+plugin: shell
3056+name: benchmarks/graphics/gputest_furmark_fullscreen_1920x1080
3057+requires:
3058+ package.name == 'gputest'
3059+ cpuinfo.platform == 'x86_64'
3060+command: gputest_benchmark fur --width 1920 --height 1080 -f
3061+_description:
3062+ Run a stress test based on FurMark (OpenGL 2.1 or 3.2)
3063+ Fullscreen 1920x1080 no antialiasing
3064+
3065+plugin: shell
3066+name: benchmarks/graphics/gputest_furmark_windowed_1024x640
3067+requires:
3068+ package.name == 'gputest'
3069+ cpuinfo.platform == 'x86_64'
3070+command: gputest_benchmark fur
3071+_description:
3072+ Run a stress test based on FurMark (OpenGL 2.1 or 3.2)
3073+ Windowed 1024x640 no antialiasing
3074+
3075+plugin: shell
3076+name: benchmarks/graphics/gputest_gimark_fullscreen_1920x1080
3077+requires:
3078+ package.name == 'gputest'
3079+ cpuinfo.platform == 'x86_64'
3080+command: gputest_benchmark gi --width 1920 --height 1080 -f
3081+_description:
3082+ Run GiMark, a geometry instancing test (OpenGL 3.3)
3083+ Fullscreen 1920x1080 no antialiasing
3084+
3085+plugin: shell
3086+name: benchmarks/graphics/gputest_gimark_windowed_1024x640
3087+requires:
3088+ package.name == 'gputest'
3089+ cpuinfo.platform == 'x86_64'
3090+command: gputest_benchmark gi
3091+_description:
3092+ Run GiMark, a geometry instancing test (OpenGL 3.3)
3093+ Windowed 1024x640 no antialiasing
3094+
3095+plugin: shell
3096+name: benchmarks/graphics/gputest_tessmark_fullscreen_1920x1080
3097+requires:
3098+ package.name == 'gputest'
3099+ cpuinfo.platform == 'x86_64'
3100+command: gputest_benchmark tess --width 1920 --height 1080 -f
3101+_description:
3102+ Run a tessellation test based on TessMark (OpenGL 4.0)
3103+ Fullscreen 1920x1080 no antialiasing
3104+
3105+plugin: shell
3106+name: benchmarks/graphics/gputest_tessmark_windowed_1024x640
3107+requires:
3108+ package.name == 'gputest'
3109+ cpuinfo.platform == 'x86_64'
3110+command: gputest_benchmark tess
3111+_description:
3112+ Run a tessellation test based on TessMark (OpenGL 4.0)
3113+ Windowed 1024x640 no antialiasing
3114
3115=== modified file 'jobs/camera.txt.in'
3116--- jobs/camera.txt.in 2012-11-06 17:11:49 +0000
3117+++ jobs/camera.txt.in 2013-05-09 20:11:45 +0000
3118@@ -9,7 +9,6 @@
3119 name: camera/display
3120 depends: camera/detect
3121 requires:
3122- package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0'
3123 device.category == 'CAPTURE'
3124 command: camera_test display
3125 _description:
3126
3127=== modified file 'jobs/esata.txt.in'
3128--- jobs/esata.txt.in 2012-11-12 15:32:12 +0000
3129+++ jobs/esata.txt.in 2013-05-09 20:11:45 +0000
3130@@ -16,7 +16,7 @@
3131 name: esata/storage-test
3132 user: root
3133 depends: esata/insert
3134-command: removable_storage_test ata_serial_esata
3135+command: removable_storage_test -s 268400000 ata_serial_esata
3136 _description:
3137 This is an automated test which performs read/write operations on an attached
3138 eSATA HDD
3139
3140=== modified file 'jobs/firewire.txt.in'
3141--- jobs/firewire.txt.in 2012-11-12 15:32:12 +0000
3142+++ jobs/firewire.txt.in 2013-05-09 20:11:45 +0000
3143@@ -16,7 +16,7 @@
3144 name: firewire/storage-test
3145 user: root
3146 depends: firewire/insert
3147-command: removable_storage_test firewire
3148+command: removable_storage_test -s 268400000 firewire
3149 _description:
3150 This is an automated test which performs read/write operations on an attached
3151 FireWire HDD
3152
3153=== modified file 'jobs/graphics.txt.in'
3154--- jobs/graphics.txt.in 2013-03-07 15:52:02 +0000
3155+++ jobs/graphics.txt.in 2013-05-09 20:11:45 +0000
3156@@ -26,7 +26,9 @@
3157
3158 plugin: shell
3159 name: graphics/xorg-process
3160-requires: package.name == 'xorg' and package.name == 'procps'
3161+requires:
3162+ package.name == 'xorg'
3163+ package.name == 'procps'
3164 command: pgrep -f '/usr/bin/X' >/dev/null
3165 _description: Test that the X process is running.
3166
3167
3168=== modified file 'jobs/hibernate.txt.in'
3169--- jobs/hibernate.txt.in 2013-01-03 14:58:32 +0000
3170+++ jobs/hibernate.txt.in 2013-05-09 20:11:45 +0000
3171@@ -6,7 +6,7 @@
3172 command:
3173 if type -P fwts >/dev/null; then
3174 echo "Calling fwts"
3175- fwts_test -l $CHECKBOX_DATA/hibernate-single -s s4 --s4-device-check --s4-device-check-delay=45 --s4-sleep-delay=120
3176+ fwts_test -l $CHECKBOX_DATA/hibernate-single -f none -s s4 --s4-device-check --s4-device-check-delay=45 --s4-sleep-delay=120
3177 else
3178 echo "Calling sleep_test"
3179 sleep_test -s disk -w 120
3180@@ -22,7 +22,13 @@
3181 VERIFICATION:
3182 Did the system successfully hibernate and did it work properly after waking up?
3183
3184+plugin: shell
3185+name: power-management/hibernate-single-log-check
3186+command: [ -e $CHECKBOX_DATA/hibernate-single.log ] && sleep_test_log_check -v s4 $CHECKBOX_DATA/hibernate-single.log
3187+_description:
3188+ Automated check of the hibernate log for errors discovered by fwts
3189+
3190 plugin: attachment
3191 name: power-management/hibernate-single-log-attach
3192-command: [ -e $CHECKBOX_DATA/hibernate-single.log ] && cat $CHECBOX_DATA/hibernate-single.log
3193+command: [ -e $CHECKBOX_DATA/hibernate-single.log ] && cat $CHECKBOX_DATA/hibernate-single.log
3194 description: attaches log from single hibernate/resume test to results
3195
3196=== modified file 'jobs/info.txt.in'
3197--- jobs/info.txt.in 2012-12-17 21:41:58 +0000
3198+++ jobs/info.txt.in 2013-05-09 20:11:45 +0000
3199@@ -1,6 +1,6 @@
3200 name: codecs_attachment
3201 plugin: attachment
3202-requires: device.driver == 'HDA Intel'
3203+requires: device.driver == 'snd_hda_intel'
3204 command: cat /proc/asound/card*/codec#*
3205 _description: Attaches a report of installed codecs for Intel HDA
3206
3207
3208=== modified file 'jobs/input.txt.in'
3209--- jobs/input.txt.in 2013-03-07 15:52:02 +0000
3210+++ jobs/input.txt.in 2013-05-09 20:11:45 +0000
3211@@ -41,10 +41,20 @@
3212 VERIFICATION:
3213 Is your keyboard working properly?
3214
3215+plugin: manual
3216+name: input/accelerometer_verify
3217+_description:
3218+ PURPOSE:
3219+ Manual detection of accelerometer.
3220+ STEPS:
3221+ 1. Look at the specifications for your system.
3222+ VERIFICATION:
3223+ Is this system supposed to have an accelerometer?
3224+
3225 plugin: user-interact
3226 name: input/accelerometer
3227 user: root
3228-requires: module.name in ['hdaps', 'hp_accel']
3229+depends: input/accelerometer_verify
3230 command: accelerometer_test -m
3231 _description:
3232 PURPOSE:
3233
3234=== modified file 'jobs/keys.txt.in'
3235--- jobs/keys.txt.in 2012-11-07 21:33:08 +0000
3236+++ jobs/keys.txt.in 2013-05-09 20:11:45 +0000
3237@@ -78,9 +78,15 @@
3238 This test will test the wireless key
3239 STEPS:
3240 1. Press the wireless key on the keyboard
3241- 2. Press the same key again
3242+ 2. Check that the wifi LED turns off or changes color
3243+ 3. Check that wireless is disabled
3244+ 4. Press the same key again
3245+ 5. Check that the wifi LED turns on or changes color
3246+ 6. Check that wireless is enabled
3247 VERIFICATION:
3248- Did the wireless go off on the first press and on again on the second?
3249+ Did the wireless turn off on the first press and on again on the second?
3250+ (NOTE: the LED functionality will be reviewed in a following test. Please
3251+ only consider the functionality of the wifi itself here.)
3252
3253 plugin: user-interact
3254 name: keys/media-control
3255
3256=== modified file 'jobs/led.txt.in'
3257--- jobs/led.txt.in 2012-10-27 10:33:23 +0000
3258+++ jobs/led.txt.in 2013-05-09 20:11:45 +0000
3259@@ -9,6 +9,29 @@
3260 Does the power LED light as expected?
3261
3262 plugin: manual
3263+name: led/power-blink-suspend
3264+depends: suspend/suspend_advanced
3265+_description:
3266+ PURPOSE:
3267+ Power LED verification
3268+ STEPS:
3269+ 1. The Power LED should blink or change color while the system is suspended
3270+ VERIFICATION:
3271+ Did the Power LED blink or change color while the system was suspended for the previous suspend test?
3272+
3273+plugin: manual
3274+name: led/suspend
3275+_description:
3276+ PURPOSE:
3277+ Suspend LED verification. If your system does not have a dedicated Suspend
3278+ LED, skip this test.
3279+ STEPS:
3280+ 1. The Suspend LED should blink or change color while the system is
3281+ supended
3282+ VERIFICATION
3283+ Did the Suspend LED blink or change color while the system was suspended?
3284+
3285+plugin: manual
3286 name: led/battery-charging
3287 _description:
3288 PURPOSE:
3289@@ -81,33 +104,29 @@
3290
3291 plugin: manual
3292 name: led/wlan
3293-depends: wireless/wireless_connection
3294-requires: package.name == 'firefox'
3295-command: firefox http://www.ubuntu.com
3296+depends: keys/wireless
3297 _description:
3298 PURPOSE:
3299 WLAN LED verification
3300 STEPS:
3301- 1. Make sure WLAN connection is established
3302- 2. WLAN LED should light
3303- 3. Select Test to open Firefox
3304- 4. WLAN LED should flash while downloading data
3305+ 1. During the keys/wireless test you should have observed the
3306+ wireless LED while turning wireless back on.
3307+ 2. WLAN LED should light or change color when wireless is turned on
3308 VERIFICATION:
3309- Did the WLAN LED light and flash as expected?
3310+ Did the WLAN LED turn on or change color as expected?
3311
3312 plugin: manual
3313 name: led/wlan-disabled
3314-depends: wireless/wireless_connection
3315+depends: keys/wireless
3316 _description:
3317 PURPOSE:
3318 Validate that WLAN LED shuts off when disabled
3319 STEPS:
3320- 1. Connect to AP
3321- 2. Use Physical switch to disable WLAN
3322- 3. Re-enable
3323- 4. Use Network-Manager to disable WLAN
3324+ 1. During the keys/wireless test you should have observed the WLAN LED
3325+ while performing that test after turning wireless off.
3326+ 2. WLAN LED should turn off or change color when wireless is turned off
3327 VERIFICATION:
3328- Did the LED turn off then WLAN is disabled?
3329+ Did the WLAN LED turn off or change color as expected?
3330
3331 plugin: manual
3332 name: led/bluetooth
3333@@ -164,3 +183,15 @@
3334 VERIFICATION:
3335 Did the WLAN/Bluetooth LED light as expected?
3336
3337+plugin: manual
3338+name: led/mute
3339+depends: keys/mute
3340+_description:
3341+ PURPOSE:
3342+ Audio Mute LED verification. Skip this test if your system does not have
3343+ a special Audio Mute LED
3344+ STEPS:
3345+ 1. Press the Mute key twice and observe the Audio LED to determine if it
3346+ either turned off and on or changed colors.
3347+ VERIFICATION:
3348+ Did the Audio LED turn on and off change color as expected?
3349
3350=== modified file 'jobs/local.txt.in'
3351--- jobs/local.txt.in 2012-10-23 21:52:31 +0000
3352+++ jobs/local.txt.in 2013-05-09 20:11:45 +0000
3353@@ -278,6 +278,13 @@
3354 shopt -s extglob
3355 cat $CHECKBOX_SHARE/jobs/wireless.txt?(.in)
3356
3357+name: __mobilebroadband__
3358+plugin: local
3359+_description: Mobile broadband tests
3360+command:
3361+ shopt -s extglob
3362+ cat $CHECKBOX_SHARE/jobs/mobilebroadband.txt?(.in)
3363+
3364 name: __stress__
3365 plugin: local
3366 _description: Stress tests
3367
3368=== modified file 'jobs/mediacard.txt.in'
3369--- jobs/mediacard.txt.in 2012-11-16 04:25:09 +0000
3370+++ jobs/mediacard.txt.in 2013-05-09 20:11:45 +0000
3371@@ -7,8 +7,9 @@
3372 detect the insertion of a Multimedia Card (MMC) media
3373 STEPS:
3374 1. Click "Test" and insert an MMC card into the reader.
3375+ If a file browser opens up, you can safely close it.
3376 (Note: this test will time-out after 20 seconds.)
3377- 2. Do not unplug the device after the test.
3378+ 2. Do not remove the device after this test.
3379 VERIFICATION:
3380 The verification of this test is automated. Do not change the
3381 automatically selected result.
3382@@ -17,7 +18,7 @@
3383 name: mediacard/mmc-storage
3384 depends: mediacard/mmc-insert
3385 user: root
3386-command: removable_storage_test --memorycard sdio usb scsi
3387+command: removable_storage_test -s 67120000 --memorycard sdio usb scsi
3388 _description:
3389 This test is automated and executes after the mediacard/mmc-insert
3390 test is run. It tests reading and writing to the MMC card.
3391@@ -47,8 +48,9 @@
3392 detect the insertion of an MMC card after the system has been suspended
3393 STEPS:
3394 1. Click "Test" and insert an MMC card into the reader.
3395+ If a file browser opens up, you can safely close it.
3396 (Note: this test will time-out after 20 seconds.)
3397- 2. Do not unplug the device after the test.
3398+ 2. Do not remove the device after this test.
3399 VERIFICATION:
3400 The verification of this test is automated. Do not change the
3401 automatically selected result.
3402@@ -57,7 +59,7 @@
3403 name: mediacard/mmc-storage-after-suspend
3404 depends: mediacard/mmc-insert-after-suspend
3405 user: root
3406-command: removable_storage_test --memorycard sdio usb scsi
3407+command: removable_storage_test -s 67120000 --memorycard sdio usb scsi
3408 _description:
3409 This test is automated and executes after the mediacard/mmc-insert-after-suspend test
3410 is run. It tests reading and writing to the MMC card after the system has been suspended.
3411@@ -86,8 +88,9 @@
3412 detect the insertion of a Secure Digital (SD) media card
3413 STEPS:
3414 1. Click "Test" and insert an SD card into the reader.
3415+ If a file browser opens up, you can safely close it.
3416 (Note: this test will time-out after 20 seconds.)
3417- 2. Do not unplug the device after the test.
3418+ 2. Do not remove the device after this test.
3419 VERIFICATION:
3420 The verification of this test is automated. Do not change the
3421 automatically selected result.
3422@@ -96,7 +99,7 @@
3423 name: mediacard/sd-storage
3424 depends: mediacard/sd-insert
3425 user: root
3426-command: removable_storage_test --memorycard sdio usb scsi
3427+command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
3428 _description:
3429 This test is automated and executes after the mediacard/sd-insert
3430 test is run. It tests reading and writing to the SD card.
3431@@ -126,8 +129,9 @@
3432 detect the insertion of an SD card after the system has been suspended
3433 STEPS:
3434 1. Click "Test" and insert an SD card into the reader.
3435+ If a file browser opens up, you can safely close it.
3436 (Note: this test will time-out after 20 seconds.)
3437- 2. Do not unplug the device after the test.
3438+ 2. Do not remove the device after this test.
3439 VERIFICATION:
3440 The verification of this test is automated. Do not change the
3441 automatically selected result.
3442@@ -136,7 +140,7 @@
3443 name: mediacard/sd-storage-after-suspend
3444 depends: mediacard/sd-insert-after-suspend
3445 user: root
3446-command: removable_storage_test --memorycard sdio usb scsi
3447+command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
3448 _description:
3449 This test is automated and executes after the mediacard/sd-insert-after-suspend test
3450 is run. It tests reading and writing to the SD card after the system has been suspended.
3451@@ -160,7 +164,7 @@
3452 name: mediacard/sd-preinserted
3453 user: root
3454 requires: device.category == 'CARDREADER'
3455-command: removable_storage_test --memorycard -l sdio usb scsi && removable_storage_test --memorycard sdio usb scsi
3456+command: removable_storage_test -s 268400000 --memorycard -l sdio usb scsi && removable_storage_test --memorycard sdio usb scsi
3457 _description:
3458 This is a fully automated version of mediacard/sd-automated and assumes that the
3459 system under test has a memory card device plugged in prior to checkbox execution.
3460@@ -175,8 +179,9 @@
3461 detect the insertion of a Secure Digital High-Capacity (SDHC) media card
3462 STEPS:
3463 1. Click "Test" and insert an SDHC card into the reader.
3464+ If a file browser opens up, you can safely close it.
3465 (Note: this test will time-out after 20 seconds.)
3466- 2. Do not unplug the device after the test.
3467+ 2. Do not remove the device after this test.
3468 VERIFICATION:
3469 The verification of this test is automated. Do not change the
3470 automatically selected result.
3471@@ -185,7 +190,7 @@
3472 name: mediacard/sdhc-storage
3473 depends: mediacard/sdhc-insert
3474 user: root
3475-command: removable_storage_test --memorycard sdio usb scsi
3476+command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
3477 _description:
3478 This test is automated and executes after the mediacard/sdhc-insert
3479 test is run. It tests reading and writing to the SDHC card.
3480@@ -215,8 +220,9 @@
3481 detect the insertion of an SDHC media card after the system has been suspended
3482 STEPS:
3483 1. Click "Test" and insert an SDHC card into the reader.
3484+ If a file browser opens up, you can safely close it.
3485 (Note: this test will time-out after 20 seconds.)
3486- 2. Do not unplug the device after the test.
3487+ 2. Do not remove the device after this test.
3488 VERIFICATION:
3489 The verification of this test is automated. Do not change the
3490 automatically selected result.
3491@@ -225,7 +231,7 @@
3492 name: mediacard/sdhc-storage-after-suspend
3493 depends: mediacard/sdhc-insert-after-suspend
3494 user: root
3495-command: removable_storage_test --memorycard sdio usb scsi
3496+command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
3497 _description:
3498 This test is automated and executes after the mediacard/sdhc-insert-after-suspend test
3499 is run. It tests reading and writing to the SDHC card after the system has been suspended.
3500@@ -254,8 +260,9 @@
3501 detect the insertion of a Compact Flash (CF) media card
3502 STEPS:
3503 1. Click "Test" and insert a CF card into the reader.
3504+ If a file browser opens up, you can safely close it.
3505 (Note: this test will time-out after 20 seconds.)
3506- 2. Do not unplug the device after the test.
3507+ 2. Do not remove the device after this test.
3508 VERIFICATION:
3509 The verification of this test is automated. Do not change the
3510 automatically selected result.
3511@@ -264,7 +271,7 @@
3512 name: mediacard/cf-storage
3513 depends: mediacard/cf-insert
3514 user: root
3515-command: removable_storage_test --memorycard sdio usb scsi
3516+command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
3517 _description:
3518 This test is automated and executes after the mediacard/cf-insert
3519 test is run. It tests reading and writing to the CF card.
3520@@ -294,8 +301,9 @@
3521 detect the insertion of a CF card after the system has been suspended
3522 STEPS:
3523 1. Click "Test" and insert a CF card into the reader.
3524+ If a file browser opens up, you can safely close it.
3525 (Note: this test will time-out after 20 seconds.)
3526- 2. Do not unplug the device after the test.
3527+ 2. Do not remove the device after this test.
3528 VERIFICATION:
3529 The verification of this test is automated. Do not change the
3530 automatically selected result.
3531@@ -304,7 +312,7 @@
3532 name: mediacard/cf-storage-after-suspend
3533 depends: mediacard/cf-insert-after-suspend
3534 user: root
3535-command: removable_storage_test --memorycard sdio usb scsi
3536+command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
3537 _description:
3538 This test is automated and executes after the mediacard/cf-insert-after-suspend test
3539 is run. It tests reading and writing to the CF card after the system has been suspended.
3540@@ -333,8 +341,9 @@
3541 detect the insertion of a Secure Digital Extended Capacity (SDXC) media card
3542 STEPS:
3543 1. Click "Test" and insert a SDXC card into the reader.
3544+ If a file browser opens up, you can safely close it.
3545 (Note: this test will time-out after 20 seconds.)
3546- 2. Do not unplug the device after the test.
3547+ 2. Do not remove the device after this test.
3548 VERIFICATION:
3549 The verification of this test is automated. Do not change the
3550 automatically selected result.
3551@@ -343,7 +352,7 @@
3552 name: mediacard/sdxc-storage
3553 depends: mediacard/sdxc-insert
3554 user: root
3555-command: removable_storage_test --memorycard sdio usb scsi
3556+command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
3557 _description:
3558 This test is automated and executes after the mediacard/sdxc-insert
3559 test is run. It tests reading and writing to the SDXC card.
3560@@ -373,8 +382,9 @@
3561 detect the insertion of a SDXC card after the system has been suspended
3562 STEPS:
3563 1. Click "Test" and insert a SDXC card into the reader.
3564+ If a file browser opens up, you can safely close it.
3565 (Note: this test will time-out after 20 seconds.)
3566- 2. Do not unplug the device after the test.
3567+ 2. Do not remove the device after this test.
3568 VERIFICATION:
3569 The verification of this test is automated. Do not change the
3570 automatically selected result.
3571@@ -383,7 +393,7 @@
3572 name: mediacard/sdxc-storage-after-suspend
3573 depends: mediacard/sdxc-insert-after-suspend
3574 user: root
3575-command: removable_storage_test --memorycard sdio usb scsi
3576+command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
3577 _description:
3578 This test is automated and executes after the mediacard/sdxc-insert-after-suspend test
3579 is run. It tests reading and writing to the SDXC card after the system has been suspended.
3580@@ -398,6 +408,7 @@
3581 of a SDXC card from the systems card reader after the system has been suspended.
3582 STEPS:
3583 1. Click "Test" and remove the SDXC card from the reader.
3584+ If a file browser opens up, you can safely close it.
3585 (Note: this test will time-out after 20 seconds.)
3586 VERIFICATION:
3587 The verification of this test is automated. Do not change the
3588@@ -412,8 +423,9 @@
3589 detect the insertion of a Memory Stick (MS) media card
3590 STEPS:
3591 1. Click "Test" and insert a MS card into the reader.
3592+ If a file browser opens up, you can safely close it.
3593 (Note: this test will time-out after 20 seconds.)
3594- 2. Do not unplug the device after the test.
3595+ 2. Do not remove the device after this test.
3596 VERIFICATION:
3597 The verification of this test is automated. Do not change the
3598 automatically selected result.
3599@@ -422,7 +434,7 @@
3600 name: mediacard/ms-storage
3601 depends: mediacard/ms-insert
3602 user: root
3603-command: removable_storage_test --memorycard sdio usb scsi
3604+command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
3605 _description:
3606 This test is automated and executes after the mediacard/ms-insert
3607 test is run. It tests reading and writing to the MS card.
3608@@ -452,8 +464,9 @@
3609 detect the insertion of a MS card after the system has been suspended
3610 STEPS:
3611 1. Click "Test" and insert a MS card into the reader.
3612+ If a file browser opens up, you can safely close it.
3613 (Note: this test will time-out after 20 seconds.)
3614- 2. Do not unplug the device after the test.
3615+ 2. Do not remove the device after this test.
3616 VERIFICATION:
3617 The verification of this test is automated. Do not change the
3618 automatically selected result.
3619@@ -462,7 +475,7 @@
3620 name: mediacard/ms-storage-after-suspend
3621 depends: mediacard/ms-insert-after-suspend
3622 user: root
3623-command: removable_storage_test --memorycard sdio usb scsi
3624+command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
3625 _description:
3626 This test is automated and executes after the mediacard/ms-insert-after-suspend test
3627 is run. It tests reading and writing to the MS card after the system has been suspended.
3628@@ -491,8 +504,9 @@
3629 detect the insertion of a Memory Stick Pro (MSP) media card
3630 STEPS:
3631 1. Click "Test" and insert a MSP card into the reader.
3632+ If a file browser opens up, you can safely close it.
3633 (Note: this test will time-out after 20 seconds.)
3634- 2. Do not unplug the device after the test.
3635+ 2. Do not remove the device after this test.
3636 VERIFICATION:
3637 The verification of this test is automated. Do not change the
3638 automatically selected result.
3639@@ -501,7 +515,7 @@
3640 name: mediacard/msp-storage
3641 depends: mediacard/msp-insert
3642 user: root
3643-command: removable_storage_test --memorycard sdio usb scsi
3644+command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
3645 _description:
3646 This test is automated and executes after the mediacard/msp-insert
3647 test is run. It tests reading and writing to the MSP card.
3648@@ -531,8 +545,9 @@
3649 detect the insertion of a MSP card after the system has been suspended
3650 STEPS:
3651 1. Click "Test" and insert a MSP card into the reader.
3652+ If a file browser opens up, you can safely close it.
3653 (Note: this test will time-out after 20 seconds.)
3654- 2. Do not unplug the device after the test.
3655+ 2. Do not remove the device after this test.
3656 VERIFICATION:
3657 The verification of this test is automated. Do not change the
3658 automatically selected result.
3659@@ -541,7 +556,7 @@
3660 name: mediacard/msp-storage-after-suspend
3661 depends: mediacard/msp-insert-after-suspend
3662 user: root
3663-command: removable_storage_test --memorycard sdio usb scsi
3664+command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
3665 _description:
3666 This test is automated and executes after the mediacard/msp-insert-after-suspend test
3667 is run. It tests reading and writing to the MSP card after the system has been suspended.
3668@@ -570,8 +585,9 @@
3669 detect the insertion of a Extreme Digital (xD) media card
3670 STEPS:
3671 1. Click "Test" and insert a xD card into the reader.
3672+ If a file browser opens up, you can safely close it.
3673 (Note: this test will time-out after 20 seconds.)
3674- 2. Do not unplug the device after the test.
3675+ 2. Do not remove the device after this test.
3676 VERIFICATION:
3677 The verification of this test is automated. Do not change the
3678 automatically selected result.
3679@@ -580,7 +596,7 @@
3680 name: mediacard/xd-storage
3681 depends: mediacard/xd-insert
3682 user: root
3683-command: removable_storage_test --memorycard sdio usb scsi
3684+command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
3685 _description:
3686 This test is automated and executes after the mediacard/xd-insert
3687 test is run. It tests reading and writing to the xD card.
3688@@ -610,8 +626,9 @@
3689 detect the insertion of a xD card after the system has been suspended
3690 STEPS:
3691 1. Click "Test" and insert a xD card into the reader.
3692+ If a file browser opens up, you can safely close it.
3693 (Note: this test will time-out after 20 seconds.)
3694- 2. Do not unplug the device after the test.
3695+ 2. Do not remove the device after this test.
3696 VERIFICATION:
3697 The verification of this test is automated. Do not change the
3698 automatically selected result.
3699@@ -620,7 +637,7 @@
3700 name: mediacard/xd-storage-after-suspend
3701 depends: mediacard/xd-insert-after-suspend
3702 user: root
3703-command: removable_storage_test --memorycard sdio usb scsi
3704+command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
3705 _description:
3706 This test is automated and executes after the mediacard/xd-insert-after-suspend test
3707 is run. It tests reading and writing to the xD card after the system has been suspended.
3708
3709=== modified file 'jobs/miscellanea.txt.in'
3710--- jobs/miscellanea.txt.in 2013-01-07 08:53:00 +0000
3711+++ jobs/miscellanea.txt.in 2013-05-09 20:11:45 +0000
3712@@ -67,5 +67,56 @@
3713
3714 plugin: shell
3715 name: miscellanea/sources-list
3716-command: sources_test
3717+command: sources_test $SOURCES_LIST "$REPOSITORIES"
3718 _description: Checks that a specified sources list file contains the requested repositories
3719+
3720+plugin: local
3721+name: miscellanea/pxe_boot
3722+requires: device.category == 'NETWORK'
3723+_description: Automated job to generate the PXE verification test for each NIC.
3724+command:
3725+ 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"'
3726+ plugin: manual
3727+ name: miscellanea/pxe_boot_$2
3728+ description:
3729+ PURPOSE:
3730+ This test will verify that you have attempted to PXE boot this machine from
3731+ the network device $2.
3732+ STEPS:
3733+ 1. Prior to running this test, you should have attempted to boot this system via PXE on every Network Port available.
3734+ VERIFICATION:
3735+ 1. Select Yes if you successfully used PXE boot this system using the NIC $2
3736+ 2. Select No if you did not attempt to PXE boot this system using the NIC $2
3737+ 3. Select No if you attempted to PXE boot via $2 and it failed for some reason.
3738+ EOF
3739+
3740+plugin: local
3741+name: miscellanea/remote_shared_ipmi
3742+requires: device.category == 'NETWORK'
3743+_description: Automated job to generate the Remote Shared IPMI verification test for each NIC.
3744+command:
3745+ 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"'
3746+ plugin: manual
3747+ name: miscellanea/remote_shared_ipmi_$2
3748+ description:
3749+ PURPOSE:
3750+ This test will verify that you have attempted IPMI control of this machine from the network device $2.
3751+ STEPS:
3752+ 1. Prior to running this test, you should have configured and used IPMI to power this machine off and on using every Network Port available.
3753+ VERIFICATION:
3754+ 1. Select Yes if you successfully used IPMI to remotely power this system off and on using the NIC $2
3755+ 2. Select No if you did not attempt to use IPMI to remotely power this sytem off and on via the NIC $2
3756+ 3. Select No if you attempted to use IPMI to remotely power off/on this system via $2 and it failed for some reason.
3757+ EOF
3758+
3759+plugin: manual
3760+name: miscellanea/remote_dedicated_ipmi
3761+_description:
3762+ PURPOSE:
3763+ Some systems do not share IPMI over all NICs but instead have a dedicated management port directly connected to the BMC. This test verifies that you have used that port for remote IPMI connections and actions.
3764+ STEPS:
3765+ 1. Prior to running the test, you should have configured and used the Dedicated Management Port to remotely power off/on this sytem.
3766+ VERIFICATION:
3767+ 1. Select Yes if you successfully used IPMI to remotely power this system off and on using the dedicated management port.
3768+ 2. Select No if you attempted to use the dedicated management port to remotely power this system off/on and it failed for some reason.
3769+ 3. Skip this test if this system ONLY uses shared management/ethernet ports OR if this system does not have a BMC (Management Console)
3770
3771=== added file 'jobs/mobilebroadband.txt.in'
3772--- jobs/mobilebroadband.txt.in 1970-01-01 00:00:00 +0000
3773+++ jobs/mobilebroadband.txt.in 2013-05-09 20:11:45 +0000
3774@@ -0,0 +1,21 @@
3775+plugin: shell
3776+name: mobilebroadband/gsm_connection
3777+requires:
3778+ package.name == 'network-manager'
3779+ package.name == 'modemmanager'
3780+ mobilebroadband.gsm == 'supported'
3781+user: root
3782+environ: GSM_CONN_NAME GSM_APN GSM_USERNAME GSM_PASSWORD
3783+command: trap "nmcli con delete id $GSM_CONN_NAME" EXIT; create_connection mobilebroadband gsm `if [ ${GSM_APN} ]; then echo "--apn=$GSM_APN"; fi` `if [ ${GSM_CONN_NAME} ]; then echo "--name=$GSM_CONN_NAME"; fi` `if [ ${GSM_USERNAME} ]; then echo "--username=$GSM_USERNAME"; fi` `if [ ${GSM_PASSWORD} ]; then echo "--password=$GSM_PASSWORD"; fi` && curl http://start.ubuntu.com/connectivity-check.html --interface `nmcli dev status | awk '/gsm/ {print $1}'`
3784+_description: Creates a mobile broadband connection for a GSM based modem and checks the connection to ensure it's working.
3785+
3786+plugin: shell
3787+name: mobilebroadband/cdma_connection
3788+requires:
3789+ package.name == 'network-manager'
3790+ package.name == 'modemmanager'
3791+ mobilebroadband.cdma == 'supported'
3792+user: root
3793+environ: CDMA_CONN_NAME CDMA_USERNAME CDMA_PASSWORD
3794+command: trap "nmcli con delete id $CDMA_CONN_NAME" EXIT; create_connection mobilebroadband cdma `if [ ${CDMA_CONN_NAME} ]; then echo "--name=$CDMA_CONN_NAME"; fi` `if [ ${CDMA_USERNAME} ]; then echo "--username=$CDMA_USERNAME"; fi` `if [ ${CDMA_PASSWORD} ]; then echo "--password=$CDMA_PASSWORD"; fi` && curl http://start.ubuntu.com/connectivity-check.html --interface `nmcli dev status | awk '/gsm/ {print $1}'`
3795+_description: Creates a mobile broadband connection for a CDMA based modem and checks the connection to ensure it's working.
3796
3797=== modified file 'jobs/monitor.txt.in'
3798--- jobs/monitor.txt.in 2013-01-30 21:43:05 +0000
3799+++ jobs/monitor.txt.in 2013-05-09 20:11:45 +0000
3800@@ -66,7 +66,7 @@
3801
3802 plugin: manual
3803 name: monitor/multi-head
3804-requires: dmi.product not in ['Notebook','Laptop','Portable']
3805+requires: dmi.product in ['Desktop','Low Profile Desktop','Tower','Mini Tower']
3806 _description:
3807 PURPOSE:
3808 This test verifies that multi-monitor output works on your desktop system. This is NOT the same test as the external monitor tests you would run on your laptop. If your video card does not support multiple monitors, please skip this test. You will need two monitors to perform this test.
3809@@ -98,8 +98,8 @@
3810 PURPOSE:
3811 This test will test changes to screen brightness
3812 STEPS:
3813- 1. Click "Test" to try the to dim the screen.
3814- 2. Check if the screen was dimmed approximately by half.
3815+ 1. Click "Test" to try to dim the screen.
3816+ 2. Check if the screen was dimmed approximately to half of the maximum brightness.
3817 3. The screen will go back to the original brightness in 2 seconds.
3818 VERIFICATION:
3819- Was your screen dimmed approximately by half?
3820+ Was your screen dimmed approximately to half of the maximum brightness?
3821
3822=== modified file 'jobs/networking.txt.in'
3823--- jobs/networking.txt.in 2012-12-13 18:35:08 +0000
3824+++ jobs/networking.txt.in 2013-05-09 20:11:45 +0000
3825@@ -15,10 +15,10 @@
3826
3827 plugin: local
3828 name: networking/info
3829-requires: device.category == 'NETWORK' or device.category == 'WIRELESS'
3830+requires: device.category == 'NETWORK'
3831 _description: Network Information
3832 command:
3833- cat <<'EOF' | run_templates -s 'udev_resource | filter_templates -w "category=WIRELESS" -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"'
3834+ 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"'
3835 plugin: manual
3836 name: networking/info_$2
3837 requires: device.path == "$1"
3838@@ -29,7 +29,7 @@
3839 STEPS:
3840 1. Please verify the following information for NIC $2
3841 INFO:
3842- $output
3843+ \$output
3844 VERIFICATION:
3845 Is this correct?
3846 EOF
3847@@ -117,7 +117,7 @@
3848 package.name == 'ethtool' and package.name == 'nmap'
3849 device.path == "$1"
3850 user: root
3851- command: ethtool $2 | tail -1 | grep "detected: yes" && network_bandwidth_test --interface=$2 --scan=3 --log-level=debug || ( echo "ERROR: $2 is either not configured or not connected." >&2 && exit 1 )
3852+ command: network test -i $2 -t ftp
3853 description:
3854 Testing for NIC $2
3855 EOF
3856
3857=== modified file 'jobs/power-management.txt.in'
3858--- jobs/power-management.txt.in 2012-12-03 14:30:41 +0000
3859+++ jobs/power-management.txt.in 2013-05-09 20:11:45 +0000
3860@@ -2,11 +2,11 @@
3861 name: power-management/shutdown-boot
3862 _description:
3863 PURPOSE:
3864- This test will check your system shutdown/booting cycle
3865+ This test will check your system shutdown/booting cycle.
3866 STEPS:
3867- 1. Shutdown your machine
3868- 2. Boot your machine
3869- 3. Repeat steps 1 and 2 at least 5 times
3870+ 1. Shutdown your machine.
3871+ 2. Boot your machine.
3872+ 3. Repeat steps 1 and 2 at least 5 times.
3873 VERIFICATION:
3874 Did the system shutdown and rebooted correctly?
3875
3876@@ -44,9 +44,10 @@
3877 2. The machine will shut down.
3878 3. Power the machine back on.
3879 4. After rebooting, wait for the test prompts to inform you that the test is complete.
3880- 5. Once the test has completed, restart checkbox and select Re-Run when prompted
3881+ 5. Once the test has completed, restart checkbox and select 'Re-run' when prompted.
3882 VERIFICATION:
3883- If the machine successfully shuts down and boots, select Yes then select Next.
3884+ If the machine successfully shuts down and boots, select 'Yes', otherwise,
3885+ select 'No'.
3886
3887 plugin: attachment
3888 name: power-management/poweroff-log-attach
3889@@ -69,7 +70,7 @@
3890 1. Select "Test" to begin.
3891 2. The machine will reboot.
3892 3. After rebooting, wait for the test prompts to inform you that the test is complete.
3893- 4. Once the test has completed, restart checkbox and select Re-Run when prompted
3894+ 4. Once the test has completed, restart checkbox and select Re-Run when prompted.
3895 VERIFICATION:
3896 If the machine successfully reboots, select Yes then select Next.
3897
3898@@ -83,9 +84,9 @@
3899 name: power-management/lid
3900 _description:
3901 PURPOSE:
3902- This test will check your lid sensors
3903+ This test will check your lid sensors.
3904 STEPS:
3905- 1. Close your laptop lid
3906+ 1. Close your laptop lid.
3907 VERIFICATION:
3908 Does closing your laptop lid cause your system to suspend?
3909
3910@@ -102,8 +103,8 @@
3911 PURPOSE:
3912 This test will check your lid sensors
3913 STEPS:
3914- 1. Click "Test"
3915- 2. Close and open the lid
3916+ 1. Click "Test".
3917+ 2. Close and open the lid.
3918 VERIFICATION:
3919 Did the screen turn off while the lid was closed?
3920
3921@@ -118,12 +119,12 @@
3922 exit 1
3923 _description:
3924 PURPOSE:
3925- This test will check your lid sensors
3926+ This test will check your lid sensors.
3927 STEPS:
3928- 1. Click "Test"
3929- 2. Close the lid
3930- 3. Wait 5 seconds with the lid closed
3931- 4. Open the lid
3932+ 1. Click "Test".
3933+ 2. Close the lid.
3934+ 3. Wait 5 seconds with the lid closed.
3935+ 4. Open the lid.
3936 VERIFICATION:
3937 Did the system resume when the lid was opened?
3938
3939@@ -144,10 +145,9 @@
3940 name: power-management/unplug_ac
3941 _description:
3942 PURPOSE:
3943- This test will ensure that the AC is unplugged for the battery drain tests
3944- to run.
3945+ This test will ensure that the AC is unplugged for the battery drain tests to run.
3946 STEPS:
3947- 1. Unplug laptop from AC
3948+ 1. Unplug laptop from AC.
3949 VERIFICATION:
3950 Was the laptop unplugged from AC?
3951
3952@@ -187,9 +187,45 @@
3953 depends: power-management/battery_drain_idle power-management/battery_drain_movie power-management/battery_drain_sleep
3954 _description:
3955 PURPOSE:
3956- This test will ensure that the AC is plugged back in after the battery
3957+ This test will ensure that the AC is plugged back in after the battery.
3958 tests
3959 STEPS:
3960- 1. Plug laptop into AC
3961+ 1. Plug laptop into AC.
3962 VERIFICATION:
3963 Was the laptop plugged into AC?
3964+
3965+plugin: manual
3966+name: power-management/reboot_manual
3967+user:root
3968+command: shutdown -r now
3969+_description:
3970+ PURPOSE:
3971+ This test will verify that your system can successfully reboot.
3972+ STEPS:
3973+ 1. Select 'Test' to initiate a system reboot.
3974+ 2. When the grub boot menu is displayed, boot into Ubuntu (Or allow the
3975+ system to automatically boot on its own).
3976+ 3. Once the system has restarted, log in and restart checkbox-certification-server.
3977+ 4. Select 'Re-Run' to return to this test.
3978+ 5. Select 'Yes' to indicate the test has passed if the system rebooted
3979+ successfully, otherwise, select 'No' to indicate there was a problem.
3980+ VERIFICATION:
3981+ Did the system reboot correctly?
3982+
3983+plugin: manual
3984+name: power-management/shutdown_manual
3985+user: root
3986+command: shutdown -h now
3987+_description:
3988+ PURPOSE:
3989+ This test will check your system shutdown/booting cycle
3990+ STEPS:
3991+ 1. Select 'Test' to initiate a system shutdown.
3992+ 2. Power the system back on.
3993+ 3. From the grub menu, boot into the Xen Hypervisor.
3994+ 4. When the system has restarted, log in and restart checkbox-certification-server.
3995+ 5. Select 'Re-Run' to return to this test.
3996+ 6. Select 'Yes' to indicate the test has passed if the machine shut down
3997+ successfully otherwise, Select 'No' to indicate there was a problem.
3998+ VERIFICATION:
3999+ Did the system shutdown and boot correctly?
4000
4001=== modified file 'jobs/rendercheck.txt.in'
4002--- jobs/rendercheck.txt.in 2013-02-08 17:02:12 +0000
4003+++ jobs/rendercheck.txt.in 2013-05-09 20:11:45 +0000
4004@@ -2,7 +2,7 @@
4005 name: rendercheck/tests
4006 requires:
4007 package.name == 'x11-apps'
4008-command: ( rendercheck_test -d -o $CHECKBOX_DATA/rendercheck-results && echo "Rendercheck tests completed successfully" ) || ( echo "Error running rendercheck. Please see the log $CHECKBOX_DATA/rendercheck-results for details" >&2 && false )
4009+command: ( rendercheck_test -b repeat -b gradients -d -o $CHECKBOX_DATA/rendercheck-results && echo "Rendercheck tests completed successfully" ) || ( echo "Error running rendercheck. Please see the log $CHECKBOX_DATA/rendercheck-results for details" >&2 && false )
4010 _description:
4011 Runs all of the rendercheck test suites. This test can take a few minutes.
4012
4013
4014=== modified file 'jobs/resource.txt.in'
4015--- jobs/resource.txt.in 2013-02-22 16:26:25 +0000
4016+++ jobs/resource.txt.in 2013-05-09 20:11:45 +0000
4017@@ -109,3 +109,16 @@
4018 for e in `env | sed 's/=/:/g'`; do
4019 echo $e | awk -F':' '{print $1 ": " $2}'
4020 done
4021+
4022+name: mobilebroadband
4023+plugin: resource
4024+description: Create resource for mobile broadband devices
4025+command:
4026+ if mm-test --no-scan | grep -q 'GSM modem'
4027+ then
4028+ echo "gsm: supported"
4029+ fi
4030+ if mm-test --no-scan | grep -q 'CDMA modem'
4031+ then
4032+ echo "cdma: supported"
4033+ fi
4034
4035=== modified file 'jobs/stress.txt.in'
4036--- jobs/stress.txt.in 2013-01-03 20:46:04 +0000
4037+++ jobs/stress.txt.in 2013-05-09 20:11:45 +0000
4038@@ -16,7 +16,7 @@
4039 command:
4040 if type -P fwts >/dev/null; then
4041 echo "Calling fwts"
4042- fwts_test -l $CHECKBOX_DATA/hibernate_30_cycles -s s4 --s4-device-check --s4-device-check-delay=45 --s4-sleep-delay=120 --s4-multiple=30
4043+ fwts_test -l $CHECKBOX_DATA/hibernate_30_cycles -f none -s s4 --s4-device-check --s4-device-check-delay=45 --s4-sleep-delay=120 --s4-multiple=30
4044 else
4045 echo "Calling sleep_test"
4046 sleep_test -s disk -i 30 -w 120
4047@@ -25,6 +25,12 @@
4048 PURPOSE:
4049 This is an automated stress test that will force the system to hibernate/resume for 30 cycles
4050
4051+plugin: shell
4052+name: power-management/hibernate-30-cycles-log-check
4053+command: [ -e $CHECKBOX_DATA/hibernate_30_cycles.log ] && sleep_test_log_check -v s4 $CHECKBOX_DATA/hibernate_30_cycles.log
4054+_description:
4055+ Automated check of the 30 cycle hibernate log for errors detected by fwts.
4056+
4057 plugin: attachment
4058 name: power-management/hibernate-30-cycle-log-attach
4059 command: [ -e $CHECKBOX_DATA/hibernate_30_cycles.log ] && cat $CHECKBOX_DATA/hibernate_30_cycles.log
4060@@ -39,7 +45,7 @@
4061 command:
4062 if type -P fwts >/dev/null; then
4063 echo "Calling fwts"
4064- set -o pipefail; fwts_test -l $CHECKBOX_DATA/suspend_30_cycles -s s3 --s3-device-check --s3-device-check-delay=45 --s3-sleep-delay=30 --s3-multiple=30 | tee $CHECKBOX_DATA/suspend_30_cycles_times.log
4065+ set -o pipefail; fwts_test -l $CHECKBOX_DATA/suspend_30_cycles -f none -s s3 --s3-device-check --s3-device-check-delay=45 --s3-sleep-delay=30 --s3-multiple=30 | tee $CHECKBOX_DATA/suspend_30_cycles_times.log
4066 else
4067 echo "Calling sleep_test"
4068 set -o pipefail; sleep_test -p s mem -i 30 | tee $CHECKBOX_DATA/suspend_30_cycles_times.log
4069@@ -48,6 +54,12 @@
4070 PURPOSE:
4071 This is an automated stress test that will force the system to suspend/resume for 30 cycles.
4072
4073+plugin: shell
4074+name: power-management/suspend-30-cycles-log-check
4075+command: [ -e $CHECKBOX_DATA/suspend_30_cycles.log ] && sleep_test_log_check -v s3 $CHECKBOX_DATA/suspend_30_cycles.log
4076+_description:
4077+ Automated check of the 30 cycle hibernate log for errors detected by fwts.
4078+
4079 plugin: attachment
4080 name: power-management/suspend-30-cycle-log-attach
4081 command: [ -e $CHECKBOX_DATA/suspend_30_cycles.log ] && cat $CHECKBOX_DATA/suspend_30_cycles.log
4082@@ -172,7 +184,7 @@
4083 package.name == 'x11-apps'
4084 user: root
4085 environ: CHECKBOX_DATA
4086-command: graphics_stress_test -d -o $CHECKBOX_DATA/graphics-stress-results && echo "Graphics Stress Test completed successfully" || echo "Graphics Stress Test completed, but there are errors. Please see the log $CHECKBOX_DATA/graphics-stress-results for details" && false
4087+command: graphics_stress_test -b repeat -d -o $CHECKBOX_DATA/graphics-stress-results && echo "Graphics Stress Test completed successfully" || echo "Graphics Stress Test completed, but there are errors. Please see the log $CHECKBOX_DATA/graphics-stress-results for details" && false
4088 _description:
4089 Run the graphics stress test. This test can take a few minutes.
4090
4091
4092=== modified file 'jobs/suspend.txt.in'
4093--- jobs/suspend.txt.in 2013-03-07 15:52:02 +0000
4094+++ jobs/suspend.txt.in 2013-05-09 20:11:45 +0000
4095@@ -40,7 +40,8 @@
4096 plugin: shell
4097 name: suspend/bluetooth_obex_before_suspend
4098 requires:
4099- package.name == 'bluez' and package.name == 'obexd-client'
4100+ package.name == 'bluez'
4101+ package.name == 'obexd-client'
4102 device.category == 'BLUETOOTH'
4103 command:
4104 if [ -z "$BTDEVADDR" ]
4105@@ -65,7 +66,8 @@
4106 plugin: shell
4107 name: suspend/bluetooth_obex_send_before_suspend
4108 requires:
4109- package.name == 'bluez' and package.name == 'obexftp'
4110+ package.name == 'bluez'
4111+ package.name == 'obexftp'
4112 device.category == 'BLUETOOTH'
4113 command:
4114 if [ -z "$BTDEVADDR" ]
4115@@ -90,7 +92,8 @@
4116 plugin: shell
4117 name: suspend/bluetooth_obex_browse_before_suspend
4118 requires:
4119- package.name == 'bluez' and package.name == 'obexftp'
4120+ package.name == 'bluez'
4121+ package.name == 'obexftp'
4122 device.category == 'BLUETOOTH'
4123 command:
4124 if [ -z "$BTDEVADDR" ]
4125@@ -115,7 +118,8 @@
4126 plugin: shell
4127 name: suspend/bluetooth_obex_get_before_suspend
4128 requires:
4129- package.name == 'bluez' and package.name == 'obexftp'
4130+ package.name == 'bluez'
4131+ package.name == 'obexftp'
4132 device.category == 'BLUETOOTH'
4133 command:
4134 if [ -z "$BTDEVADDR" ]
4135@@ -140,7 +144,8 @@
4136 plugin: manual
4137 name: suspend/bluetooth_obex_before_suspend_manual
4138 requires:
4139- package.name == 'bluez' and package.name == 'obexd-client'
4140+ package.name == 'bluez'
4141+ package.name == 'obexd-client'
4142 device.category == 'BLUETOOTH'
4143 command: rfkill unblock bluetooth; obex_send `bluetooth_scan` $CHECKBOX_SHARE/data/images/JPEG_Color_Image_Ubuntu.jpg
4144 _description:
4145@@ -163,7 +168,7 @@
4146 command:
4147 if type -P fwts >/dev/null; then
4148 echo "Calling fwts"
4149- set -o pipefail; fwts_test -f critical -l $CHECKBOX_DATA/suspend_single -s s3 --s3-sleep-delay=30 --s3-device-check --s3-device-check-delay=45 | tee $CHECKBOX_DATA/suspend_single_times.log
4150+ set -o pipefail; fwts_test -f none -l $CHECKBOX_DATA/suspend_single -s s3 --s3-sleep-delay=30 --s3-device-check --s3-device-check-delay=45 | tee $CHECKBOX_DATA/suspend_single_times.log
4151 else
4152 echo "Calling sleep_test"
4153 set -o pipefail; sleep_test -p | tee $CHECKBOX_DATA/suspend_single_times.log
4154@@ -173,10 +178,12 @@
4155 This test will check suspend and resume
4156 STEPS:
4157 1. Click "Test" and your system will suspend for about 30 - 60 seconds
4158- 2. If your system does not wake itself up after 60 seconds, please press the power button momentarily to wake the system manually
4159- 3. If your system fails to wake at all and must be rebooted, restart System Testing after reboot and mark this test as Failed
4160+ 2. Observe the Power LED to see if it blinks or changes color during suspend
4161+ 3. If your system does not wake itself up after 60 seconds, please press the power button momentarily to wake the system manually
4162+ 4. If your system fails to wake at all and must be rebooted, restart System Testing after reboot and mark this test as Failed
4163 VERIFICATION:
4164 Did your system suspend and resume correctly?
4165+ (NOTE: Please only consider whether the system successfully suspended and resumed. Power/Suspend LED verification will occur after this test is completed.)
4166
4167 plugin: shell
4168 name: suspend/suspend_advanced_auto
4169@@ -187,7 +194,13 @@
4170 This is the automated version of suspend/suspend_advanced.
4171 user: root
4172 environ: CHECKBOX_DATA
4173-command: set -o pipefail; fwts_test -f critical -l $CHECKBOX_DATA/suspend_single -s s3 --s3-sleep-delay=30 --s3-device-check --s3-device-check-delay=45 | tee $CHECKBOX_DATA/suspend_single_times.log
4174+command: set -o pipefail; fwts_test -f none -l $CHECKBOX_DATA/suspend_single -s s3 --s3-sleep-delay=30 --s3-device-check --s3-device-check-delay=45 | tee $CHECKBOX_DATA/suspend_single_times.log
4175+
4176+plugin: shell
4177+name: suspend/suspend-single-log-check
4178+command: [ -e $CHECKBOX_DATA/suspend_single.log ] && sleep_test_log_check -v s3 $CHECKBOX_DATA/suspend_single.log
4179+_description:
4180+ Automated check of the suspend log to look for errors reported by fwts
4181
4182 plugin: attachment
4183 name: suspend/suspend-single-log-attach
4184@@ -254,6 +267,16 @@
4185 audio_settings store --file=$CHECKBOX_DATA/audio_settings_after_suspend; diff $CHECKBOX_DATA/audio_settings_before_suspend $CHECKBOX_DATA/audio_settings_after_suspend
4186
4187 plugin: shell
4188+name: suspend/audio_after_suspend_auto
4189+requires:
4190+ device.category == 'AUDIO'
4191+ package.name == 'alsa-base'
4192+depends: suspend/suspend_advanced_auto suspend/audio_before_suspend
4193+_description: Verify that mixer settings after suspend are the same as before suspend.
4194+command:
4195+ audio_settings store --file=$CHECKBOX_DATA/audio_settings_after_suspend; diff $CHECKBOX_DATA/audio_settings_before_suspend $CHECKBOX_DATA/audio_settings_after_suspend
4196+
4197+plugin: shell
4198 name: suspend/cpu_after_suspend
4199 depends: suspend/suspend_advanced suspend/cpu_before_suspend
4200 _description: Verify that all CPUs are online after resuming.
4201@@ -309,7 +332,7 @@
4202 environment.ROUTERS == 'multiple'
4203 user: root
4204 environ: WPA_BG_SSID WPA_BG_PSK
4205-command: trap "rm -f /etc/NetworkManager/system-connections/$WPA_BG_SSID" EXIT; create_connection $WPA_BG_SSID --security=wpa --key=$WPA_BG_PSK; internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4206+command: trap "rm -f /etc/NetworkManager/system-connections/$WPA_BG_SSID" EXIT; create_connection wifi $WPA_BG_SSID --security=wpa --key=$WPA_BG_PSK; internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4207 _description:
4208 Tests that the systems wireless hardware can connect to a router using WPA
4209 security and the 802.11b/g protocols after the system has been suspended.
4210@@ -322,7 +345,7 @@
4211 environment.ROUTERS == 'multiple'
4212 user: root
4213 environ: OPEN_BG_SSID
4214-command: trap "rm -f /etc/NetworkManager/system-connections/$OPEN_BG_SSID" EXIT; create_connection $OPEN_BG_SSID; internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4215+command: trap "rm -f /etc/NetworkManager/system-connections/$OPEN_BG_SSID" EXIT; create_connection wifi $OPEN_BG_SSID; internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4216 _description:
4217 Tests that the systems wireless hardware can connect to a router using no
4218 security and the 802.11b/g protocols after the system has been suspended.
4219@@ -335,7 +358,7 @@
4220 environment.ROUTERS == 'multiple'
4221 user: root
4222 environ: WPA_N_SSID WPA_N_PSK
4223-command: trap "rm -f /etc/NetworkManager/system-connections/$WPA_N_SSID" EXIT; create_connection $WPA_N_SSID --security=wpa --key=$WPA_N_PSK; internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4224+command: trap "rm -f /etc/NetworkManager/system-connections/$WPA_N_SSID" EXIT; create_connection wifi $WPA_N_SSID --security=wpa --key=$WPA_N_PSK; internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4225 _description:
4226 Tests that the systems wireless hardware can connect to a router using WPA
4227 security and the 802.11n protocol after the system has been suspended.
4228@@ -348,7 +371,7 @@
4229 environment.ROUTERS == 'multiple'
4230 user: root
4231 environ: OPEN_N_SSID
4232-command: trap "rm -f /etc/NetworkManager/system-connections/$OPEN_N_SSID" EXIT; create_connection $OPEN_N_SSID; internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4233+command: trap "rm -f /etc/NetworkManager/system-connections/$OPEN_N_SSID" EXIT; create_connection wifi $OPEN_N_SSID; internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4234 _description:
4235 Tests that the systems wireless hardware can connect to a router using no
4236 security and the 802.11n protocol after the system has been suspended.
4237@@ -361,7 +384,7 @@
4238 environment.ROUTERS == 'multiple'
4239 user: root
4240 environ: WPA_BG_SSID WPA_BG_PSK
4241-command: trap "rm -f /etc/NetworkManager/system-connections/$WPA_BG_SSID" EXIT; create_connection $WPA_BG_SSID --security=wpa --key=$WPA_BG_PSK; internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4242+command: trap "rm -f /etc/NetworkManager/system-connections/$WPA_BG_SSID" EXIT; create_connection wifi $WPA_BG_SSID --security=wpa --key=$WPA_BG_PSK; internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4243 _description:
4244 Tests that the systems wireless hardware can connect to a router using WPA
4245 security and the 802.11b/g protocols after the system has been suspended.
4246@@ -374,7 +397,7 @@
4247 environment.ROUTERS == 'multiple'
4248 user: root
4249 environ: OPEN_BG_SSID
4250-command: trap "rm -f /etc/NetworkManager/system-connections/$OPEN_BG_SSID" EXIT; create_connection $OPEN_BG_SSID; internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4251+command: trap "rm -f /etc/NetworkManager/system-connections/$OPEN_BG_SSID" EXIT; create_connection wifi $OPEN_BG_SSID; internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4252 _description:
4253 Tests that the systems wireless hardware can connect to a router using no
4254 security and the 802.11b/g protocols after the system has been suspended.
4255@@ -387,7 +410,7 @@
4256 environment.ROUTERS == 'multiple'
4257 user: root
4258 environ: WPA_N_SSID WPA_N_PSK
4259-command: trap "rm -f /etc/NetworkManager/system-connections/$WPA_N_SSID" EXIT; create_connection $WPA_N_SSID --security=wpa --key=$WPA_N_PSK; internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4260+command: trap "rm -f /etc/NetworkManager/system-connections/$WPA_N_SSID" EXIT; create_connection wifi $WPA_N_SSID --security=wpa --key=$WPA_N_PSK; internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4261 _description:
4262 Tests that the systems wireless hardware can connect to a router using WPA
4263 security and the 802.11n protocol after the system has been suspended.
4264@@ -400,7 +423,7 @@
4265 environment.ROUTERS == 'multiple'
4266 user: root
4267 environ: OPEN_N_SSID
4268-command: trap "rm -f /etc/NetworkManager/system-connections/$OPEN_N_SSID" EXIT; create_connection $OPEN_N_SSID; internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4269+command: trap "rm -f /etc/NetworkManager/system-connections/$OPEN_N_SSID" EXIT; create_connection wifi $OPEN_N_SSID; internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4270 _description:
4271 Tests that the systems wireless hardware can connect to a router using no
4272 security and the 802.11n protocol after the system has been suspended.
4273@@ -413,7 +436,7 @@
4274 environment.ROUTERS == 'single'
4275 user: root
4276 environ: ROUTER_SSID ROUTER_PSK
4277-command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection $ROUTER_SSID --security=wpa --key=$ROUTER_PSK && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4278+command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection wifi $ROUTER_SSID --security=wpa --key=$ROUTER_PSK && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4279 _description:
4280 PURPOSE:
4281 Tests that the systems wireless hardware can connect to a router using WPA
4282@@ -435,7 +458,7 @@
4283 environment.ROUTERS == 'single'
4284 user: root
4285 environ: ROUTER_SSID
4286-command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection $ROUTER_SSID && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4287+command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection wifi $ROUTER_SSID && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4288 _description:
4289 PURPOSE:
4290 Tests that the systems wireless hardware can connect to a router using
4291@@ -457,7 +480,7 @@
4292 environment.ROUTERS == 'single'
4293 user: root
4294 environ: ROUTER_SSID ROUTER_PSK
4295-command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection $ROUTER_SSID --security=wpa --key=$ROUTER_PSK && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4296+command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection wifi $ROUTER_SSID --security=wpa --key=$ROUTER_PSK && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4297 _description:
4298 PURPOSE:
4299 Tests that the systems wireless hardware can connect to a router using WPA
4300@@ -479,7 +502,7 @@
4301 environment.ROUTERS == 'single'
4302 user: root
4303 environ: ROUTER_SSID
4304-command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection $ROUTER_SSID && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4305+command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection wifi $ROUTER_SSID && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4306 _description:
4307 PURPOSE:
4308 Tests that the systems wireless hardware can connect to a router using
4309@@ -521,7 +544,8 @@
4310 name: suspend/bluetooth_obex_after_suspend
4311 depends: suspend/suspend_advanced suspend/bluetooth_obex_before_suspend
4312 requires:
4313- package.name == 'bluez' and package.name == 'obexd-client'
4314+ package.name == 'bluez'
4315+ package.name == 'obexd-client'
4316 device.category == 'BLUETOOTH'
4317 command:
4318 if [ -z "$BTDEVADDR" ]
4319@@ -547,7 +571,8 @@
4320 name: suspend/bluetooth_obex_after_suspend_auto
4321 depends: suspend/suspend_advanced_auto suspend/bluetooth_obex_before_suspend
4322 requires:
4323- package.name == 'bluez' and package.name == 'obexd-client'
4324+ package.name == 'bluez'
4325+ package.name == 'obexd-client'
4326 device.category == 'BLUETOOTH'
4327 command:
4328 if [ -z "$BTDEVADDR" ]
4329@@ -573,7 +598,8 @@
4330 name: suspend/bluetooth_obex_send_after_suspend
4331 depends: suspend/suspend_advanced
4332 requires:
4333- package.name == 'bluez' and package.name == 'obexftp'
4334+ package.name == 'bluez'
4335+ package.name == 'obexftp'
4336 device.category == 'BLUETOOTH'
4337 command:
4338 if [ -z "$BTDEVADDR" ]
4339@@ -599,7 +625,8 @@
4340 name: suspend/bluetooth_obex_send_after_suspend_auto
4341 depends: suspend/suspend_advanced_auto
4342 requires:
4343- package.name == 'bluez' and package.name == 'obexftp'
4344+ package.name == 'bluez'
4345+ package.name == 'obexftp'
4346 device.category == 'BLUETOOTH'
4347 command:
4348 if [ -z "$BTDEVADDR" ]
4349@@ -625,7 +652,8 @@
4350 name: suspend/bluetooth_obex_browse_after_suspend
4351 depends: suspend/suspend_advanced
4352 requires:
4353- package.name == 'bluez' and package.name == 'obexftp'
4354+ package.name == 'bluez'
4355+ package.name == 'obexftp'
4356 device.category == 'BLUETOOTH'
4357 command:
4358 if [ -z "$BTDEVADDR" ]
4359@@ -651,7 +679,8 @@
4360 name: suspend/bluetooth_obex_browse_after_suspend_auto
4361 depends: suspend/suspend_advanced_auto
4362 requires:
4363- package.name == 'bluez' and package.name == 'obexftp'
4364+ package.name == 'bluez'
4365+ package.name == 'obexftp'
4366 device.category == 'BLUETOOTH'
4367 command:
4368 if [ -z "$BTDEVADDR" ]
4369@@ -677,7 +706,8 @@
4370 name: suspend/bluetooth_obex_get_after_suspend
4371 depends: suspend/suspend_advanced
4372 requires:
4373- package.name == 'bluez' and package.name == 'obexftp'
4374+ package.name == 'bluez'
4375+ package.name == 'obexftp'
4376 device.category == 'BLUETOOTH'
4377 command:
4378 if [ -z "$BTDEVADDR" ]
4379@@ -703,7 +733,8 @@
4380 name: suspend/bluetooth_obex_get_after_suspend_auto
4381 depends: suspend/suspend_advanced_auto
4382 requires:
4383- package.name == 'bluez' and package.name == 'obexftp'
4384+ package.name == 'bluez'
4385+ package.name == 'obexftp'
4386 device.category == 'BLUETOOTH'
4387 command:
4388 if [ -z "$BTDEVADDR" ]
4389@@ -729,7 +760,8 @@
4390 name: suspend/bluetooth_obex_after_suspend_manual
4391 depends: suspend/suspend_advanced suspend/bluetooth_obex_before_suspend_manual
4392 requires:
4393- package.name == 'bluez' and package.name == 'obexd-client'
4394+ package.name == 'bluez'
4395+ package.name == 'obexd-client'
4396 device.category == 'BLUETOOTH'
4397 command: rfkill unblock bluetooth; obex_send `bluetooth_scan` $CHECKBOX_SHARE/data/images/JPEG_Color_Image_Ubuntu.jpg
4398 _description:
4399@@ -780,6 +812,17 @@
4400 _description:
4401 This will check to make sure that your audio device works properly after a suspend and resume. This may work fine with speakers and onboard microphone, however, it works best if used with a cable connecting the audio-out jack to the audio-in jack.
4402
4403+plugin: shell
4404+name: suspend/record_playback_after_suspend_auto
4405+depends: suspend/suspend_advanced_auto
4406+requires:
4407+ device.category == 'AUDIO'
4408+ package.name == 'python-gst0.10'
4409+ package.name == 'alsa-base'
4410+command: audio_test
4411+_description:
4412+ This will check to make sure that your audio device works properly after a suspend and resume. This may work fine with speakers and onboard microphone, however, it works best if used with a cable connecting the audio-out jack to the audio-in jack.
4413+
4414 plugin: attachment
4415 name: suspend/suspend-auto-single-log-attach
4416 command: [ -e $CHECKBOX_DATA/suspend_auto_single_log ] && cat $CHECKBOX_DATA/suspend_auto_single_log
4417@@ -808,21 +851,17 @@
4418 plugin: shell
4419 name: suspend/gpu_lockup_after_suspend
4420 requires:
4421- package.name == 'fwts'
4422 package.name == 'wmctrl'
4423 package.name == 'mesa-utils'
4424 depends: suspend/suspend_advanced_auto
4425-user: root
4426 command: gpu_test
4427 _description:
4428 PURPOSE:
4429- Do some challenging operations, suspend the system, do more challenging
4430- operations - then check for lockup on the GPU
4431+ Do some challenging operations then check for lockup on the GPU
4432 STEPS:
4433 1. Create 2 glxgears windows and move them quickly
4434- 2. Switch workspaces/viewports with wmctrl
4435+ 2. Switch workspaces with wmctrl
4436 3. Launch an HTML5 video playback in firefox
4437- 4. Suspend/resume
4438 VERIFICATION:
4439 After a 60s workload, check kern.log for reported GPU errors
4440
4441@@ -837,6 +876,16 @@
4442 after a suspend/resume cycle.
4443
4444 plugin: shell
4445+name: suspend/wifi_resume_time_auto
4446+depends: suspend/suspend_advanced_auto
4447+requires:
4448+ device.category == 'WIRELESS'
4449+command: network_reconnect_resume_test -t 20 -d wifi
4450+_description:
4451+ Checks the length of time it takes to reconnect an existing wifi connection
4452+ after a suspend/resume cycle.
4453+
4454+plugin: shell
4455 name: suspend/network_resume_time
4456 depends: suspend/suspend_advanced
4457 requires:
4458@@ -846,6 +895,16 @@
4459 Checks the length of time it takes to reconnect an existing wired connection
4460 after a suspend/resume cycle.
4461
4462+plugin: shell
4463+name: suspend/network_resume_time_auto
4464+depends: suspend/suspend_advanced_auto
4465+requires:
4466+ device.category == 'NETWORK'
4467+command: network_reconnect_resume_test -t 10 -d wired
4468+_description:
4469+ Checks the length of time it takes to reconnect an existing wired connection
4470+ after a suspend/resume cycle.
4471+
4472 plugin: manual
4473 name: suspend/led_after_suspend/power
4474 depends: suspend/suspend_advanced
4475@@ -943,10 +1002,8 @@
4476 STEPS:
4477 1. Make sure WLAN connection is established
4478 2. WLAN LED should light
4479- 3. Select Test to open Firefox
4480- 4. WLAN LED should flash while downloading data
4481 VERIFICATION:
4482- Did the WLAN LED light and flash as expected after resuming from suspend?
4483+ Did the WLAN LED light as expected after resuming from suspend?
4484
4485 plugin: manual
4486 name: suspend/led_after_suspend/wlan-disabled
4487
4488=== modified file 'jobs/usb.txt.in'
4489--- jobs/usb.txt.in 2012-11-12 15:32:12 +0000
4490+++ jobs/usb.txt.in 2013-05-09 20:11:45 +0000
4491@@ -101,7 +101,7 @@
4492 name: usb/storage-transfer
4493 depends: usb/insert
4494 user: root
4495-command: removable_storage_test usb
4496+command: removable_storage_test -s 268400000 usb
4497 _description:
4498 PURPOSE:
4499 This test will check your USB connection.
4500@@ -119,7 +119,7 @@
4501 usb.usb3 == 'supported'
4502 depends: usb3/insert
4503 user: root
4504-command: removable_storage_test -m 500000000 -p 7 usb
4505+command: removable_storage_test -s 268400000 -m 500000000 -p 7 usb
4506 _description:
4507 PURPOSE:
4508 This test will check your USB 3.0 connection.
4509@@ -135,7 +135,7 @@
4510 name: usb/storage-automated
4511 depends: usb/insert
4512 user: root
4513-command: removable_storage_test usb
4514+command: removable_storage_test -s 268400000 usb
4515 _description:
4516 This test is automated and executes after the usb/insert test is run.
4517
4518@@ -145,14 +145,14 @@
4519 usb.usb3 == 'supported'
4520 depends: usb3/insert
4521 user: root
4522-command: removable_storage_test -m 500000000 -p 7 usb
4523+command: removable_storage_test -s 268400000 -m 500000000 -p 7 usb
4524 _description:
4525 This test is automated and executes after the usb3/insert test is run.
4526
4527 plugin: shell
4528 name: usb/storage-preinserted
4529 user: root
4530-command: removable_storage_test -l usb && removable_storage_test usb
4531+command: removable_storage_test -l usb && removable_storage_test -s 268400000 usb
4532 _description:
4533 This is an automated version of usb/storage-automated and assumes that the
4534 server has usb storage devices plugged in prior to checkbox execution. It
4535@@ -163,7 +163,7 @@
4536 user: root
4537 requires:
4538 usb.usb3 == 'supported'
4539-command: removable_storage_test -l usb && removable_storage_test -m 500000000 -p 7 usb
4540+command: removable_storage_test -l usb && removable_storage_test -s 268400000 -m 500000000 -p 7 usb
4541 _description:
4542 This is an automated version of usb3/storage-automated and assumes that the
4543 server has usb 3.0 storage devices plugged in prior to checkbox execution. It
4544
4545=== modified file 'jobs/virtualization.txt.in'
4546--- jobs/virtualization.txt.in 2013-02-08 17:02:12 +0000
4547+++ jobs/virtualization.txt.in 2013-05-09 20:11:45 +0000
4548@@ -22,3 +22,19 @@
4549 command: virtualization kvm --debug
4550 _description:
4551 Test to check that a cloud image boots and works properly with KVM
4552+
4553+plugin: shell
4554+name: virtualization/xen_ok
4555+requires: package.name == 'libvirt-bin'
4556+user: root
4557+command: virsh -c xen:/// domstate Domain-0
4558+_description:
4559+ Test to verify that the Xen Hypervisor is running.
4560+
4561+plugin: shell
4562+name: virtualization/xen_check_vm
4563+depends: virtualization/xen_ok
4564+user: root
4565+command: xen_test /images/xentest.img /images/xentest.xml
4566+_description:
4567+ Test to check that a Xen domU image can boot and run on Xen on Ubuntu
4568
4569=== modified file 'jobs/wireless.txt.in'
4570--- jobs/wireless.txt.in 2012-10-16 20:45:22 +0000
4571+++ jobs/wireless.txt.in 2013-05-09 20:11:45 +0000
4572@@ -40,7 +40,7 @@
4573 environment.ROUTERS == 'multiple'
4574 user: root
4575 environ: WPA_BG_SSID WPA_BG_PSK
4576-command: trap "nmcli con delete id $WPA_BG_SSID" EXIT; create_connection $WPA_BG_SSID --security=wpa --key=$WPA_BG_PSK && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4577+command: trap "nmcli con delete id $WPA_BG_SSID" EXIT; create_connection wifi $WPA_BG_SSID --security=wpa --key=$WPA_BG_PSK && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4578 _description:
4579 Tests that the systems wireless hardware can connect to a router using WPA
4580 security and the 802.11b/g protocols.
4581@@ -52,7 +52,7 @@
4582 environment.ROUTERS == 'multiple'
4583 user: root
4584 environ: OPEN_BG_SSID
4585-command: trap "nmcli con delete id $OPEN_BG_SSID" EXIT; create_connection $OPEN_BG_SSID && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4586+command: trap "nmcli con delete id $OPEN_BG_SSID" EXIT; create_connection wifi $OPEN_BG_SSID && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4587 _description:
4588 Tests that the systems wireless hardware can connect to a router using no
4589 security and the 802.11b/g protocols.
4590@@ -64,7 +64,7 @@
4591 environment.ROUTERS == 'multiple'
4592 user: root
4593 environ: WPA_N_SSID WPA_N_PSK
4594-command: trap "nmcli con delete id $WPA_N_SSID" EXIT; create_connection $WPA_N_SSID --security=wpa --key=$WPA_N_PSK && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4595+command: trap "nmcli con delete id $WPA_N_SSID" EXIT; create_connection wifi $WPA_N_SSID --security=wpa --key=$WPA_N_PSK && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4596 _description:
4597 Tests that the systems wireless hardware can connect to a router using WPA
4598 security and the 802.11n protocol.
4599@@ -76,7 +76,7 @@
4600 environment.ROUTERS == 'multiple'
4601 user: root
4602 environ: OPEN_N_SSID
4603-command: trap "nmcli con delete id $OPEN_N_SSID" EXIT; create_connection $OPEN_N_SSID && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4604+command: trap "nmcli con delete id $OPEN_N_SSID" EXIT; create_connection wifi $OPEN_N_SSID && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4605 _description:
4606 Tests that the systems wireless hardware can connect to a router using no
4607 security and the 802.11n protocol.
4608@@ -88,7 +88,7 @@
4609 environment.ROUTERS == 'single'
4610 user: root
4611 environ: ROUTER_SSID ROUTER_PSK
4612-command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection $ROUTER_SSID --security=wpa --key=$ROUTER_PSK && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4613+command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection wifi $ROUTER_SSID --security=wpa --key=$ROUTER_PSK && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4614 _description:
4615 PURPOSE:
4616 Tests that the systems wireless hardware can connect to a router using WPA
4617@@ -109,7 +109,7 @@
4618 environment.ROUTERS == 'single'
4619 user: root
4620 environ: ROUTER_SSID
4621-command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection $ROUTER_SSID && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4622+command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection wifi $ROUTER_SSID && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4623 _description:
4624 PURPOSE:
4625 Tests that the systems wireless hardware can connect to a router using
4626@@ -130,7 +130,7 @@
4627 environment.ROUTERS == 'single'
4628 user: root
4629 environ: ROUTER_SSID ROUTER_PSK
4630-command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection $ROUTER_SSID --security=wpa --key=$ROUTER_PSK && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4631+command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection wifi $ROUTER_SSID --security=wpa --key=$ROUTER_PSK && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4632 _description:
4633 PURPOSE:
4634 Tests that the systems wireless hardware can connect to a router using WPA
4635@@ -151,7 +151,7 @@
4636 environment.ROUTERS == 'single'
4637 user: root
4638 environ: ROUTER_SSID
4639-command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection $ROUTER_SSID && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4640+command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection wifi $ROUTER_SSID && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4641 _description:
4642 PURPOSE:
4643 Tests that the systems wireless hardware can connect to a router using
4644@@ -172,7 +172,7 @@
4645 device.category == 'WIRELESS'
4646 user: root
4647 environ: WPA_BG_SSID WPA_BG_PSK SERVER_IPERF
4648-command: trap "nmcli con delete id $WPA_BG_SSID" EXIT; create_connection $WPA_BG_SSID --security=wpa --key=$WPA_BG_PSK && iperf -c $SERVER_IPERF -t 300 -i 30
4649+command: trap "nmcli con delete id $WPA_BG_SSID" EXIT; create_connection wifi $WPA_BG_SSID --security=wpa --key=$WPA_BG_PSK && iperf -c $SERVER_IPERF -t 300 -i 30
4650 _description:
4651 Tests the performance of a systems wireless connection through the iperf tool.
4652
4653@@ -183,7 +183,7 @@
4654 device.category == 'WIRELESS'
4655 user: root
4656 environ: WPA_BG_SSID WPA_BG_PSK SERVER_IPERF
4657-command: trap "nmcli con delete id $WPA_BG_SSID" EXIT; create_connection $WPA_BG_SSID --security=wpa --key=$WPA_BG_PSK && iperf -c $SERVER_IPERF -t 300 -i 30 -u -b 100m -p 5050
4658+command: trap "nmcli con delete id $WPA_BG_SSID" EXIT; create_connection wifi $WPA_BG_SSID --security=wpa --key=$WPA_BG_PSK && iperf -c $SERVER_IPERF -t 300 -i 30 -u -b 100m -p 5050
4659 _description:
4660 Tests the performance of a systems wireless connection through the iperf tool, using UDP packets.
4661
4662@@ -192,7 +192,7 @@
4663 requires: device.category == 'WIRELESS'
4664 user: root
4665 environ: OPEN_A_SSID
4666-command: trap "nmcli con delete id $OPEN_A_SSID" EXIT; create_connection $OPEN_A_SSID && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4667+command: trap "nmcli con delete id $OPEN_A_SSID" EXIT; create_connection wifi $OPEN_A_SSID && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4668 _description:
4669 Test that the system's wireless hardware can connect to a router using the
4670 802.11a protocol. This requires that you have a router pre-configured to only
4671@@ -203,7 +203,7 @@
4672 requires: device.category == 'WIRELESS'
4673 user: root
4674 environ: OPEN_B_SSID
4675-command: trap "nmcli con delete id $OPEN_B_SSID" EXIT; create_connection $OPEN_B_SSID && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4676+command: trap "nmcli con delete id $OPEN_B_SSID" EXIT; create_connection wifi $OPEN_B_SSID && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4677 _description:
4678 Test that the system's wireless hardware can connect to a router using the
4679 802.11b protocol. This requires that you have a router pre-configured to only
4680@@ -214,7 +214,7 @@
4681 requires: device.category == 'WIRELESS'
4682 user: root
4683 environ: OPEN_G_SSID
4684-command: trap "nmcli con delete id $OPEN_G_SSID" EXIT; create_connection $OPEN_G_SSID && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4685+command: trap "nmcli con delete id $OPEN_G_SSID" EXIT; create_connection wifi $OPEN_G_SSID && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
4686 _description:
4687 Test that the system's wireless hardware can connect to a router using the
4688 802.11g protocol. This requires that you have a router pre-configured to only
4689
4690=== modified file 'plainbox/.coveragerc'
4691--- plainbox/.coveragerc 2012-12-03 16:15:23 +0000
4692+++ plainbox/.coveragerc 2013-05-09 20:11:45 +0000
4693@@ -1,6 +1,17 @@
4694 [run]
4695 branch = True
4696 source = plainbox
4697+omit =
4698+ plainbox/tests.py
4699+ plainbox/vendor/*
4700+ plainbox/test_*
4701+ plainbox/impl/test_*
4702+ plainbox/impl/integration_tests.py
4703+ plainbox/impl/commands/test_*
4704+ plainbox/impl/exporter/test_*
4705+ plainbox/impl/transport/test_*
4706+ plainbox/impl/secure/test_*
4707+ plainbox/testing_utils/test_*
4708
4709 [report]
4710 exclude_lines =
4711
4712=== modified file 'plainbox/MANIFEST.in'
4713--- plainbox/MANIFEST.in 2012-12-03 16:15:23 +0000
4714+++ plainbox/MANIFEST.in 2013-05-09 20:11:45 +0000
4715@@ -1,3 +1,8 @@
4716 include README.md
4717 include COPYING
4718 include mk-interesting-graphs.sh
4719+recursive-include plainbox/test-data/ *.json *.xml *.txt
4720+recursive-include docs *.rst
4721+include docs/conf.py
4722+include plainbox/data/report/hardware-1_0.rng
4723+include plainbox/data/org.freedesktop.policykit.pkexec.policy
4724
4725=== removed file 'plainbox/README.md'
4726--- plainbox/README.md 2013-02-22 16:26:25 +0000
4727+++ plainbox/README.md 1970-01-01 00:00:00 +0000
4728@@ -1,122 +0,0 @@
4729-plainbox
4730-========
4731-
4732-plainbox is a plain replacement for checkbox
4733-
4734-[![Build Status](https://travis-ci.org/zyga/plainbox.png)](https://travis-ci.org/zyga/checkbox)
4735-
4736-
4737-Hacking
4738-=======
4739-
4740-To start hacking use virtualenv with python3. Three steps:
4741-
4742-
4743-1. First install a couple of packages:
4744-
4745- $ sudo apt-get install python-virtualenv python3-dev
4746-
4747-2. Then set up the virtualenv. A convenience script is provided to do this for
4748- you:
4749-
4750- $ ./mk-venv.sh /path/to/venv
4751-
4752-This will create a virtualenv under /tmp/venv and show the command to activate
4753-it.
4754-
4755-You can also set this up manually:
4756-
4757- $ virtualenv -p python3 /path/to/venv
4758-
4759-If you do the manual setup and you're on Ubuntu, you'll need to update the
4760-version of distribute that is installed inside the virtualenv to install
4761-coverage. If you used the convenience script, it takes care of this part for
4762-you.
4763-
4764- (venv) $ easy_install -U distribute
4765- (venv) $ easy_install -U coverage
4766-
4767-3. Once your virtualenv is set up, you need to activate it:
4768-
4769- $ . /path/to/venv/bin/activate
4770-
4771-
4772-Then 'develop' the package, this will setup proper path imports and create stub
4773-executables for you. All imports will now use your directory (no need to set
4774-PYTHONPATH to anything)
4775-
4776- (venv) $ python3 setup.py develop
4777-
4778-You will be now able to run plainbox:
4779-
4780- (venv) $ plainbox --help
4781-
4782-Testing
4783-=======
4784-
4785-When hacking, run tests with code coverage (peek at .coveragerc):
4786-
4787- (venv) $ coverage run setup.py test
4788-
4789-You can also use the standard 'discover' command from python3 unittest module:
4790-
4791- (venv) $ coverage run -m unittest discover
4792-
4793-...then look at test report coverage in the console:
4794-
4795- (venv) $ coverage report
4796-
4797-...or in your browser:
4798-
4799- (venv) $ coverage html
4800- (venv) $ xdg-open htmlcov/index.html
4801-
4802-Using the checkbox submodule
4803-============================
4804-
4805-This git tree uses the submodule system to put the entire checkbox source code
4806-repository in the checkbox directory. To use it, after you get the plainbox
4807-tree run the following commands:
4808-
4809- $ git submodule init
4810- $ git submodule update
4811-
4812-You only need to run init once, and update each time the chcekbox submodule is
4813-updated to point to new commit in the checkbox tree. If you use this all of
4814-plainbox tests and actual code will run using the embedded copy of checkbox. If
4815-you don't do this you need to install checkbox globally using a system package.
4816-
4817-VirtualEnv and checkbox Jobs
4818-============================
4819-
4820-When using checkbox inside virtualenv some jobs will fail as they need access
4821-to system python libraries (most notably for dbus). checkbox jobs don't rewrite
4822-their scripts shebang lines so when installed from the system package it will
4823-fail inside a typical virtualenv. This will be addressed in the next release.
4824-
4825-To work around it, temporarily, you can install plainbox without virtualbox and
4826-use it as is. This will work correctly (use the package from
4827-ppa:checkbox-dev/ppa if possible)
4828-
4829-Known Issues
4830-============
4831-
4832-There are a few issues that we are currently aware of:
4833-
4834-1) Expressions are not evaluated the same way as they were in checkbox. This
4835-affects only a few jobs and will be corrected in the next release. Most likely
4836-we will adapt jobs to follow plainbox logic and leave the checkbox interpreter
4837-as is as plainbox is less surprising and actually fixes one important bug where
4838-an expression like:
4839-
4840- package.name == "foo" and package.version == "1.0"
4841-
4842-When executed inside checkbox it would match (evaluate as true) when the
4843-package "foo" existed and any _other_ package with version 1.0 existed, thus
4844-making the test worthless. In plainbox this test behaves as expected but it is
4845-non the less not doing what checkbox did so it causes some problems.
4846-
4847-2) Many job types are still not supported. The only supported jobs are: shell, resource,
4848-local and manual
4849-
4850-3) Jobs that use the environ and user keys are not supported. Those keys are ignored
4851
4852=== added file 'plainbox/README.rst'
4853--- plainbox/README.rst 1970-01-01 00:00:00 +0000
4854+++ plainbox/README.rst 2013-05-09 20:11:45 +0000
4855@@ -0,0 +1,23 @@
4856+PlainBox
4857+========
4858+
4859+PlainBox is a hardware testing tool useful for certifying laptops, desktops and
4860+servers with Ubuntu. It is a replacement for the current certification tool,
4861+CheckBox.
4862+
4863+PlainBox complements CheckBox. It uses all the hardware test definitions,
4864+scripts and libraries from CheckBox. PlainBox is currently in alpha stages,
4865+having mostly but not entirely complete core and a developer-centric command
4866+line interface.
4867+
4868+External Documentation Links
4869+============================
4870+
4871+* `Using PlainBox <http://pythonhosted.org/plainbox/usage.html>`_
4872+* `Hacking on PlainBox <http://pythonhosted.org/plainbox/dev/intro.html>`_
4873+* `Testing PlainBox <http://pythonhosted.org/plainbox/dev/intro.html#running-plainbox-tests>`_
4874+
4875+Known Issues
4876+============
4877+
4878+`List of bugs tagged with 'plainbox' on lp:checkbox <https://bugs.launchpad.net/checkbox/+bugs?field.searchtext=&orderby=-importance&field.status%3Alist=NEW&field.status%3Alist=CONFIRMED&field.status%3Alist=TRIAGED&field.status%3Alist=INPROGRESS&field.status%3Alist=FIXCOMMITTED&field.status%3Alist=INCOMPLETE_WITH_RESPONSE&field.status%3Alist=INCOMPLETE_WITHOUT_RESPONSE&assignee_option=any&field.assignee=&field.bug_reporter=&field.bug_commenter=&field.subscriber=&field.structural_subscriber=&field.tag=plainbox&field.tags_combinator=ANY&field.has_cve.used=&field.omit_dupes.used=&field.omit_dupes=on&field.affects_me.used=&field.has_patch.used=&field.has_branches.used=&field.has_branches=on&field.has_no_branches.used=&field.has_no_branches=on&field.has_blueprints.used=&field.has_blueprints=on&field.has_no_blueprints.used=&field.has_no_blueprints=on&search=Search>`_
4879
4880=== added file 'plainbox/Vagrantfile'
4881--- plainbox/Vagrantfile 1970-01-01 00:00:00 +0000
4882+++ plainbox/Vagrantfile 2013-05-09 20:11:45 +0000
4883@@ -0,0 +1,42 @@
4884+# -*- mode: ruby -*-
4885+# vi: set ft=ruby sw=2 ts=2 :
4886+
4887+Vagrant::Config.run do |config|
4888+
4889+ config.ssh.timeout = 60
4890+
4891+ # Define a Ubuntu Server image (cloud) for the 12.04 release (precise)
4892+ config.vm.define :precise do |precise_config|
4893+ precise_config.vm.box = "precise-cloud-i386"
4894+ precise_config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/precise/current/precise-server-cloudimg-i386-vagrant-disk1.box"
4895+ end
4896+
4897+ # Define a Ubuntu Server image (cloud) for the 12.10 release (quantal)
4898+ config.vm.define :quantal do |quantal_config|
4899+ quantal_config.vm.box = "quantal-cloud-i386"
4900+ quantal_config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/quantal/current/quantal-server-cloudimg-i386-vagrant-disk1.box"
4901+ end
4902+
4903+ # Define a Ubuntu Server image (cloud) for the 13.04 release (raring)
4904+ config.vm.define :raring do |raring_config|
4905+ raring_config.vm.box = "raring-cloud-i386"
4906+ raring_config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/raring/current/raring-server-cloudimg-i386-vagrant-disk1.box"
4907+ end
4908+
4909+ # For debugging and later future GUI testing
4910+ if ENV.key? "VAGRANT_GUI"
4911+ config.vm.boot_mode = :gui
4912+ end
4913+
4914+ # Setup an apt cache if one is available
4915+ if ENV.key? "VAGRANT_APT_CACHE"
4916+ config.vm.provision :shell, :inline => "echo 'Acquire::http { Proxy \"#{ENV['VAGRANT_APT_CACHE']}\"; };' > /etc/apt/apt.conf"
4917+ end
4918+
4919+ # Update to have the latest packages, this is needed because the image comes
4920+ # with an old (and no longer working) apt cache and links to many packages no
4921+ # longer work.
4922+ config.vm.provision :shell, :inline => "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade --yes"
4923+ # Create a cool symlink so that everyone knows where to go to
4924+ config.vm.provision :shell, :inline => "ln --no-dereference --force --symbolic /vagrant /home/vagrant/plainbox"
4925+end
4926
4927=== added directory 'plainbox/daily-package-testing'
4928=== added file 'plainbox/daily-package-testing/README'
4929--- plainbox/daily-package-testing/README 1970-01-01 00:00:00 +0000
4930+++ plainbox/daily-package-testing/README 2013-05-09 20:11:45 +0000
4931@@ -0,0 +1,18 @@
4932+About
4933+=====
4934+
4935+This Vagrantfile can be used to see how packaged version of plainbox from the
4936+ppa looks like.
4937+
4938+The package is built with this recipe:
4939+https://code.launchpad.net/~checkbox-dev/+recipe/plainbox-daily
4940+
4941+Usage instructions
4942+==================
4943+
4944+$TARGET is either precise or quantal
4945+
4946+$ vagrant up $TARGET
4947+$ vagrant ssh $TARGET
4948+$ plainbox --help
4949+$ exit
4950
4951=== added file 'plainbox/daily-package-testing/Vagrantfile'
4952--- plainbox/daily-package-testing/Vagrantfile 1970-01-01 00:00:00 +0000
4953+++ plainbox/daily-package-testing/Vagrantfile 2013-05-09 20:11:45 +0000
4954@@ -0,0 +1,48 @@
4955+# -*- mode: ruby -*-
4956+# vi: set ft=ruby sw=2 ts=2 :
4957+
4958+Vagrant::Config.run do |config|
4959+
4960+ config.ssh.timeout = 60
4961+
4962+ # Define a Ubuntu Server image (cloud) for the 12.04 release (precise)
4963+ config.vm.define :precise do |precise_config|
4964+ precise_config.vm.box = "precise-cloud-i386"
4965+ precise_config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/precise/current/precise-server-cloudimg-i386-vagrant-disk1.box"
4966+ end
4967+
4968+ # Define a Ubuntu Server image (cloud) for the 12.10 release (quantal)
4969+ config.vm.define :quantal do |quantal_config|
4970+ quantal_config.vm.box = "quantal-cloud-i386"
4971+ quantal_config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/quantal/current/quantal-server-cloudimg-i386-vagrant-disk1.box"
4972+ end
4973+
4974+ # Define a Ubuntu Server image (cloud) for the 13.04 release (raring)
4975+ config.vm.define :raring do |raring_config|
4976+ raring_config.vm.box = "raring-cloud-i386"
4977+ raring_config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/raring/current/raring-server-cloudimg-i386-vagrant-disk1.box"
4978+ end
4979+
4980+ # For debugging and later future GUI testing
4981+ if ENV.key? "VAGRANT_GUI"
4982+ config.vm.boot_mode = :gui
4983+ end
4984+
4985+ # Setup an apt cache if one is available
4986+ if ENV.key? "VAGRANT_APT_CACHE"
4987+ config.vm.provision :shell, :inline => "echo 'Acquire::http { Proxy \"#{ENV['VAGRANT_APT_CACHE']}\"; };' > /etc/apt/apt.conf"
4988+ end
4989+
4990+ # Update to have the latest packages, this is needed because the image comes
4991+ # with an old (and no longer working) apt cache and links to many packages no
4992+ # longer work.
4993+ config.vm.provision :shell, :inline => "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade --yes"
4994+ # Install package that provides add-apt-repository
4995+ config.vm.provision :shell, :inline => "apt-get install --yes python-software-properties"
4996+ # Add the checkbox-dev/ppa ppa with daily builds
4997+ config.vm.provision :shell, :inline => "add-apt-repository ppa:checkbox-dev/ppa"
4998+ # Update apt cache again
4999+ config.vm.provision :shell, :inline => "apt-get update"
5000+ # Install plainbox
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches