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
=== modified file 'Vagrantfile'
--- Vagrantfile 2013-03-07 15:52:02 +0000
+++ Vagrantfile 2013-05-09 20:11:45 +0000
@@ -3,45 +3,54 @@
33
4Vagrant::Config.run do |config|4Vagrant::Config.run do |config|
55
6 config.ssh.timeout = 60
7
8 # Define a Ubuntu Server image (cloud) for the 12.04 release (precise)
9 config.vm.define :precise do |precise_config|
10 precise_config.vm.box = "precise-cloud-i386"
11 precise_config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/precise/current/precise-server-cloudimg-i386-vagrant-disk1.box"
12 end
13
6 # Define a Ubuntu Server image (cloud) for the 12.10 release (quantal)14 # Define a Ubuntu Server image (cloud) for the 12.10 release (quantal)
7 config.vm.define :quantal do |quantal_config|15 config.vm.define :quantal do |quantal_config|
8 quantal_config.vm.box = "quantal-cloud-i386"16 quantal_config.vm.box = "quantal-cloud-i386"
9 quantal_config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/quantal/current/quantal-server-cloudimg-i386-vagrant-disk1.box"17 quantal_config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/quantal/current/quantal-server-cloudimg-i386-vagrant-disk1.box"
10 end18 end
1119
12 # Define a Ubuntu Server image (cloud) for the 12.04 release (precise)20 # Define a Ubuntu Server image (cloud) for the 13.04 release (raring)
13 config.vm.define :precise do |precise_config|21 config.vm.define :raring do |raring_config|
14 precise_config.vm.box = "precise-cloud-i386"22 raring_config.vm.box = "raring-cloud-i386"
15 precise_config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/precise/current/precise-server-cloudimg-i386-vagrant-disk1.box"23 raring_config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/raring/current/raring-server-cloudimg-i386-vagrant-disk1.box"
16 end24 end
1725
18 # For debugging and later future GUI testing26 # For debugging and later future GUI testing
19 # config.vm.boot_mode = :gui27 if ENV.key? "VAGRANT_GUI"
28 config.vm.boot_mode = :gui
29 end
30
31 # Setup an apt cache if one is available
32 if ENV.key? "VAGRANT_APT_CACHE"
33 config.vm.provision :shell, :inline => "echo 'Acquire::http { Proxy \"#{ENV['VAGRANT_APT_CACHE']}\"; };' > /etc/apt/apt.conf"
34 end
2035
21 # Update to have the latest packages, this is needed because the image comes36 # Update to have the latest packages, this is needed because the image comes
22 # with an old (and no longer working) apt cache and links to many packages no37 # with an old (and no longer working) apt cache and links to many packages no
23 # longer work.38 # longer work.
24 config.vm.provision :shell, :inline => "apt-get update && apt-get dist-upgrade --yes"39 config.vm.provision :shell, :inline => "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade --yes"
25 # Install dependencies from native packages40 # Install dependencies from native packages
26 config.vm.provision :shell, :inline => "apt-get install --yes python3-setuptools python3-lxml"41 config.vm.provision :shell, :inline => "apt-get install --yes python3-setuptools python3-pkg-resources python3-lxml"
27 # Install python3-mock so that we can create mock objects for testing42 # Install python3-mock so that we can create mock objects for testing
28 config.vm.provision :shell, :inline => "apt-get install --yes python3-mock"43 config.vm.provision :shell, :inline => "apt-get install --yes python3-mock"
44 # Install python3-sphinx so that we can build documentation
45 config.vm.provision :shell, :inline => "apt-get install --yes python3-sphinx"
29 # Install policykit-1 so that we have pkexec46 # Install policykit-1 so that we have pkexec
30 config.vm.provision :shell, :inline => "apt-get install --yes policykit-1"47 config.vm.provision :shell, :inline => "apt-get install --yes policykit-1"
31 # Install some checkbox script dependencies:48 # Install some checkbox script dependencies:
32 # Later on those could be installed on demand to test how we behave without49 # Later on those could be installed on demand to test how we behave without
33 # them but for now that's good enough. Little by little...50 # them but for now that's good enough. Little by little...
34 config.vm.provision :shell, :inline => "apt-get install --yes fwts"51 config.vm.provision :shell, :inline => "apt-get install --yes fwts"
35 # Install python3-dev so that we can build native bits of other dependencies later
36 config.vm.provision :shell, :inline => "apt-get install --yes python3-dev"
37 # Install PIP so that we can install the rest from source
38 config.vm.provision :shell, :inline => "apt-get install --yes python-pip"
39 # Update distribute as the version from ubuntu is too old to install coverage
40 config.vm.provision :shell, :inline => "pip install -U distribute"
41 # Install coverage
42 config.vm.provision :shell, :inline => "pip install -U coverage"
43 # Develop plainbox so that we have it in $PATH52 # Develop plainbox so that we have it in $PATH
44 config.vm.provision :shell, :inline => "cd /vagrant/plainbox/ && python3 setup.py develop"53 config.vm.provision :shell, :inline => "cd /vagrant/plainbox/ && python3 setup.py develop"
45 # Create a cool symlink so that everyone knows where to go to54 # Create a cool symlink so that everyone knows where to go to
46 config.vm.provision :shell, :inline => "ln -fs /vagrant /home/vagrant/checkbox"55 config.vm.provision :shell, :inline => "ln --no-dereference --force --symbolic /vagrant /home/vagrant/checkbox"
47end56end
4857
=== added file 'bin/checkbox-hw-collection'
--- bin/checkbox-hw-collection 1970-01-01 00:00:00 +0000
+++ bin/checkbox-hw-collection 2013-05-09 20:11:45 +0000
@@ -0,0 +1,19 @@
1#!/bin/bash
2
3set -e
4
5export CHECKBOX_DATA=${CHECKBOX_DATA:-~/.checkbox-hw-collection}
6export CHECKBOX_SHARE=${CHECKBOX_SHARE:-.}
7export CHECKBOX_OPTIONS=${CHECKBOX_OPTIONS:---whitelist-file=$CHECKBOX_SHARE/data/whitelists/hwsubmit.whitelist}
8export PYTHONPATH=$PYTHONPATH:$CHECKBOX_SHARE
9
10if [ $CHECKBOX_DATA != '.' ]
11then
12 old_data=$HOME/.checkbox-hw-collection
13 if [ -d $old_data ] && [ ! -d $CHECKBOX_DATA ]
14 then
15 mv -f $old_data $CHECKBOX_DATA
16 fi
17fi
18
19python3 $CHECKBOX_SHARE/run "$@" $CHECKBOX_SHARE/configs/$(basename $0).ini
020
=== modified file 'checkbox/contrib/xrandr.py'
--- checkbox/contrib/xrandr.py 2012-09-03 13:51:52 +0000
+++ checkbox/contrib/xrandr.py 2013-05-09 20:11:45 +0000
@@ -32,9 +32,21 @@
32#32#
33# You should have received a copy of the GNU Lesser General Public33# You should have received a copy of the GNU Lesser General Public
34# License along with this library; if not, write to the Free Software34# License along with this library; if not, write to the Free Software
35# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA35# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
36# MA 02110-1301 USA
3637
37from ctypes import *38from ctypes import (
39 POINTER,
40 Structure,
41 byref,
42 c_char_p,
43 c_void_p,
44 c_int,
45 c_long,
46 c_ulong,
47 c_ushort,
48 cdll,
49)
38import os50import os
3951
40RR_ROTATE_0 = 152RR_ROTATE_0 = 1
@@ -90,10 +102,11 @@
90xlib = cdll.LoadLibrary('libX11.so.6')102xlib = cdll.LoadLibrary('libX11.so.6')
91rr = cdll.LoadLibrary('libXrandr.so.2')103rr = cdll.LoadLibrary('libXrandr.so.2')
92104
105
93# query resources106# query resources
94class _XRRModeInfo(Structure):107class _XRRModeInfo(Structure):
95 _fields_ = [108 _fields_ = [
96 ("id", RRMode), # XID is c_long109 ("id", RRMode), # XID is c_long
97 ("width", c_int),110 ("width", c_int),
98 ("height", c_int),111 ("height", c_int),
99 ("dotClock", c_long),112 ("dotClock", c_long),
@@ -109,6 +122,7 @@
109 ("modeFlags", c_long),122 ("modeFlags", c_long),
110 ]123 ]
111124
125
112class _XRRScreenSize(Structure):126class _XRRScreenSize(Structure):
113 _fields_ = [127 _fields_ = [
114 ("width", c_int),128 ("width", c_int),
@@ -117,6 +131,7 @@
117 ("mheight", c_int)131 ("mheight", c_int)
118 ]132 ]
119133
134
120class _XRRCrtcInfo(Structure):135class _XRRCrtcInfo(Structure):
121 _fields_ = [136 _fields_ = [
122 ("timestamp", Time),137 ("timestamp", Time),
@@ -133,6 +148,7 @@
133 ("possible", POINTER(RROutput)),148 ("possible", POINTER(RROutput)),
134 ]149 ]
135150
151
136class _XRRScreenResources(Structure):152class _XRRScreenResources(Structure):
137 _fields_ = [153 _fields_ = [
138 ("timestamp", Time),154 ("timestamp", Time),
@@ -145,16 +161,19 @@
145 ("modes", POINTER(_XRRModeInfo)),161 ("modes", POINTER(_XRRModeInfo)),
146 ]162 ]
147163
164
148class RRError(Exception):165class RRError(Exception):
149 """Base exception class of the module"""166 """Base exception class of the module"""
150 pass167 pass
151168
169
152class UnsupportedRRError(RRError):170class UnsupportedRRError(RRError):
153 """Raised if the required XRandR extension version is not available"""171 """Raised if the required XRandR extension version is not available"""
154 def __init__(self, required, current):172 def __init__(self, required, current):
155 self.required = required173 self.required = required
156 self.current = current174 self.current = current
157175
176
158# XRRGetOutputInfo177# XRRGetOutputInfo
159class _XRROutputInfo(Structure):178class _XRROutputInfo(Structure):
160 _fields_ = [179 _fields_ = [
@@ -175,6 +194,7 @@
175 ("modes", POINTER(RRMode))194 ("modes", POINTER(RRMode))
176 ]195 ]
177196
197
178class _XRRCrtcGamma(Structure):198class _XRRCrtcGamma(Structure):
179 _fields_ = [199 _fields_ = [
180 ('size', c_int),200 ('size', c_int),
@@ -183,13 +203,15 @@
183 ('blue', POINTER(c_ushort)),203 ('blue', POINTER(c_ushort)),
184 ]204 ]
185205
186def _array_conv(array, type, conv = lambda x:x):206
207def _array_conv(array, type, conv=lambda x: x):
187 length = len(array)208 length = len(array)
188 res = (type*length)()209 res = (type * length)()
189 for i in range(length):210 for i in range(length):
190 res[i] = conv(array[i])211 res[i] = conv(array[i])
191 return res212 return res
192213
214
193class Output:215class Output:
194 """The output is a reference to a supported output jacket of the graphics216 """The output is a reference to a supported output jacket of the graphics
195 card. Outputs are attached to a hardware pipe to be used. Furthermore217 card. Outputs are attached to a hardware pipe to be used. Furthermore
@@ -220,16 +242,22 @@
220 """Frees the internal reference to the output info if the output gets242 """Frees the internal reference to the output info if the output gets
221 removed"""243 removed"""
222 rr.XRRFreeOutputInfo(self._info)244 rr.XRRFreeOutputInfo(self._info)
245
223 def get_physical_width(self):246 def get_physical_width(self):
224 """Returns the display width reported by the connected output device"""247 """Returns the display width reported by the connected output device"""
225 return self._info.contents.mm_width248 return self._info.contents.mm_width
249
226 def get_physical_height(self):250 def get_physical_height(self):
227 """Returns the display height reported by the connected output device"""251 """
252 Returns the display height reported by the connected output device
253 """
228 return self._info.contents.mm_height254 return self._info.contents.mm_height
255
229 def get_crtc(self):256 def get_crtc(self):
230 """Returns the xid of the hardware pipe to which the output is257 """Returns the xid of the hardware pipe to which the output is
231 attached. If the output is disabled it will return 0"""258 attached. If the output is disabled it will return 0"""
232 return self._info.contents.crtc259 return self._info.contents.crtc
260
233 def get_crtcs(self):261 def get_crtcs(self):
234 """Returns the xids of the hardware pipes to which the output could262 """Returns the xids of the hardware pipes to which the output could
235 be attached"""263 be attached"""
@@ -290,7 +318,8 @@
290318
291 def disable(self):319 def disable(self):
292 """Disables the output"""320 """Disables the output"""
293 if not self.is_active(): return321 if not self.is_active():
322 return
294 self._mode = None323 self._mode = None
295 self._crtc._outputs.remove(self)324 self._crtc._outputs.remove(self)
296 self._crtc = None325 self._crtc = None
@@ -342,9 +371,11 @@
342 else:371 else:
343 return self._changes != CHANGES_NONE372 return self._changes != CHANGES_NONE
344373
374
345class Crtc:375class Crtc:
346 """The crtc is a reference to a hardware pipe that is provided by the376 """The crtc is a reference to a hardware pipe that is provided by the
347 graphics device. Outputs can be attached to crtcs"""377 graphics device. Outputs can be attached to crtcs"""
378
348 def __init__(self, info, xid, screen):379 def __init__(self, info, xid, screen):
349 """Initializes the hardware pipe object"""380 """Initializes the hardware pipe object"""
350 self._info = info381 self._info = info
@@ -437,24 +468,34 @@
437 return False468 return False
438 if len(self._outputs):469 if len(self._outputs):
439 for other in self._outputs:470 for other in self._outputs:
440 if other == output: continue471 if other == output:
441 if other._x != output._x: return False472 continue
442 if other._y != output._y: return False473 if other._x != output._x:
443 if other._mode != output._mode: return False474 return False
444 if other._rotation != output._rotation: return False475 if other._y != output._y:
476 return False
477 if other._mode != output._mode:
478 return False
479 if other._rotation != output._rotation:
480 return False
445 #FIXME: pick_crtc is still missing481 #FIXME: pick_crtc is still missing
446 elif self._info.contents.noutput > 0:482 elif self._info.contents.noutput > 0:
447 if self._info.contents.x != output._x: return False483 if self._info.contents.x != output._x:
448 if self._info.contents.y != output._y: return False484 return False
449 if self._info.contents.mode_info != output._mode: return False485 if self._info.contents.y != output._y:
450 if self._info.rotation != output._rotation: return False486 return False
487 if self._info.contents.mode_info != output._mode:
488 return False
489 if self._info.rotation != output._rotation:
490 return False
451 return True491 return True
452492
453 def supports_rotation(self, rotation):493 def supports_rotation(self, rotation):
454 """Check if the given rotation is supported by the crtc"""494 """Check if the given rotation is supported by the crtc"""
455 rotations = self._info.contents.rotations495 rotations = self._info.contents.rotations
456 dir = rotation & (RR_ROTATE_0|RR_ROTATE_90|RR_ROTATE_180|RR_ROTATE_270)496 dir = rotation & (RR_ROTATE_0 | RR_ROTATE_90 | RR_ROTATE_180 |
457 reflect = rotation & (RR_REFLECT_X|RR_REFLECT_Y)497 RR_ROTATE_270)
498 reflect = rotation & (RR_REFLECT_X | RR_REFLECT_Y)
458 if (((rotations & dir) != 0) and ((rotations & reflect) == reflect)):499 if (((rotations & dir) != 0) and ((rotations & reflect) == reflect)):
459 return True500 return True
460 return False501 return False
@@ -467,10 +508,13 @@
467 for i in range(self._info.contents.noutput):508 for i in range(self._info.contents.noutput):
468 id = self._info.contents.outputs[i]509 id = self._info.contents.outputs[i]
469 output = self._screen.get_output_by_id(id)510 output = self._screen.get_output_by_id(id)
470 if not output in self._outputs: return True511 if not output in self._outputs:
471 if output.has_changed(): return True512 return True
513 if output.has_changed():
514 return True
472 return False515 return False
473516
517
474class Screen:518class Screen:
475 def __init__(self, dpy, screen=-1):519 def __init__(self, dpy, screen=-1):
476 """Initializes the screen"""520 """Initializes the screen"""
@@ -500,7 +544,7 @@
500 self._load_config()544 self._load_config()
501 (self._width, self._height,545 (self._width, self._height,
502 self._width_mm, self._height_mm) = self.get_size()546 self._width_mm, self._height_mm) = self.get_size()
503 if XRANDR_VERSION >= (1,2):547 if XRANDR_VERSION >= (1, 2):
504 self._load_screen_size_range()548 self._load_screen_size_range()
505 self._load_crtcs()549 self._load_crtcs()
506 self._load_outputs()550 self._load_outputs()
@@ -596,7 +640,7 @@
596640
597 def get_current_rate(self):641 def get_current_rate(self):
598 """Returns the currently used refresh rate"""642 """Returns the currently used refresh rate"""
599 _check_required_version((1,0))643 _check_required_version((1, 0))
600 xccr = rr.XRRConfigCurrentRate644 xccr = rr.XRRConfigCurrentRate
601 xccr.restype = c_int645 xccr.restype = c_int
602 return xccr(self._config)646 return xccr(self._config)
@@ -605,7 +649,7 @@
605 """Returns the refresh rates that are supported by the screen for649 """Returns the refresh rates that are supported by the screen for
606 the given resolution. See get_available_sizes for the resolution to650 the given resolution. See get_available_sizes for the resolution to
607 which size_index points"""651 which size_index points"""
608 _check_required_version((1,0))652 _check_required_version((1, 0))
609 rates = []653 rates = []
610 nrates = c_int()654 nrates = c_int()
611 rr.XRRConfigRates.restype = POINTER(c_ushort)655 rr.XRRConfigRates.restype = POINTER(c_ushort)
@@ -617,14 +661,14 @@
617 def get_current_rotation(self):661 def get_current_rotation(self):
618 """Returns the currently used rotation. Can be RR_ROTATE_0,662 """Returns the currently used rotation. Can be RR_ROTATE_0,
619 RR_ROTATE_90, RR_ROTATE_180 or RR_ROTATE_270"""663 RR_ROTATE_90, RR_ROTATE_180 or RR_ROTATE_270"""
620 _check_required_version((1,0))664 _check_required_version((1, 0))
621 current = c_ushort()665 current = c_ushort()
622 rotations = rr.XRRConfigRotations(self._config, byref(current))666 rr.XRRConfigRotations(self._config, byref(current))
623 return current.value667 return current.value
624668
625 def get_available_rotations(self):669 def get_available_rotations(self):
626 """Returns a binary flag that holds the available resolutions"""670 """Returns a binary flag that holds the available resolutions"""
627 _check_required_version((1,0))671 _check_required_version((1, 0))
628 current = c_ushort()672 current = c_ushort()
629 rotations = rr.XRRConfigRotations(self._config, byref(current))673 rotations = rr.XRRConfigRotations(self._config, byref(current))
630 return rotations674 return rotations
@@ -632,7 +676,7 @@
632 def get_current_size_index(self):676 def get_current_size_index(self):
633 """Returns the position of the currently used resolution size in the677 """Returns the position of the currently used resolution size in the
634 list of available resolutions. See get_available_sizes"""678 list of available resolutions. See get_available_sizes"""
635 _check_required_version((1,0))679 _check_required_version((1, 0))
636 rotation = c_ushort()680 rotation = c_ushort()
637 size = rr.XRRConfigCurrentConfiguration(self._config,681 size = rr.XRRConfigCurrentConfiguration(self._config,
638 byref(rotation))682 byref(rotation))
@@ -641,7 +685,7 @@
641 def get_available_sizes(self):685 def get_available_sizes(self):
642 """Returns the available resolution sizes of the screen. The size686 """Returns the available resolution sizes of the screen. The size
643 index points to the corresponding resolution of this list"""687 index points to the corresponding resolution of this list"""
644 _check_required_version((1,0))688 _check_required_version((1, 0))
645 sizes = []689 sizes = []
646 nsizes = c_int()690 nsizes = c_int()
647 xcs = rr.XRRConfigSizes691 xcs = rr.XRRConfigSizes
@@ -655,7 +699,7 @@
655 """Configures the screen with the given resolution at the given size699 """Configures the screen with the given resolution at the given size
656 index, rotation and refresh rate. To get in effect call700 index, rotation and refresh rate. To get in effect call
657 Screen.apply_config()"""701 Screen.apply_config()"""
658 _check_required_version((1,0))702 _check_required_version((1, 0))
659 self.set_size_index(size_index)703 self.set_size_index(size_index)
660 self.set_refresh_rate(rate)704 self.set_refresh_rate(rate)
661 self.set_rotation(rotation)705 self.set_rotation(rotation)
@@ -710,7 +754,7 @@
710754
711 def print_info(self, verbose=False):755 def print_info(self, verbose=False):
712 """Prints some information about the detected screen and its outputs"""756 """Prints some information about the detected screen and its outputs"""
713 _check_required_version((1,0))757 _check_required_version((1, 0))
714 print("Screen %s: minimum %s x %s, current %s x %s, maximum %s x %s" %\758 print("Screen %s: minimum %s x %s, current %s x %s, maximum %s x %s" %\
715 (self._screen,759 (self._screen,
716 self._width_min, self._height_min,760 self._width_min, self._height_min,
@@ -728,20 +772,25 @@
728 i = 0772 i = 0
729 print("Sizes @ Refresh Rates:")773 print("Sizes @ Refresh Rates:")
730 for s in self.get_available_sizes():774 for s in self.get_available_sizes():
731 print(" [%s] %s x %s @ %s" % (i, s.width, s.height,775 print(" [%s] %s x %s @ %s" % (
732 self.get_available_rates_for_size_index(i)))776 i, s.width, s.height,
777 self.get_available_rates_for_size_index(i)))
733 i += 1778 i += 1
734 print("Rotations:")779 print("Rotations:")
735 rots = self.get_available_rotations()780 rots = self.get_available_rotations()
736 if rots & RR_ROTATE_0: print("normal")781 if rots & RR_ROTATE_0:
737 if rots & RR_ROTATE_90: print("right")782 print("normal")
738 if rots & RR_ROTATE_180: print("inverted")783 if rots & RR_ROTATE_90:
739 if rots & RR_ROTATE_270: print("left")784 print("right")
785 if rots & RR_ROTATE_180:
786 print("inverted")
787 if rots & RR_ROTATE_270:
788 print("left")
740 print("")789 print("")
741 print("Outputs:")790 print("Outputs:")
742 for o in list(self.outputs.keys()):791 for o in list(self.outputs.keys()):
743 output = self.outputs[o]792 output = self.outputs[o]
744 print(" %s" % o)793 print(" %s" % o)
745 if output.is_connected():794 if output.is_connected():
746 print("(%smm x %smm)" % (output.get_physical_width(),795 print("(%smm x %smm)" % (output.get_physical_width(),
747 output.get_physical_height()))796 output.get_physical_height()))
@@ -761,40 +810,45 @@
761 print("")810 print("")
762 print(" Rotations:")811 print(" Rotations:")
763 rots = output.get_available_rotations()812 rots = output.get_available_rotations()
764 if rots & RR_ROTATE_0: print("normal")813 if rots & RR_ROTATE_0:
765 if rots & RR_ROTATE_90: print("right")814 print("normal")
766 if rots & RR_ROTATE_180: print("inverted")815 if rots & RR_ROTATE_90:
767 if rots & RR_ROTATE_270: print("left")816 print("right")
817 if rots & RR_ROTATE_180:
818 print("inverted")
819 if rots & RR_ROTATE_270:
820 print("left")
768 print("")821 print("")
769 else:822 else:
770 print("(not connected)")823 print("(not connected)")
771 if verbose:824 if verbose:
772 print(" Core properties:")825 print(" Core properties:")
773 for (f,t) in output._info.contents._fields_:826 for (f, t) in output._info.contents._fields_:
774 print(" %s: %s" % (f,827 print(" %s: %s" % (
775 getattr(output._info.contents, f)))828 f, getattr(output._info.contents, f)))
776829
777 def get_outputs(self):830 def get_outputs(self):
778 """Returns the outputs of the screen"""831 """Returns the outputs of the screen"""
779 _check_required_version((1,2))832 _check_required_version((1, 2))
780 return list(self.outputs.values())833 return list(self.outputs.values())
781834
782 def get_output_names(self):835 def get_output_names(self):
783 _check_required_version((1,2))836 _check_required_version((1, 2))
784 return list(self.outputs.keys())837 return list(self.outputs.keys())
785838
786 def set_size(self, width, height, width_mm, height_mm):839 def set_size(self, width, height, width_mm, height_mm):
787 """Apply the given pixel and physical size to the screen"""840 """Apply the given pixel and physical size to the screen"""
788 _check_required_version((1,2))841 _check_required_version((1, 2))
789 # Check if we really need to apply the changes842 # Check if we really need to apply the changes
790 if (width, height, width_mm, height_mm) == self.get_size(): return843 if (width, height, width_mm, height_mm) == self.get_size():
844 return
791 rr.XRRSetScreenSize(self._display, self._root,845 rr.XRRSetScreenSize(self._display, self._root,
792 c_int(width), c_int(height),846 c_int(width), c_int(height),
793 c_int(width_mm), c_int(height_mm))847 c_int(width_mm), c_int(height_mm))
794848
795 def apply_output_config(self):849 def apply_output_config(self):
796 """Used for instantly applying RandR 1.2 changes"""850 """Used for instantly applying RandR 1.2 changes"""
797 _check_required_version((1,2))851 _check_required_version((1, 2))
798 self._arrange_outputs()852 self._arrange_outputs()
799 self._calculate_size()853 self._calculate_size()
800 self.set_size(self._width, self._height,854 self.set_size(self._width, self._height,
@@ -802,7 +856,8 @@
802856
803 # Assign all active outputs to crtcs857 # Assign all active outputs to crtcs
804 for output in list(self.outputs.values()):858 for output in list(self.outputs.values()):
805 if not output._mode or output._crtc: continue859 if not output._mode or output._crtc:
860 continue
806 for crtc in output.get_crtcs():861 for crtc in output.get_crtcs():
807 if crtc and crtc.supports_output(output):862 if crtc and crtc.supports_output(output):
808 crtc.add_output(output)863 crtc.add_output(output)
@@ -819,7 +874,7 @@
819874
820 def apply_config(self):875 def apply_config(self):
821 """Used for instantly applying RandR 1.0 changes"""876 """Used for instantly applying RandR 1.0 changes"""
822 _check_required_version((1,0))877 _check_required_version((1, 0))
823 status = rr.XRRSetScreenConfigAndRate(self._display,878 status = rr.XRRSetScreenConfigAndRate(self._display,
824 self._config,879 self._config,
825 self._root,880 self._root,
@@ -834,7 +889,8 @@
834 for output in self.get_outputs():889 for output in self.get_outputs():
835 # Skip not changed and not used outputs890 # Skip not changed and not used outputs
836 if not output.has_changed(CHANGES_RELATION) or \891 if not output.has_changed(CHANGES_RELATION) or \
837 output._mode == None: continue892 output._mode == None:
893 continue
838 relative = output._relative_to894 relative = output._relative_to
839 mode = self.get_mode_by_xid(output._mode)895 mode = self.get_mode_by_xid(output._mode)
840 mode_relative = self.get_mode_by_xid(relative._mode)896 mode_relative = self.get_mode_by_xid(relative._mode)
@@ -867,11 +923,15 @@
867 min_x = 32768923 min_x = 32768
868 min_y = 32768924 min_y = 32768
869 for output in self.get_outputs():925 for output in self.get_outputs():
870 if output._mode == None: continue926 if output._mode == None:
871 if output._x < min_x: min_x = output._x927 continue
872 if output._y < min_y: min_y = output._y928 if output._x < min_x:
929 min_x = output._x
930 if output._y < min_y:
931 min_y = output._y
873 for output in self.get_outputs():932 for output in self.get_outputs():
874 if output._mode == None: continue933 if output._mode == None:
934 continue
875 output._x -= min_x935 output._x -= min_x
876 output._y -= min_y936 output._y -= min_y
877 output._changes = output._changes | CHANGES_POSITION937 output._changes = output._changes | CHANGES_POSITION
@@ -882,14 +942,17 @@
882 width = self._width942 width = self._width
883 height = self._height943 height = self._height
884 for output in self.get_outputs():944 for output in self.get_outputs():
885 if not output._mode: continue945 if not output._mode:
946 continue
886 mode = self.get_mode_by_xid(output._mode)947 mode = self.get_mode_by_xid(output._mode)
887 x = output._x948 x = output._x
888 y = output._y949 y = output._y
889 w = get_mode_width(mode, output._rotation)950 w = get_mode_width(mode, output._rotation)
890 h = get_mode_height(mode, output._rotation)951 h = get_mode_height(mode, output._rotation)
891 if x + w > width: width = x + w952 if x + w > width:
892 if y + h > height: height = y + h953 width = x + w
954 if y + h > height:
955 height = y + h
893 if width > self._width_max or height > self._height_max:956 if width > self._width_max or height > self._height_max:
894 raise RRError("The required size is not supported",957 raise RRError("The required size is not supported",
895 (width, height), (self._width_max, self._width_min))958 (width, height), (self._width_max, self._width_min))
@@ -904,6 +967,7 @@
904 self._width = width967 self._width = width
905 #FIXME: Physical size is missing968 #FIXME: Physical size is missing
906969
970
907def get_current_display():971def get_current_display():
908 """Returns the currently used display"""972 """Returns the currently used display"""
909 display_url = os.getenv("DISPLAY")973 display_url = os.getenv("DISPLAY")
@@ -918,16 +982,19 @@
918 dpy = open_display(display_url.encode('utf-8'))982 dpy = open_display(display_url.encode('utf-8'))
919 return dpy983 return dpy
920984
985
921def get_current_screen():986def get_current_screen():
922 """Returns the currently used screen"""987 """Returns the currently used screen"""
923 screen = Screen(get_current_display())988 screen = Screen(get_current_display())
924 return screen989 return screen
925990
991
926def get_screen_of_display(display, count):992def get_screen_of_display(display, count):
927 """Returns the screen of the given display"""993 """Returns the screen of the given display"""
928 dpy = xlib.XOpenDisplay(display)994 dpy = xlib.XOpenDisplay(display)
929 return Screen(dpy, count)995 return Screen(dpy, count)
930996
997
931def get_version():998def get_version():
932 """Returns a tuple containing the major and minor version of the xrandr999 """Returns a tuple containing the major and minor version of the xrandr
933 extension or None if the extension is not available"""1000 extension or None if the extension is not available"""
@@ -939,12 +1006,14 @@
939 return (major.value, minor.value)1006 return (major.value, minor.value)
940 return None1007 return None
9411008
1009
942def has_extension():1010def has_extension():
943 """Returns True if the xrandr extension is available"""1011 """Returns True if the xrandr extension is available"""
944 if XRANDR_VERSION:1012 if XRANDR_VERSION:
945 return True1013 return True
946 return False1014 return False
9471015
1016
948def _to_gamma(gamma):1017def _to_gamma(gamma):
949 g = rr.XRRAllocGamma(len(gamma[0]))1018 g = rr.XRRAllocGamma(len(gamma[0]))
950 for i in range(gamma[0]):1019 for i in range(gamma[0]):
@@ -953,6 +1022,7 @@
953 g.blue[i] = gamma[2][i]1022 g.blue[i] = gamma[2][i]
954 return g1023 return g
9551024
1025
956def _from_gamma(g):1026def _from_gamma(g):
957 gamma = ([], [], [])1027 gamma = ([], [], [])
958 for i in range(g.size):1028 for i in range(g.size):
@@ -961,12 +1031,14 @@
961 gamma[2].append(g.blue[i])1031 gamma[2].append(g.blue[i])
962 rr.XRRFreeGamma(g)1032 rr.XRRFreeGamma(g)
9631033
1034
964def _check_required_version(version):1035def _check_required_version(version):
965 """Raises an exception if the given or a later version of xrandr is not1036 """Raises an exception if the given or a later version of xrandr is not
966 available"""1037 available"""
967 if XRANDR_VERSION == None or XRANDR_VERSION < version:1038 if XRANDR_VERSION == None or XRANDR_VERSION < version:
968 raise UnsupportedRRError(version, XRANDR_VERSION)1039 raise UnsupportedRRError(version, XRANDR_VERSION)
9691040
1041
970def get_mode_height(mode, rotation):1042def get_mode_height(mode, rotation):
971 """Return the height of the given mode taking the rotation into account"""1043 """Return the height of the given mode taking the rotation into account"""
972 if rotation & (RR_ROTATE_0 | RR_ROTATE_180):1044 if rotation & (RR_ROTATE_0 | RR_ROTATE_180):
@@ -976,6 +1048,7 @@
976 else:1048 else:
977 return 01049 return 0
9781050
1051
979def get_mode_width(mode, rotation):1052def get_mode_width(mode, rotation):
980 """Return the width of the given mode taking the rotation into account"""1053 """Return the width of the given mode taking the rotation into account"""
981 if rotation & (RR_ROTATE_0 | RR_ROTATE_180):1054 if rotation & (RR_ROTATE_0 | RR_ROTATE_180):
9821055
=== modified file 'checkbox/lib/fifo.py'
--- checkbox/lib/fifo.py 2012-06-09 15:50:39 +0000
+++ checkbox/lib/fifo.py 2013-05-09 20:11:45 +0000
@@ -18,6 +18,7 @@
18#18#
19import os19import os
20import struct20import struct
21import logging
2122
22from checkbox.contrib.bpickle import dumps, loads23from checkbox.contrib.bpickle import dumps, loads
23from checkbox.lib.selector import Selector, SelectorIO24from checkbox.lib.selector import Selector, SelectorIO
@@ -36,7 +37,11 @@
36 self.close()37 self.close()
3738
38 def close(self):39 def close(self):
39 os.close(self.fileno)40 try:
41 os.close(self.fileno)
42 except OSError as e:
43 logging.warning("Problem closing the fifo")
44 logging.warning(e)
4045
41 def wait_for(self, operation):46 def wait_for(self, operation):
42 if self._timeout is not None:47 if self._timeout is not None:
4348
=== modified file 'checkbox/lib/template.py'
--- checkbox/lib/template.py 2012-10-16 21:42:45 +0000
+++ checkbox/lib/template.py 2013-05-09 20:11:45 +0000
@@ -65,8 +65,8 @@
65 def dump_filename(self, elements, filename):65 def dump_filename(self, elements, filename):
66 logging.info("Dumping elements to filename: %s", filename)66 logging.info("Dumping elements to filename: %s", filename)
6767
68 file = open(filename, "w")68 with open(filename, "w") as stream:
69 return self.dump_file(elements, file, filename)69 return self.dump_file(elements, stream, filename)
7070
71 def load_file(self, file, filename="<stream>"):71 def load_file(self, file, filename="<stream>"):
72 elements = []72 elements = []
@@ -139,5 +139,5 @@
139 def load_filename(self, filename):139 def load_filename(self, filename):
140 logging.info("Loading elements from filename: %s", filename)140 logging.info("Loading elements from filename: %s", filename)
141141
142 file = open(filename, "r", encoding="utf-8")142 with open(filename, "r", encoding="utf-8") as stream:
143 return self.load_file(file, filename)143 return self.load_file(stream, filename)
144144
=== modified file 'checkbox/message.py'
--- checkbox/message.py 2012-06-01 21:34:18 +0000
+++ checkbox/message.py 2013-05-09 20:11:45 +0000
@@ -20,7 +20,6 @@
20import logging20import logging
21import itertools21import itertools
22import posixpath22import posixpath
23import sys
2423
25from checkbox.contrib import bpickle24from checkbox.contrib import bpickle
26from checkbox.lib.safe import safe_close25from checkbox.lib.safe import safe_close
@@ -41,11 +40,12 @@
41class MessageStore:40class MessageStore:
42 """A message store which stores its messages in a file system hierarchy."""41 """A message store which stores its messages in a file system hierarchy."""
4342
44 #This caches everything but a message's data, making it manageable to keep in memory.43 # This caches everything but a message's data, making it manageable to keep
44 # in memory.
45 _message_cache = {}45 _message_cache = {}
4646
47 #Setting this to False speeds things up considerably, at the expense 47 # Setting this to False speeds things up considerably, at the expense of a
48 #of a higher risk of data loss during a crash48 # higher risk of data loss during a crash
49 safe_file_closing = True49 safe_file_closing = True
5050
51 def __init__(self, persist, directory, directory_size=1000):51 def __init__(self, persist, directory, directory_size=1000):
@@ -128,11 +128,12 @@
128128
129 def delete_old_messages(self):129 def delete_old_messages(self):
130 """Delete messages which are unlikely to be needed in the future."""130 """Delete messages which are unlikely to be needed in the future."""
131 filenames = self._get_sorted_filenames()131 filenames = itertools.islice(
132 for fn in itertools.islice(self._walk_messages(exclude=HELD+BROKEN),132 self._walk_messages(exclude=HELD + BROKEN),
133 self.get_pending_offset()):133 self.get_pending_offset())
134 os.unlink(fn)134 for filename in filenames:
135 containing_dir = posixpath.split(fn)[0]135 os.unlink(filename)
136 containing_dir = os.path.dirname(filename)
136 if not os.listdir(containing_dir):137 if not os.listdir(containing_dir):
137 os.rmdir(containing_dir)138 os.rmdir(containing_dir)
138139
@@ -194,8 +195,9 @@
194 def _walk_pending_messages(self):195 def _walk_pending_messages(self):
195 """Walk the files which are definitely pending."""196 """Walk the files which are definitely pending."""
196 pending_offset = self.get_pending_offset()197 pending_offset = self.get_pending_offset()
197 for i, filename in enumerate(self._walk_messages(exclude=HELD+BROKEN)):198 filenames = self._walk_messages(exclude=HELD + BROKEN)
198 if i >= pending_offset:199 for index, filename in enumerate(filenames):
200 if index >= pending_offset:
199 yield filename201 yield filename
200202
201 def _walk_messages(self, exclude=None):203 def _walk_messages(self, exclude=None):
@@ -235,12 +237,12 @@
235 dirname, basename = posixpath.split(path)237 dirname, basename = posixpath.split(path)
236 new_path = posixpath.join(dirname, basename.split("_")[0])238 new_path = posixpath.join(dirname, basename.split("_")[0])
237 if flags:239 if flags:
238 new_path += "_"+"".join(sorted(set(flags)))240 new_path += "_" + "".join(sorted(set(flags)))
239 os.rename(path, new_path)241 os.rename(path, new_path)
240 return new_path242 return new_path
241243
242 def _add_flags(self, path, flags):244 def _add_flags(self, path, flags):
243 self._set_flags(path, self._get_flags(path)+flags)245 self._set_flags(path, self._get_flags(path) + flags)
244246
245 def _load_message(self, data):247 def _load_message(self, data):
246 return bpickle.loads(data)248 return bpickle.loads(data)
@@ -251,7 +253,7 @@
251 def _read_message(self, filename, cache=False):253 def _read_message(self, filename, cache=False):
252 #cache basically indicates whether the caller cares about having "data"254 #cache basically indicates whether the caller cares about having "data"
253 if cache and filename in self._message_cache:255 if cache and filename in self._message_cache:
254 return Message(self._message_cache[filename],filename)256 return Message(self._message_cache[filename], filename)
255257
256 data = self._get_content(filename)258 data = self._get_content(filename)
257 message = self._load_message(data)259 message = self._load_message(data)
@@ -271,7 +273,7 @@
271273
272 #Strip the big data element and shove it in the cache274 #Strip the big data element and shove it in the cache
273275
274 temp_message=dict(message)276 temp_message = dict(message)
275 if "data" in temp_message:277 if "data" in temp_message:
276 temp_message["data"] = None278 temp_message["data"] = None
277279
278280
=== modified file 'checkbox/parsers/submission.py'
--- checkbox/parsers/submission.py 2012-10-12 21:30:46 +0000
+++ checkbox/parsers/submission.py 2013-05-09 20:11:45 +0000
@@ -99,7 +99,7 @@
9999
100 context_parsers = {100 context_parsers = {
101 "/proc/cpuinfo": self.parseCpuinfo,101 "/proc/cpuinfo": self.parseCpuinfo,
102 "/proc/meminfo": self.parseMeminfo,102 "meminfo": self.parseMeminfo,
103 "dmidecode": DmidecodeParser,103 "dmidecode": DmidecodeParser,
104 "udevadm": self.parseUdevadm,104 "udevadm": self.parseUdevadm,
105 "efi": EfiParser,105 "efi": EfiParser,
106106
=== modified file 'checkbox/parsers/tests/fixtures/submission_info_memory.xml'
--- checkbox/parsers/tests/fixtures/submission_info_memory.xml 2012-10-12 21:19:04 +0000
+++ checkbox/parsers/tests/fixtures/submission_info_memory.xml 2013-05-09 20:11:45 +0000
@@ -1,7 +1,7 @@
1<?xml version="1.0" ?>1<?xml version="1.0" ?>
2<system version="1.0">2<system version="1.0">
3<context>3<context>
4<info command="cat /proc/meminfo">MemTotal: 1976036 kB4<info command="meminfo_attachment">MemTotal: 1976036 kB
5MemFree: 590948 kB5MemFree: 590948 kB
6Buffers: 100976 kB6Buffers: 100976 kB
7Cached: 465660 kB7Cached: 465660 kB
88
=== modified file 'checkbox/parsers/tests/test_cputable.py'
--- checkbox/parsers/tests/test_cputable.py 2012-10-09 13:32:06 +0000
+++ checkbox/parsers/tests/test_cputable.py 2013-05-09 20:11:45 +0000
@@ -60,7 +60,7 @@
6060
61 def test_empty(self):61 def test_empty(self):
62 result = self.getResult("")62 result = self.getResult("")
63 self.assertEquals(result.cpus, [])63 self.assertEqual(result.cpus, [])
6464
65 def test_i386(self):65 def test_i386(self):
66 result = self.getResult("""66 result = self.getResult("""
@@ -68,7 +68,7 @@
68i386 i686 (i[3456]86|pentium) 32 little68i386 i686 (i[3456]86|pentium) 32 little
69""")69""")
70 debian_cpu = result.getByDebianName("i386")70 debian_cpu = result.getByDebianName("i386")
71 self.assertNotEquals(debian_cpu, None)71 self.assertNotEqual(debian_cpu, None)
72 gnu_cpu = result.getByGnuName("i686")72 gnu_cpu = result.getByGnuName("i686")
73 self.assertNotEquals(gnu_cpu, None)73 self.assertNotEqual(gnu_cpu, None)
74 self.assertEquals(debian_cpu, gnu_cpu)74 self.assertEqual(debian_cpu, gnu_cpu)
7575
=== modified file 'checkbox/parsers/tests/test_description.py'
--- checkbox/parsers/tests/test_description.py 2012-10-09 13:32:06 +0000
+++ checkbox/parsers/tests/test_description.py 2013-05-09 20:11:45 +0000
@@ -46,22 +46,22 @@
4646
47 def test_one_line(self):47 def test_one_line(self):
48 line = PURPOSE_RE.sub(r"", "1. foo\n")48 line = PURPOSE_RE.sub(r"", "1. foo\n")
49 self.assertEquals(line, "foo\n")49 self.assertEqual(line, "foo\n")
5050
51 def test_two_lines(self):51 def test_two_lines(self):
52 line = PURPOSE_RE.sub(r"", "1. foo\n2. bar\n")52 line = PURPOSE_RE.sub(r"", "1. foo\n2. bar\n")
53 self.assertEquals(line, "foo\nbar\n")53 self.assertEqual(line, "foo\nbar\n")
5454
5555
56class TestStepsRe(TestCase):56class TestStepsRe(TestCase):
5757
58 def test_one_line(self):58 def test_one_line(self):
59 line = STEPS_RE.sub(r"\1.\2", "1: foo\n")59 line = STEPS_RE.sub(r"\1.\2", "1: foo\n")
60 self.assertEquals(line, "1. foo\n")60 self.assertEqual(line, "1. foo\n")
6161
62 def test_two_lines(self):62 def test_two_lines(self):
63 line = STEPS_RE.sub(r"\1.\2", "1: foo\n2: bar\n")63 line = STEPS_RE.sub(r"\1.\2", "1: foo\n2: bar\n")
64 self.assertEquals(line, "1. foo\n2. bar\n")64 self.assertEqual(line, "1. foo\n2. bar\n")
6565
6666
67class TestDescriptionParser(TestCase):67class TestDescriptionParser(TestCase):
@@ -78,14 +78,14 @@
7878
79 def assertResult(79 def assertResult(
80 self, result, purpose=None, steps=None, verification=None, info=None):80 self, result, purpose=None, steps=None, verification=None, info=None):
81 self.assertEquals(result.purpose, purpose)81 self.assertEqual(result.purpose, purpose)
82 self.assertEquals(result.steps, steps)82 self.assertEqual(result.steps, steps)
83 self.assertEquals(result.verification, verification)83 self.assertEqual(result.verification, verification)
84 self.assertEquals(result.info, info)84 self.assertEqual(result.info, info)
8585
86 def test_empty(self):86 def test_empty(self):
87 result = self.getResult("")87 result = self.getResult("")
88 self.assertEquals(result.purpose, None)88 self.assertEqual(result.purpose, None)
8989
90 def test_purpose(self):90 def test_purpose(self):
91 result = self.getResult("""91 result = self.getResult("""
@@ -151,10 +151,10 @@
151VERIFICACIÓN:151VERIFICACIÓN:
152 ¿Son las pantallas y los modos de vídeo correctos?152 ¿Son las pantallas y los modos de vídeo correctos?
153""")153""")
154 self.assertNotEquals(result.purpose, None)154 self.assertNotEqual(result.purpose, None)
155 self.assertNotEquals(result.steps, None)155 self.assertNotEqual(result.steps, None)
156 self.assertNotEquals(result.verification, None)156 self.assertNotEqual(result.verification, None)
157 self.assertEquals(result.info, "$output\n")157 self.assertEqual(result.info, "$output\n")
158158
159 def test_ru(self):159 def test_ru(self):
160 result = self.getResult("""160 result = self.getResult("""
@@ -166,10 +166,10 @@
166ПРОВЕРКА:166ПРОВЕРКА:
167 Был ли слышен звук в наушниках и был ли он воспроизведён в ваших наушниках без искажений, щелчков или других искажённых звуков?"167 Был ли слышен звук в наушниках и был ли он воспроизведён в ваших наушниках без искажений, щелчков или других искажённых звуков?"
168""")168""")
169 self.assertNotEquals(result.purpose, None)169 self.assertNotEqual(result.purpose, None)
170 self.assertNotEquals(result.steps, None)170 self.assertNotEqual(result.steps, None)
171 self.assertNotEquals(result.verification, None)171 self.assertNotEqual(result.verification, None)
172 self.assertEquals(result.info, None)172 self.assertEqual(result.info, None)
173173
174 def test_substitute_purpose(self):174 def test_substitute_purpose(self):
175 result = self.getResult("""175 result = self.getResult("""
176176
=== modified file 'checkbox/parsers/tests/test_dmi.py'
--- checkbox/parsers/tests/test_dmi.py 2012-10-09 13:32:06 +0000
+++ checkbox/parsers/tests/test_dmi.py 2013-05-09 20:11:45 +0000
@@ -45,36 +45,36 @@
4545
46 def test_devices(self):46 def test_devices(self):
47 result = self.getResult()47 result = self.getResult()
48 self.assertEquals(len(result.devices), 4)48 self.assertEqual(len(result.devices), 4)
4949
50 def test_bios(self):50 def test_bios(self):
51 result = self.getResult()51 result = self.getResult()
52 device = result.getDevice("BIOS")52 device = result.getDevice("BIOS")
53 self.assertTrue(device)53 self.assertTrue(device)
54 self.assertEquals(device.product, "BIOS PRODUCT")54 self.assertEqual(device.product, "BIOS PRODUCT")
55 self.assertEquals(device.vendor, "BIOS VENDOR")55 self.assertEqual(device.vendor, "BIOS VENDOR")
56 self.assertEquals(device.serial, None)56 self.assertEqual(device.serial, None)
5757
58 def test_board(self):58 def test_board(self):
59 result = self.getResult()59 result = self.getResult()
60 device = result.getDevice("BOARD")60 device = result.getDevice("BOARD")
61 self.assertTrue(device)61 self.assertTrue(device)
62 self.assertEquals(device.product, None)62 self.assertEqual(device.product, None)
63 self.assertEquals(device.vendor, None)63 self.assertEqual(device.vendor, None)
64 self.assertEquals(device.serial, None)64 self.assertEqual(device.serial, None)
6565
66 def test_chassis(self):66 def test_chassis(self):
67 result = self.getResult()67 result = self.getResult()
68 device = result.getDevice("CHASSIS")68 device = result.getDevice("CHASSIS")
69 self.assertTrue(device)69 self.assertTrue(device)
70 self.assertEquals(device.product, "Notebook")70 self.assertEqual(device.product, "Notebook")
71 self.assertEquals(device.vendor, "CHASSIS VENDOR")71 self.assertEqual(device.vendor, "CHASSIS VENDOR")
72 self.assertEquals(device.serial, None)72 self.assertEqual(device.serial, None)
7373
74 def test_system(self):74 def test_system(self):
75 result = self.getResult()75 result = self.getResult()
76 device = result.getDevice("SYSTEM")76 device = result.getDevice("SYSTEM")
77 self.assertTrue(device)77 self.assertTrue(device)
78 self.assertEquals(device.product, "SYSTEM PRODUCT")78 self.assertEqual(device.product, "SYSTEM PRODUCT")
79 self.assertEquals(device.vendor, "SYSTEM VENDOR")79 self.assertEqual(device.vendor, "SYSTEM VENDOR")
80 self.assertEquals(device.serial, "SYSTEM SERIAL")80 self.assertEqual(device.serial, "SYSTEM SERIAL")
8181
=== modified file 'checkbox/parsers/tests/test_efi.py'
--- checkbox/parsers/tests/test_efi.py 2012-10-09 13:32:06 +0000
+++ checkbox/parsers/tests/test_efi.py 2013-05-09 20:11:45 +0000
@@ -46,18 +46,18 @@
4646
47 def test_empty(self):47 def test_empty(self):
48 result = self.getResult("")48 result = self.getResult("")
49 self.assertEquals(result.device, None)49 self.assertEqual(result.device, None)
5050
51 def test_product(self):51 def test_product(self):
52 result = self.getResult("""52 result = self.getResult("""
53Foo Bar53Foo Bar
54""")54""")
55 self.assertEquals(result.device.vendor, None)55 self.assertEqual(result.device.vendor, None)
56 self.assertEquals(result.device.product, "Foo Bar")56 self.assertEqual(result.device.product, "Foo Bar")
5757
58 def test_vendor_product(self):58 def test_vendor_product(self):
59 result = self.getResult("""59 result = self.getResult("""
60Foo by Bar60Foo by Bar
61""")61""")
62 self.assertEquals(result.device.vendor, "Foo")62 self.assertEqual(result.device.vendor, "Foo")
63 self.assertEquals(result.device.product, "Bar")63 self.assertEqual(result.device.product, "Bar")
6464
=== modified file 'checkbox/parsers/tests/test_submission.py'
--- checkbox/parsers/tests/test_submission.py 2013-03-07 15:52:02 +0000
+++ checkbox/parsers/tests/test_submission.py 2013-05-09 20:11:45 +0000
@@ -18,7 +18,6 @@
18# along with Checkbox. If not, see <http://www.gnu.org/licenses/>.18# along with Checkbox. If not, see <http://www.gnu.org/licenses/>.
19#19#
20import os20import os
21import gzip
2221
23from unittest import TestCase22from unittest import TestCase
2423
@@ -64,28 +63,22 @@
6463
65class TestSubmissionParser(TestCase):64class TestSubmissionParser(TestCase):
6665
67 def getFixture(self, name):
68 return os.path.join(os.path.dirname(__file__), "fixtures", name)
69
70 def getParser(self, name):
71 fixture = self.getFixture(name)
72 stream = open(fixture)
73 return SubmissionParser(stream)
74
75 def getResult(self, name, project="test"):66 def getResult(self, name, project="test"):
76 result = {}67 result = {}
77 parser = self.getParser(name)68 fixture = os.path.join(os.path.dirname(__file__), "fixtures", name)
78 parser.run(SubmissionRun, result=result, project=project)69 with open(fixture) as stream:
70 parser = SubmissionParser(stream)
71 parser.run(SubmissionRun, result=result, project=project)
79 return result72 return result
8073
81 def test_distribution(self):74 def test_distribution(self):
82 """Distribution information is in the lsbrelease element."""75 """Distribution information is in the lsbrelease element."""
83 result = self.getResult("submission_lsbrelease.xml")76 result = self.getResult("submission_lsbrelease.xml")
84 self.assertTrue("distribution" in result)77 self.assertTrue("distribution" in result)
85 self.assertEquals(result["distribution"]["release"], "12.10")78 self.assertEqual(result["distribution"]["release"], "12.10")
86 self.assertEquals(result["distribution"]["codename"], "quantal")79 self.assertEqual(result["distribution"]["codename"], "quantal")
87 self.assertEquals(result["distribution"]["distributor_id"], "Ubuntu")80 self.assertEqual(result["distribution"]["distributor_id"], "Ubuntu")
88 self.assertEquals(81 self.assertEqual(
89 result["distribution"]["description"],82 result["distribution"]["description"],
90 "Ubuntu quantal (development branch)")83 "Ubuntu quantal (development branch)")
9184
@@ -93,45 +86,45 @@
93 """Memory state is in an info element."""86 """Memory state is in an info element."""
94 result = self.getResult("submission_info_memory.xml")87 result = self.getResult("submission_info_memory.xml")
95 self.assertTrue("memory_state" in result)88 self.assertTrue("memory_state" in result)
96 self.assertEquals(result["memory_state"]["total"], 2023460864)89 self.assertEqual(result["memory_state"]["total"], 2023460864)
97 self.assertEquals(result["memory_state"]["swap"], 2067787776)90 self.assertEqual(result["memory_state"]["swap"], 2067787776)
9891
99 def test_processor(self):92 def test_processor(self):
100 """Processor information can be in a processors element."""93 """Processor information can be in a processors element."""
101 result = self.getResult("submission_processors.xml")94 result = self.getResult("submission_processors.xml")
102 self.assertTrue("processor_state" in result)95 self.assertTrue("processor_state" in result)
103 self.assertEquals(result["processor_state"]["bogomips"], 1197)96 self.assertEqual(result["processor_state"]["bogomips"], 1197)
104 self.assertEquals(result["processor_state"]["cache"], 1048576)97 self.assertEqual(result["processor_state"]["cache"], 1048576)
105 self.assertEquals(result["processor_state"]["count"], 1)98 self.assertEqual(result["processor_state"]["count"], 1)
106 self.assertEquals(result["processor_state"]["make"], "GenuineIntel")99 self.assertEqual(result["processor_state"]["make"], "GenuineIntel")
107 self.assertEquals(100 self.assertEqual(
108 result["processor_state"]["model"],101 result["processor_state"]["model"],
109 "Intel(R) Pentium(R) M processor 1100MHz")102 "Intel(R) Pentium(R) M processor 1100MHz")
110 self.assertEquals(result["processor_state"]["model_number"], "6")103 self.assertEqual(result["processor_state"]["model_number"], "6")
111 self.assertEquals(result["processor_state"]["model_revision"], "5")104 self.assertEqual(result["processor_state"]["model_revision"], "5")
112 self.assertEquals(result["processor_state"]["model_version"], "9")105 self.assertEqual(result["processor_state"]["model_version"], "9")
113 self.assertEquals(106 self.assertEqual(
114 result["processor_state"]["other"],107 result["processor_state"]["other"],
115 """fpu vme de pse tsc msr mce cx8 apic sep mtrr pge mca cmov """108 """fpu vme de pse tsc msr mce cx8 apic sep mtrr pge mca cmov """
116 """pat clflush dts acpi mmx fxsr sse sse2 tm pbe up bts est tm2""")109 """pat clflush dts acpi mmx fxsr sse sse2 tm pbe up bts est tm2""")
117 self.assertEquals(result["processor_state"]["platform_name"], "i386")110 self.assertEqual(result["processor_state"]["platform_name"], "i386")
118 self.assertEquals(result["processor_state"]["speed"], 597)111 self.assertEqual(result["processor_state"]["speed"], 597)
119112
120 def test_processor_info(self):113 def test_processor_info(self):
121 """Processor information can be in an info element."""114 """Processor information can be in an info element."""
122 result = self.getResult("submission_info_cpuinfo.xml")115 result = self.getResult("submission_info_cpuinfo.xml")
123 self.assertTrue("processor_state" in result)116 self.assertTrue("processor_state" in result)
124 self.assertEquals(result["processor_state"]["bogomips"], 4788)117 self.assertEqual(result["processor_state"]["bogomips"], 4788)
125 self.assertEquals(result["processor_state"]["cache"], 3145728)118 self.assertEqual(result["processor_state"]["cache"], 3145728)
126 self.assertEquals(result["processor_state"]["count"], 1)119 self.assertEqual(result["processor_state"]["count"], 1)
127 self.assertEquals(result["processor_state"]["make"], "GenuineIntel")120 self.assertEqual(result["processor_state"]["make"], "GenuineIntel")
128 self.assertEquals(121 self.assertEqual(
129 result["processor_state"]["model"],122 result["processor_state"]["model"],
130 "Intel(R) Core(TM) i5 CPU M 520 @ 2.40GHz")123 "Intel(R) Core(TM) i5 CPU M 520 @ 2.40GHz")
131 self.assertEquals(result["processor_state"]["model_number"], "6")124 self.assertEqual(result["processor_state"]["model_number"], "6")
132 self.assertEquals(result["processor_state"]["model_revision"], "2")125 self.assertEqual(result["processor_state"]["model_revision"], "2")
133 self.assertEquals(result["processor_state"]["model_version"], "37")126 self.assertEqual(result["processor_state"]["model_version"], "37")
134 self.assertEquals(127 self.assertEqual(
135 result["processor_state"]["other"],128 result["processor_state"]["other"],
136 """fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca """129 """fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca """
137 """cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm """130 """cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm """
@@ -140,51 +133,51 @@
140 """dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm """133 """dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm """
141 """sse4_1 sse4_2 popcnt aes lahf_lm ida arat dtherm tpr_shadow """134 """sse4_1 sse4_2 popcnt aes lahf_lm ida arat dtherm tpr_shadow """
142 """vnmi flexpriority ept vpid""")135 """vnmi flexpriority ept vpid""")
143 self.assertEquals(result["processor_state"]["platform_name"], "x86_64")136 self.assertEqual(result["processor_state"]["platform_name"], "x86_64")
144 self.assertEquals(result["processor_state"]["speed"], 1865)137 self.assertEqual(result["processor_state"]["speed"], 1865)
145138
146 def test_attachments(self):139 def test_attachments(self):
147 """Attachments are in info elements."""140 """Attachments are in info elements."""
148 result = self.getResult("submission_attachment.xml")141 result = self.getResult("submission_attachment.xml")
149 self.assertTrue("attachments" in result)142 self.assertTrue("attachments" in result)
150 self.assertEquals(len(result["attachments"]), 1)143 self.assertEqual(len(result["attachments"]), 1)
151144
152 def test_device_udev(self):145 def test_device_udev(self):
153 """Device states can be in the udev element."""146 """Device states can be in the udev element."""
154 result = self.getResult("submission_udev.xml")147 result = self.getResult("submission_udev.xml")
155 self.assertTrue("device_states" in result)148 self.assertTrue("device_states" in result)
156 self.assertEquals(len(result["device_states"]), 82)149 self.assertEqual(len(result["device_states"]), 84)
157150
158 def test_device_udevadm(self):151 def test_device_udevadm(self):
159 """Device states can be in a udevadm info element."""152 """Device states can be in a udevadm info element."""
160 result = self.getResult("submission_info_udevadm.xml")153 result = self.getResult("submission_info_udevadm.xml")
161 self.assertTrue("device_states" in result)154 self.assertTrue("device_states" in result)
162 self.assertEquals(len(result["device_states"]), 82)155 self.assertEqual(len(result["device_states"]), 84)
163156
164 def test_device_dmidecode(self):157 def test_device_dmidecode(self):
165 """Device states can be in a dmidecode info element."""158 """Device states can be in a dmidecode info element."""
166 result = self.getResult("submission_info_dmidecode.xml")159 result = self.getResult("submission_info_dmidecode.xml")
167 self.assertTrue("device_states" in result)160 self.assertTrue("device_states" in result)
168 self.assertEquals(len(result["device_states"]), 5)161 self.assertEqual(len(result["device_states"]), 5)
169162
170 def test_package_versions(self):163 def test_package_versions(self):
171 """Package versions are in the packages element."""164 """Package versions are in the packages element."""
172 result = self.getResult("submission_packages.xml")165 result = self.getResult("submission_packages.xml")
173 self.assertTrue("package_versions" in result)166 self.assertTrue("package_versions" in result)
174 self.assertEquals(len(result["package_versions"]), 1)167 self.assertEqual(len(result["package_versions"]), 1)
175168
176 package_version = result["package_versions"][0]169 package_version = result["package_versions"][0]
177 self.assertEquals(package_version["name"], "accountsservice")170 self.assertEqual(package_version["name"], "accountsservice")
178 self.assertEquals(package_version["version"], "0.6.21-6ubuntu2")171 self.assertEqual(package_version["version"], "0.6.21-6ubuntu2")
179172
180 def test_test_results(self):173 def test_test_results(self):
181 """Test results are in the questions element."""174 """Test results are in the questions element."""
182 result = self.getResult("submission_questions.xml")175 result = self.getResult("submission_questions.xml")
183 self.assertTrue("test_results" in result)176 self.assertTrue("test_results" in result)
184 self.assertEquals(len(result["test_results"]), 1)177 self.assertEqual(len(result["test_results"]), 1)
185178
186 test_result = result["test_results"][0]179 test_result = result["test_results"][0]
187 self.assertEquals(180 self.assertEqual(
188 test_result["name"], "audio/alsa_record_playback_external")181 test_result["name"], "audio/alsa_record_playback_external")
189 self.assertEquals(test_result["output"], "")182 self.assertEqual(test_result["output"], "")
190 self.assertEquals(test_result["status"], "pass")183 self.assertEqual(test_result["status"], "pass")
191184
=== modified file 'checkbox/parsers/tests/test_xinput.py'
--- checkbox/parsers/tests/test_xinput.py 2012-10-22 19:43:04 +0000
+++ checkbox/parsers/tests/test_xinput.py 2013-05-09 20:11:45 +0000
@@ -38,8 +38,8 @@
38 """⎡ Virtual core pointer """38 """⎡ Virtual core pointer """
39 """id=2 [master pointer (3)]""")39 """id=2 [master pointer (3)]""")
40 self.assertTrue(match)40 self.assertTrue(match)
41 self.assertEquals(match.group("name"), "Virtual core pointer")41 self.assertEqual(match.group("name"), "Virtual core pointer")
42 self.assertEquals(match.group("id"), "2")42 self.assertEqual(match.group("id"), "2")
4343
4444
45class TestAttributeRe(TestCase):45class TestAttributeRe(TestCase):
@@ -47,8 +47,8 @@
47 def test_string(self):47 def test_string(self):
48 match = ATTRIBUTE_RE.match("""Buttons supported: 12""")48 match = ATTRIBUTE_RE.match("""Buttons supported: 12""")
49 self.assertTrue(match)49 self.assertTrue(match)
50 self.assertEquals(match.group("key"), "Buttons supported")50 self.assertEqual(match.group("key"), "Buttons supported")
51 self.assertEquals(match.group("value"), "12")51 self.assertEqual(match.group("value"), "12")
5252
5353
54class TestClassValueRe(TestCase):54class TestClassValueRe(TestCase):
@@ -56,7 +56,7 @@
56 def test_string(self):56 def test_string(self):
57 match = CLASS_VALUE_RE.match("""12. Type: XIButtonClass""")57 match = CLASS_VALUE_RE.match("""12. Type: XIButtonClass""")
58 self.assertTrue(match)58 self.assertTrue(match)
59 self.assertEquals(match.group("class"), "XIButtonClass")59 self.assertEqual(match.group("class"), "XIButtonClass")
6060
6161
62class TestListValueRe(TestCase):62class TestListValueRe(TestCase):
@@ -65,10 +65,10 @@
65 elements = LIST_VALUE_RE.split(65 elements = LIST_VALUE_RE.split(
66 """"Button Horiz Wheel Right" None None""")[1::2]66 """"Button Horiz Wheel Right" None None""")[1::2]
67 self.assertTrue(elements)67 self.assertTrue(elements)
68 self.assertEquals(len(elements), 3)68 self.assertEqual(len(elements), 3)
69 self.assertEquals(elements[0], '"Button Horiz Wheel Right"')69 self.assertEqual(elements[0], '"Button Horiz Wheel Right"')
70 self.assertEquals(elements[1], "None")70 self.assertEqual(elements[1], "None")
71 self.assertEquals(elements[2], "None")71 self.assertEqual(elements[2], "None")
7272
7373
74class XinputResult(IXinputResult):74class XinputResult(IXinputResult):
@@ -86,50 +86,45 @@
8686
87class TestXinputParser(TestCase):87class TestXinputParser(TestCase):
8888
89 def getFixture(self, name):
90 return os.path.join(os.path.dirname(__file__), "fixtures", name)
91
92 def getParser(self, name):
93 fixture = self.getFixture(name)
94 stream = open(fixture, encoding="utf-8")
95 return XinputParser(stream)
9689
97 def getResult(self, name):90 def getResult(self, name):
98 parser = self.getParser(name)91 fixture = os.path.join(os.path.dirname(__file__), "fixtures", name)
99 result = XinputResult()92 result = XinputResult()
100 parser.run(result)93 with open(fixture, encoding="utf-8") as stream:
94 parser = XinputParser(stream)
95 parser.run(result)
101 return result96 return result
10297
103 def test_number_of_devices_with_spaces(self):98 def test_number_of_devices_with_spaces(self):
104 """The toshiba xinput with spaces contains 12 devices."""99 """The toshiba xinput with spaces contains 12 devices."""
105 result = self.getResult("xinput_toshiba.txt")100 result = self.getResult("xinput_toshiba.txt")
106 self.assertEquals(len(result.devices), 12)101 self.assertEqual(len(result.devices), 12)
107102
108 def test_number_of_devices_without_spaces(self):103 def test_number_of_devices_without_spaces(self):
109 """The quantal xinput without spaces contains 14 devices."""104 """The quantal xinput without spaces contains 14 devices."""
110 result = self.getResult("xinput_quantal.txt")105 result = self.getResult("xinput_quantal.txt")
111 self.assertEquals(len(result.devices), 14)106 self.assertEqual(len(result.devices), 14)
112107
113 def test_multitouch_touchpad_device(self):108 def test_multitouch_touchpad_device(self):
114 """The toshiba xinput contains a multitouch touchpad device."""109 """The toshiba xinput contains a multitouch touchpad device."""
115 result = self.getResult("xinput_toshiba.txt")110 result = self.getResult("xinput_toshiba.txt")
116 devices = [device for device in result.devices.values()111 devices = [device for device in result.devices.values()
117 if device["name"] == "AlpsPS/2 ALPS DualPoint TouchPad"]112 if device["name"] == "AlpsPS/2 ALPS DualPoint TouchPad"]
118 self.assertEquals(len(devices), 1)113 self.assertEqual(len(devices), 1)
119114
120 classes = [cls for cls in devices[0]["classes"]115 classes = [cls for cls in devices[0]["classes"]
121 if cls["device_class"] == "XITouchClass"]116 if cls["device_class"] == "XITouchClass"]
122 self.assertEquals(len(classes), 1)117 self.assertEqual(len(classes), 1)
123 self.assertEquals(classes[0]["touch_mode"], "dependent")118 self.assertEqual(classes[0]["touch_mode"], "dependent")
124119
125 def test_multitouch_touchscreen_device(self):120 def test_multitouch_touchscreen_device(self):
126 """The quantal xinput contains a multitouch touchscreen device."""121 """The quantal xinput contains a multitouch touchscreen device."""
127 result = self.getResult("xinput_quantal.txt")122 result = self.getResult("xinput_quantal.txt")
128 devices = [device for device in result.devices.values()123 devices = [device for device in result.devices.values()
129 if device["name"] == "Quanta OpticalTouchScreen"]124 if device["name"] == "Quanta OpticalTouchScreen"]
130 self.assertEquals(len(devices), 1)125 self.assertEqual(len(devices), 1)
131126
132 classes = [cls for cls in devices[0]["classes"]127 classes = [cls for cls in devices[0]["classes"]
133 if cls["device_class"] == "XITouchClass"]128 if cls["device_class"] == "XITouchClass"]
134 self.assertEquals(len(classes), 1)129 self.assertEqual(len(classes), 1)
135 self.assertEquals(classes[0]["touch_mode"], "direct")130 self.assertEqual(classes[0]["touch_mode"], "direct")
136131
=== modified file 'checkbox/parsers/udevadm.py'
--- checkbox/parsers/udevadm.py 2013-03-22 16:14:06 +0000
+++ checkbox/parsers/udevadm.py 2013-05-09 20:11:45 +0000
@@ -454,8 +454,9 @@
454 if device.bus == "ieee80211":454 if device.bus == "ieee80211":
455 return False455 return False
456456
457 # Ignore devices without product information457 # Ignore devices without product AND vendor information
458 if not device.product and device.product_id is None:458 if (device.product is None and device.product_id is None and
459 device.vendor is None and device.vendor_id is None):
459 return True460 return True
460461
461 # Ignore invalid subsystem information462 # Ignore invalid subsystem information
462463
=== added file 'checkbox/test_resource.py'
--- checkbox/test_resource.py 1970-01-01 00:00:00 +0000
+++ checkbox/test_resource.py 2013-05-09 20:11:45 +0000
@@ -0,0 +1,347 @@
1# This file is part of Checkbox.
2#
3# Copyright 2013 Canonical Ltd.
4# Written by:
5# Zygmunt Krynicki <zygmunt.krynicki@canonical.com>
6#
7# Checkbox is free software: you can redistribute it and/or modify
8# it under the terms of the GNU General Public License as published by
9# the Free Software Foundation, either version 3 of the License, or
10# (at your option) any later version.
11#
12# Checkbox is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU General Public License for more details.
16#
17# You should have received a copy of the GNU General Public License
18# along with Checkbox. If not, see <http://www.gnu.org/licenses/>.
19
20"""
21checkbox.test_resource
22======================
23
24Test definitions for :mod:`checkbox.resource`
25"""
26
27from unittest import TestCase
28
29from checkbox.resource import ResourceIterator
30from checkbox.resource import ResourceMap
31
32
33class ResourceMapTests(TestCase):
34
35 def setUp(self):
36 # Create a resource map with two resources:
37 #
38 # 'resource_list' is a list with two values, each with an 'attr'
39 # attribute. This is how resources with multiple values are normally
40 # stored.
41 #
42 # 'resource_tuple' is similar to 'resource_list', holding the same data
43 # but using a tuple instead of a list.
44 #
45 # 'resource_dict' is a dictionary with one attribute 'name'. This is
46 # how resources with one value might be stored.
47 self.resource_map = ResourceMap({
48 'resource_list': [
49 {"attr": "value"},
50 {"attr": "other-value"}
51 ],
52 'resource_tuple': (
53 {"attr": "value"},
54 {"attr": "other-value"}
55 ),
56 'resource_dict': {"attr": "value"},
57 'resource_int': 42,
58 })
59 # This is an empty map, it is used by some of the tests
60 self.empty_map = ResourceMap()
61
62 def test_resource_map_is_a_dict(self):
63 # While it's a derived class it's still a dictionary
64 self.assertIsInstance(self.resource_map, dict)
65
66 def test_missing_resource(self):
67 # Missing resources just raise KeyError as they normally would in a
68 # dictionary
69 with self.assertRaises(KeyError):
70 self.resource_map['resource_missing']
71
72 def test_existing_resource_list(self):
73 # Accessing a resource wrapped in a list returns a ResourceIterator
74 thing = self.resource_map['resource_list']
75 self.assertIsInstance(thing, ResourceIterator)
76
77 def test_existing_resource_tuple(self):
78 # Accessing a resource wrapped in a tuple returns a ResourceIterator
79 thing = self.resource_map['resource_tuple']
80 self.assertIsInstance(thing, ResourceIterator)
81
82 def test_existing_resource_dict(self):
83 # Accessing a resource wrapped in a dict returns a ResourceIterator
84 thing = self.resource_map['resource_dict']
85 self.assertIsInstance(thing, ResourceIterator)
86
87 def test_existing_resource_int(self):
88 # Accessing a resource wrapped in a int returns the value directly
89 thing = self.resource_map['resource_int']
90 self.assertIsInstance(thing, int)
91 # The helper integer is 42
92 self.assertEqual(thing, 42)
93
94 def test_eval_smoke(self):
95 # Evaluating anything valid against an empty map returns None
96 self.assertIs(None, self.empty_map.eval("resource.attr == 'value'"))
97 # Evaluating borked code against an empty map also returns None
98 self.assertIs(None, self.empty_map.eval("adpasdasd .asdaasd asd a"))
99
100 def test_under_results(self):
101 # The resource map has an instance variable, _results that is only
102 # assigned after the call to ResourceMap.eval().
103 with self.assertRaises(AttributeError):
104 self.empty_map._results
105 # Calling eval() initializes/overrides it
106 self.empty_map.eval('')
107 # With an empty list (that list may contain other values normally but
108 # with an empty resource map it is always empty)
109 self.assertEqual(self.empty_map._results, [])
110
111 def test_eval_globals(self):
112 # ResourceMap.eval() has a fixed list of globals
113 #
114 # We can poke at that list by using specially crafted expressions.
115 # Each time the expression evaluates to 1, we get an empty list back.
116 self.assertEqual([], self.empty_map.eval("'bool' in globals() and 1"))
117 self.assertEqual([], self.empty_map.eval("'float' in globals() and 1"))
118 self.assertEqual([], self.empty_map.eval("'int' in globals() and 1"))
119 self.assertEqual([], self.empty_map.eval("'str' in globals() and 1"))
120 # Each of those globals is a special ResourceBuiltin object
121 self.assertEqual([], self.resource_map.eval(
122 "bool.__class__.__name__ == 'ResourceBuiltin'"))
123 self.assertEqual([], self.resource_map.eval(
124 "float.__class__.__name__ == 'ResourceBuiltin'"))
125 self.assertEqual([], self.resource_map.eval(
126 "int.__class__.__name__ == 'ResourceBuiltin'"))
127 self.assertEqual([], self.resource_map.eval(
128 "str.__class__.__name__ == 'ResourceBuiltin'"))
129 # Unfortunately, __builtins__ is also in the global scope
130 #
131 # With builtins being available we have a way to access anything in
132 # python via __import__
133 self.assertEqual([], self.empty_map.eval(
134 "'__builtins__' in globals() and 1"))
135 # There are no other globals than what was checked for above:
136 #
137 # The goal is to ensure that there are only particular globals
138 # in the context that is being used to evaluate the expression.
139 #
140 # We cannot return the value directly and compare it outside
141 # (well we can but that trick is used later to keep this code
142 # simple and portable across changes in checkbox)
143 #
144 # The return value of globals().keys() is a special dict_keys() proxy
145 # that returns the items in undetermined order.
146 #
147 # The result is a simple comparison of two sorted list generated by
148 # list comprehensions from iterating over all the keys in global() and
149 # in the list of expected global symbols
150 self.assertEqual([], self.empty_map.eval(
151 "sorted([x for x in globals().keys()])"
152 " == "
153 "sorted(['__builtins__', 'bool', 'float', 'int', 'str'])"))
154
155 def test_eval_locals(self):
156 # As with the globals test above, this test checks what kind of locals
157 # are available inside the execution context.
158 #
159 # In the example of an empty map, the result is -- no locals!
160 self.assertEqual([], self.empty_map.eval(
161 "sorted([x for x in locals().keys()])"
162 " == "
163 "[]"))
164 # In the example of a resource map with several resources the result
165 # are those resources (after wrapping in ResourceIterator)
166 self.assertEqual([], self.resource_map.eval(
167 "sorted([x for x in locals().keys()])"
168 " == "
169 "sorted(['resource_list', 'resource_tuple',"
170 " 'resource_dict', 'resource_int'])"))
171 # Let's just ensure that those are not the raw values anymore Note that
172 # we cannot use 'int', 'list', etc. directly they are wrapped in
173 # ResourceBuiltin objects (see test_eval_globals() above)
174 self.assertEqual([], self.resource_map.eval(
175 "locals()['resource_int'] != (0).__class__"))
176 self.assertEqual([], self.resource_map.eval(
177 "locals()['resource_dict'] != ({}).__class__"))
178 self.assertEqual([], self.resource_map.eval(
179 "locals()['resource_list'] != ([]).__class__"))
180 self.assertEqual([], self.resource_map.eval(
181 "locals()['resource_tuple'] != (()).__class__"))
182
183 def test_eval_import(self):
184 # The expression can import arbitrary python package
185 #
186 # Here we import the subprocess module, execute /bin/false which
187 # returns 1, this makes the expression True in the terms of checkbox
188 # resource programs.
189 self.assertEqual([], self.empty_map.eval(
190 "__import__('subprocess').call('/bin/false')"))
191
192 def test_eval_can_mutate_results(self):
193 # The ResourceMap._results object can be accessed and mutated
194 # by using locals(). Calling locals() inside the expression literally
195 # returns the ResourceMap instance.
196 #
197 # Using that trick, any operation can be performed, including mutating
198 # or replacing the results object.
199 results = self.empty_map.eval(
200 "1 "
201 "if getattr(locals(), '_results').append('payload') "
202 "is None "
203 "else 0")
204 self.assertIs(self.empty_map._results, results)
205 self.assertEqual(results, ['payload'])
206
207 def test_eval_return_value_for_int_resources(self):
208 # This test explores how resource_map.eval() result gets
209 # computed and what it really is in practice.
210 #
211 # The important aspect of this code is that it relies on
212 # ResourceMap._results being shared by ResourceMap, ResourceIterator
213 # and ResourceObject. This makes testing the behavior in isolation
214 # difficult.
215 #
216 # Technically _results are mutated only in ResourceIterator (in the
217 # __contains__ function) and in the ResourceObject (in the _try
218 # function that is in turn called from all overridden special functions
219 # like __eq__) both of those places call _results.append().
220 #
221 # The appended value is either the element of the ResourceIterator
222 # (technically the value) and the converted value of the attribute in
223 # ResourceObject._try. This is rather confusing so let's see what
224 # happens in practice.
225 #
226 # Let's explore resource_list first (the flow is the same for all other
227 # types so the explanations are only given once).
228 #
229 # Here each value was a simple dictionary with 'attr' key wrapped in a
230 # list. As checked earlier by test_existing_resource_list() that list
231 # is converted to a ResourceIterator. Accessing any attribute on the
232 # resource iterator creates a ResourceObject bound to that attribute
233 # name and the iterator. Calling the equality operator on a
234 # ResourceObject calls ResourceObject.__eq__() which in turns calls
235 # ResourceObject._try() The _try() function iterates over the
236 # ResourceIterator and checks of any of the items returned (which are
237 # the raw items as passed to ResourceMap initially) have an entry
238 # corresponding to the attribute name (that was accessed on
239 # ResourceIterator), if so, the value is looked up, converted using the
240 # convert function (identity by default), and passed to the helper
241 # function (that corresponds to the logical operation performed by
242 # whatever called _try, for example, __eq__ calls lambda a, b: a == b).
243 # If the return value of that function matches the expected sentinel
244 # object (True is used by default) then the loop over the iterator
245 # (inside _try()) is broken and the original item (the dictionary or
246 # other object that was initially passed to the ResourceMap) is
247 # appended. Lastly the _try() method returns the sentinel object (True
248 # by default) there was a match (the loop got broken) or the default
249 # value (False by default) otherwise. This is all pretty complicated
250 # but in the case of all-defaults it's pretty much equivalent to:
251 #
252 # results = [
253 # object
254 # for object in resource_map[resource_name]
255 # if object.get(resource_attr) == expected_value]
256 #
257 # Let's see how that works in practice.
258 # Note that the == operator can be replaced by any operator
259 # supported by ResourceObject (<, <=, >, >=, =, !=, in)
260 self.assertEqual(
261 self.resource_map.eval("resource_list.attr == 'value'"),
262 [{'attr': 'value'}])
263 self.assertEqual(
264 self.resource_map.eval("resource_list.attr in ['value']"),
265 [{'attr': 'value'}])
266 self.assertEqual(
267 self.resource_map.eval("resource_list.attr != 'value'"),
268 [{'attr': 'other-value'}])
269 # The inequality operator used with a value that does not exist in the
270 # resource produces the full list of resources back.
271 self.assertEqual(
272 self.resource_map.eval("resource_list.attr != 'foo'"),
273 [{'attr': 'value'}, {'attr': 'other-value'}])
274
275 def test_eval_return_value_for_tuple_resources(self):
276 # Set of identical tests for resource_tuple
277 self.assertEqual(
278 self.resource_map.eval("resource_tuple.attr == 'value'"),
279 [{'attr': 'value'}])
280 self.assertEqual(
281 self.resource_map.eval("resource_tuple.attr in ['value']"),
282 [{'attr': 'value'}])
283 self.assertEqual(
284 self.resource_map.eval("resource_tuple.attr != 'value'"),
285 [{'attr': 'other-value'}])
286
287 def test_eval_return_value_for_dict_resources(self):
288 # Set of identical tests for resource_dict
289 self.assertEqual(
290 self.resource_map.eval("resource_dict.attr == 'value'"),
291 [{'attr': 'value'}])
292 self.assertEqual(
293 self.resource_map.eval("resource_dict.attr in ['value']"),
294 [{'attr': 'value'}])
295 # Here the result is slightly different. This is because there are no
296 # matches (there is no 'other-value' like in previous cases). In such
297 # case the whole expression does not evaluate to True and the return
298 # value is None.
299 self.assertEqual(
300 self.resource_map.eval("resource_dict.attr != 'value'"),
301 None)
302
303 def test_eval_return_value_for_other_resources(self):
304 # Set of identical tests for resource_int
305 #
306 # Here resource_int is not wrapped in a ResourceIterator and unexpected
307 # things start to happen. There is no logic to modify the result in
308 # such case so although the result of the comparison is True the result
309 # of the eval() function is the empty results list.
310 #
311 # I suspect that such cases were never meant to happen and are an
312 # oversight from the initial implementation and lack of testing beyond
313 # the expected working cases.
314 self.assertEqual(
315 self.resource_map.eval("resource_int == 42"),
316 [])
317 # Confusingly enough, but consistently, when the expression evaluates
318 # the False the eval() function returns None.
319 self.assertEqual(
320 self.resource_map.eval("resource_int != 42"),
321 None)
322
323 def test_eval_return_logic_bool(self):
324 # There is some extra logic in eval() that should be documented.
325 # The return value of the low-level eval() call inside the
326 # ResourceMap.eval() method is passed to a set of tests to determine if
327 # it is 'true enough' to return the results. Those tests include:
328 # 1) A boolean value which is True
329 self.assertEqual([], self.empty_map.eval("True"))
330 self.assertEqual(None, self.empty_map.eval("False"))
331
332 def test_eval_return_logic_int(self):
333 # 2) A non-zero integer
334 self.assertEqual([], self.empty_map.eval("1"))
335 self.assertEqual(None, self.empty_map.eval("0"))
336
337 def test_eval_return_logic_tuple(self):
338 # 3) A tuple with at least one True object
339 self.assertEqual([], self.empty_map.eval("(True,)"))
340 self.assertEqual([], self.empty_map.eval("(False, True, 7)"))
341 self.assertEqual(None, self.empty_map.eval("(False, 7)"))
342 self.assertEqual(None, self.empty_map.eval("(7,)"))
343 self.assertEqual(None, self.empty_map.eval("()"))
344
345 def test_eval_return_logic_list(self):
346 # Sadly this does not apply to lists
347 self.assertEqual(None, self.empty_map.eval("[True]"))
0348
=== modified file 'checkbox/tests/__init__.py'
--- checkbox/tests/__init__.py 2007-09-18 15:26:03 +0000
+++ checkbox/tests/__init__.py 2013-05-09 20:11:45 +0000
@@ -0,0 +1,49 @@
1# This file is part of Checkbox.
2#
3# Copyright 2013 Canonical Ltd.
4# Written by:
5# Zygmunt Krynicki <zygmunt.krynicki@canonical.com>
6#
7# Checkbox is free software: you can redistribute it and/or modify
8# it under the terms of the GNU General Public License as published by
9# the Free Software Foundation, either version 3 of the License, or
10# (at your option) any later version.
11#
12# Checkbox is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU General Public License for more details.
16#
17# You should have received a copy of the GNU General Public License
18# along with Checkbox. If not, see <http://www.gnu.org/licenses/>.
19
20"""
21:mod:`checkbox.tests` -- auxiliary test loaders for checkbox
22============================================================
23"""
24
25from inspect import getabsfile
26from unittest.loader import defaultTestLoader
27import os
28
29import checkbox
30
31
32def load_unit_tests():
33 """
34 Load all unit tests and return a TestSuite object
35 """
36 # Discover all unit tests. By simple convention those are kept in
37 # python modules that start with the word 'test_' .
38 return defaultTestLoader.discover(
39 os.path.dirname(getabsfile(checkbox)))
40
41
42def test_suite():
43 """
44 Test suite function used by setuptools test loader.
45
46 Uses unittest test discovery system to get a list of test cases defined
47 inside checkbox. See setup.py setup(test_suite=...) for a matching entry
48 """
49 return load_unit_tests()
050
=== modified file 'checkbox/tests/test_job.py'
--- checkbox/tests/test_job.py 2012-10-09 13:32:06 +0000
+++ checkbox/tests/test_job.py 2013-05-09 20:11:45 +0000
@@ -16,22 +16,23 @@
16# You should have received a copy of the GNU General Public License16# You should have received a copy of the GNU General Public License
17# along with Checkbox. If not, see <http://www.gnu.org/licenses/>.17# along with Checkbox. If not, see <http://www.gnu.org/licenses/>.
18#18#
19import os
20import unittest19import unittest
20
21from checkbox.job import Job21from checkbox.job import Job
2222
23
23class JobTest(unittest.TestCase):24class JobTest(unittest.TestCase):
2425
25 def test_command_not_found(self):26 def test_command_not_found(self):
26 job = Job('xwonkt','',10)27 job = Job('xwonkt', '', 10)
27 status, data, duration = job.execute()28 status, data, duration = job.execute()
28 #data is expected to be bytes29 #data is expected to be bytes
29 self.assertTrue(isinstance(data, bytes))30 self.assertTrue(isinstance(data, bytes))
3031
31 def test_existing_command(self):32 def test_existing_command(self):
32 test_string = 'checkbox'33 test_string = 'checkbox'
33 job = Job('echo -n "%s"' % test_string,'',10)34 job = Job('echo -n "%s"' % test_string, '', 10)
34 status, data, duration = job.execute()35 status, data, duration = job.execute()
35 #data is expected to be bytes36 #data is expected to be bytes
36 self.assertTrue(isinstance(data, bytes))37 self.assertTrue(isinstance(data, bytes))
37 self.assertEquals(data, test_string.encode())38 self.assertEqual(data, test_string.encode())
3839
=== modified file 'checkbox/tests/test_message_files.py'
--- checkbox/tests/test_message_files.py 2012-12-12 13:13:12 +0000
+++ checkbox/tests/test_message_files.py 2013-05-09 20:11:45 +0000
@@ -74,13 +74,14 @@
74 if 'environ' in message:74 if 'environ' in message:
75 environ_variables = re.findall(environ_variables_regex, 75 environ_variables = re.findall(environ_variables_regex,
76 message['environ'])76 message['environ'])
77 self.assertEquals(set(environ_variables),77 self.assertEqual(set(environ_variables),
78 set(shell_variables),78 set(shell_variables),
79 message['name'])79 message['name'])
8080
81 def test_jobs_comply_with_schema(self):81 def test_jobs_comply_with_schema(self):
82 globals = {}82 globals = {}
83 exec(open("plugins/jobs_info.py").read(), globals)83 with open("plugins/jobs_info.py", "rt") as stream:
84 exec(stream.read(), globals)
84 job_schema = globals["job_schema"]85 job_schema = globals["job_schema"]
85 for message in self.messages:86 for message in self.messages:
86 long_ext = "_extended"87 long_ext = "_extended"
8788
=== modified file 'checkbox/tests/test_setup_files.py'
--- checkbox/tests/test_setup_files.py 2012-10-09 13:32:06 +0000
+++ checkbox/tests/test_setup_files.py 2013-05-09 20:11:45 +0000
@@ -37,7 +37,8 @@
37 self.assertEqual(rfc822deb_from_config, existing_files)37 self.assertEqual(rfc822deb_from_config, existing_files)
3838
39 def test_job_files_in_potfiles(self):39 def test_job_files_in_potfiles(self):
40 potfile_lines = [line.strip() for line in open('po/POTFILES.in','r')]40 with open('po/POTFILES.in', 'rt') as stream:
41 potfile_lines = [line.strip() for line in stream]
41 potfile_jobfiles = [file for file in potfile_lines if "rfc822deb" in file]42 potfile_jobfiles = [file for file in potfile_lines if "rfc822deb" in file]
42 potfile_jobfiles = [line.split(']')[1].strip() 43 potfile_jobfiles = [line.split(']')[1].strip()
43 for line in potfile_jobfiles if ']' in line]44 for line in potfile_jobfiles if ']' in line]
@@ -47,7 +48,8 @@
47 self.assertEqual(potfile_jobfiles, existing_files)48 self.assertEqual(potfile_jobfiles, existing_files)
4849
49 def test_job_files_in_local_txt(self):50 def test_job_files_in_local_txt(self):
50 local_lines = [line.strip() for line in open('jobs/local.txt.in','r')]51 with open('jobs/local.txt.in','rt') as stream:
52 local_lines = [line.strip() for line in stream]
51 local_jobfiles = [file for file in local_lines if "$CHECKBOX_SHARE/jobs" in file]53 local_jobfiles = [file for file in local_lines if "$CHECKBOX_SHARE/jobs" in file]
52 local_jobfiles = [re.search('\$CHECKBOX_SHARE\/(?P<job_file>jobs\/(.+)\.txt)\?.*',54 local_jobfiles = [re.search('\$CHECKBOX_SHARE\/(?P<job_file>jobs\/(.+)\.txt)\?.*',
53 file).group('job_file')+".in" for file in local_jobfiles]55 file).group('job_file')+".in" for file in local_jobfiles]
5456
=== modified file 'checkbox/user_interface.py'
--- checkbox/user_interface.py 2012-10-17 19:00:19 +0000
+++ checkbox/user_interface.py 2013-05-09 20:11:45 +0000
@@ -16,25 +16,20 @@
16# You should have received a copy of the GNU General Public License16# You should have received a copy of the GNU General Public License
17# along with Checkbox. If not, see <http://www.gnu.org/licenses/>.17# along with Checkbox. If not, see <http://www.gnu.org/licenses/>.
18#18#
19import re19import gettext
20import logging
20import os21import os
21import pwd22import pwd
22import sys23import re
23import logging
24import subprocess24import subprocess
25import webbrowser25import webbrowser
2626
27import gettext
28from gettext import gettext as _
29
30from checkbox.contrib.REThread import REThread27from checkbox.contrib.REThread import REThread
31
32from checkbox.lib.environ import (28from checkbox.lib.environ import (
33 add_variable,29 add_variable,
34 get_variable,30 get_variable,
35 remove_variable,31 remove_variable,
36 )32 )
37
38from checkbox.job import (33from checkbox.job import (
39 FAIL,34 FAIL,
40 PASS,35 PASS,
@@ -134,10 +129,10 @@
134 return129 return
135130
136 def show_text(self, text, previous=None, next=None):131 def show_text(self, text, previous=None, next=None):
137 return132 print(text)
138133
139 def show_entry(self, text, value, label=None, previous=None, next=None):134 def show_entry(self, text, value, label=None, showSubmitToHexr=False, previous=None, next=None):
140 return value135 return (value, False)
141136
142 def show_check(self, text, options=[], default=[]):137 def show_check(self, text, options=[], default=[]):
143 return default138 return default
144139
=== modified file 'checkbox/variables.py'
--- checkbox/variables.py 2012-06-01 15:45:08 +0000
+++ checkbox/variables.py 2013-05-09 20:11:45 +0000
@@ -215,7 +215,7 @@
215 for schema in self._schemas:215 for schema in self._schemas:
216 try:216 try:
217 # Only check that the value can be coerced217 # Only check that the value can be coerced
218 dummy = schema(value=value).get()218 schema(value=value).get()
219 return value219 return value
220 except ValueError:220 except ValueError:
221 pass221 pass
@@ -287,6 +287,7 @@
287def get_variable(obj, attribute):287def get_variable(obj, attribute):
288 return get_variables(obj)[attribute]288 return get_variables(obj)[attribute]
289289
290
290def get_variables(obj):291def get_variables(obj):
291 from checkbox.attribute import get_attributes292 from checkbox.attribute import get_attributes
292293
293294
=== modified file 'checkbox_cli/cli_interface.py'
--- checkbox_cli/cli_interface.py 2012-10-14 01:04:59 +0000
+++ checkbox_cli/cli_interface.py 2013-05-09 20:11:45 +0000
@@ -342,10 +342,10 @@
342 dialog = CLIChoiceDialog(text)342 dialog = CLIChoiceDialog(text)
343 dialog.run()343 dialog.run()
344344
345 def show_entry(self, text, value, label=None, previous=None, next=None):345 def show_entry(self, text, value, showSubmitToHexr=False, label=None, previous=None, next=None):
346 dialog = CLILineDialog(text)346 dialog = CLILineDialog(text)
347347
348 return dialog.run()348 return (dialog.run(), False)
349349
350 def show_check(self, text, options=[], default=[]):350 def show_check(self, text, options=[], default=[]):
351 dialog = CLIChoiceDialog(text)351 dialog = CLIChoiceDialog(text)
@@ -363,7 +363,7 @@
363 result = options[response]363 result = options[response]
364 self._toggle_results(result, options, results)364 self._toggle_results(result, options, results)
365365
366 return results366 return (results, False)
367367
368 def show_radio(self, text, options=[], default=None):368 def show_radio(self, text, options=[], default=None):
369 dialog = CLIChoiceDialog(text)369 dialog = CLIChoiceDialog(text)
370370
=== modified file 'checkbox_gtk/gtk_interface.py'
--- checkbox_gtk/gtk_interface.py 2012-06-12 15:03:42 +0000
+++ checkbox_gtk/gtk_interface.py 2013-05-09 20:11:45 +0000
@@ -288,7 +288,7 @@
288 self._set_button("button_next", next_state)288 self._set_button("button_next", next_state)
289289
290 @GTKHack290 @GTKHack
291 def show_entry(self, text, value, label=None, previous=None, next=None):291 def show_entry(self, text, value, showSubmitToHexr=False, label=None, previous=None, next=None):
292 #Reset window title292 #Reset window title
293 self._set_main_title()293 self._set_main_title()
294 # Set buttons294 # Set buttons
@@ -310,7 +310,7 @@
310310
311 entered_value = self._get_text("entry")311 entered_value = self._get_text("entry")
312 self._set_text("entry","")312 self._set_text("entry","")
313 return entered_value313 return (entered_value, False)
314314
315 @GTKHack315 @GTKHack
316 def show_check(self, text, options=[], default=[]):316 def show_check(self, text, options=[], default=[]):
317317
=== modified file 'checkbox_qt/qt_interface.py'
--- checkbox_qt/qt_interface.py 2012-09-27 15:27:01 +0000
+++ checkbox_qt/qt_interface.py 2013-05-09 20:11:45 +0000
@@ -111,7 +111,7 @@
111 self.qtiface.showText(text)111 self.qtiface.showText(text)
112 self.wait_on_signals(fullTestsClicked=onFullTestsClicked)112 self.wait_on_signals(fullTestsClicked=onFullTestsClicked)
113113
114 def show_entry(self, text, value, label='', previous=None, next=None):114 def show_entry(self, text, value, label='', showSubmitToHexr=False, previous=None, next=None):
115 def onSubmitTestsClicked():115 def onSubmitTestsClicked():
116 self.loop.quit()116 self.loop.quit()
117117
@@ -127,9 +127,9 @@
127 if value is None:127 if value is None:
128 value = ''128 value = ''
129129
130 self.qtiface.showEntry(text, value, label)130 self.qtiface.showEntry(text, value, label, showSubmitToHexr)
131 self.wait_on_signals(submitTestsClicked=onSubmitTestsClicked)131 self.wait_on_signals(submitTestsClicked=onSubmitTestsClicked)
132 return self.qtiface.getSubmissionData()132 return (self.qtiface.getSubmissionData(), self.qtiface.getSubmitToHexr())
133133
134 def show_check(self, text, options=[], default=[]):134 def show_check(self, text, options=[], default=[]):
135 return False135 return False
136136
=== modified file 'checkbox_urwid/urwid_interface.py'
--- checkbox_urwid/urwid_interface.py 2012-06-12 15:03:42 +0000
+++ checkbox_urwid/urwid_interface.py 2013-05-09 20:11:45 +0000
@@ -977,10 +977,10 @@
977 return dialog.response977 return dialog.response
978978
979979
980 def show_entry(self, text, value, label=None, previous=None, next=None):980 def show_entry(self, text, value, showSubmitToHexr=False, label=None, previous=None, next=None):
981 dialog = InputDialog(text).run()981 dialog = InputDialog(text).run()
982 self.direction = dialog.direction982 self.direction = dialog.direction
983 return dialog.response983 return (dialog.response, False)
984984
985985
986 def show_check(self, text, options=[], default=None):986 def show_check(self, text, options=[], default=None):
987987
=== added file 'data/whitelists/hwsubmit.whitelist'
--- data/whitelists/hwsubmit.whitelist 1970-01-01 00:00:00 +0000
+++ data/whitelists/hwsubmit.whitelist 2013-05-09 20:11:45 +0000
@@ -0,0 +1,24 @@
1cdimage
2cpuinfo
3device
4dmi
5dpkg
6gconf
7lsb
8meminfo
9module
10package
11uname
12usb
13__info__
14cpuinfo_attachment
15dmesg_attachment
16dmi_attachment
17dmidecode_attachment
18lsmod_attachment
19lspci_attachment
20modprobe_attachment
21modules_attachment
22sysfs_attachment
23sysctl_attachment
24udev_attachment
025
=== added file 'data/whitelists/sru.whitelist'
--- data/whitelists/sru.whitelist 1970-01-01 00:00:00 +0000
+++ data/whitelists/sru.whitelist 2013-05-09 20:11:45 +0000
@@ -0,0 +1,114 @@
1## This whitelist contains tests that are useful for validating a Stable
2## Release Update (SRU) on Ubuntu Certified systems. This whitelist is not
3## recommended for, nor will it be accepted for self-testing purposes.
4cpuinfo
5cdimage
6dmi
7dpkg
8efi
9environment
10gconf
11lsb
12meminfo
13memory_card
14module
15package
16device
17uname
18sleep
19block_device
20xinput
21#File Attachment Jobs
22__info__
23acpi_sleep_attachment
24codecs_attachment
25cpuinfo_attachment
26dmesg_attachment
27dmi_attachment
28dmidecode_attachment
29efi_attachment
30lspci_attachment
31meminfo_attachment
32modprobe_attachment
33modules_attachment
34sysctl_attachment
35sysfs_attachment
36udev_attachment
37lsmod_attachment
38#SRU Test Suite Jobs
39__audio__
40audio/alsa_record_playback_automated
41__bluetooth__
42bluetooth/detect-output
43__camera__
44camera/multiple-resolution-images
45__cpu__
46cpu/scaling_test
47cpu/scaling_test-log-attach
48cpu/offlining_test
49cpu/topology
50__disk__
51disk/read_performance
52disk/read_performance_.*
53__graphics__
54graphics/xorg-version
55graphics/compiz_check
56graphics/xorg-failsafe
57graphics/xorg-process
58graphics/screenshot
59screenshot.jpg
60graphics/screenshot_fullscreen_video
61screenshot_fullscreen_video.jpg
62__install__
63install/apt-get-gets-updates
64__mediacard__
65mediacard/sd-preinserted
66__memory__
67memory/info
68memory/check
69__networking__
70networking/detect
71networking/http
72networking/internet
73networking/ping
74__power-management__
75power-management/tickless_idle
76power-management/rtc
77power-management/fwts_wakealarm
78power-management/fwts_wakealarm-log-attach
79__usb__
80usb/detect
81usb/storage-preinserted
82__wireless__
83wireless/wireless_scanning
84wireless/wireless_connection_wpa_bg
85wireless/wireless_connection_open_bg
86wireless/wireless_connection_wpa_n
87wireless/wireless_connection_open_n
88wireless/monitor_wireless_connection_udp
89__suspend__
90suspend/audio_before_suspend
91suspend/bluetooth_obex_send_before_suspend
92suspend/bluetooth_obex_browse_before_suspend
93suspend/bluetooth_obex_get_before_suspend
94suspend/cpu_before_suspend
95suspend/network_before_suspend
96suspend/memory_before_suspend
97suspend/suspend_advanced_auto
98suspend/suspend-single-log-check
99suspend/audio_after_suspend_auto
100suspend/network_resume_time_auto
101suspend/wifi_resume_time_auto
102suspend/record_playback_after_suspend_auto
103suspend/bluetooth_obex_send_after_suspend_auto
104suspend/bluetooth_obex_browse_after_suspend_auto
105suspend/bluetooth_obex_get_after_suspend_auto
106suspend/cpu_after_suspend_auto
107suspend/memory_after_suspend_auto
108suspend/wireless_connection_after_suspend_wpa_bg_auto
109suspend/wireless_connection_after_suspend_open_bg_auto
110suspend/wireless_connection_after_suspend_wpa_n_auto
111suspend/wireless_connection_after_suspend_open_n_auto
112suspend/gpu_lockup_after_suspend
113suspend/screenshot_after_suspend
114screenshot_after_suspend.jpg
0115
=== modified file 'debian/changelog'
--- debian/changelog 2013-03-22 16:14:06 +0000
+++ debian/changelog 2013-05-09 20:11:45 +0000
@@ -1,3 +1,145 @@
1checkbox (0.16) saucy; urgency=low
2
3 * New upstream release (LP: #1178403):
4
5 * Launchpad automated translation updates
6
7 [ Jeff Lane ]
8 * scripts/cpu_offlining: Modified script to no longer offline cpu0 to resolve
9 a bug on ARM. Modified output so most of it is redirected to stderr for
10 fail cases, we don't need that much for success cases. (LP: #1078897)
11 * jobs/mediacard.txt.in: Modified test instructions to be less confusing
12 (LP: #970857)
13 * scripts/cpu_topology: define the cpuinfo nested dicts on creation rather
14 than define elements during parsing of /proc/cpuinfo (LP: #1111878)
15 * scripts/lsmod_info: Corrected error handling for the check_output() call to
16 trap the correct error. (LP: #1103647)
17 * jobs/camera.txt.in: removed an extraneous requres line for gir1.2
18 scripts/camera_test: added code to determine what version of gst we're
19 using and set video type and plugin accordingly. (LP: #1100594)
20 * scripts/network_check: added ability to specify custom target URL for
21 debugging failures (LP: #1128017)
22 * scripts/sleep_test_log_check: added new script to parse fwts logs for
23 errors
24 jobs/hibernate.txt.in, jobs/stress.txt.in, jobs/suspend.txt.in: added jobs
25 to use the sleep_test_log_check script after s3/s4 tests. Modified current
26 s3/s4 tests to use the new None fail level for fwts_test
27 scripts/fwts_test: no longer fails on fwts errors if "-f none" is chosen.
28 Now it should only fail by manual indication if the actual sleep action
29 fails. (LP: #1169922)
30 * scripts/bluetooth_test: test no longer generates odd Broken Pipe error when
31 the dpkg bit verifies obexftp is installed (LP: #1169488)
32 * jobs/networking.txt.in: fixed networking/info jobs that were not being run
33 because $output was being resolved too early (LP: #1065983)
34 * scripts/memory_compare: cleaned up the output to be more explanatory and
35 easier to visually parse (LP: #1072666)
36 * jobs/miscellanea.txt.in: Added jobs for manual verification of PXE boot and
37 remote IPMI to improve server test coverage.
38 * jobs/led.txt.in: Modified Jobs: led/power, led/wlan, led/wlan-disabled. New
39 jobs: led/power-blink-suspend, led/suspend, led/mute
40 jobs/keys.txt.in: modified keys/wireless
41 * plugins/lock_prompt.py: added a lock release to cleanly clear lock on stop.
42 plugins/persist_prompt.py: promoted save to run before lock release.
43 checkbox/lib/fifo.py: trap OSError exception at close when the input/output
44 fifo fds disappear before fifo.close() can get to them. (LP: #115561)
45 * jobs/info.txt.in: fixed bad driver name in audio_codecs job (LP: #1165215)
46 * jobs/mediacard.txt.in: reduce test file size for MMC to 64MB (LP: #1167214)
47 * jobs/led.txt.in, jobs/suspend.txt.in: removed bits about WLAN LED flashing
48 from the WLAN jobs as that no longer happens on data tx/rx (LP: #1157606)
49 * jobs/power-management.txt.in: added manual reboot and shutdown tests for
50 server and Xen testing. Took the opportunity to correct punctuation in the
51 descriptions or other manual jobs.
52 jobs/virtualization.txt.in: added virtualization/xen_ok and
53 virtualization/xen_check_vms jobs for Xen testing
54 scripts/xen_test: added script to perform Xen testing
55 * jobs/various: Changed the jobs that use removable_storage_watcher to
56 generate ~256MB files to combat problems where the files are cached and not
57 written directly to devices during test. (LP: #1149213)
58
59
60 [ Sylvain Pineau ]
61 * jobs/suspend.txt.in, scripts/gpu_test: Remove the need of running the script
62 with the root user, restore the workspaces switch and the HTML5 video
63 playback ; remove the extra suspend/resume (LP: #1172851)
64 * checkbox/parsers/udevadm.py: Only filter devices without product AND vendor
65 information (LP: #1167733)
66 * debian/control: Added python3-mock as a build dependency.
67 * debian/rules: Clean __pycache__ directory after running scripts unit tests.
68 * scripts/gputest_benchmark: Added a wrapper for the Geeks3D GpuTest
69 benchmark.
70 * jobs/benchmarks.txt.in: Added the corresponding GpuTest jobs (Furmark,
71 Gimark and Tessmark)
72
73 [ Brendan Donegan ]
74 * scripts/rendercheck_test - change nargs='+' to action='append' for blacklist
75 option so it works as expected.
76 jobs/rendercheck.txt.in - blacklist gradients test as it is known to produce
77 false positives. (LP: #1093718)
78 * plugins/hexr_transport.py - added plugin for submitting to HEXR and
79 certification based on certify_new_transport from checkbox-certification.
80 examples/checkbox-qt.ini - blacklisted hexr_transport as we won't use it
81 examples/checkbox-cli.ini - blacklisted hexr_transport as we won't use it
82 examples/checkbox-urwid.ini - blacklisted hexr_transport as we won't use it
83 * Add hidden 'Submit to HEXR' checkbox on submission screen, so that it can
84 be utilised in checkbox-certification.
85 * checkbox/user_interface.py - fixed keyword argument in show_entry.
86 checkbox_cli/cli_interface.py - return tuple as expected. (LP: #1173103)
87 * scripts/sources_test - modified script so that it takes sources list
88 location and repository list as arguments
89 * jobs/miscellanea.txt.in - provide REPOSITORY and SOURCES_LIST environment
90 variables to the sources_test script (LP: #1149288)
91 * Added mobile broadband tests and updated create_connection script to allow
92 creation of mobile broadband connections.
93 * scripts/rendercheck_test, scripts/graphics_stress_test,
94 jobs/rendercheck.txt.in, jobs/stress.txt.in - Allow blacklisting of
95 specific rendercheck tests and use this to exclude the 'repeat' test
96 from the set of rendercheck tests that run (LP: #1164566)
97 * jobs/benchmarks.txt.in - fix typo in command field of
98 benchmarks/graphics/globs job (LP: #1157615)
99 * data/whitelists/sru.whitelist - remove bluetooth_obex_before_suspend
100 as it is made redundant by browse/get/send (LP: #1155325)
101
102 [ Po-Hsu Lin ]
103 * jobs/led.txt.in: Modified the description of led/power-blink-suspend test to
104 cover more cases.
105 jobs/suspend.txt.in: Modified the description of suspend/suspend_advanced
106 test cover more cases. (LP: #1172108)
107 * jobs/monitor.txt.in: Modified the description of dim_brightness test to make
108 it consistent with the code. (LP: #1170244)
109
110 [ Daniel Manrique ]
111 * scripts/alsa_record_playback: Replaced alsasrc with autoaudiosrc
112 (LP: #1059544)
113 * checkbox/parsers/submission.py: Fixed incorrect context for memory
114 parsing, which resulted in absent memory information when parsing
115 xml files.
116 * scripts/glob_test: Fixed swapping of repetitions and time parameters.
117 jobs/benchmarks.txt.in: Set a 26 FPS threshold for passing globs
118 benchmark.
119 * Added sru.whitelist used to test stable release update kernels.
120
121 [ Jeff Marcom ]
122 * scripts/network: added new script for testing and retrieving information for
123 network interfaces.
124 * configs,examples/network.cfg: added config file
125 for network test configuration and setup
126 * scripts/virtualization - Fixes issue where console terminal would
127 remain hijacked by child kvm process (LP: #1164028)
128 * jobs/input.txt.in: Added manual check job for accelerometer hardware
129 * scripts/virtualization: Fixed issue where specifying test timeout via
130 vitualization.cfg was pulled in as a string rather than integer.
131 * scripts/virtualization: Added classmethod for generating cloud
132 config data based on ISO in use
133
134 [ Zygmunt Krynicki ]
135 * jobs/graphics.txt.in, jobs/suspend.txt.in: convert package resource
136 programs to be compatible with plainbox
137 * debian/control: add missing build dependency on python3-setuptools
138 * debian/control: add another missing build dependency on python-setuptools
139 (apparently needed because dh_auth_xxx) poke setup.py as python2)
140
141 -- Daniel Manrique <roadmr@ubuntu.com> Thu, 09 May 2013 14:39:23 -0400
142
1checkbox (0.15.5) raring; urgency=low143checkbox (0.15.5) raring; urgency=low
2144
3 * New upstream release (LP: #1158798) 145 * New upstream release (LP: #1158798)
4146
=== added file 'debian/checkbox-hw-collection.install'
--- debian/checkbox-hw-collection.install 1970-01-01 00:00:00 +0000
+++ debian/checkbox-hw-collection.install 2013-05-09 20:11:45 +0000
@@ -0,0 +1,2 @@
1usr/bin/checkbox-hw-collection
2usr/share/checkbox/examples/checkbox-hw-collection.ini
03
=== added file 'debian/checkbox-hw-collection.links'
--- debian/checkbox-hw-collection.links 1970-01-01 00:00:00 +0000
+++ debian/checkbox-hw-collection.links 2013-05-09 20:11:45 +0000
@@ -0,0 +1,1 @@
1usr/share/man/man1/checkbox.1.gz usr/share/man/man1/checkbox-hw-collection.1.gz
02
=== added file 'debian/checkbox-hw-collection.postinst'
--- debian/checkbox-hw-collection.postinst 1970-01-01 00:00:00 +0000
+++ debian/checkbox-hw-collection.postinst 2013-05-09 20:11:45 +0000
@@ -0,0 +1,7 @@
1#! /bin/sh -e
2
3base_package="checkbox"
4. /usr/share/debconf/confmodule
5. /usr/share/checkbox/install/postinst
6
7#DEBHELPER#
08
=== modified file 'debian/checkbox.install'
--- debian/checkbox.install 2012-07-12 16:35:37 +0000
+++ debian/checkbox.install 2013-05-09 20:11:45 +0000
@@ -10,6 +10,7 @@
10usr/share/checkbox/plugins/*10usr/share/checkbox/plugins/*
11usr/share/checkbox/report/*11usr/share/checkbox/report/*
12usr/share/checkbox/examples/checkbox.ini12usr/share/checkbox/examples/checkbox.ini
13usr/share/checkbox/examples/network.cfg
13usr/lib/python*/*-packages/checkbox/*14usr/lib/python*/*-packages/checkbox/*
14usr/lib/checkbox/bin/*15usr/lib/checkbox/bin/*
15usr/share/apport/package-hooks/source_checkbox.py16usr/share/apport/package-hooks/source_checkbox.py
1617
=== modified file 'debian/control'
--- debian/control 2013-01-09 21:20:03 +0000
+++ debian/control 2013-05-09 20:11:45 +0000
@@ -10,10 +10,13 @@
10 po-debconf,10 po-debconf,
11 python,11 python,
12 python-distutils-extra,12 python-distutils-extra,
13 python-setuptools,
14 python3-setuptools,
13 python3-all,15 python3-all,
14 python3-distutils-extra,16 python3-distutils-extra,
15 python3-gi,17 python3-gi,
16 python3-lxml,18 python3-lxml,
19 python3-mock,
17 python3-pkg-resources,20 python3-pkg-resources,
18 qt4-qmake21 qt4-qmake
19Vcs-Bzr: https://code.launchpad.net/~hardware-certification/checkbox/trunk22Vcs-Bzr: https://code.launchpad.net/~hardware-certification/checkbox/trunk
@@ -41,6 +44,7 @@
41Suggests: bonnie++,44Suggests: bonnie++,
42 bootchart,45 bootchart,
43 checkbox-cli | checkbox-gtk,46 checkbox-cli | checkbox-gtk,
47 curl,
44 ethtool,48 ethtool,
45 fwts,49 fwts,
46 git-core,50 git-core,
@@ -110,3 +114,12 @@
110 results can then be sent to Launchpad.114 results can then be sent to Launchpad.
111 .115 .
112 This package provides a QT4 interface for answering tests.116 This package provides a QT4 interface for answering tests.
117
118Package: checkbox-hw-collection
119Architecture: any
120Depends: checkbox (>= ${source:Version}),
121 ${misc:Depends}
122Description: CLI tool for collecting HW information from a system
123 .
124 This package provides a tool for collecting hardware information from
125 a system and sending it to the HEXR hardware database.
113126
=== modified file 'debian/po/ast.po'
--- debian/po/ast.po 2013-03-22 16:14:06 +0000
+++ debian/po/ast.po 2013-05-09 20:11:45 +0000
@@ -6,17 +6,16 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: checkbox\n"8"Project-Id-Version: checkbox\n"
9"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2012-09-21 11:25-0400\n"10"POT-Creation-Date: 2012-09-21 11:25-0400\n"
11"PO-Revision-Date: 2012-03-21 15:41+0000\n"11"PO-Revision-Date: 2012-03-21 15:41+0000\n"
12"Last-Translator: Xandru <xandru@softastur.org>\n"12"Last-Translator: Xandru <xandru@softastur.org>\n"
13"Language-Team: Asturian <ast@li.org>\n"13"Language-Team: Asturian <ast@li.org>\n"
14"Language: ast\n"
15"MIME-Version: 1.0\n"14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"16"Content-Transfer-Encoding: 8bit\n"
18"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"17"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
19"X-Generator: Launchpad (build 16506)\n"18"X-Generator: Launchpad (build 16580)\n"
2019
21#. Type: string20#. Type: string
22#. Description21#. Description
2322
=== modified file 'debian/po/cs.po'
--- debian/po/cs.po 2013-03-22 16:14:06 +0000
+++ debian/po/cs.po 2013-05-09 20:11:45 +0000
@@ -6,17 +6,16 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: checkbox\n"8"Project-Id-Version: checkbox\n"
9"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2012-09-21 11:25-0400\n"10"POT-Creation-Date: 2012-09-21 11:25-0400\n"
11"PO-Revision-Date: 2012-03-05 19:27+0000\n"11"PO-Revision-Date: 2012-03-05 19:27+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Czech <cs@li.org>\n"13"Language-Team: Czech <cs@li.org>\n"
14"Language: cs\n"
15"MIME-Version: 1.0\n"14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"16"Content-Transfer-Encoding: 8bit\n"
18"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"17"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
19"X-Generator: Launchpad (build 16506)\n"18"X-Generator: Launchpad (build 16580)\n"
2019
21#. Type: string20#. Type: string
22#. Description21#. Description
2322
=== modified file 'debian/po/de.po'
--- debian/po/de.po 2013-03-22 16:14:06 +0000
+++ debian/po/de.po 2013-05-09 20:11:45 +0000
@@ -6,17 +6,16 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: checkbox\n"8"Project-Id-Version: checkbox\n"
9"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2012-09-21 11:25-0400\n"10"POT-Creation-Date: 2012-09-21 11:25-0400\n"
11"PO-Revision-Date: 2012-10-06 22:02+0000\n"11"PO-Revision-Date: 2012-10-06 22:02+0000\n"
12"Last-Translator: Dennis Baudys <Unknown>\n"12"Last-Translator: Dennis Baudys <Unknown>\n"
13"Language-Team: German <de@li.org>\n"13"Language-Team: German <de@li.org>\n"
14"Language: de\n"
15"MIME-Version: 1.0\n"14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"16"Content-Transfer-Encoding: 8bit\n"
18"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"17"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
19"X-Generator: Launchpad (build 16506)\n"18"X-Generator: Launchpad (build 16580)\n"
2019
21#. Type: string20#. Type: string
22#. Description21#. Description
@@ -204,7 +203,8 @@
204#. Description203#. Description
205#: ../checkbox.templates:15001204#: ../checkbox.templates:15001
206msgid "The SSID of the 802.11n router with open security."205msgid "The SSID of the 802.11n router with open security."
207msgstr "Die SSID des 802.11n-Routers mit »Open«-Sicherheitsmodell (unsicher)."206msgstr ""
207"Die SSID des 802.11n-Routers mit »Open«-Sicherheitsmodell (unsicher)."
208208
209#. Type: string209#. Type: string
210#. Description210#. Description
211211
=== modified file 'debian/po/en_AU.po'
--- debian/po/en_AU.po 2013-03-22 16:14:06 +0000
+++ debian/po/en_AU.po 2013-05-09 20:11:45 +0000
@@ -6,17 +6,16 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: checkbox\n"8"Project-Id-Version: checkbox\n"
9"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2012-09-21 11:25-0400\n"10"POT-Creation-Date: 2012-09-21 11:25-0400\n"
11"PO-Revision-Date: 2011-07-21 02:39+0000\n"11"PO-Revision-Date: 2011-07-21 02:39+0000\n"
12"Last-Translator: Jared Norris <jrnorris@gmail.com>\n"12"Last-Translator: Jared Norris <jrnorris@gmail.com>\n"
13"Language-Team: English (Australia) <en_AU@li.org>\n"13"Language-Team: English (Australia) <en_AU@li.org>\n"
14"Language: \n"
15"MIME-Version: 1.0\n"14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"16"Content-Transfer-Encoding: 8bit\n"
18"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"17"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
19"X-Generator: Launchpad (build 16506)\n"18"X-Generator: Launchpad (build 16580)\n"
2019
21#. Type: string20#. Type: string
22#. Description21#. Description
2322
=== modified file 'debian/po/en_GB.po'
--- debian/po/en_GB.po 2013-03-22 16:14:06 +0000
+++ debian/po/en_GB.po 2013-05-09 20:11:45 +0000
@@ -6,17 +6,16 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: checkbox\n"8"Project-Id-Version: checkbox\n"
9"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2012-09-21 11:25-0400\n"10"POT-Creation-Date: 2012-09-21 11:25-0400\n"
11"PO-Revision-Date: 2012-09-26 09:33+0000\n"11"PO-Revision-Date: 2012-09-26 09:33+0000\n"
12"Last-Translator: Biffaboy <Unknown>\n"12"Last-Translator: Biffaboy <Unknown>\n"
13"Language-Team: English (United Kingdom) <en_GB@li.org>\n"13"Language-Team: English (United Kingdom) <en_GB@li.org>\n"
14"Language: \n"
15"MIME-Version: 1.0\n"14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"16"Content-Transfer-Encoding: 8bit\n"
18"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"17"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
19"X-Generator: Launchpad (build 16506)\n"18"X-Generator: Launchpad (build 16580)\n"
2019
21#. Type: string20#. Type: string
22#. Description21#. Description
2322
=== modified file 'debian/po/es.po'
--- debian/po/es.po 2013-03-22 16:14:06 +0000
+++ debian/po/es.po 2013-05-09 20:11:45 +0000
@@ -6,17 +6,16 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: checkbox\n"8"Project-Id-Version: checkbox\n"
9"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2012-09-21 11:25-0400\n"10"POT-Creation-Date: 2012-09-21 11:25-0400\n"
11"PO-Revision-Date: 2012-09-21 18:40+0000\n"11"PO-Revision-Date: 2012-09-21 18:40+0000\n"
12"Last-Translator: Daniel Manrique <daniel.manrique@canonical.com>\n"12"Last-Translator: Daniel Manrique <daniel.manrique@canonical.com>\n"
13"Language-Team: Spanish <es@li.org>\n"13"Language-Team: Spanish <es@li.org>\n"
14"Language: es\n"
15"MIME-Version: 1.0\n"14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"16"Content-Transfer-Encoding: 8bit\n"
18"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"17"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
19"X-Generator: Launchpad (build 16506)\n"18"X-Generator: Launchpad (build 16580)\n"
2019
21#. Type: string20#. Type: string
22#. Description21#. Description
@@ -42,7 +41,8 @@
42#. Description41#. Description
43#: ../checkbox.templates:200142#: ../checkbox.templates:2001
44msgid "List of jobs to run when testing with checkbox."43msgid "List of jobs to run when testing with checkbox."
45msgstr "Lista de tareas a ejecutar mientras se realizan pruebas con checkbox."44msgstr ""
45"Lista de tareas a ejecutar mientras se realizan pruebas con checkbox."
4646
47#. Type: string47#. Type: string
48#. Description48#. Description
@@ -151,7 +151,8 @@
151#. Description151#. Description
152#: ../checkbox.templates:11001152#: ../checkbox.templates:11001
153msgid "The PSK of the 802.11b/g router with WPA security."153msgid "The PSK of the 802.11b/g router with WPA security."
154msgstr "Llave de encriptación (PSK) del enrutador 802.11b/g con seguridad WPA."154msgstr ""
155"Llave de encriptación (PSK) del enrutador 802.11b/g con seguridad WPA."
155156
156#. Type: string157#. Type: string
157#. Description158#. Description
158159
=== modified file 'debian/po/fr.po'
--- debian/po/fr.po 2013-03-22 16:14:06 +0000
+++ debian/po/fr.po 2013-05-09 20:11:45 +0000
@@ -6,17 +6,16 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: checkbox\n"8"Project-Id-Version: checkbox\n"
9"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2012-09-21 11:25-0400\n"10"POT-Creation-Date: 2012-09-21 11:25-0400\n"
11"PO-Revision-Date: 2012-09-25 09:16+0000\n"11"PO-Revision-Date: 2012-09-25 09:16+0000\n"
12"Last-Translator: Sylvie Gallet <Unknown>\n"12"Last-Translator: Sylvie Gallet <Unknown>\n"
13"Language-Team: French <fr@li.org>\n"13"Language-Team: French <fr@li.org>\n"
14"Language: fr\n"
15"MIME-Version: 1.0\n"14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"16"Content-Transfer-Encoding: 8bit\n"
18"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"17"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
19"X-Generator: Launchpad (build 16506)\n"18"X-Generator: Launchpad (build 16580)\n"
2019
21#. Type: string20#. Type: string
22#. Description21#. Description
2322
=== modified file 'debian/po/gl.po'
--- debian/po/gl.po 2013-03-22 16:14:06 +0000
+++ debian/po/gl.po 2013-05-09 20:11:45 +0000
@@ -6,17 +6,16 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: checkbox\n"8"Project-Id-Version: checkbox\n"
9"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2012-09-21 11:25-0400\n"10"POT-Creation-Date: 2012-09-21 11:25-0400\n"
11"PO-Revision-Date: 2012-10-03 21:33+0000\n"11"PO-Revision-Date: 2012-10-03 21:33+0000\n"
12"Last-Translator: Antón Méixome <meixome@gmail.com>\n"12"Last-Translator: Antón Méixome <meixome@gmail.com>\n"
13"Language-Team: Galician <gl@li.org>\n"13"Language-Team: Galician <gl@li.org>\n"
14"Language: gl\n"
15"MIME-Version: 1.0\n"14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"16"Content-Transfer-Encoding: 8bit\n"
18"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"17"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
19"X-Generator: Launchpad (build 16506)\n"18"X-Generator: Launchpad (build 16580)\n"
2019
21#. Type: string20#. Type: string
22#. Description21#. Description
2322
=== modified file 'debian/po/he.po'
--- debian/po/he.po 2013-03-22 16:14:06 +0000
+++ debian/po/he.po 2013-05-09 20:11:45 +0000
@@ -6,17 +6,16 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: checkbox\n"8"Project-Id-Version: checkbox\n"
9"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2012-09-21 11:25-0400\n"10"POT-Creation-Date: 2012-09-21 11:25-0400\n"
11"PO-Revision-Date: 2011-07-26 09:45+0000\n"11"PO-Revision-Date: 2011-07-26 09:45+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Hebrew <he@li.org>\n"13"Language-Team: Hebrew <he@li.org>\n"
14"Language: he\n"
15"MIME-Version: 1.0\n"14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"16"Content-Transfer-Encoding: 8bit\n"
18"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"17"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
19"X-Generator: Launchpad (build 16506)\n"18"X-Generator: Launchpad (build 16580)\n"
2019
21#. Type: string20#. Type: string
22#. Description21#. Description
2322
=== modified file 'debian/po/hu.po'
--- debian/po/hu.po 2013-03-22 16:14:06 +0000
+++ debian/po/hu.po 2013-05-09 20:11:45 +0000
@@ -6,17 +6,16 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: checkbox\n"8"Project-Id-Version: checkbox\n"
9"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2012-09-21 11:25-0400\n"10"POT-Creation-Date: 2012-09-21 11:25-0400\n"
11"PO-Revision-Date: 2011-07-18 12:57+0000\n"11"PO-Revision-Date: 2011-07-18 12:57+0000\n"
12"Last-Translator: Richard Somlói <ricsipontaz@gmail.com>\n"12"Last-Translator: Richard Somlói <ricsipontaz@gmail.com>\n"
13"Language-Team: Hungarian <hu@li.org>\n"13"Language-Team: Hungarian <hu@li.org>\n"
14"Language: hu\n"
15"MIME-Version: 1.0\n"14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"16"Content-Transfer-Encoding: 8bit\n"
18"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"17"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
19"X-Generator: Launchpad (build 16506)\n"18"X-Generator: Launchpad (build 16580)\n"
2019
21#. Type: string20#. Type: string
22#. Description21#. Description
2322
=== modified file 'debian/po/id.po'
--- debian/po/id.po 2013-03-22 16:14:06 +0000
+++ debian/po/id.po 2013-05-09 20:11:45 +0000
@@ -6,17 +6,16 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: checkbox\n"8"Project-Id-Version: checkbox\n"
9"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2012-09-21 11:25-0400\n"10"POT-Creation-Date: 2012-09-21 11:25-0400\n"
11"PO-Revision-Date: 2012-08-13 10:30+0000\n"11"PO-Revision-Date: 2012-08-13 10:30+0000\n"
12"Last-Translator: Mei Hua Song <Unknown>\n"12"Last-Translator: Mei Hua Song <Unknown>\n"
13"Language-Team: Indonesian <id@li.org>\n"13"Language-Team: Indonesian <id@li.org>\n"
14"Language: id\n"
15"MIME-Version: 1.0\n"14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"16"Content-Transfer-Encoding: 8bit\n"
18"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"17"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
19"X-Generator: Launchpad (build 16506)\n"18"X-Generator: Launchpad (build 16580)\n"
2019
21#. Type: string20#. Type: string
22#. Description21#. Description
2322
=== modified file 'debian/po/it.po'
--- debian/po/it.po 2013-03-22 16:14:06 +0000
+++ debian/po/it.po 2013-05-09 20:11:45 +0000
@@ -6,17 +6,16 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: checkbox\n"8"Project-Id-Version: checkbox\n"
9"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2012-09-21 11:25-0400\n"10"POT-Creation-Date: 2012-09-21 11:25-0400\n"
11"PO-Revision-Date: 2011-09-22 14:07+0000\n"11"PO-Revision-Date: 2011-09-22 14:07+0000\n"
12"Last-Translator: Sergio Zanchetta <primes2h@ubuntu.com>\n"12"Last-Translator: Sergio Zanchetta <primes2h@ubuntu.com>\n"
13"Language-Team: Italian <it@li.org>\n"13"Language-Team: Italian <it@li.org>\n"
14"Language: it\n"
15"MIME-Version: 1.0\n"14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"16"Content-Transfer-Encoding: 8bit\n"
18"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"17"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
19"X-Generator: Launchpad (build 16506)\n"18"X-Generator: Launchpad (build 16580)\n"
2019
21#. Type: string20#. Type: string
22#. Description21#. Description
2322
=== modified file 'debian/po/ja.po'
--- debian/po/ja.po 2013-03-22 16:14:06 +0000
+++ debian/po/ja.po 2013-05-09 20:11:45 +0000
@@ -6,17 +6,16 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: checkbox\n"8"Project-Id-Version: checkbox\n"
9"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2012-09-21 11:25-0400\n"10"POT-Creation-Date: 2012-09-21 11:25-0400\n"
11"PO-Revision-Date: 2011-07-25 17:03+0000\n"11"PO-Revision-Date: 2011-07-25 17:03+0000\n"
12"Last-Translator: Fumihito YOSHIDA <hito@kugutsu.org>\n"12"Last-Translator: Fumihito YOSHIDA <hito@kugutsu.org>\n"
13"Language-Team: Japanese <ja@li.org>\n"13"Language-Team: Japanese <ja@li.org>\n"
14"Language: ja\n"
15"MIME-Version: 1.0\n"14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"16"Content-Transfer-Encoding: 8bit\n"
18"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"17"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
19"X-Generator: Launchpad (build 16506)\n"18"X-Generator: Launchpad (build 16580)\n"
2019
21#. Type: string20#. Type: string
22#. Description21#. Description
2322
=== modified file 'debian/po/nl.po'
--- debian/po/nl.po 2013-03-22 16:14:06 +0000
+++ debian/po/nl.po 2013-05-09 20:11:45 +0000
@@ -6,17 +6,16 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: checkbox\n"8"Project-Id-Version: checkbox\n"
9"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2012-09-21 11:25-0400\n"10"POT-Creation-Date: 2012-09-21 11:25-0400\n"
11"PO-Revision-Date: 2011-08-17 12:02+0000\n"11"PO-Revision-Date: 2011-08-17 12:02+0000\n"
12"Last-Translator: Rachid <Unknown>\n"12"Last-Translator: Rachid <Unknown>\n"
13"Language-Team: Dutch <nl@li.org>\n"13"Language-Team: Dutch <nl@li.org>\n"
14"Language: nl\n"
15"MIME-Version: 1.0\n"14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"16"Content-Transfer-Encoding: 8bit\n"
18"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"17"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
19"X-Generator: Launchpad (build 16506)\n"18"X-Generator: Launchpad (build 16580)\n"
2019
21#. Type: string20#. Type: string
22#. Description21#. Description
2322
=== modified file 'debian/po/oc.po'
--- debian/po/oc.po 2013-03-22 16:14:06 +0000
+++ debian/po/oc.po 2013-05-09 20:11:45 +0000
@@ -6,17 +6,16 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: checkbox\n"8"Project-Id-Version: checkbox\n"
9"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2012-09-21 11:25-0400\n"10"POT-Creation-Date: 2012-09-21 11:25-0400\n"
11"PO-Revision-Date: 2012-02-24 07:45+0000\n"11"PO-Revision-Date: 2012-02-24 07:45+0000\n"
12"Last-Translator: Cédric VALMARY (Tot en òc) <cvalmary@yahoo.fr>\n"12"Last-Translator: Cédric VALMARY (Tot en òc) <cvalmary@yahoo.fr>\n"
13"Language-Team: Occitan (post 1500) <oc@li.org>\n"13"Language-Team: Occitan (post 1500) <oc@li.org>\n"
14"Language: \n"
15"MIME-Version: 1.0\n"14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"16"Content-Transfer-Encoding: 8bit\n"
18"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"17"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
19"X-Generator: Launchpad (build 16506)\n"18"X-Generator: Launchpad (build 16580)\n"
2019
21#. Type: string20#. Type: string
22#. Description21#. Description
2322
=== modified file 'debian/po/pl.po'
--- debian/po/pl.po 2013-03-22 16:14:06 +0000
+++ debian/po/pl.po 2013-05-09 20:11:45 +0000
@@ -6,17 +6,16 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: checkbox\n"8"Project-Id-Version: checkbox\n"
9"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2012-09-21 11:25-0400\n"10"POT-Creation-Date: 2012-09-21 11:25-0400\n"
11"PO-Revision-Date: 2011-07-18 21:11+0000\n"11"PO-Revision-Date: 2011-07-18 21:11+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Polish <pl@li.org>\n"13"Language-Team: Polish <pl@li.org>\n"
14"Language: pl\n"
15"MIME-Version: 1.0\n"14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"16"Content-Transfer-Encoding: 8bit\n"
18"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"17"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
19"X-Generator: Launchpad (build 16506)\n"18"X-Generator: Launchpad (build 16580)\n"
2019
21#. Type: string20#. Type: string
22#. Description21#. Description
2322
=== modified file 'debian/po/pt_BR.po'
--- debian/po/pt_BR.po 2013-03-22 16:14:06 +0000
+++ debian/po/pt_BR.po 2013-05-09 20:11:45 +0000
@@ -6,17 +6,16 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: checkbox\n"8"Project-Id-Version: checkbox\n"
9"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2012-09-21 11:25-0400\n"10"POT-Creation-Date: 2012-09-21 11:25-0400\n"
11"PO-Revision-Date: 2012-05-12 03:33+0000\n"11"PO-Revision-Date: 2012-05-12 03:33+0000\n"
12"Last-Translator: eniomarconcini <Unknown>\n"12"Last-Translator: eniomarconcini <Unknown>\n"
13"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"13"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
14"Language: pt_BR\n"
15"MIME-Version: 1.0\n"14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"16"Content-Transfer-Encoding: 8bit\n"
18"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"17"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
19"X-Generator: Launchpad (build 16506)\n"18"X-Generator: Launchpad (build 16580)\n"
2019
21#. Type: string20#. Type: string
22#. Description21#. Description
2322
=== modified file 'debian/po/ro.po'
--- debian/po/ro.po 2013-03-22 16:14:06 +0000
+++ debian/po/ro.po 2013-05-09 20:11:45 +0000
@@ -6,17 +6,16 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: checkbox\n"8"Project-Id-Version: checkbox\n"
9"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2012-09-21 11:25-0400\n"10"POT-Creation-Date: 2012-09-21 11:25-0400\n"
11"PO-Revision-Date: 2011-10-27 20:38+0000\n"11"PO-Revision-Date: 2011-10-27 20:38+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Romanian <ro@li.org>\n"13"Language-Team: Romanian <ro@li.org>\n"
14"Language: ro\n"
15"MIME-Version: 1.0\n"14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"16"Content-Transfer-Encoding: 8bit\n"
18"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"17"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
19"X-Generator: Launchpad (build 16506)\n"18"X-Generator: Launchpad (build 16580)\n"
2019
21#. Type: string20#. Type: string
22#. Description21#. Description
2322
=== modified file 'debian/po/ru.po'
--- debian/po/ru.po 2013-03-22 16:14:06 +0000
+++ debian/po/ru.po 2013-05-09 20:11:45 +0000
@@ -6,17 +6,16 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: checkbox\n"8"Project-Id-Version: checkbox\n"
9"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2012-09-21 11:25-0400\n"10"POT-Creation-Date: 2012-09-21 11:25-0400\n"
11"PO-Revision-Date: 2011-07-18 12:09+0000\n"11"PO-Revision-Date: 2011-07-18 12:09+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Russian <ru@li.org>\n"13"Language-Team: Russian <ru@li.org>\n"
14"Language: ru\n"
15"MIME-Version: 1.0\n"14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"16"Content-Transfer-Encoding: 8bit\n"
18"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"17"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
19"X-Generator: Launchpad (build 16506)\n"18"X-Generator: Launchpad (build 16580)\n"
2019
21#. Type: string20#. Type: string
22#. Description21#. Description
2322
=== modified file 'debian/po/tr.po'
--- debian/po/tr.po 2013-03-22 16:14:06 +0000
+++ debian/po/tr.po 2013-05-09 20:11:45 +0000
@@ -6,17 +6,16 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: checkbox\n"8"Project-Id-Version: checkbox\n"
9"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2012-09-21 11:25-0400\n"10"POT-Creation-Date: 2012-09-21 11:25-0400\n"
11"PO-Revision-Date: 2012-05-18 12:51+0000\n"11"PO-Revision-Date: 2012-05-18 12:51+0000\n"
12"Last-Translator: Hasan Yılmaz <iletisim@hasanyilmaz.net>\n"12"Last-Translator: Hasan Yılmaz <iletisim@hasanyilmaz.net>\n"
13"Language-Team: Turkish <tr@li.org>\n"13"Language-Team: Turkish <tr@li.org>\n"
14"Language: tr\n"
15"MIME-Version: 1.0\n"14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"16"Content-Transfer-Encoding: 8bit\n"
18"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"17"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
19"X-Generator: Launchpad (build 16506)\n"18"X-Generator: Launchpad (build 16580)\n"
2019
21#. Type: string20#. Type: string
22#. Description21#. Description
2322
=== modified file 'debian/po/uk.po'
--- debian/po/uk.po 2013-03-22 16:14:06 +0000
+++ debian/po/uk.po 2013-05-09 20:11:45 +0000
@@ -6,17 +6,16 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: checkbox\n"8"Project-Id-Version: checkbox\n"
9"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2012-09-21 11:25-0400\n"10"POT-Creation-Date: 2012-09-21 11:25-0400\n"
11"PO-Revision-Date: 2012-01-21 07:24+0000\n"11"PO-Revision-Date: 2012-01-21 07:24+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Ukrainian <uk@li.org>\n"13"Language-Team: Ukrainian <uk@li.org>\n"
14"Language: uk\n"
15"MIME-Version: 1.0\n"14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"16"Content-Transfer-Encoding: 8bit\n"
18"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"17"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
19"X-Generator: Launchpad (build 16506)\n"18"X-Generator: Launchpad (build 16580)\n"
2019
21#. Type: string20#. Type: string
22#. Description21#. Description
2322
=== modified file 'debian/po/zh_CN.po'
--- debian/po/zh_CN.po 2013-03-22 16:14:06 +0000
+++ debian/po/zh_CN.po 2013-05-09 20:11:45 +0000
@@ -6,17 +6,16 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: checkbox\n"8"Project-Id-Version: checkbox\n"
9"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2012-09-21 11:25-0400\n"10"POT-Creation-Date: 2012-09-21 11:25-0400\n"
11"PO-Revision-Date: 2012-05-09 02:09+0000\n"11"PO-Revision-Date: 2012-05-09 02:09+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"13"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
14"Language: \n"
15"MIME-Version: 1.0\n"14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"16"Content-Transfer-Encoding: 8bit\n"
18"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"17"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
19"X-Generator: Launchpad (build 16506)\n"18"X-Generator: Launchpad (build 16580)\n"
2019
21#. Type: string20#. Type: string
22#. Description21#. Description
2322
=== modified file 'debian/po/zh_TW.po'
--- debian/po/zh_TW.po 2013-03-22 16:14:06 +0000
+++ debian/po/zh_TW.po 2013-05-09 20:11:45 +0000
@@ -6,17 +6,16 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: checkbox\n"8"Project-Id-Version: checkbox\n"
9"Report-Msgid-Bugs-To: checkbox@packages.debian.org\n"9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10"POT-Creation-Date: 2012-09-21 11:25-0400\n"10"POT-Creation-Date: 2012-09-21 11:25-0400\n"
11"PO-Revision-Date: 2011-07-26 15:03+0000\n"11"PO-Revision-Date: 2011-07-26 15:03+0000\n"
12"Last-Translator: Cheng-Chia Tseng <pswo10680@gmail.com>\n"12"Last-Translator: Cheng-Chia Tseng <pswo10680@gmail.com>\n"
13"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"13"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
14"Language: \n"
15"MIME-Version: 1.0\n"14"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"15"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"16"Content-Transfer-Encoding: 8bit\n"
18"X-Launchpad-Export-Date: 2013-02-23 04:42+0000\n"17"X-Launchpad-Export-Date: 2013-05-01 04:40+0000\n"
19"X-Generator: Launchpad (build 16506)\n"18"X-Generator: Launchpad (build 16580)\n"
2019
21#. Type: string20#. Type: string
22#. Description21#. Description
2322
=== modified file 'debian/rules'
--- debian/rules 2012-10-11 20:12:47 +0000
+++ debian/rules 2013-05-09 20:11:45 +0000
@@ -20,6 +20,7 @@
20 # drop LD_PRELOAD to avoid running under fakeroot; drop TMPDIR to work20 # drop LD_PRELOAD to avoid running under fakeroot; drop TMPDIR to work
21 # around LP#972324 (set by autopkgtest)21 # around LP#972324 (set by autopkgtest)
22 env -u LD_PRELOAD -u TMPDIR CHECKBOX_PACKAGING=1 ./test22 env -u LD_PRELOAD -u TMPDIR CHECKBOX_PACKAGING=1 ./test
23 rm -rf scripts/__pycache__
23endif 24endif
2425
25override_dh_installdeb:26override_dh_installdeb:
2627
=== modified file 'examples/checkbox-cli.ini'
--- examples/checkbox-cli.ini 2008-09-01 01:32:14 +0000
+++ examples/checkbox-cli.ini 2013-05-09 20:11:45 +0000
@@ -12,3 +12,6 @@
12# Class implementing the UserInterface interface.12# Class implementing the UserInterface interface.
13interface_class = CLIInterface13interface_class = CLIInterface
1414
15[checkbox/plugins]
16
17blacklist = hexr_prompt hexr_transport
1518
=== added file 'examples/checkbox-hw-collection.ini'
--- examples/checkbox-hw-collection.ini 1970-01-01 00:00:00 +0000
+++ examples/checkbox-hw-collection.ini 2013-05-09 20:11:45 +0000
@@ -0,0 +1,18 @@
1[DEFAULT]
2
3# Space separated list of files to include as a dependency
4includes = %(checkbox_share)s/configs/checkbox.ini
5
6[checkbox/plugins/user_interface]
7
8# Module where the user interface implementation is defined.
9interface_module = checkbox.user_interface
10
11# Class implementing the UserInterface interface.
12interface_class = UserInterface
13
14[checkbox/plugins/intro_prompt]
15welcome_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.
16
17[checkbox/plugins]
18blacklist = launchpad_prompt launchpad_exchange final_prompt
019
=== modified file 'examples/checkbox-qt.ini'
--- examples/checkbox-qt.ini 2012-05-16 11:36:56 +0000
+++ examples/checkbox-qt.ini 2013-05-09 20:11:45 +0000
@@ -14,3 +14,7 @@
1414
15# Path where qt files are stored.15# Path where qt files are stored.
16data_path = %(checkbox_share)s/qt16data_path = %(checkbox_share)s/qt
17
18[checkbox/plugins]
19
20blacklist = hexr_prompt hexr_transport
1721
=== modified file 'examples/checkbox-urwid.ini'
--- examples/checkbox-urwid.ini 2010-05-20 09:00:22 +0000
+++ examples/checkbox-urwid.ini 2013-05-09 20:11:45 +0000
@@ -12,3 +12,6 @@
12# Class implementing the UserInterface interface.12# Class implementing the UserInterface interface.
13interface_class = UrwidInterface13interface_class = UrwidInterface
1414
15[checkbox/plugins]
16
17blacklist = hexr_prompt hexr_transport
1518
=== added file 'examples/network.cfg'
--- examples/network.cfg 1970-01-01 00:00:00 +0000
+++ examples/network.cfg 2013-05-09 20:11:45 +0000
@@ -0,0 +1,4 @@
1[FTP]
2Target: canonical.com
3User: anonymous
4Pass:
05
=== modified file 'jobs/audio.txt.in'
--- jobs/audio.txt.in 2012-12-03 22:24:40 +0000
+++ jobs/audio.txt.in 2013-05-09 20:11:45 +0000
@@ -68,6 +68,7 @@
68 device.category == 'AUDIO'68 device.category == 'AUDIO'
69 package.name == 'alsa-base'69 package.name == 'alsa-base'
70 package.name == 'pulseaudio-utils'70 package.name == 'pulseaudio-utils'
71 package.name == 'gstreamer1.0-plugins-good' or package.name == 'gstreamer0.10-plugins-good'
71command: 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_CODE72command: 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
72_description:73_description:
73 PURPOSE:74 PURPOSE:
@@ -86,6 +87,7 @@
86 device.category == 'AUDIO'87 device.category == 'AUDIO'
87 package.name == 'alsa-base'88 package.name == 'alsa-base'
88 package.name == 'pulseaudio-utils'89 package.name == 'pulseaudio-utils'
90 package.name == 'gstreamer1.0-plugins-good' or package.name == 'gstreamer0.10-plugins-good'
89command: 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_CODE91command: 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
90_description:92_description:
91 PURPOSE:93 PURPOSE:
@@ -103,6 +105,7 @@
103 device.category == 'AUDIO'105 device.category == 'AUDIO'
104 package.name == 'alsa-base'106 package.name == 'alsa-base'
105 package.name == 'pulseaudio-utils'107 package.name == 'pulseaudio-utils'
108 package.name == 'gstreamer1.0-plugins-good' or package.name == 'gstreamer0.10-plugins-good'
106command: 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_CODE109command: 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
107_description:110_description:
108 PURPOSE:111 PURPOSE:
@@ -202,6 +205,7 @@
202 device.category == 'AUDIO'205 device.category == 'AUDIO'
203 package.name == 'alsa-base'206 package.name == 'alsa-base'
204 package.name == 'pulseaudio-utils'207 package.name == 'pulseaudio-utils'
208 package.name == 'gstreamer1.0-plugins-good' or package.name == 'gstreamer0.10-plugins-good'
205command: 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_CODE209command: 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
206_description:210_description:
207 PURPOSE:211 PURPOSE:
208212
=== modified file 'jobs/benchmarks.txt.in'
--- jobs/benchmarks.txt.in 2012-10-09 15:21:35 +0000
+++ jobs/benchmarks.txt.in 2013-05-09 20:11:45 +0000
@@ -83,6 +83,14 @@
83_description: Run GLmark2 benchmark83_description: Run GLmark2 benchmark
8484
85plugin: shell85plugin: shell
86name: benchmarks/graphics/globs
87requires:
88 package.name == 'globs'
89 cpuinfo.platform in ("i386", "x86_64")
90command: glob_test --min-fps=26 --ignore-problems
91_description: Run globs benchmark
92
93plugin: shell
86name: benchmarks/graphics/unigine-sanctuary94name: benchmarks/graphics/unigine-sanctuary
87requires: package.name == 'phoronix-test-suite'95requires: package.name == 'phoronix-test-suite'
88command: pts_run unigine-sanctuary96command: pts_run unigine-sanctuary
@@ -213,3 +221,63 @@
213requires: package.name == 'sysstat'221requires: package.name == 'sysstat'
214command: 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),"%")'222command: 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),"%")'
215_description: Disk utilization on an idle system.223_description: Disk utilization on an idle system.
224
225plugin: shell
226name: benchmarks/graphics/gputest_furmark_fullscreen_1920x1080
227requires:
228 package.name == 'gputest'
229 cpuinfo.platform == 'x86_64'
230command: gputest_benchmark fur --width 1920 --height 1080 -f
231_description:
232 Run a stress test based on FurMark (OpenGL 2.1 or 3.2)
233 Fullscreen 1920x1080 no antialiasing
234
235plugin: shell
236name: benchmarks/graphics/gputest_furmark_windowed_1024x640
237requires:
238 package.name == 'gputest'
239 cpuinfo.platform == 'x86_64'
240command: gputest_benchmark fur
241_description:
242 Run a stress test based on FurMark (OpenGL 2.1 or 3.2)
243 Windowed 1024x640 no antialiasing
244
245plugin: shell
246name: benchmarks/graphics/gputest_gimark_fullscreen_1920x1080
247requires:
248 package.name == 'gputest'
249 cpuinfo.platform == 'x86_64'
250command: gputest_benchmark gi --width 1920 --height 1080 -f
251_description:
252 Run GiMark, a geometry instancing test (OpenGL 3.3)
253 Fullscreen 1920x1080 no antialiasing
254
255plugin: shell
256name: benchmarks/graphics/gputest_gimark_windowed_1024x640
257requires:
258 package.name == 'gputest'
259 cpuinfo.platform == 'x86_64'
260command: gputest_benchmark gi
261_description:
262 Run GiMark, a geometry instancing test (OpenGL 3.3)
263 Windowed 1024x640 no antialiasing
264
265plugin: shell
266name: benchmarks/graphics/gputest_tessmark_fullscreen_1920x1080
267requires:
268 package.name == 'gputest'
269 cpuinfo.platform == 'x86_64'
270command: gputest_benchmark tess --width 1920 --height 1080 -f
271_description:
272 Run a tessellation test based on TessMark (OpenGL 4.0)
273 Fullscreen 1920x1080 no antialiasing
274
275plugin: shell
276name: benchmarks/graphics/gputest_tessmark_windowed_1024x640
277requires:
278 package.name == 'gputest'
279 cpuinfo.platform == 'x86_64'
280command: gputest_benchmark tess
281_description:
282 Run a tessellation test based on TessMark (OpenGL 4.0)
283 Windowed 1024x640 no antialiasing
216284
=== modified file 'jobs/camera.txt.in'
--- jobs/camera.txt.in 2012-11-06 17:11:49 +0000
+++ jobs/camera.txt.in 2013-05-09 20:11:45 +0000
@@ -9,7 +9,6 @@
9name: camera/display9name: camera/display
10depends: camera/detect10depends: camera/detect
11requires:11requires:
12 package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0'
13 device.category == 'CAPTURE'12 device.category == 'CAPTURE'
14command: camera_test display13command: camera_test display
15_description:14_description:
1615
=== modified file 'jobs/esata.txt.in'
--- jobs/esata.txt.in 2012-11-12 15:32:12 +0000
+++ jobs/esata.txt.in 2013-05-09 20:11:45 +0000
@@ -16,7 +16,7 @@
16name: esata/storage-test16name: esata/storage-test
17user: root17user: root
18depends: esata/insert18depends: esata/insert
19command: removable_storage_test ata_serial_esata19command: removable_storage_test -s 268400000 ata_serial_esata
20_description:20_description:
21 This is an automated test which performs read/write operations on an attached21 This is an automated test which performs read/write operations on an attached
22 eSATA HDD22 eSATA HDD
2323
=== modified file 'jobs/firewire.txt.in'
--- jobs/firewire.txt.in 2012-11-12 15:32:12 +0000
+++ jobs/firewire.txt.in 2013-05-09 20:11:45 +0000
@@ -16,7 +16,7 @@
16name: firewire/storage-test16name: firewire/storage-test
17user: root17user: root
18depends: firewire/insert18depends: firewire/insert
19command: removable_storage_test firewire19command: removable_storage_test -s 268400000 firewire
20_description:20_description:
21 This is an automated test which performs read/write operations on an attached21 This is an automated test which performs read/write operations on an attached
22 FireWire HDD22 FireWire HDD
2323
=== modified file 'jobs/graphics.txt.in'
--- jobs/graphics.txt.in 2013-03-07 15:52:02 +0000
+++ jobs/graphics.txt.in 2013-05-09 20:11:45 +0000
@@ -26,7 +26,9 @@
2626
27plugin: shell27plugin: shell
28name: graphics/xorg-process28name: graphics/xorg-process
29requires: package.name == 'xorg' and package.name == 'procps'29requires:
30 package.name == 'xorg'
31 package.name == 'procps'
30command: pgrep -f '/usr/bin/X' >/dev/null32command: pgrep -f '/usr/bin/X' >/dev/null
31_description: Test that the X process is running.33_description: Test that the X process is running.
3234
3335
=== modified file 'jobs/hibernate.txt.in'
--- jobs/hibernate.txt.in 2013-01-03 14:58:32 +0000
+++ jobs/hibernate.txt.in 2013-05-09 20:11:45 +0000
@@ -6,7 +6,7 @@
6command:6command:
7 if type -P fwts >/dev/null; then7 if type -P fwts >/dev/null; then
8 echo "Calling fwts"8 echo "Calling fwts"
9 fwts_test -l $CHECKBOX_DATA/hibernate-single -s s4 --s4-device-check --s4-device-check-delay=45 --s4-sleep-delay=1209 fwts_test -l $CHECKBOX_DATA/hibernate-single -f none -s s4 --s4-device-check --s4-device-check-delay=45 --s4-sleep-delay=120
10 else10 else
11 echo "Calling sleep_test"11 echo "Calling sleep_test"
12 sleep_test -s disk -w 12012 sleep_test -s disk -w 120
@@ -22,7 +22,13 @@
22 VERIFICATION:22 VERIFICATION:
23 Did the system successfully hibernate and did it work properly after waking up?23 Did the system successfully hibernate and did it work properly after waking up?
2424
25plugin: shell
26name: power-management/hibernate-single-log-check
27command: [ -e $CHECKBOX_DATA/hibernate-single.log ] && sleep_test_log_check -v s4 $CHECKBOX_DATA/hibernate-single.log
28_description:
29 Automated check of the hibernate log for errors discovered by fwts
30
25plugin: attachment31plugin: attachment
26name: power-management/hibernate-single-log-attach32name: power-management/hibernate-single-log-attach
27command: [ -e $CHECKBOX_DATA/hibernate-single.log ] && cat $CHECBOX_DATA/hibernate-single.log33command: [ -e $CHECKBOX_DATA/hibernate-single.log ] && cat $CHECKBOX_DATA/hibernate-single.log
28description: attaches log from single hibernate/resume test to results34description: attaches log from single hibernate/resume test to results
2935
=== modified file 'jobs/info.txt.in'
--- jobs/info.txt.in 2012-12-17 21:41:58 +0000
+++ jobs/info.txt.in 2013-05-09 20:11:45 +0000
@@ -1,6 +1,6 @@
1name: codecs_attachment1name: codecs_attachment
2plugin: attachment2plugin: attachment
3requires: device.driver == 'HDA Intel'3requires: device.driver == 'snd_hda_intel'
4command: cat /proc/asound/card*/codec#*4command: cat /proc/asound/card*/codec#*
5_description: Attaches a report of installed codecs for Intel HDA5_description: Attaches a report of installed codecs for Intel HDA
66
77
=== modified file 'jobs/input.txt.in'
--- jobs/input.txt.in 2013-03-07 15:52:02 +0000
+++ jobs/input.txt.in 2013-05-09 20:11:45 +0000
@@ -41,10 +41,20 @@
41 VERIFICATION:41 VERIFICATION:
42 Is your keyboard working properly?42 Is your keyboard working properly?
4343
44plugin: manual
45name: input/accelerometer_verify
46_description:
47 PURPOSE:
48 Manual detection of accelerometer.
49 STEPS:
50 1. Look at the specifications for your system.
51 VERIFICATION:
52 Is this system supposed to have an accelerometer?
53
44plugin: user-interact54plugin: user-interact
45name: input/accelerometer55name: input/accelerometer
46user: root56user: root
47requires: module.name in ['hdaps', 'hp_accel'] 57depends: input/accelerometer_verify
48command: accelerometer_test -m58command: accelerometer_test -m
49_description:59_description:
50 PURPOSE:60 PURPOSE:
5161
=== modified file 'jobs/keys.txt.in'
--- jobs/keys.txt.in 2012-11-07 21:33:08 +0000
+++ jobs/keys.txt.in 2013-05-09 20:11:45 +0000
@@ -78,9 +78,15 @@
78 This test will test the wireless key78 This test will test the wireless key
79 STEPS:79 STEPS:
80 1. Press the wireless key on the keyboard80 1. Press the wireless key on the keyboard
81 2. Press the same key again81 2. Check that the wifi LED turns off or changes color
82 3. Check that wireless is disabled
83 4. Press the same key again
84 5. Check that the wifi LED turns on or changes color
85 6. Check that wireless is enabled
82 VERIFICATION:86 VERIFICATION:
83 Did the wireless go off on the first press and on again on the second?87 Did the wireless turn off on the first press and on again on the second?
88 (NOTE: the LED functionality will be reviewed in a following test. Please
89 only consider the functionality of the wifi itself here.)
8490
85plugin: user-interact91plugin: user-interact
86name: keys/media-control92name: keys/media-control
8793
=== modified file 'jobs/led.txt.in'
--- jobs/led.txt.in 2012-10-27 10:33:23 +0000
+++ jobs/led.txt.in 2013-05-09 20:11:45 +0000
@@ -9,6 +9,29 @@
9 Does the power LED light as expected?9 Does the power LED light as expected?
1010
11plugin: manual11plugin: manual
12name: led/power-blink-suspend
13depends: suspend/suspend_advanced
14_description:
15 PURPOSE:
16 Power LED verification
17 STEPS:
18 1. The Power LED should blink or change color while the system is suspended
19 VERIFICATION:
20 Did the Power LED blink or change color while the system was suspended for the previous suspend test?
21
22plugin: manual
23name: led/suspend
24_description:
25 PURPOSE:
26 Suspend LED verification. If your system does not have a dedicated Suspend
27 LED, skip this test.
28 STEPS:
29 1. The Suspend LED should blink or change color while the system is
30 supended
31 VERIFICATION
32 Did the Suspend LED blink or change color while the system was suspended?
33
34plugin: manual
12name: led/battery-charging35name: led/battery-charging
13_description:36_description:
14 PURPOSE:37 PURPOSE:
@@ -81,33 +104,29 @@
81104
82plugin: manual105plugin: manual
83name: led/wlan106name: led/wlan
84depends: wireless/wireless_connection107depends: keys/wireless
85requires: package.name == 'firefox'
86command: firefox http://www.ubuntu.com
87_description:108_description:
88 PURPOSE:109 PURPOSE:
89 WLAN LED verification110 WLAN LED verification
90 STEPS:111 STEPS:
91 1. Make sure WLAN connection is established112 1. During the keys/wireless test you should have observed the
92 2. WLAN LED should light113 wireless LED while turning wireless back on.
93 3. Select Test to open Firefox114 2. WLAN LED should light or change color when wireless is turned on
94 4. WLAN LED should flash while downloading data
95 VERIFICATION:115 VERIFICATION:
96 Did the WLAN LED light and flash as expected?116 Did the WLAN LED turn on or change color as expected?
97117
98plugin: manual118plugin: manual
99name: led/wlan-disabled119name: led/wlan-disabled
100depends: wireless/wireless_connection120depends: keys/wireless
101_description:121_description:
102 PURPOSE:122 PURPOSE:
103 Validate that WLAN LED shuts off when disabled123 Validate that WLAN LED shuts off when disabled
104 STEPS:124 STEPS:
105 1. Connect to AP125 1. During the keys/wireless test you should have observed the WLAN LED
106 2. Use Physical switch to disable WLAN126 while performing that test after turning wireless off.
107 3. Re-enable127 2. WLAN LED should turn off or change color when wireless is turned off
108 4. Use Network-Manager to disable WLAN
109 VERIFICATION:128 VERIFICATION:
110 Did the LED turn off then WLAN is disabled?129 Did the WLAN LED turn off or change color as expected?
111130
112plugin: manual131plugin: manual
113name: led/bluetooth132name: led/bluetooth
@@ -164,3 +183,15 @@
164 VERIFICATION:183 VERIFICATION:
165 Did the WLAN/Bluetooth LED light as expected?184 Did the WLAN/Bluetooth LED light as expected?
166185
186plugin: manual
187name: led/mute
188depends: keys/mute
189_description:
190 PURPOSE:
191 Audio Mute LED verification. Skip this test if your system does not have
192 a special Audio Mute LED
193 STEPS:
194 1. Press the Mute key twice and observe the Audio LED to determine if it
195 either turned off and on or changed colors.
196 VERIFICATION:
197 Did the Audio LED turn on and off change color as expected?
167198
=== modified file 'jobs/local.txt.in'
--- jobs/local.txt.in 2012-10-23 21:52:31 +0000
+++ jobs/local.txt.in 2013-05-09 20:11:45 +0000
@@ -278,6 +278,13 @@
278 shopt -s extglob278 shopt -s extglob
279 cat $CHECKBOX_SHARE/jobs/wireless.txt?(.in)279 cat $CHECKBOX_SHARE/jobs/wireless.txt?(.in)
280280
281name: __mobilebroadband__
282plugin: local
283_description: Mobile broadband tests
284command:
285 shopt -s extglob
286 cat $CHECKBOX_SHARE/jobs/mobilebroadband.txt?(.in)
287
281name: __stress__288name: __stress__
282plugin: local289plugin: local
283_description: Stress tests290_description: Stress tests
284291
=== modified file 'jobs/mediacard.txt.in'
--- jobs/mediacard.txt.in 2012-11-16 04:25:09 +0000
+++ jobs/mediacard.txt.in 2013-05-09 20:11:45 +0000
@@ -7,8 +7,9 @@
7 detect the insertion of a Multimedia Card (MMC) media7 detect the insertion of a Multimedia Card (MMC) media
8 STEPS:8 STEPS:
9 1. Click "Test" and insert an MMC card into the reader.9 1. Click "Test" and insert an MMC card into the reader.
10 If a file browser opens up, you can safely close it.
10 (Note: this test will time-out after 20 seconds.)11 (Note: this test will time-out after 20 seconds.)
11 2. Do not unplug the device after the test.12 2. Do not remove the device after this test.
12 VERIFICATION:13 VERIFICATION:
13 The verification of this test is automated. Do not change the14 The verification of this test is automated. Do not change the
14 automatically selected result.15 automatically selected result.
@@ -17,7 +18,7 @@
17name: mediacard/mmc-storage18name: mediacard/mmc-storage
18depends: mediacard/mmc-insert19depends: mediacard/mmc-insert
19user: root20user: root
20command: removable_storage_test --memorycard sdio usb scsi21command: removable_storage_test -s 67120000 --memorycard sdio usb scsi
21_description:22_description:
22 This test is automated and executes after the mediacard/mmc-insert23 This test is automated and executes after the mediacard/mmc-insert
23 test is run. It tests reading and writing to the MMC card.24 test is run. It tests reading and writing to the MMC card.
@@ -47,8 +48,9 @@
47 detect the insertion of an MMC card after the system has been suspended48 detect the insertion of an MMC card after the system has been suspended
48 STEPS:49 STEPS:
49 1. Click "Test" and insert an MMC card into the reader.50 1. Click "Test" and insert an MMC card into the reader.
51 If a file browser opens up, you can safely close it.
50 (Note: this test will time-out after 20 seconds.)52 (Note: this test will time-out after 20 seconds.)
51 2. Do not unplug the device after the test.53 2. Do not remove the device after this test.
52 VERIFICATION:54 VERIFICATION:
53 The verification of this test is automated. Do not change the55 The verification of this test is automated. Do not change the
54 automatically selected result.56 automatically selected result.
@@ -57,7 +59,7 @@
57name: mediacard/mmc-storage-after-suspend59name: mediacard/mmc-storage-after-suspend
58depends: mediacard/mmc-insert-after-suspend60depends: mediacard/mmc-insert-after-suspend
59user: root61user: root
60command: removable_storage_test --memorycard sdio usb scsi62command: removable_storage_test -s 67120000 --memorycard sdio usb scsi
61_description:63_description:
62 This test is automated and executes after the mediacard/mmc-insert-after-suspend test64 This test is automated and executes after the mediacard/mmc-insert-after-suspend test
63 is run. It tests reading and writing to the MMC card after the system has been suspended.65 is run. It tests reading and writing to the MMC card after the system has been suspended.
@@ -86,8 +88,9 @@
86 detect the insertion of a Secure Digital (SD) media card88 detect the insertion of a Secure Digital (SD) media card
87 STEPS:89 STEPS:
88 1. Click "Test" and insert an SD card into the reader.90 1. Click "Test" and insert an SD card into the reader.
91 If a file browser opens up, you can safely close it.
89 (Note: this test will time-out after 20 seconds.)92 (Note: this test will time-out after 20 seconds.)
90 2. Do not unplug the device after the test.93 2. Do not remove the device after this test.
91 VERIFICATION:94 VERIFICATION:
92 The verification of this test is automated. Do not change the95 The verification of this test is automated. Do not change the
93 automatically selected result.96 automatically selected result.
@@ -96,7 +99,7 @@
96name: mediacard/sd-storage99name: mediacard/sd-storage
97depends: mediacard/sd-insert100depends: mediacard/sd-insert
98user: root101user: root
99command: removable_storage_test --memorycard sdio usb scsi102command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
100_description:103_description:
101 This test is automated and executes after the mediacard/sd-insert104 This test is automated and executes after the mediacard/sd-insert
102 test is run. It tests reading and writing to the SD card.105 test is run. It tests reading and writing to the SD card.
@@ -126,8 +129,9 @@
126 detect the insertion of an SD card after the system has been suspended129 detect the insertion of an SD card after the system has been suspended
127 STEPS:130 STEPS:
128 1. Click "Test" and insert an SD card into the reader.131 1. Click "Test" and insert an SD card into the reader.
132 If a file browser opens up, you can safely close it.
129 (Note: this test will time-out after 20 seconds.)133 (Note: this test will time-out after 20 seconds.)
130 2. Do not unplug the device after the test.134 2. Do not remove the device after this test.
131 VERIFICATION:135 VERIFICATION:
132 The verification of this test is automated. Do not change the136 The verification of this test is automated. Do not change the
133 automatically selected result.137 automatically selected result.
@@ -136,7 +140,7 @@
136name: mediacard/sd-storage-after-suspend140name: mediacard/sd-storage-after-suspend
137depends: mediacard/sd-insert-after-suspend141depends: mediacard/sd-insert-after-suspend
138user: root142user: root
139command: removable_storage_test --memorycard sdio usb scsi143command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
140_description:144_description:
141 This test is automated and executes after the mediacard/sd-insert-after-suspend test145 This test is automated and executes after the mediacard/sd-insert-after-suspend test
142 is run. It tests reading and writing to the SD card after the system has been suspended.146 is run. It tests reading and writing to the SD card after the system has been suspended.
@@ -160,7 +164,7 @@
160name: mediacard/sd-preinserted164name: mediacard/sd-preinserted
161user: root165user: root
162requires: device.category == 'CARDREADER'166requires: device.category == 'CARDREADER'
163command: removable_storage_test --memorycard -l sdio usb scsi && removable_storage_test --memorycard sdio usb scsi167command: removable_storage_test -s 268400000 --memorycard -l sdio usb scsi && removable_storage_test --memorycard sdio usb scsi
164_description:168_description:
165 This is a fully automated version of mediacard/sd-automated and assumes that the169 This is a fully automated version of mediacard/sd-automated and assumes that the
166 system under test has a memory card device plugged in prior to checkbox execution.170 system under test has a memory card device plugged in prior to checkbox execution.
@@ -175,8 +179,9 @@
175 detect the insertion of a Secure Digital High-Capacity (SDHC) media card179 detect the insertion of a Secure Digital High-Capacity (SDHC) media card
176 STEPS:180 STEPS:
177 1. Click "Test" and insert an SDHC card into the reader.181 1. Click "Test" and insert an SDHC card into the reader.
182 If a file browser opens up, you can safely close it.
178 (Note: this test will time-out after 20 seconds.)183 (Note: this test will time-out after 20 seconds.)
179 2. Do not unplug the device after the test.184 2. Do not remove the device after this test.
180 VERIFICATION:185 VERIFICATION:
181 The verification of this test is automated. Do not change the186 The verification of this test is automated. Do not change the
182 automatically selected result.187 automatically selected result.
@@ -185,7 +190,7 @@
185name: mediacard/sdhc-storage190name: mediacard/sdhc-storage
186depends: mediacard/sdhc-insert191depends: mediacard/sdhc-insert
187user: root192user: root
188command: removable_storage_test --memorycard sdio usb scsi193command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
189_description:194_description:
190 This test is automated and executes after the mediacard/sdhc-insert195 This test is automated and executes after the mediacard/sdhc-insert
191 test is run. It tests reading and writing to the SDHC card.196 test is run. It tests reading and writing to the SDHC card.
@@ -215,8 +220,9 @@
215 detect the insertion of an SDHC media card after the system has been suspended220 detect the insertion of an SDHC media card after the system has been suspended
216 STEPS:221 STEPS:
217 1. Click "Test" and insert an SDHC card into the reader.222 1. Click "Test" and insert an SDHC card into the reader.
223 If a file browser opens up, you can safely close it.
218 (Note: this test will time-out after 20 seconds.)224 (Note: this test will time-out after 20 seconds.)
219 2. Do not unplug the device after the test.225 2. Do not remove the device after this test.
220 VERIFICATION:226 VERIFICATION:
221 The verification of this test is automated. Do not change the227 The verification of this test is automated. Do not change the
222 automatically selected result.228 automatically selected result.
@@ -225,7 +231,7 @@
225name: mediacard/sdhc-storage-after-suspend231name: mediacard/sdhc-storage-after-suspend
226depends: mediacard/sdhc-insert-after-suspend232depends: mediacard/sdhc-insert-after-suspend
227user: root233user: root
228command: removable_storage_test --memorycard sdio usb scsi234command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
229_description:235_description:
230 This test is automated and executes after the mediacard/sdhc-insert-after-suspend test236 This test is automated and executes after the mediacard/sdhc-insert-after-suspend test
231 is run. It tests reading and writing to the SDHC card after the system has been suspended.237 is run. It tests reading and writing to the SDHC card after the system has been suspended.
@@ -254,8 +260,9 @@
254 detect the insertion of a Compact Flash (CF) media card260 detect the insertion of a Compact Flash (CF) media card
255 STEPS:261 STEPS:
256 1. Click "Test" and insert a CF card into the reader.262 1. Click "Test" and insert a CF card into the reader.
263 If a file browser opens up, you can safely close it.
257 (Note: this test will time-out after 20 seconds.)264 (Note: this test will time-out after 20 seconds.)
258 2. Do not unplug the device after the test.265 2. Do not remove the device after this test.
259 VERIFICATION:266 VERIFICATION:
260 The verification of this test is automated. Do not change the267 The verification of this test is automated. Do not change the
261 automatically selected result.268 automatically selected result.
@@ -264,7 +271,7 @@
264name: mediacard/cf-storage271name: mediacard/cf-storage
265depends: mediacard/cf-insert272depends: mediacard/cf-insert
266user: root273user: root
267command: removable_storage_test --memorycard sdio usb scsi274command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
268_description:275_description:
269 This test is automated and executes after the mediacard/cf-insert276 This test is automated and executes after the mediacard/cf-insert
270 test is run. It tests reading and writing to the CF card.277 test is run. It tests reading and writing to the CF card.
@@ -294,8 +301,9 @@
294 detect the insertion of a CF card after the system has been suspended301 detect the insertion of a CF card after the system has been suspended
295 STEPS:302 STEPS:
296 1. Click "Test" and insert a CF card into the reader.303 1. Click "Test" and insert a CF card into the reader.
304 If a file browser opens up, you can safely close it.
297 (Note: this test will time-out after 20 seconds.)305 (Note: this test will time-out after 20 seconds.)
298 2. Do not unplug the device after the test.306 2. Do not remove the device after this test.
299 VERIFICATION:307 VERIFICATION:
300 The verification of this test is automated. Do not change the308 The verification of this test is automated. Do not change the
301 automatically selected result.309 automatically selected result.
@@ -304,7 +312,7 @@
304name: mediacard/cf-storage-after-suspend312name: mediacard/cf-storage-after-suspend
305depends: mediacard/cf-insert-after-suspend313depends: mediacard/cf-insert-after-suspend
306user: root314user: root
307command: removable_storage_test --memorycard sdio usb scsi315command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
308_description:316_description:
309 This test is automated and executes after the mediacard/cf-insert-after-suspend test317 This test is automated and executes after the mediacard/cf-insert-after-suspend test
310 is run. It tests reading and writing to the CF card after the system has been suspended.318 is run. It tests reading and writing to the CF card after the system has been suspended.
@@ -333,8 +341,9 @@
333 detect the insertion of a Secure Digital Extended Capacity (SDXC) media card341 detect the insertion of a Secure Digital Extended Capacity (SDXC) media card
334 STEPS:342 STEPS:
335 1. Click "Test" and insert a SDXC card into the reader.343 1. Click "Test" and insert a SDXC card into the reader.
344 If a file browser opens up, you can safely close it.
336 (Note: this test will time-out after 20 seconds.)345 (Note: this test will time-out after 20 seconds.)
337 2. Do not unplug the device after the test.346 2. Do not remove the device after this test.
338 VERIFICATION:347 VERIFICATION:
339 The verification of this test is automated. Do not change the348 The verification of this test is automated. Do not change the
340 automatically selected result.349 automatically selected result.
@@ -343,7 +352,7 @@
343name: mediacard/sdxc-storage352name: mediacard/sdxc-storage
344depends: mediacard/sdxc-insert353depends: mediacard/sdxc-insert
345user: root354user: root
346command: removable_storage_test --memorycard sdio usb scsi355command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
347_description:356_description:
348 This test is automated and executes after the mediacard/sdxc-insert357 This test is automated and executes after the mediacard/sdxc-insert
349 test is run. It tests reading and writing to the SDXC card.358 test is run. It tests reading and writing to the SDXC card.
@@ -373,8 +382,9 @@
373 detect the insertion of a SDXC card after the system has been suspended382 detect the insertion of a SDXC card after the system has been suspended
374 STEPS:383 STEPS:
375 1. Click "Test" and insert a SDXC card into the reader.384 1. Click "Test" and insert a SDXC card into the reader.
385 If a file browser opens up, you can safely close it.
376 (Note: this test will time-out after 20 seconds.)386 (Note: this test will time-out after 20 seconds.)
377 2. Do not unplug the device after the test.387 2. Do not remove the device after this test.
378 VERIFICATION:388 VERIFICATION:
379 The verification of this test is automated. Do not change the389 The verification of this test is automated. Do not change the
380 automatically selected result.390 automatically selected result.
@@ -383,7 +393,7 @@
383name: mediacard/sdxc-storage-after-suspend393name: mediacard/sdxc-storage-after-suspend
384depends: mediacard/sdxc-insert-after-suspend394depends: mediacard/sdxc-insert-after-suspend
385user: root395user: root
386command: removable_storage_test --memorycard sdio usb scsi396command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
387_description:397_description:
388 This test is automated and executes after the mediacard/sdxc-insert-after-suspend test398 This test is automated and executes after the mediacard/sdxc-insert-after-suspend test
389 is run. It tests reading and writing to the SDXC card after the system has been suspended.399 is run. It tests reading and writing to the SDXC card after the system has been suspended.
@@ -398,6 +408,7 @@
398 of a SDXC card from the systems card reader after the system has been suspended.408 of a SDXC card from the systems card reader after the system has been suspended.
399 STEPS:409 STEPS:
400 1. Click "Test" and remove the SDXC card from the reader.410 1. Click "Test" and remove the SDXC card from the reader.
411 If a file browser opens up, you can safely close it.
401 (Note: this test will time-out after 20 seconds.)412 (Note: this test will time-out after 20 seconds.)
402 VERIFICATION:413 VERIFICATION:
403 The verification of this test is automated. Do not change the414 The verification of this test is automated. Do not change the
@@ -412,8 +423,9 @@
412 detect the insertion of a Memory Stick (MS) media card423 detect the insertion of a Memory Stick (MS) media card
413 STEPS:424 STEPS:
414 1. Click "Test" and insert a MS card into the reader.425 1. Click "Test" and insert a MS card into the reader.
426 If a file browser opens up, you can safely close it.
415 (Note: this test will time-out after 20 seconds.)427 (Note: this test will time-out after 20 seconds.)
416 2. Do not unplug the device after the test.428 2. Do not remove the device after this test.
417 VERIFICATION:429 VERIFICATION:
418 The verification of this test is automated. Do not change the430 The verification of this test is automated. Do not change the
419 automatically selected result.431 automatically selected result.
@@ -422,7 +434,7 @@
422name: mediacard/ms-storage434name: mediacard/ms-storage
423depends: mediacard/ms-insert435depends: mediacard/ms-insert
424user: root436user: root
425command: removable_storage_test --memorycard sdio usb scsi437command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
426_description:438_description:
427 This test is automated and executes after the mediacard/ms-insert439 This test is automated and executes after the mediacard/ms-insert
428 test is run. It tests reading and writing to the MS card.440 test is run. It tests reading and writing to the MS card.
@@ -452,8 +464,9 @@
452 detect the insertion of a MS card after the system has been suspended464 detect the insertion of a MS card after the system has been suspended
453 STEPS:465 STEPS:
454 1. Click "Test" and insert a MS card into the reader.466 1. Click "Test" and insert a MS card into the reader.
467 If a file browser opens up, you can safely close it.
455 (Note: this test will time-out after 20 seconds.)468 (Note: this test will time-out after 20 seconds.)
456 2. Do not unplug the device after the test.469 2. Do not remove the device after this test.
457 VERIFICATION:470 VERIFICATION:
458 The verification of this test is automated. Do not change the471 The verification of this test is automated. Do not change the
459 automatically selected result.472 automatically selected result.
@@ -462,7 +475,7 @@
462name: mediacard/ms-storage-after-suspend475name: mediacard/ms-storage-after-suspend
463depends: mediacard/ms-insert-after-suspend476depends: mediacard/ms-insert-after-suspend
464user: root477user: root
465command: removable_storage_test --memorycard sdio usb scsi478command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
466_description:479_description:
467 This test is automated and executes after the mediacard/ms-insert-after-suspend test480 This test is automated and executes after the mediacard/ms-insert-after-suspend test
468 is run. It tests reading and writing to the MS card after the system has been suspended.481 is run. It tests reading and writing to the MS card after the system has been suspended.
@@ -491,8 +504,9 @@
491 detect the insertion of a Memory Stick Pro (MSP) media card504 detect the insertion of a Memory Stick Pro (MSP) media card
492 STEPS:505 STEPS:
493 1. Click "Test" and insert a MSP card into the reader.506 1. Click "Test" and insert a MSP card into the reader.
507 If a file browser opens up, you can safely close it.
494 (Note: this test will time-out after 20 seconds.)508 (Note: this test will time-out after 20 seconds.)
495 2. Do not unplug the device after the test.509 2. Do not remove the device after this test.
496 VERIFICATION:510 VERIFICATION:
497 The verification of this test is automated. Do not change the511 The verification of this test is automated. Do not change the
498 automatically selected result.512 automatically selected result.
@@ -501,7 +515,7 @@
501name: mediacard/msp-storage515name: mediacard/msp-storage
502depends: mediacard/msp-insert516depends: mediacard/msp-insert
503user: root517user: root
504command: removable_storage_test --memorycard sdio usb scsi518command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
505_description:519_description:
506 This test is automated and executes after the mediacard/msp-insert520 This test is automated and executes after the mediacard/msp-insert
507 test is run. It tests reading and writing to the MSP card.521 test is run. It tests reading and writing to the MSP card.
@@ -531,8 +545,9 @@
531 detect the insertion of a MSP card after the system has been suspended545 detect the insertion of a MSP card after the system has been suspended
532 STEPS:546 STEPS:
533 1. Click "Test" and insert a MSP card into the reader.547 1. Click "Test" and insert a MSP card into the reader.
548 If a file browser opens up, you can safely close it.
534 (Note: this test will time-out after 20 seconds.)549 (Note: this test will time-out after 20 seconds.)
535 2. Do not unplug the device after the test.550 2. Do not remove the device after this test.
536 VERIFICATION:551 VERIFICATION:
537 The verification of this test is automated. Do not change the552 The verification of this test is automated. Do not change the
538 automatically selected result.553 automatically selected result.
@@ -541,7 +556,7 @@
541name: mediacard/msp-storage-after-suspend556name: mediacard/msp-storage-after-suspend
542depends: mediacard/msp-insert-after-suspend557depends: mediacard/msp-insert-after-suspend
543user: root558user: root
544command: removable_storage_test --memorycard sdio usb scsi559command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
545_description:560_description:
546 This test is automated and executes after the mediacard/msp-insert-after-suspend test561 This test is automated and executes after the mediacard/msp-insert-after-suspend test
547 is run. It tests reading and writing to the MSP card after the system has been suspended.562 is run. It tests reading and writing to the MSP card after the system has been suspended.
@@ -570,8 +585,9 @@
570 detect the insertion of a Extreme Digital (xD) media card585 detect the insertion of a Extreme Digital (xD) media card
571 STEPS:586 STEPS:
572 1. Click "Test" and insert a xD card into the reader.587 1. Click "Test" and insert a xD card into the reader.
588 If a file browser opens up, you can safely close it.
573 (Note: this test will time-out after 20 seconds.)589 (Note: this test will time-out after 20 seconds.)
574 2. Do not unplug the device after the test.590 2. Do not remove the device after this test.
575 VERIFICATION:591 VERIFICATION:
576 The verification of this test is automated. Do not change the592 The verification of this test is automated. Do not change the
577 automatically selected result.593 automatically selected result.
@@ -580,7 +596,7 @@
580name: mediacard/xd-storage596name: mediacard/xd-storage
581depends: mediacard/xd-insert597depends: mediacard/xd-insert
582user: root598user: root
583command: removable_storage_test --memorycard sdio usb scsi599command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
584_description:600_description:
585 This test is automated and executes after the mediacard/xd-insert601 This test is automated and executes after the mediacard/xd-insert
586 test is run. It tests reading and writing to the xD card.602 test is run. It tests reading and writing to the xD card.
@@ -610,8 +626,9 @@
610 detect the insertion of a xD card after the system has been suspended626 detect the insertion of a xD card after the system has been suspended
611 STEPS:627 STEPS:
612 1. Click "Test" and insert a xD card into the reader.628 1. Click "Test" and insert a xD card into the reader.
629 If a file browser opens up, you can safely close it.
613 (Note: this test will time-out after 20 seconds.)630 (Note: this test will time-out after 20 seconds.)
614 2. Do not unplug the device after the test.631 2. Do not remove the device after this test.
615 VERIFICATION:632 VERIFICATION:
616 The verification of this test is automated. Do not change the633 The verification of this test is automated. Do not change the
617 automatically selected result.634 automatically selected result.
@@ -620,7 +637,7 @@
620name: mediacard/xd-storage-after-suspend637name: mediacard/xd-storage-after-suspend
621depends: mediacard/xd-insert-after-suspend638depends: mediacard/xd-insert-after-suspend
622user: root639user: root
623command: removable_storage_test --memorycard sdio usb scsi640command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
624_description:641_description:
625 This test is automated and executes after the mediacard/xd-insert-after-suspend test642 This test is automated and executes after the mediacard/xd-insert-after-suspend test
626 is run. It tests reading and writing to the xD card after the system has been suspended.643 is run. It tests reading and writing to the xD card after the system has been suspended.
627644
=== modified file 'jobs/miscellanea.txt.in'
--- jobs/miscellanea.txt.in 2013-01-07 08:53:00 +0000
+++ jobs/miscellanea.txt.in 2013-05-09 20:11:45 +0000
@@ -67,5 +67,56 @@
6767
68plugin: shell68plugin: shell
69name: miscellanea/sources-list69name: miscellanea/sources-list
70command: sources_test70command: sources_test $SOURCES_LIST "$REPOSITORIES"
71_description: Checks that a specified sources list file contains the requested repositories71_description: Checks that a specified sources list file contains the requested repositories
72
73plugin: local
74name: miscellanea/pxe_boot
75requires: device.category == 'NETWORK'
76_description: Automated job to generate the PXE verification test for each NIC.
77command:
78 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"'
79 plugin: manual
80 name: miscellanea/pxe_boot_$2
81 description:
82 PURPOSE:
83 This test will verify that you have attempted to PXE boot this machine from
84 the network device $2.
85 STEPS:
86 1. Prior to running this test, you should have attempted to boot this system via PXE on every Network Port available.
87 VERIFICATION:
88 1. Select Yes if you successfully used PXE boot this system using the NIC $2
89 2. Select No if you did not attempt to PXE boot this system using the NIC $2
90 3. Select No if you attempted to PXE boot via $2 and it failed for some reason.
91 EOF
92
93plugin: local
94name: miscellanea/remote_shared_ipmi
95requires: device.category == 'NETWORK'
96_description: Automated job to generate the Remote Shared IPMI verification test for each NIC.
97command:
98 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"'
99 plugin: manual
100 name: miscellanea/remote_shared_ipmi_$2
101 description:
102 PURPOSE:
103 This test will verify that you have attempted IPMI control of this machine from the network device $2.
104 STEPS:
105 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.
106 VERIFICATION:
107 1. Select Yes if you successfully used IPMI to remotely power this system off and on using the NIC $2
108 2. Select No if you did not attempt to use IPMI to remotely power this sytem off and on via the NIC $2
109 3. Select No if you attempted to use IPMI to remotely power off/on this system via $2 and it failed for some reason.
110 EOF
111
112plugin: manual
113name: miscellanea/remote_dedicated_ipmi
114_description:
115 PURPOSE:
116 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.
117 STEPS:
118 1. Prior to running the test, you should have configured and used the Dedicated Management Port to remotely power off/on this sytem.
119 VERIFICATION:
120 1. Select Yes if you successfully used IPMI to remotely power this system off and on using the dedicated management port.
121 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.
122 3. Skip this test if this system ONLY uses shared management/ethernet ports OR if this system does not have a BMC (Management Console)
72123
=== added file 'jobs/mobilebroadband.txt.in'
--- jobs/mobilebroadband.txt.in 1970-01-01 00:00:00 +0000
+++ jobs/mobilebroadband.txt.in 2013-05-09 20:11:45 +0000
@@ -0,0 +1,21 @@
1plugin: shell
2name: mobilebroadband/gsm_connection
3requires:
4 package.name == 'network-manager'
5 package.name == 'modemmanager'
6 mobilebroadband.gsm == 'supported'
7user: root
8environ: GSM_CONN_NAME GSM_APN GSM_USERNAME GSM_PASSWORD
9command: 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}'`
10_description: Creates a mobile broadband connection for a GSM based modem and checks the connection to ensure it's working.
11
12plugin: shell
13name: mobilebroadband/cdma_connection
14requires:
15 package.name == 'network-manager'
16 package.name == 'modemmanager'
17 mobilebroadband.cdma == 'supported'
18user: root
19environ: CDMA_CONN_NAME CDMA_USERNAME CDMA_PASSWORD
20command: 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}'`
21_description: Creates a mobile broadband connection for a CDMA based modem and checks the connection to ensure it's working.
022
=== modified file 'jobs/monitor.txt.in'
--- jobs/monitor.txt.in 2013-01-30 21:43:05 +0000
+++ jobs/monitor.txt.in 2013-05-09 20:11:45 +0000
@@ -66,7 +66,7 @@
6666
67plugin: manual67plugin: manual
68name: monitor/multi-head68name: monitor/multi-head
69requires: dmi.product not in ['Notebook','Laptop','Portable']69requires: dmi.product in ['Desktop','Low Profile Desktop','Tower','Mini Tower']
70_description:70_description:
71 PURPOSE:71 PURPOSE:
72 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.72 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.
@@ -98,8 +98,8 @@
98 PURPOSE:98 PURPOSE:
99 This test will test changes to screen brightness99 This test will test changes to screen brightness
100 STEPS:100 STEPS:
101 1. Click "Test" to try the to dim the screen.101 1. Click "Test" to try to dim the screen.
102 2. Check if the screen was dimmed approximately by half.102 2. Check if the screen was dimmed approximately to half of the maximum brightness.
103 3. The screen will go back to the original brightness in 2 seconds.103 3. The screen will go back to the original brightness in 2 seconds.
104 VERIFICATION:104 VERIFICATION:
105 Was your screen dimmed approximately by half?105 Was your screen dimmed approximately to half of the maximum brightness?
106106
=== modified file 'jobs/networking.txt.in'
--- jobs/networking.txt.in 2012-12-13 18:35:08 +0000
+++ jobs/networking.txt.in 2013-05-09 20:11:45 +0000
@@ -15,10 +15,10 @@
1515
16plugin: local16plugin: local
17name: networking/info17name: networking/info
18requires: device.category == 'NETWORK' or device.category == 'WIRELESS'18requires: device.category == 'NETWORK'
19_description: Network Information19_description: Network Information
20command:20command:
21 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"'21 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"'
22 plugin: manual22 plugin: manual
23 name: networking/info_$223 name: networking/info_$2
24 requires: device.path == "$1"24 requires: device.path == "$1"
@@ -29,7 +29,7 @@
29 STEPS:29 STEPS:
30 1. Please verify the following information for NIC $230 1. Please verify the following information for NIC $2
31 INFO:31 INFO:
32 $output32 \$output
33 VERIFICATION:33 VERIFICATION:
34 Is this correct?34 Is this correct?
35 EOF35 EOF
@@ -117,7 +117,7 @@
117 package.name == 'ethtool' and package.name == 'nmap'117 package.name == 'ethtool' and package.name == 'nmap'
118 device.path == "$1"118 device.path == "$1"
119 user: root119 user: root
120 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 )120 command: network test -i $2 -t ftp
121 description:121 description:
122 Testing for NIC $2122 Testing for NIC $2
123 EOF123 EOF
124124
=== modified file 'jobs/power-management.txt.in'
--- jobs/power-management.txt.in 2012-12-03 14:30:41 +0000
+++ jobs/power-management.txt.in 2013-05-09 20:11:45 +0000
@@ -2,11 +2,11 @@
2name: power-management/shutdown-boot2name: power-management/shutdown-boot
3_description:3_description:
4 PURPOSE:4 PURPOSE:
5 This test will check your system shutdown/booting cycle5 This test will check your system shutdown/booting cycle.
6 STEPS:6 STEPS:
7 1. Shutdown your machine7 1. Shutdown your machine.
8 2. Boot your machine8 2. Boot your machine.
9 3. Repeat steps 1 and 2 at least 5 times9 3. Repeat steps 1 and 2 at least 5 times.
10 VERIFICATION:10 VERIFICATION:
11 Did the system shutdown and rebooted correctly?11 Did the system shutdown and rebooted correctly?
1212
@@ -44,9 +44,10 @@
44 2. The machine will shut down.44 2. The machine will shut down.
45 3. Power the machine back on.45 3. Power the machine back on.
46 4. After rebooting, wait for the test prompts to inform you that the test is complete.46 4. After rebooting, wait for the test prompts to inform you that the test is complete.
47 5. Once the test has completed, restart checkbox and select Re-Run when prompted47 5. Once the test has completed, restart checkbox and select 'Re-run' when prompted.
48 VERIFICATION:48 VERIFICATION:
49 If the machine successfully shuts down and boots, select Yes then select Next.49 If the machine successfully shuts down and boots, select 'Yes', otherwise,
50 select 'No'.
5051
51plugin: attachment52plugin: attachment
52name: power-management/poweroff-log-attach53name: power-management/poweroff-log-attach
@@ -69,7 +70,7 @@
69 1. Select "Test" to begin.70 1. Select "Test" to begin.
70 2. The machine will reboot.71 2. The machine will reboot.
71 3. After rebooting, wait for the test prompts to inform you that the test is complete.72 3. After rebooting, wait for the test prompts to inform you that the test is complete.
72 4. Once the test has completed, restart checkbox and select Re-Run when prompted73 4. Once the test has completed, restart checkbox and select Re-Run when prompted.
73 VERIFICATION:74 VERIFICATION:
74 If the machine successfully reboots, select Yes then select Next.75 If the machine successfully reboots, select Yes then select Next.
7576
@@ -83,9 +84,9 @@
83name: power-management/lid84name: power-management/lid
84_description:85_description:
85 PURPOSE:86 PURPOSE:
86 This test will check your lid sensors87 This test will check your lid sensors.
87 STEPS:88 STEPS:
88 1. Close your laptop lid89 1. Close your laptop lid.
89 VERIFICATION:90 VERIFICATION:
90 Does closing your laptop lid cause your system to suspend?91 Does closing your laptop lid cause your system to suspend?
9192
@@ -102,8 +103,8 @@
102 PURPOSE:103 PURPOSE:
103 This test will check your lid sensors104 This test will check your lid sensors
104 STEPS:105 STEPS:
105 1. Click "Test"106 1. Click "Test".
106 2. Close and open the lid107 2. Close and open the lid.
107 VERIFICATION:108 VERIFICATION:
108 Did the screen turn off while the lid was closed?109 Did the screen turn off while the lid was closed?
109110
@@ -118,12 +119,12 @@
118 exit 1119 exit 1
119_description:120_description:
120 PURPOSE:121 PURPOSE:
121 This test will check your lid sensors122 This test will check your lid sensors.
122 STEPS:123 STEPS:
123 1. Click "Test"124 1. Click "Test".
124 2. Close the lid125 2. Close the lid.
125 3. Wait 5 seconds with the lid closed126 3. Wait 5 seconds with the lid closed.
126 4. Open the lid127 4. Open the lid.
127 VERIFICATION:128 VERIFICATION:
128 Did the system resume when the lid was opened?129 Did the system resume when the lid was opened?
129130
@@ -144,10 +145,9 @@
144name: power-management/unplug_ac145name: power-management/unplug_ac
145_description:146_description:
146 PURPOSE:147 PURPOSE:
147 This test will ensure that the AC is unplugged for the battery drain tests148 This test will ensure that the AC is unplugged for the battery drain tests to run.
148 to run.
149 STEPS:149 STEPS:
150 1. Unplug laptop from AC150 1. Unplug laptop from AC.
151 VERIFICATION:151 VERIFICATION:
152 Was the laptop unplugged from AC?152 Was the laptop unplugged from AC?
153153
@@ -187,9 +187,45 @@
187depends: power-management/battery_drain_idle power-management/battery_drain_movie power-management/battery_drain_sleep187depends: power-management/battery_drain_idle power-management/battery_drain_movie power-management/battery_drain_sleep
188_description:188_description:
189 PURPOSE:189 PURPOSE:
190 This test will ensure that the AC is plugged back in after the battery190 This test will ensure that the AC is plugged back in after the battery.
191 tests191 tests
192 STEPS:192 STEPS:
193 1. Plug laptop into AC193 1. Plug laptop into AC.
194 VERIFICATION:194 VERIFICATION:
195 Was the laptop plugged into AC?195 Was the laptop plugged into AC?
196
197plugin: manual
198name: power-management/reboot_manual
199user:root
200command: shutdown -r now
201_description:
202 PURPOSE:
203 This test will verify that your system can successfully reboot.
204 STEPS:
205 1. Select 'Test' to initiate a system reboot.
206 2. When the grub boot menu is displayed, boot into Ubuntu (Or allow the
207 system to automatically boot on its own).
208 3. Once the system has restarted, log in and restart checkbox-certification-server.
209 4. Select 'Re-Run' to return to this test.
210 5. Select 'Yes' to indicate the test has passed if the system rebooted
211 successfully, otherwise, select 'No' to indicate there was a problem.
212 VERIFICATION:
213 Did the system reboot correctly?
214
215plugin: manual
216name: power-management/shutdown_manual
217user: root
218command: shutdown -h now
219_description:
220 PURPOSE:
221 This test will check your system shutdown/booting cycle
222 STEPS:
223 1. Select 'Test' to initiate a system shutdown.
224 2. Power the system back on.
225 3. From the grub menu, boot into the Xen Hypervisor.
226 4. When the system has restarted, log in and restart checkbox-certification-server.
227 5. Select 'Re-Run' to return to this test.
228 6. Select 'Yes' to indicate the test has passed if the machine shut down
229 successfully otherwise, Select 'No' to indicate there was a problem.
230 VERIFICATION:
231 Did the system shutdown and boot correctly?
196232
=== modified file 'jobs/rendercheck.txt.in'
--- jobs/rendercheck.txt.in 2013-02-08 17:02:12 +0000
+++ jobs/rendercheck.txt.in 2013-05-09 20:11:45 +0000
@@ -2,7 +2,7 @@
2name: rendercheck/tests2name: rendercheck/tests
3requires:3requires:
4 package.name == 'x11-apps'4 package.name == 'x11-apps'
5command: ( 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 )5command: ( 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 )
6_description:6_description:
7 Runs all of the rendercheck test suites. This test can take a few minutes.7 Runs all of the rendercheck test suites. This test can take a few minutes.
88
99
=== modified file 'jobs/resource.txt.in'
--- jobs/resource.txt.in 2013-02-22 16:26:25 +0000
+++ jobs/resource.txt.in 2013-05-09 20:11:45 +0000
@@ -109,3 +109,16 @@
109 for e in `env | sed 's/=/:/g'`; do109 for e in `env | sed 's/=/:/g'`; do
110 echo $e | awk -F':' '{print $1 ": " $2}'110 echo $e | awk -F':' '{print $1 ": " $2}'
111 done111 done
112
113name: mobilebroadband
114plugin: resource
115description: Create resource for mobile broadband devices
116command:
117 if mm-test --no-scan | grep -q 'GSM modem'
118 then
119 echo "gsm: supported"
120 fi
121 if mm-test --no-scan | grep -q 'CDMA modem'
122 then
123 echo "cdma: supported"
124 fi
112125
=== modified file 'jobs/stress.txt.in'
--- jobs/stress.txt.in 2013-01-03 20:46:04 +0000
+++ jobs/stress.txt.in 2013-05-09 20:11:45 +0000
@@ -16,7 +16,7 @@
16command:16command:
17 if type -P fwts >/dev/null; then17 if type -P fwts >/dev/null; then
18 echo "Calling fwts"18 echo "Calling fwts"
19 fwts_test -l $CHECKBOX_DATA/hibernate_30_cycles -s s4 --s4-device-check --s4-device-check-delay=45 --s4-sleep-delay=120 --s4-multiple=3019 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
20 else20 else
21 echo "Calling sleep_test"21 echo "Calling sleep_test"
22 sleep_test -s disk -i 30 -w 12022 sleep_test -s disk -i 30 -w 120
@@ -25,6 +25,12 @@
25 PURPOSE:25 PURPOSE:
26 This is an automated stress test that will force the system to hibernate/resume for 30 cycles26 This is an automated stress test that will force the system to hibernate/resume for 30 cycles
2727
28plugin: shell
29name: power-management/hibernate-30-cycles-log-check
30command: [ -e $CHECKBOX_DATA/hibernate_30_cycles.log ] && sleep_test_log_check -v s4 $CHECKBOX_DATA/hibernate_30_cycles.log
31_description:
32 Automated check of the 30 cycle hibernate log for errors detected by fwts.
33
28plugin: attachment34plugin: attachment
29name: power-management/hibernate-30-cycle-log-attach35name: power-management/hibernate-30-cycle-log-attach
30command: [ -e $CHECKBOX_DATA/hibernate_30_cycles.log ] && cat $CHECKBOX_DATA/hibernate_30_cycles.log36command: [ -e $CHECKBOX_DATA/hibernate_30_cycles.log ] && cat $CHECKBOX_DATA/hibernate_30_cycles.log
@@ -39,7 +45,7 @@
39command: 45command:
40 if type -P fwts >/dev/null; then46 if type -P fwts >/dev/null; then
41 echo "Calling fwts"47 echo "Calling fwts"
42 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.log48 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
43 else49 else
44 echo "Calling sleep_test"50 echo "Calling sleep_test"
45 set -o pipefail; sleep_test -p s mem -i 30 | tee $CHECKBOX_DATA/suspend_30_cycles_times.log51 set -o pipefail; sleep_test -p s mem -i 30 | tee $CHECKBOX_DATA/suspend_30_cycles_times.log
@@ -48,6 +54,12 @@
48 PURPOSE:54 PURPOSE:
49 This is an automated stress test that will force the system to suspend/resume for 30 cycles.55 This is an automated stress test that will force the system to suspend/resume for 30 cycles.
5056
57plugin: shell
58name: power-management/suspend-30-cycles-log-check
59command: [ -e $CHECKBOX_DATA/suspend_30_cycles.log ] && sleep_test_log_check -v s3 $CHECKBOX_DATA/suspend_30_cycles.log
60_description:
61 Automated check of the 30 cycle hibernate log for errors detected by fwts.
62
51plugin: attachment63plugin: attachment
52name: power-management/suspend-30-cycle-log-attach64name: power-management/suspend-30-cycle-log-attach
53command: [ -e $CHECKBOX_DATA/suspend_30_cycles.log ] && cat $CHECKBOX_DATA/suspend_30_cycles.log65command: [ -e $CHECKBOX_DATA/suspend_30_cycles.log ] && cat $CHECKBOX_DATA/suspend_30_cycles.log
@@ -172,7 +184,7 @@
172 package.name == 'x11-apps'184 package.name == 'x11-apps'
173user: root185user: root
174environ: CHECKBOX_DATA186environ: CHECKBOX_DATA
175command: 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" && false187command: 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
176_description:188_description:
177 Run the graphics stress test. This test can take a few minutes.189 Run the graphics stress test. This test can take a few minutes.
178190
179191
=== modified file 'jobs/suspend.txt.in'
--- jobs/suspend.txt.in 2013-03-07 15:52:02 +0000
+++ jobs/suspend.txt.in 2013-05-09 20:11:45 +0000
@@ -40,7 +40,8 @@
40plugin: shell40plugin: shell
41name: suspend/bluetooth_obex_before_suspend41name: suspend/bluetooth_obex_before_suspend
42requires:42requires:
43 package.name == 'bluez' and package.name == 'obexd-client'43 package.name == 'bluez'
44 package.name == 'obexd-client'
44 device.category == 'BLUETOOTH'45 device.category == 'BLUETOOTH'
45command:46command:
46 if [ -z "$BTDEVADDR" ]47 if [ -z "$BTDEVADDR" ]
@@ -65,7 +66,8 @@
65plugin: shell66plugin: shell
66name: suspend/bluetooth_obex_send_before_suspend67name: suspend/bluetooth_obex_send_before_suspend
67requires:68requires:
68 package.name == 'bluez' and package.name == 'obexftp'69 package.name == 'bluez'
70 package.name == 'obexftp'
69 device.category == 'BLUETOOTH'71 device.category == 'BLUETOOTH'
70command:72command:
71 if [ -z "$BTDEVADDR" ]73 if [ -z "$BTDEVADDR" ]
@@ -90,7 +92,8 @@
90plugin: shell92plugin: shell
91name: suspend/bluetooth_obex_browse_before_suspend93name: suspend/bluetooth_obex_browse_before_suspend
92requires:94requires:
93 package.name == 'bluez' and package.name == 'obexftp'95 package.name == 'bluez'
96 package.name == 'obexftp'
94 device.category == 'BLUETOOTH'97 device.category == 'BLUETOOTH'
95command:98command:
96 if [ -z "$BTDEVADDR" ]99 if [ -z "$BTDEVADDR" ]
@@ -115,7 +118,8 @@
115plugin: shell118plugin: shell
116name: suspend/bluetooth_obex_get_before_suspend119name: suspend/bluetooth_obex_get_before_suspend
117requires:120requires:
118 package.name == 'bluez' and package.name == 'obexftp'121 package.name == 'bluez'
122 package.name == 'obexftp'
119 device.category == 'BLUETOOTH'123 device.category == 'BLUETOOTH'
120command:124command:
121 if [ -z "$BTDEVADDR" ]125 if [ -z "$BTDEVADDR" ]
@@ -140,7 +144,8 @@
140plugin: manual144plugin: manual
141name: suspend/bluetooth_obex_before_suspend_manual145name: suspend/bluetooth_obex_before_suspend_manual
142requires:146requires:
143 package.name == 'bluez' and package.name == 'obexd-client'147 package.name == 'bluez'
148 package.name == 'obexd-client'
144 device.category == 'BLUETOOTH'149 device.category == 'BLUETOOTH'
145command: rfkill unblock bluetooth; obex_send `bluetooth_scan` $CHECKBOX_SHARE/data/images/JPEG_Color_Image_Ubuntu.jpg150command: rfkill unblock bluetooth; obex_send `bluetooth_scan` $CHECKBOX_SHARE/data/images/JPEG_Color_Image_Ubuntu.jpg
146_description:151_description:
@@ -163,7 +168,7 @@
163command:168command:
164 if type -P fwts >/dev/null; then169 if type -P fwts >/dev/null; then
165 echo "Calling fwts"170 echo "Calling fwts"
166 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.log171 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
167 else172 else
168 echo "Calling sleep_test"173 echo "Calling sleep_test"
169 set -o pipefail; sleep_test -p | tee $CHECKBOX_DATA/suspend_single_times.log174 set -o pipefail; sleep_test -p | tee $CHECKBOX_DATA/suspend_single_times.log
@@ -173,10 +178,12 @@
173 This test will check suspend and resume178 This test will check suspend and resume
174 STEPS:179 STEPS:
175 1. Click "Test" and your system will suspend for about 30 - 60 seconds180 1. Click "Test" and your system will suspend for about 30 - 60 seconds
176 2. If your system does not wake itself up after 60 seconds, please press the power button momentarily to wake the system manually181 2. Observe the Power LED to see if it blinks or changes color during suspend
177 3. If your system fails to wake at all and must be rebooted, restart System Testing after reboot and mark this test as Failed182 3. If your system does not wake itself up after 60 seconds, please press the power button momentarily to wake the system manually
183 4. If your system fails to wake at all and must be rebooted, restart System Testing after reboot and mark this test as Failed
178 VERIFICATION:184 VERIFICATION:
179 Did your system suspend and resume correctly?185 Did your system suspend and resume correctly?
186 (NOTE: Please only consider whether the system successfully suspended and resumed. Power/Suspend LED verification will occur after this test is completed.)
180187
181plugin: shell188plugin: shell
182name: suspend/suspend_advanced_auto189name: suspend/suspend_advanced_auto
@@ -187,7 +194,13 @@
187 This is the automated version of suspend/suspend_advanced.194 This is the automated version of suspend/suspend_advanced.
188user: root195user: root
189environ: CHECKBOX_DATA196environ: CHECKBOX_DATA
190command: 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.log197command: 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
198
199plugin: shell
200name: suspend/suspend-single-log-check
201command: [ -e $CHECKBOX_DATA/suspend_single.log ] && sleep_test_log_check -v s3 $CHECKBOX_DATA/suspend_single.log
202_description:
203 Automated check of the suspend log to look for errors reported by fwts
191204
192plugin: attachment205plugin: attachment
193name: suspend/suspend-single-log-attach206name: suspend/suspend-single-log-attach
@@ -254,6 +267,16 @@
254 audio_settings store --file=$CHECKBOX_DATA/audio_settings_after_suspend; diff $CHECKBOX_DATA/audio_settings_before_suspend $CHECKBOX_DATA/audio_settings_after_suspend267 audio_settings store --file=$CHECKBOX_DATA/audio_settings_after_suspend; diff $CHECKBOX_DATA/audio_settings_before_suspend $CHECKBOX_DATA/audio_settings_after_suspend
255268
256plugin: shell269plugin: shell
270name: suspend/audio_after_suspend_auto
271requires:
272 device.category == 'AUDIO'
273 package.name == 'alsa-base'
274depends: suspend/suspend_advanced_auto suspend/audio_before_suspend
275_description: Verify that mixer settings after suspend are the same as before suspend.
276command:
277 audio_settings store --file=$CHECKBOX_DATA/audio_settings_after_suspend; diff $CHECKBOX_DATA/audio_settings_before_suspend $CHECKBOX_DATA/audio_settings_after_suspend
278
279plugin: shell
257name: suspend/cpu_after_suspend280name: suspend/cpu_after_suspend
258depends: suspend/suspend_advanced suspend/cpu_before_suspend281depends: suspend/suspend_advanced suspend/cpu_before_suspend
259_description: Verify that all CPUs are online after resuming.282_description: Verify that all CPUs are online after resuming.
@@ -309,7 +332,7 @@
309 environment.ROUTERS == 'multiple'332 environment.ROUTERS == 'multiple'
310user: root333user: root
311environ: WPA_BG_SSID WPA_BG_PSK334environ: WPA_BG_SSID WPA_BG_PSK
312command: 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}'`335command: 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}'`
313_description:336_description:
314 Tests that the systems wireless hardware can connect to a router using WPA337 Tests that the systems wireless hardware can connect to a router using WPA
315 security and the 802.11b/g protocols after the system has been suspended.338 security and the 802.11b/g protocols after the system has been suspended.
@@ -322,7 +345,7 @@
322 environment.ROUTERS == 'multiple'345 environment.ROUTERS == 'multiple'
323user: root346user: root
324environ: OPEN_BG_SSID347environ: OPEN_BG_SSID
325command: 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}'`348command: 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}'`
326_description:349_description:
327 Tests that the systems wireless hardware can connect to a router using no350 Tests that the systems wireless hardware can connect to a router using no
328 security and the 802.11b/g protocols after the system has been suspended.351 security and the 802.11b/g protocols after the system has been suspended.
@@ -335,7 +358,7 @@
335 environment.ROUTERS == 'multiple'358 environment.ROUTERS == 'multiple'
336user: root359user: root
337environ: WPA_N_SSID WPA_N_PSK360environ: WPA_N_SSID WPA_N_PSK
338command: 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}'`361command: 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}'`
339_description:362_description:
340 Tests that the systems wireless hardware can connect to a router using WPA363 Tests that the systems wireless hardware can connect to a router using WPA
341 security and the 802.11n protocol after the system has been suspended.364 security and the 802.11n protocol after the system has been suspended.
@@ -348,7 +371,7 @@
348 environment.ROUTERS == 'multiple'371 environment.ROUTERS == 'multiple'
349user: root372user: root
350environ: OPEN_N_SSID373environ: OPEN_N_SSID
351command: 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}'`374command: 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}'`
352_description:375_description:
353 Tests that the systems wireless hardware can connect to a router using no376 Tests that the systems wireless hardware can connect to a router using no
354 security and the 802.11n protocol after the system has been suspended.377 security and the 802.11n protocol after the system has been suspended.
@@ -361,7 +384,7 @@
361 environment.ROUTERS == 'multiple'384 environment.ROUTERS == 'multiple'
362user: root385user: root
363environ: WPA_BG_SSID WPA_BG_PSK386environ: WPA_BG_SSID WPA_BG_PSK
364command: 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}'`387command: 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}'`
365_description:388_description:
366 Tests that the systems wireless hardware can connect to a router using WPA389 Tests that the systems wireless hardware can connect to a router using WPA
367 security and the 802.11b/g protocols after the system has been suspended.390 security and the 802.11b/g protocols after the system has been suspended.
@@ -374,7 +397,7 @@
374 environment.ROUTERS == 'multiple'397 environment.ROUTERS == 'multiple'
375user: root398user: root
376environ: OPEN_BG_SSID399environ: OPEN_BG_SSID
377command: 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}'`400command: 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}'`
378_description:401_description:
379 Tests that the systems wireless hardware can connect to a router using no402 Tests that the systems wireless hardware can connect to a router using no
380 security and the 802.11b/g protocols after the system has been suspended.403 security and the 802.11b/g protocols after the system has been suspended.
@@ -387,7 +410,7 @@
387 environment.ROUTERS == 'multiple'410 environment.ROUTERS == 'multiple'
388user: root411user: root
389environ: WPA_N_SSID WPA_N_PSK412environ: WPA_N_SSID WPA_N_PSK
390command: 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}'`413command: 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}'`
391_description:414_description:
392 Tests that the systems wireless hardware can connect to a router using WPA415 Tests that the systems wireless hardware can connect to a router using WPA
393 security and the 802.11n protocol after the system has been suspended.416 security and the 802.11n protocol after the system has been suspended.
@@ -400,7 +423,7 @@
400 environment.ROUTERS == 'multiple'423 environment.ROUTERS == 'multiple'
401user: root424user: root
402environ: OPEN_N_SSID425environ: OPEN_N_SSID
403command: 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}'`426command: 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}'`
404_description:427_description:
405 Tests that the systems wireless hardware can connect to a router using no428 Tests that the systems wireless hardware can connect to a router using no
406 security and the 802.11n protocol after the system has been suspended.429 security and the 802.11n protocol after the system has been suspended.
@@ -413,7 +436,7 @@
413 environment.ROUTERS == 'single'436 environment.ROUTERS == 'single'
414user: root437user: root
415environ: ROUTER_SSID ROUTER_PSK438environ: ROUTER_SSID ROUTER_PSK
416command: 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}'`439command: 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}'`
417_description:440_description:
418 PURPOSE:441 PURPOSE:
419 Tests that the systems wireless hardware can connect to a router using WPA442 Tests that the systems wireless hardware can connect to a router using WPA
@@ -435,7 +458,7 @@
435 environment.ROUTERS == 'single'458 environment.ROUTERS == 'single'
436user: root459user: root
437environ: ROUTER_SSID460environ: ROUTER_SSID
438command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection $ROUTER_SSID && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`461command: 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}'`
439_description:462_description:
440 PURPOSE:463 PURPOSE:
441 Tests that the systems wireless hardware can connect to a router using464 Tests that the systems wireless hardware can connect to a router using
@@ -457,7 +480,7 @@
457 environment.ROUTERS == 'single'480 environment.ROUTERS == 'single'
458user: root481user: root
459environ: ROUTER_SSID ROUTER_PSK482environ: ROUTER_SSID ROUTER_PSK
460command: 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}'`483command: 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}'`
461_description:484_description:
462 PURPOSE:485 PURPOSE:
463 Tests that the systems wireless hardware can connect to a router using WPA486 Tests that the systems wireless hardware can connect to a router using WPA
@@ -479,7 +502,7 @@
479 environment.ROUTERS == 'single'502 environment.ROUTERS == 'single'
480user: root503user: root
481environ: ROUTER_SSID504environ: ROUTER_SSID
482command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection $ROUTER_SSID && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`505command: 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}'`
483_description:506_description:
484 PURPOSE:507 PURPOSE:
485 Tests that the systems wireless hardware can connect to a router using508 Tests that the systems wireless hardware can connect to a router using
@@ -521,7 +544,8 @@
521name: suspend/bluetooth_obex_after_suspend544name: suspend/bluetooth_obex_after_suspend
522depends: suspend/suspend_advanced suspend/bluetooth_obex_before_suspend545depends: suspend/suspend_advanced suspend/bluetooth_obex_before_suspend
523requires:546requires:
524 package.name == 'bluez' and package.name == 'obexd-client'547 package.name == 'bluez'
548 package.name == 'obexd-client'
525 device.category == 'BLUETOOTH'549 device.category == 'BLUETOOTH'
526command:550command:
527 if [ -z "$BTDEVADDR" ]551 if [ -z "$BTDEVADDR" ]
@@ -547,7 +571,8 @@
547name: suspend/bluetooth_obex_after_suspend_auto571name: suspend/bluetooth_obex_after_suspend_auto
548depends: suspend/suspend_advanced_auto suspend/bluetooth_obex_before_suspend572depends: suspend/suspend_advanced_auto suspend/bluetooth_obex_before_suspend
549requires:573requires:
550 package.name == 'bluez' and package.name == 'obexd-client'574 package.name == 'bluez'
575 package.name == 'obexd-client'
551 device.category == 'BLUETOOTH'576 device.category == 'BLUETOOTH'
552command:577command:
553 if [ -z "$BTDEVADDR" ]578 if [ -z "$BTDEVADDR" ]
@@ -573,7 +598,8 @@
573name: suspend/bluetooth_obex_send_after_suspend598name: suspend/bluetooth_obex_send_after_suspend
574depends: suspend/suspend_advanced599depends: suspend/suspend_advanced
575requires:600requires:
576 package.name == 'bluez' and package.name == 'obexftp'601 package.name == 'bluez'
602 package.name == 'obexftp'
577 device.category == 'BLUETOOTH'603 device.category == 'BLUETOOTH'
578command:604command:
579 if [ -z "$BTDEVADDR" ]605 if [ -z "$BTDEVADDR" ]
@@ -599,7 +625,8 @@
599name: suspend/bluetooth_obex_send_after_suspend_auto625name: suspend/bluetooth_obex_send_after_suspend_auto
600depends: suspend/suspend_advanced_auto626depends: suspend/suspend_advanced_auto
601requires:627requires:
602 package.name == 'bluez' and package.name == 'obexftp'628 package.name == 'bluez'
629 package.name == 'obexftp'
603 device.category == 'BLUETOOTH'630 device.category == 'BLUETOOTH'
604command:631command:
605 if [ -z "$BTDEVADDR" ]632 if [ -z "$BTDEVADDR" ]
@@ -625,7 +652,8 @@
625name: suspend/bluetooth_obex_browse_after_suspend652name: suspend/bluetooth_obex_browse_after_suspend
626depends: suspend/suspend_advanced653depends: suspend/suspend_advanced
627requires:654requires:
628 package.name == 'bluez' and package.name == 'obexftp'655 package.name == 'bluez'
656 package.name == 'obexftp'
629 device.category == 'BLUETOOTH'657 device.category == 'BLUETOOTH'
630command:658command:
631 if [ -z "$BTDEVADDR" ]659 if [ -z "$BTDEVADDR" ]
@@ -651,7 +679,8 @@
651name: suspend/bluetooth_obex_browse_after_suspend_auto679name: suspend/bluetooth_obex_browse_after_suspend_auto
652depends: suspend/suspend_advanced_auto680depends: suspend/suspend_advanced_auto
653requires:681requires:
654 package.name == 'bluez' and package.name == 'obexftp'682 package.name == 'bluez'
683 package.name == 'obexftp'
655 device.category == 'BLUETOOTH'684 device.category == 'BLUETOOTH'
656command:685command:
657 if [ -z "$BTDEVADDR" ]686 if [ -z "$BTDEVADDR" ]
@@ -677,7 +706,8 @@
677name: suspend/bluetooth_obex_get_after_suspend706name: suspend/bluetooth_obex_get_after_suspend
678depends: suspend/suspend_advanced707depends: suspend/suspend_advanced
679requires:708requires:
680 package.name == 'bluez' and package.name == 'obexftp'709 package.name == 'bluez'
710 package.name == 'obexftp'
681 device.category == 'BLUETOOTH'711 device.category == 'BLUETOOTH'
682command:712command:
683 if [ -z "$BTDEVADDR" ]713 if [ -z "$BTDEVADDR" ]
@@ -703,7 +733,8 @@
703name: suspend/bluetooth_obex_get_after_suspend_auto733name: suspend/bluetooth_obex_get_after_suspend_auto
704depends: suspend/suspend_advanced_auto734depends: suspend/suspend_advanced_auto
705requires:735requires:
706 package.name == 'bluez' and package.name == 'obexftp'736 package.name == 'bluez'
737 package.name == 'obexftp'
707 device.category == 'BLUETOOTH'738 device.category == 'BLUETOOTH'
708command:739command:
709 if [ -z "$BTDEVADDR" ]740 if [ -z "$BTDEVADDR" ]
@@ -729,7 +760,8 @@
729name: suspend/bluetooth_obex_after_suspend_manual760name: suspend/bluetooth_obex_after_suspend_manual
730depends: suspend/suspend_advanced suspend/bluetooth_obex_before_suspend_manual761depends: suspend/suspend_advanced suspend/bluetooth_obex_before_suspend_manual
731requires:762requires:
732 package.name == 'bluez' and package.name == 'obexd-client'763 package.name == 'bluez'
764 package.name == 'obexd-client'
733 device.category == 'BLUETOOTH'765 device.category == 'BLUETOOTH'
734command: rfkill unblock bluetooth; obex_send `bluetooth_scan` $CHECKBOX_SHARE/data/images/JPEG_Color_Image_Ubuntu.jpg766command: rfkill unblock bluetooth; obex_send `bluetooth_scan` $CHECKBOX_SHARE/data/images/JPEG_Color_Image_Ubuntu.jpg
735_description:767_description:
@@ -780,6 +812,17 @@
780_description:812_description:
781 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.813 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.
782814
815plugin: shell
816name: suspend/record_playback_after_suspend_auto
817depends: suspend/suspend_advanced_auto
818requires:
819 device.category == 'AUDIO'
820 package.name == 'python-gst0.10'
821 package.name == 'alsa-base'
822command: audio_test
823_description:
824 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.
825
783plugin: attachment826plugin: attachment
784name: suspend/suspend-auto-single-log-attach827name: suspend/suspend-auto-single-log-attach
785command: [ -e $CHECKBOX_DATA/suspend_auto_single_log ] && cat $CHECKBOX_DATA/suspend_auto_single_log828command: [ -e $CHECKBOX_DATA/suspend_auto_single_log ] && cat $CHECKBOX_DATA/suspend_auto_single_log
@@ -808,21 +851,17 @@
808plugin: shell851plugin: shell
809name: suspend/gpu_lockup_after_suspend852name: suspend/gpu_lockup_after_suspend
810requires:853requires:
811 package.name == 'fwts'
812 package.name == 'wmctrl'854 package.name == 'wmctrl'
813 package.name == 'mesa-utils'855 package.name == 'mesa-utils'
814depends: suspend/suspend_advanced_auto856depends: suspend/suspend_advanced_auto
815user: root
816command: gpu_test857command: gpu_test
817_description:858_description:
818 PURPOSE:859 PURPOSE:
819 Do some challenging operations, suspend the system, do more challenging860 Do some challenging operations then check for lockup on the GPU
820 operations - then check for lockup on the GPU
821 STEPS:861 STEPS:
822 1. Create 2 glxgears windows and move them quickly862 1. Create 2 glxgears windows and move them quickly
823 2. Switch workspaces/viewports with wmctrl863 2. Switch workspaces with wmctrl
824 3. Launch an HTML5 video playback in firefox864 3. Launch an HTML5 video playback in firefox
825 4. Suspend/resume
826 VERIFICATION:865 VERIFICATION:
827 After a 60s workload, check kern.log for reported GPU errors866 After a 60s workload, check kern.log for reported GPU errors
828867
@@ -837,6 +876,16 @@
837 after a suspend/resume cycle.876 after a suspend/resume cycle.
838877
839plugin: shell878plugin: shell
879name: suspend/wifi_resume_time_auto
880depends: suspend/suspend_advanced_auto
881requires:
882 device.category == 'WIRELESS'
883command: network_reconnect_resume_test -t 20 -d wifi
884_description:
885 Checks the length of time it takes to reconnect an existing wifi connection
886 after a suspend/resume cycle.
887
888plugin: shell
840name: suspend/network_resume_time889name: suspend/network_resume_time
841depends: suspend/suspend_advanced890depends: suspend/suspend_advanced
842requires:891requires:
@@ -846,6 +895,16 @@
846 Checks the length of time it takes to reconnect an existing wired connection895 Checks the length of time it takes to reconnect an existing wired connection
847 after a suspend/resume cycle.896 after a suspend/resume cycle.
848897
898plugin: shell
899name: suspend/network_resume_time_auto
900depends: suspend/suspend_advanced_auto
901requires:
902 device.category == 'NETWORK'
903command: network_reconnect_resume_test -t 10 -d wired
904_description:
905 Checks the length of time it takes to reconnect an existing wired connection
906 after a suspend/resume cycle.
907
849plugin: manual908plugin: manual
850name: suspend/led_after_suspend/power909name: suspend/led_after_suspend/power
851depends: suspend/suspend_advanced910depends: suspend/suspend_advanced
@@ -943,10 +1002,8 @@
943 STEPS:1002 STEPS:
944 1. Make sure WLAN connection is established1003 1. Make sure WLAN connection is established
945 2. WLAN LED should light1004 2. WLAN LED should light
946 3. Select Test to open Firefox
947 4. WLAN LED should flash while downloading data
948 VERIFICATION:1005 VERIFICATION:
949 Did the WLAN LED light and flash as expected after resuming from suspend?1006 Did the WLAN LED light as expected after resuming from suspend?
9501007
951plugin: manual1008plugin: manual
952name: suspend/led_after_suspend/wlan-disabled1009name: suspend/led_after_suspend/wlan-disabled
9531010
=== modified file 'jobs/usb.txt.in'
--- jobs/usb.txt.in 2012-11-12 15:32:12 +0000
+++ jobs/usb.txt.in 2013-05-09 20:11:45 +0000
@@ -101,7 +101,7 @@
101name: usb/storage-transfer101name: usb/storage-transfer
102depends: usb/insert102depends: usb/insert
103user: root103user: root
104command: removable_storage_test usb104command: removable_storage_test -s 268400000 usb
105_description:105_description:
106 PURPOSE:106 PURPOSE:
107 This test will check your USB connection.107 This test will check your USB connection.
@@ -119,7 +119,7 @@
119 usb.usb3 == 'supported'119 usb.usb3 == 'supported'
120depends: usb3/insert120depends: usb3/insert
121user: root121user: root
122command: removable_storage_test -m 500000000 -p 7 usb122command: removable_storage_test -s 268400000 -m 500000000 -p 7 usb
123_description:123_description:
124 PURPOSE:124 PURPOSE:
125 This test will check your USB 3.0 connection.125 This test will check your USB 3.0 connection.
@@ -135,7 +135,7 @@
135name: usb/storage-automated135name: usb/storage-automated
136depends: usb/insert136depends: usb/insert
137user: root137user: root
138command: removable_storage_test usb138command: removable_storage_test -s 268400000 usb
139_description:139_description:
140 This test is automated and executes after the usb/insert test is run.140 This test is automated and executes after the usb/insert test is run.
141141
@@ -145,14 +145,14 @@
145 usb.usb3 == 'supported'145 usb.usb3 == 'supported'
146depends: usb3/insert146depends: usb3/insert
147user: root147user: root
148command: removable_storage_test -m 500000000 -p 7 usb148command: removable_storage_test -s 268400000 -m 500000000 -p 7 usb
149_description:149_description:
150 This test is automated and executes after the usb3/insert test is run.150 This test is automated and executes after the usb3/insert test is run.
151151
152plugin: shell152plugin: shell
153name: usb/storage-preinserted153name: usb/storage-preinserted
154user: root154user: root
155command: removable_storage_test -l usb && removable_storage_test usb155command: removable_storage_test -l usb && removable_storage_test -s 268400000 usb
156_description:156_description:
157 This is an automated version of usb/storage-automated and assumes that the157 This is an automated version of usb/storage-automated and assumes that the
158 server has usb storage devices plugged in prior to checkbox execution. It158 server has usb storage devices plugged in prior to checkbox execution. It
@@ -163,7 +163,7 @@
163user: root163user: root
164requires:164requires:
165 usb.usb3 == 'supported'165 usb.usb3 == 'supported'
166command: removable_storage_test -l usb && removable_storage_test -m 500000000 -p 7 usb166command: removable_storage_test -l usb && removable_storage_test -s 268400000 -m 500000000 -p 7 usb
167_description:167_description:
168 This is an automated version of usb3/storage-automated and assumes that the168 This is an automated version of usb3/storage-automated and assumes that the
169 server has usb 3.0 storage devices plugged in prior to checkbox execution. It169 server has usb 3.0 storage devices plugged in prior to checkbox execution. It
170170
=== modified file 'jobs/virtualization.txt.in'
--- jobs/virtualization.txt.in 2013-02-08 17:02:12 +0000
+++ jobs/virtualization.txt.in 2013-05-09 20:11:45 +0000
@@ -22,3 +22,19 @@
22command: virtualization kvm --debug22command: virtualization kvm --debug
23_description:23_description:
24 Test to check that a cloud image boots and works properly with KVM24 Test to check that a cloud image boots and works properly with KVM
25
26plugin: shell
27name: virtualization/xen_ok
28requires: package.name == 'libvirt-bin'
29user: root
30command: virsh -c xen:/// domstate Domain-0
31_description:
32 Test to verify that the Xen Hypervisor is running.
33
34plugin: shell
35name: virtualization/xen_check_vm
36depends: virtualization/xen_ok
37user: root
38command: xen_test /images/xentest.img /images/xentest.xml
39_description:
40 Test to check that a Xen domU image can boot and run on Xen on Ubuntu
2541
=== modified file 'jobs/wireless.txt.in'
--- jobs/wireless.txt.in 2012-10-16 20:45:22 +0000
+++ jobs/wireless.txt.in 2013-05-09 20:11:45 +0000
@@ -40,7 +40,7 @@
40 environment.ROUTERS == 'multiple'40 environment.ROUTERS == 'multiple'
41user: root41user: root
42environ: WPA_BG_SSID WPA_BG_PSK42environ: WPA_BG_SSID WPA_BG_PSK
43command: 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}'`43command: 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}'`
44_description:44_description:
45 Tests that the systems wireless hardware can connect to a router using WPA45 Tests that the systems wireless hardware can connect to a router using WPA
46 security and the 802.11b/g protocols.46 security and the 802.11b/g protocols.
@@ -52,7 +52,7 @@
52 environment.ROUTERS == 'multiple'52 environment.ROUTERS == 'multiple'
53user: root53user: root
54environ: OPEN_BG_SSID54environ: OPEN_BG_SSID
55command: 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}'`55command: 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}'`
56_description:56_description:
57 Tests that the systems wireless hardware can connect to a router using no57 Tests that the systems wireless hardware can connect to a router using no
58 security and the 802.11b/g protocols.58 security and the 802.11b/g protocols.
@@ -64,7 +64,7 @@
64 environment.ROUTERS == 'multiple'64 environment.ROUTERS == 'multiple'
65user: root65user: root
66environ: WPA_N_SSID WPA_N_PSK66environ: WPA_N_SSID WPA_N_PSK
67command: 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}'`67command: 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}'`
68_description:68_description:
69 Tests that the systems wireless hardware can connect to a router using WPA69 Tests that the systems wireless hardware can connect to a router using WPA
70 security and the 802.11n protocol.70 security and the 802.11n protocol.
@@ -76,7 +76,7 @@
76 environment.ROUTERS == 'multiple'76 environment.ROUTERS == 'multiple'
77user: root77user: root
78environ: OPEN_N_SSID78environ: OPEN_N_SSID
79command: 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}'`79command: 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}'`
80_description:80_description:
81 Tests that the systems wireless hardware can connect to a router using no81 Tests that the systems wireless hardware can connect to a router using no
82 security and the 802.11n protocol.82 security and the 802.11n protocol.
@@ -88,7 +88,7 @@
88 environment.ROUTERS == 'single'88 environment.ROUTERS == 'single'
89user: root89user: root
90environ: ROUTER_SSID ROUTER_PSK90environ: ROUTER_SSID ROUTER_PSK
91command: 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}'`91command: 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}'`
92_description:92_description:
93 PURPOSE:93 PURPOSE:
94 Tests that the systems wireless hardware can connect to a router using WPA94 Tests that the systems wireless hardware can connect to a router using WPA
@@ -109,7 +109,7 @@
109 environment.ROUTERS == 'single'109 environment.ROUTERS == 'single'
110user: root110user: root
111environ: ROUTER_SSID111environ: ROUTER_SSID
112command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection $ROUTER_SSID && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`112command: 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}'`
113_description:113_description:
114 PURPOSE:114 PURPOSE:
115 Tests that the systems wireless hardware can connect to a router using115 Tests that the systems wireless hardware can connect to a router using
@@ -130,7 +130,7 @@
130 environment.ROUTERS == 'single'130 environment.ROUTERS == 'single'
131user: root131user: root
132environ: ROUTER_SSID ROUTER_PSK132environ: ROUTER_SSID ROUTER_PSK
133command: 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}'`133command: 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}'`
134_description:134_description:
135 PURPOSE:135 PURPOSE:
136 Tests that the systems wireless hardware can connect to a router using WPA136 Tests that the systems wireless hardware can connect to a router using WPA
@@ -151,7 +151,7 @@
151 environment.ROUTERS == 'single'151 environment.ROUTERS == 'single'
152user: root152user: root
153environ: ROUTER_SSID153environ: ROUTER_SSID
154command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection $ROUTER_SSID && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`154command: 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}'`
155_description:155_description:
156 PURPOSE:156 PURPOSE:
157 Tests that the systems wireless hardware can connect to a router using157 Tests that the systems wireless hardware can connect to a router using
@@ -172,7 +172,7 @@
172 device.category == 'WIRELESS'172 device.category == 'WIRELESS'
173user: root173user: root
174environ: WPA_BG_SSID WPA_BG_PSK SERVER_IPERF174environ: WPA_BG_SSID WPA_BG_PSK SERVER_IPERF
175command: 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 30175command: 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
176_description:176_description:
177 Tests the performance of a systems wireless connection through the iperf tool.177 Tests the performance of a systems wireless connection through the iperf tool.
178178
@@ -183,7 +183,7 @@
183 device.category == 'WIRELESS'183 device.category == 'WIRELESS'
184user: root184user: root
185environ: WPA_BG_SSID WPA_BG_PSK SERVER_IPERF185environ: WPA_BG_SSID WPA_BG_PSK SERVER_IPERF
186command: 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 5050186command: 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
187_description:187_description:
188 Tests the performance of a systems wireless connection through the iperf tool, using UDP packets.188 Tests the performance of a systems wireless connection through the iperf tool, using UDP packets.
189189
@@ -192,7 +192,7 @@
192requires: device.category == 'WIRELESS'192requires: device.category == 'WIRELESS'
193user: root193user: root
194environ: OPEN_A_SSID194environ: OPEN_A_SSID
195command: 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}'`195command: 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}'`
196_description:196_description:
197 Test that the system's wireless hardware can connect to a router using the197 Test that the system's wireless hardware can connect to a router using the
198 802.11a protocol. This requires that you have a router pre-configured to only198 802.11a protocol. This requires that you have a router pre-configured to only
@@ -203,7 +203,7 @@
203requires: device.category == 'WIRELESS'203requires: device.category == 'WIRELESS'
204user: root204user: root
205environ: OPEN_B_SSID205environ: OPEN_B_SSID
206command: 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}'`206command: 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}'`
207_description:207_description:
208 Test that the system's wireless hardware can connect to a router using the208 Test that the system's wireless hardware can connect to a router using the
209 802.11b protocol. This requires that you have a router pre-configured to only209 802.11b protocol. This requires that you have a router pre-configured to only
@@ -214,7 +214,7 @@
214requires: device.category == 'WIRELESS'214requires: device.category == 'WIRELESS'
215user: root215user: root
216environ: OPEN_G_SSID216environ: OPEN_G_SSID
217command: 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}'`217command: 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}'`
218_description:218_description:
219 Test that the system's wireless hardware can connect to a router using the219 Test that the system's wireless hardware can connect to a router using the
220 802.11g protocol. This requires that you have a router pre-configured to only220 802.11g protocol. This requires that you have a router pre-configured to only
221221
=== modified file 'plainbox/.coveragerc'
--- plainbox/.coveragerc 2012-12-03 16:15:23 +0000
+++ plainbox/.coveragerc 2013-05-09 20:11:45 +0000
@@ -1,6 +1,17 @@
1[run]1[run]
2branch = True2branch = True
3source = plainbox3source = plainbox
4omit =
5 plainbox/tests.py
6 plainbox/vendor/*
7 plainbox/test_*
8 plainbox/impl/test_*
9 plainbox/impl/integration_tests.py
10 plainbox/impl/commands/test_*
11 plainbox/impl/exporter/test_*
12 plainbox/impl/transport/test_*
13 plainbox/impl/secure/test_*
14 plainbox/testing_utils/test_*
415
5[report]16[report]
6exclude_lines =17exclude_lines =
718
=== modified file 'plainbox/MANIFEST.in'
--- plainbox/MANIFEST.in 2012-12-03 16:15:23 +0000
+++ plainbox/MANIFEST.in 2013-05-09 20:11:45 +0000
@@ -1,3 +1,8 @@
1include README.md1include README.md
2include COPYING2include COPYING
3include mk-interesting-graphs.sh3include mk-interesting-graphs.sh
4recursive-include plainbox/test-data/ *.json *.xml *.txt
5recursive-include docs *.rst
6include docs/conf.py
7include plainbox/data/report/hardware-1_0.rng
8include plainbox/data/org.freedesktop.policykit.pkexec.policy
49
=== removed file 'plainbox/README.md'
--- plainbox/README.md 2013-02-22 16:26:25 +0000
+++ plainbox/README.md 1970-01-01 00:00:00 +0000
@@ -1,122 +0,0 @@
1plainbox
2========
3
4plainbox is a plain replacement for checkbox
5
6[![Build Status](https://travis-ci.org/zyga/plainbox.png)](https://travis-ci.org/zyga/checkbox)
7
8
9Hacking
10=======
11
12To start hacking use virtualenv with python3. Three steps:
13
14
151. First install a couple of packages:
16
17 $ sudo apt-get install python-virtualenv python3-dev
18
192. Then set up the virtualenv. A convenience script is provided to do this for
20 you:
21
22 $ ./mk-venv.sh /path/to/venv
23
24This will create a virtualenv under /tmp/venv and show the command to activate
25it.
26
27You can also set this up manually:
28
29 $ virtualenv -p python3 /path/to/venv
30
31If you do the manual setup and you're on Ubuntu, you'll need to update the
32version of distribute that is installed inside the virtualenv to install
33coverage. If you used the convenience script, it takes care of this part for
34you.
35
36 (venv) $ easy_install -U distribute
37 (venv) $ easy_install -U coverage
38
393. Once your virtualenv is set up, you need to activate it:
40
41 $ . /path/to/venv/bin/activate
42
43
44Then 'develop' the package, this will setup proper path imports and create stub
45executables for you. All imports will now use your directory (no need to set
46PYTHONPATH to anything)
47
48 (venv) $ python3 setup.py develop
49
50You will be now able to run plainbox:
51
52 (venv) $ plainbox --help
53
54Testing
55=======
56
57When hacking, run tests with code coverage (peek at .coveragerc):
58
59 (venv) $ coverage run setup.py test
60
61You can also use the standard 'discover' command from python3 unittest module:
62
63 (venv) $ coverage run -m unittest discover
64
65...then look at test report coverage in the console:
66
67 (venv) $ coverage report
68
69...or in your browser:
70
71 (venv) $ coverage html
72 (venv) $ xdg-open htmlcov/index.html
73
74Using the checkbox submodule
75============================
76
77This git tree uses the submodule system to put the entire checkbox source code
78repository in the checkbox directory. To use it, after you get the plainbox
79tree run the following commands:
80
81 $ git submodule init
82 $ git submodule update
83
84You only need to run init once, and update each time the chcekbox submodule is
85updated to point to new commit in the checkbox tree. If you use this all of
86plainbox tests and actual code will run using the embedded copy of checkbox. If
87you don't do this you need to install checkbox globally using a system package.
88
89VirtualEnv and checkbox Jobs
90============================
91
92When using checkbox inside virtualenv some jobs will fail as they need access
93to system python libraries (most notably for dbus). checkbox jobs don't rewrite
94their scripts shebang lines so when installed from the system package it will
95fail inside a typical virtualenv. This will be addressed in the next release.
96
97To work around it, temporarily, you can install plainbox without virtualbox and
98use it as is. This will work correctly (use the package from
99ppa:checkbox-dev/ppa if possible)
100
101Known Issues
102============
103
104There are a few issues that we are currently aware of:
105
1061) Expressions are not evaluated the same way as they were in checkbox. This
107affects only a few jobs and will be corrected in the next release. Most likely
108we will adapt jobs to follow plainbox logic and leave the checkbox interpreter
109as is as plainbox is less surprising and actually fixes one important bug where
110an expression like:
111
112 package.name == "foo" and package.version == "1.0"
113
114When executed inside checkbox it would match (evaluate as true) when the
115package "foo" existed and any _other_ package with version 1.0 existed, thus
116making the test worthless. In plainbox this test behaves as expected but it is
117non the less not doing what checkbox did so it causes some problems.
118
1192) Many job types are still not supported. The only supported jobs are: shell, resource,
120local and manual
121
1223) Jobs that use the environ and user keys are not supported. Those keys are ignored
1230
=== added file 'plainbox/README.rst'
--- plainbox/README.rst 1970-01-01 00:00:00 +0000
+++ plainbox/README.rst 2013-05-09 20:11:45 +0000
@@ -0,0 +1,23 @@
1PlainBox
2========
3
4PlainBox is a hardware testing tool useful for certifying laptops, desktops and
5servers with Ubuntu. It is a replacement for the current certification tool,
6CheckBox.
7
8PlainBox complements CheckBox. It uses all the hardware test definitions,
9scripts and libraries from CheckBox. PlainBox is currently in alpha stages,
10having mostly but not entirely complete core and a developer-centric command
11line interface.
12
13External Documentation Links
14============================
15
16* `Using PlainBox <http://pythonhosted.org/plainbox/usage.html>`_
17* `Hacking on PlainBox <http://pythonhosted.org/plainbox/dev/intro.html>`_
18* `Testing PlainBox <http://pythonhosted.org/plainbox/dev/intro.html#running-plainbox-tests>`_
19
20Known Issues
21============
22
23`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>`_
024
=== added file 'plainbox/Vagrantfile'
--- plainbox/Vagrantfile 1970-01-01 00:00:00 +0000
+++ plainbox/Vagrantfile 2013-05-09 20:11:45 +0000
@@ -0,0 +1,42 @@
1# -*- mode: ruby -*-
2# vi: set ft=ruby sw=2 ts=2 :
3
4Vagrant::Config.run do |config|
5
6 config.ssh.timeout = 60
7
8 # Define a Ubuntu Server image (cloud) for the 12.04 release (precise)
9 config.vm.define :precise do |precise_config|
10 precise_config.vm.box = "precise-cloud-i386"
11 precise_config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/precise/current/precise-server-cloudimg-i386-vagrant-disk1.box"
12 end
13
14 # Define a Ubuntu Server image (cloud) for the 12.10 release (quantal)
15 config.vm.define :quantal do |quantal_config|
16 quantal_config.vm.box = "quantal-cloud-i386"
17 quantal_config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/quantal/current/quantal-server-cloudimg-i386-vagrant-disk1.box"
18 end
19
20 # Define a Ubuntu Server image (cloud) for the 13.04 release (raring)
21 config.vm.define :raring do |raring_config|
22 raring_config.vm.box = "raring-cloud-i386"
23 raring_config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/raring/current/raring-server-cloudimg-i386-vagrant-disk1.box"
24 end
25
26 # For debugging and later future GUI testing
27 if ENV.key? "VAGRANT_GUI"
28 config.vm.boot_mode = :gui
29 end
30
31 # Setup an apt cache if one is available
32 if ENV.key? "VAGRANT_APT_CACHE"
33 config.vm.provision :shell, :inline => "echo 'Acquire::http { Proxy \"#{ENV['VAGRANT_APT_CACHE']}\"; };' > /etc/apt/apt.conf"
34 end
35
36 # Update to have the latest packages, this is needed because the image comes
37 # with an old (and no longer working) apt cache and links to many packages no
38 # longer work.
39 config.vm.provision :shell, :inline => "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade --yes"
40 # Create a cool symlink so that everyone knows where to go to
41 config.vm.provision :shell, :inline => "ln --no-dereference --force --symbolic /vagrant /home/vagrant/plainbox"
42end
043
=== added directory 'plainbox/daily-package-testing'
=== added file 'plainbox/daily-package-testing/README'
--- plainbox/daily-package-testing/README 1970-01-01 00:00:00 +0000
+++ plainbox/daily-package-testing/README 2013-05-09 20:11:45 +0000
@@ -0,0 +1,18 @@
1About
2=====
3
4This Vagrantfile can be used to see how packaged version of plainbox from the
5ppa looks like.
6
7The package is built with this recipe:
8https://code.launchpad.net/~checkbox-dev/+recipe/plainbox-daily
9
10Usage instructions
11==================
12
13$TARGET is either precise or quantal
14
15$ vagrant up $TARGET
16$ vagrant ssh $TARGET
17$ plainbox --help
18$ exit
019
=== added file 'plainbox/daily-package-testing/Vagrantfile'
--- plainbox/daily-package-testing/Vagrantfile 1970-01-01 00:00:00 +0000
+++ plainbox/daily-package-testing/Vagrantfile 2013-05-09 20:11:45 +0000
@@ -0,0 +1,48 @@
1# -*- mode: ruby -*-
2# vi: set ft=ruby sw=2 ts=2 :
3
4Vagrant::Config.run do |config|
5
6 config.ssh.timeout = 60
7
8 # Define a Ubuntu Server image (cloud) for the 12.04 release (precise)
9 config.vm.define :precise do |precise_config|
10 precise_config.vm.box = "precise-cloud-i386"
11 precise_config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/precise/current/precise-server-cloudimg-i386-vagrant-disk1.box"
12 end
13
14 # Define a Ubuntu Server image (cloud) for the 12.10 release (quantal)
15 config.vm.define :quantal do |quantal_config|
16 quantal_config.vm.box = "quantal-cloud-i386"
17 quantal_config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/quantal/current/quantal-server-cloudimg-i386-vagrant-disk1.box"
18 end
19
20 # Define a Ubuntu Server image (cloud) for the 13.04 release (raring)
21 config.vm.define :raring do |raring_config|
22 raring_config.vm.box = "raring-cloud-i386"
23 raring_config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/raring/current/raring-server-cloudimg-i386-vagrant-disk1.box"
24 end
25
26 # For debugging and later future GUI testing
27 if ENV.key? "VAGRANT_GUI"
28 config.vm.boot_mode = :gui
29 end
30
31 # Setup an apt cache if one is available
32 if ENV.key? "VAGRANT_APT_CACHE"
33 config.vm.provision :shell, :inline => "echo 'Acquire::http { Proxy \"#{ENV['VAGRANT_APT_CACHE']}\"; };' > /etc/apt/apt.conf"
34 end
35
36 # Update to have the latest packages, this is needed because the image comes
37 # with an old (and no longer working) apt cache and links to many packages no
38 # longer work.
39 config.vm.provision :shell, :inline => "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade --yes"
40 # Install package that provides add-apt-repository
41 config.vm.provision :shell, :inline => "apt-get install --yes python-software-properties"
42 # Add the checkbox-dev/ppa ppa with daily builds
43 config.vm.provision :shell, :inline => "add-apt-repository ppa:checkbox-dev/ppa"
44 # Update apt cache again
45 config.vm.provision :shell, :inline => "apt-get update"
46 # Install plainbox
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches