← Back to team overview

opencompute-developers team mailing list archive

[Merge] lp:~bladernr/opencompute/ocp-cleanup into lp:opencompute/checkbox

 

Jeff Lane has proposed merging lp:~bladernr/opencompute/ocp-cleanup into lp:opencompute/checkbox.

Requested reviews:
  Open Compute Developers (opencompute-developers)

For more details, see:
https://code.launchpad.net/~bladernr/opencompute/ocp-cleanup/+merge/179783
-- 
The attached diff has been truncated due to its size.
https://code.launchpad.net/~bladernr/opencompute/ocp-cleanup/+merge/179783
Your team Open Compute Developers is requested to review the proposed merge of lp:~bladernr/opencompute/ocp-cleanup into lp:opencompute/checkbox.
=== modified file 'debian/changelog'
--- debian/changelog	2013-08-06 16:43:05 +0000
+++ debian/changelog	2013-08-12 19:42:56 +0000
@@ -12,5 +12,7 @@
   * data/ - Cleanup, removed unnecessary data files, dirs and whitelists
     bin/ - all checkbox launchers now default to 
     opencompute-ready-local.whitelist
+  * jobs/, po/, scripts/ - Cleanup, removed unnecessary job and scritp files
+    and their references in po/POTFILES.in
 
  -- Jeff Marcom <jeff.marcom@xxxxxxxxxxxxx>  Wed, 31 Jul 2013 19:36:52 -0400

=== removed file 'jobs/audio.txt.in'
--- jobs/audio.txt.in	2013-07-05 16:43:48 +0000
+++ jobs/audio.txt.in	1970-01-01 00:00:00 +0000
@@ -1,222 +0,0 @@
-plugin: shell 
-name: audio/list_devices
-requires:
- device.category == 'AUDIO'
- package.name == 'alsa-base'
-command: cat /proc/asound/cards
-_description: Test to detect audio devices
-
-plugin: manual
-name: audio/playback_auto
-depends: audio/list_devices
-requires:
- device.category == 'AUDIO'
- package.name == 'alsa-base'
- package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0'
- package.name == 'pulseaudio-utils'
-command: audio_settings store --file=$CHECKBOX_DATA/pulseaudio_settings; audio_settings set --device=pci --volume=50; gst_pipeline_test -t 2 'audiotestsrc wave=sine freq=512 ! audioconvert ! audioresample ! autoaudiosink'; EXIT_CODE=$?; audio_settings restore --file=$CHECKBOX_DATA/pulseaudio_settings; exit $EXIT_CODE
-_description:
- PURPOSE:
-     This test will check that internal speakers work correctly
- STEPS:
-     1. Make sure that no external speakers or headphones are connected
-        If testing a desktop, external speakers are allowed
-     2. Click the Test button to play a brief tone on your audio device
- VERIFICATION:
-     Did you hear a tone?
-
-plugin: manual
-name: audio/playback_hdmi
-requires:
- device.category == 'AUDIO'
- package.name == 'alsa-base'
- package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0'
- package.name == 'pulseaudio-utils'
-command:
- audio_settings store --verbose --file=$CHECKBOX_DATA/pulseaudio_settings; audio_settings set --verbose --device=hdmi --volume=50; gst_pipeline_test -t 2 --device hdmi 'audiotestsrc wave=sine freq=512 ! audioconvert ! audioresample ! autoaudiosink'; EXIT_CODE=$?; audio_settings restore --verbose --file=$CHECKBOX_DATA/pulseaudio_settings; exit $EXIT_CODE
-_description:
- PURPOSE:
-     HDMI audio interface verification
- STEPS:
-     1. Plug an external HDMI device with sound (Use only one HDMI/DisplayPort interface at a time for this test)
-     2. Click the Test button
- VERIFICATION:
-     Did you hear the sound from the HDMI device?
-
-plugin: manual
-name: audio/playback_displayport
-requires:
- device.category == 'AUDIO'
- package.name == 'alsa-base'
- package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0'
- package.name == 'pulseaudio-utils'
-command:
- audio_settings store --verbose --file=$CHECKBOX_DATA/pulseaudio_settings; audio_settings set --verbose --device=hdmi --volume=50; gst_pipeline_test -t 2 --device hdmi 'audiotestsrc wave=sine freq=512 ! audioconvert ! audioresample ! autoaudiosink'; EXIT_CODE=$?; audio_settings restore --verbose --file=$CHECKBOX_DATA/pulseaudio_settings; exit $EXIT_CODE
-_description:
- PURPOSE:
-     DisplayPort audio interface verification
- STEPS:
-     1. Plug an external DisplayPort device with sound (Use only one HDMI/DisplayPort interface at a time for this test)
-     2. Click the Test button
- VERIFICATION:
-     Did you hear the sound from the DisplayPort device?
-
-plugin: manual
-name: audio/playback_headphones
-depends: audio/list_devices
-requires:
- device.category == 'AUDIO'
- package.name == 'alsa-base'
- package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0'
- package.name == 'pulseaudio-utils'
-command: audio_settings store --file=$CHECKBOX_DATA/pulseaudio_settings; audio_settings set --device=pci --volume=50; gst_pipeline_test -t 2 'audiotestsrc wave=sine freq=512 ! audioconvert ! audioresample ! autoaudiosink'; EXIT_CODE=$?; audio_settings restore --file=$CHECKBOX_DATA/pulseaudio_settings; exit $EXIT_CODE
-_description:
- PURPOSE:
-     This test will check that headphones connector works correctly
- STEPS:
-     1. Connect a pair of headphones to your audio device
-     2. Click the Test button to play a sound to your audio device
- VERIFICATION:
-     Did you hear a sound through the headphones and did the sound play without any distortion, clicks or other strange noises from your headphones?
-
-plugin: manual
-name: audio/alsa_record_playback_internal
-depends: audio/playback_auto
-requires:
- device.category == 'AUDIO'
- package.name == 'alsa-base'
- package.name == 'pulseaudio-utils'
- package.name == 'gstreamer1.0-plugins-good' or package.name == 'gstreamer0.10-plugins-good'
-command: audio_settings store --file=$CHECKBOX_DATA/pulseaudio_settings; audio_settings set --device=pci --volume=50; alsa_record_playback; EXIT_CODE=$?; audio_settings restore --file=$CHECKBOX_DATA/pulseaudio_settings; exit $EXIT_CODE
-_description:
- PURPOSE:
-     This test will check that recording sound using the onboard microphone works correctly
- STEPS:
-     1. Disconnect any external microphones that you have plugged in
-     2. Click "Test", then speak into your internal microphone
-     3. After a few seconds, your speech will be played back to you.
- VERIFICATION:
-     Did you hear your speech played back?
-
-plugin: manual
-name: audio/alsa_record_playback_external
-depends: audio/playback_headphones
-requires:
- device.category == 'AUDIO'
- package.name == 'alsa-base'
- package.name == 'pulseaudio-utils'
- package.name == 'gstreamer1.0-plugins-good' or package.name == 'gstreamer0.10-plugins-good'
-command: audio_settings store --file=$CHECKBOX_DATA/pulseaudio_settings; audio_settings set --device=pci --volume=50; alsa_record_playback; EXIT_CODE=$?; audio_settings restore --file=$CHECKBOX_DATA/pulseaudio_settings; exit $EXIT_CODE
-_description:
- PURPOSE:
-     This test will check that recording sound using an external microphone works correctly
- STEPS:
-     1. Connect a microphone to your microphone port
-     2. Click "Test", then speak into the external microphone
-     3. After a few seconds, your speech will be played back to you
- VERIFICATION:
-     Did you hear your speech played back?
-
-plugin: manual
-name: audio/alsa_record_playback_usb
-requires:
- device.category == 'AUDIO'
- package.name == 'alsa-base'
- package.name == 'pulseaudio-utils'
- package.name == 'gstreamer1.0-plugins-good' or package.name == 'gstreamer0.10-plugins-good'
-command: audio_settings store --file=$CHECKBOX_DATA/pulseaudio_settings; audio_settings set --device=usb --volume=50; alsa_record_playback; EXIT_CODE=$?; audio_settings restore --file=$CHECKBOX_DATA/pulseaudio_settings; exit $EXIT_CODE
-_description:
- PURPOSE:
-     This test will check that a USB audio device works correctly
- STEPS:
-     1. Connect a USB audio device to your system
-     2. Click "Test", then speak into the microphone
-     3. After a few seconds, your speech will be played back to you
- VERIFICATION:
-     Did you hear your speech played back through the USB headphones?
-
-plugin: shell
-name: audio/alsa_record_playback_automated
-requires:
- package.name == 'python3-gi'
- package.name == 'gir1.2-gstreamer-1.0'
- package.name == 'libgstreamer1.0-0'
- package.name == 'gstreamer1.0-plugins-good'
- package.name == 'gstreamer1.0-pulseaudio'
- package.name == 'alsa-base'
- device.category == 'AUDIO'
-command: audio_test
-_description:
- Play back a sound on the default output and listen for it on the 
- default input.
-
-plugin: shell
-name: audio/alsa_info_collect
-command: alsa_info --no-dialog --no-upload --output ${CHECKBOX_DATA}/alsa_info.log
-_description:
- Collect audio-related system information. This data can be used to
- simulate this computer's audio subsystem and perform more detailed tests
- under a controlled environment.
-
-plugin: attachment
-name: audio/alsa_info_attachment
-depends: audio/alsa_info_collect
-command: [ -e ${CHECKBOX_DATA}/alsa_info.log ] && cat ${CHECKBOX_DATA}/alsa_info.log
-_description:
- Attaches the audio hardware data collection log to the results.
-
-plugin: manual
-name: audio/channels
-command: speaker-test -c 2 -l 1 -t wav
-_description:
- PURPOSE:
-     Check that the various audio channels are working properly
- STEPS:
-     1. Click the Test button
- VERIFICATION:
-     You should clearly hear a voice from the different audio channels
-
-plugin: shell
-name: audio/check_volume
-requires:
- package.name == 'pulseaudio-utils'
- device.category == 'AUDIO'
-command: volume_test --minvol 1 --maxvol 100
-_description:
- This test will verify that the volume levels are at an acceptable level on
- your local system.  The test will validate that the volume is greater than
- or equal to minvol and less than or equal to maxvol for all sources (inputs)
- and sinks (outputs) recognized by PulseAudio.  It will also validate that the
- active source and sink are not muted.  You should not manually adjust the 
- volume or mute before running this test.
-
-plugin: manual
-name: audio/external-lineout
-_description:
- PURPOSE:
-      Check that external line out connection works correctly
- STEPS:
-      1. Insert cable to speakers (with built-in amplifiers) on the line out port
-      2. Open system sound preferences, 'Output' tab, select 'Line-out' on the connector list. Click the Test button
-      3. On the system sound preferences, select 'Internal Audio' on the device list and click 'Test Speakers' to check left and right channel
- VERIFICATION:
-      1. Do you hear a sound in the speakers? The internal speakers should *not* be muted automatically
-      2. Do you hear the sound coming out on the corresponding channel?
-
-plugin: manual
-name: audio/external-linein
-requires:
- device.category == 'AUDIO'
- package.name == 'alsa-base'
- package.name == 'pulseaudio-utils'
- package.name == 'gstreamer1.0-plugins-good' or package.name == 'gstreamer0.10-plugins-good'
-command: audio_settings store --file=$CHECKBOX_DATA/pulseaudio_settings; audio_settings set --device=pci --volume=50; alsa_record_playback; EXIT_CODE=$?; audio_settings restore --file=$CHECKBOX_DATA/pulseaudio_settings; exit $EXIT_CODE
-_description:
- PURPOSE:
-     Check that external line in connection works correctly
- STEPS:
-     1. Use a cable to connect the line in port to an external line out source.
-     2. Open system sound preferences, 'Input' tab, select 'Line-in' on the connector list. Click the Test button
-     3. After a few seconds, your recording will be played back to you.
- VERIFICATION:
-     Did you hear your recording?

=== removed file 'jobs/bluetooth.txt.in'
--- jobs/bluetooth.txt.in	2013-01-11 08:49:44 +0000
+++ jobs/bluetooth.txt.in	1970-01-01 00:00:00 +0000
@@ -1,90 +0,0 @@
-
-plugin: shell
-name: bluetooth/detect-output
-requires:
- package.name == 'bluez'
- device.category == 'BLUETOOTH'
-command:
- if rfkill list bluetooth | grep -q 'Hard blocked: yes'; then
-   echo "rfkill shows BT is hard blocked"
- fi
- if rfkill list bluetooth | grep -q 'Soft blocked: yes'; then
-   echo "rfkill shows BT is soft blocked, removing before testing"
-   rfkill unblock bluetooth
-   sleep 3
- fi
- output=$(hcitool dev | tail -n+2 | awk '{print $2}' | tee $CHECKBOX_DATA/bluetooth_address)
- echo "$output"
- if [ -z "$output" ]; then
-     "BT hardware not available"
-     exit 1
- fi
-_description:
- Automated test to store bluetooth device information in checkbox report
-
-plugin: manual
-name: bluetooth/browse-files
-depends: bluetooth/detect-output
-_description:
- PURPOSE:
-     This test will check that bluetooth connection works correctly
- STEPS:
-     1. Enable bluetooth on any mobile device (PDA, smartphone, etc.)
-     2. Click on the bluetooth icon in the menu bar
-     3. Select 'Setup new device'
-     4. Look for the device in the list and select it
-     5. In the device write the PIN code automatically chosen by the wizard
-     6. The device should pair with the computer
-     7. Right-click on the bluetooth icon and select browse files
-     8. Authorize the computer to browse the files in the device if needed
-     9. You should be able to browse the files
- VERIFICATION:
-     Did all the steps work?
-
-plugin: manual
-name: bluetooth/file-transfer
-depends: bluetooth/browse-files bluetooth/detect-output
-_description:
- PURPOSE:
-     This test will check that you can transfer information through a bluetooth connection
- STEPS:
-     1. Make sure that you're able to browse the files in your mobile device
-     2. Copy a file from the computer to the mobile device
-     3. Copy a file from the mobile device to the computer
- VERIFICATION:
-     Were all files copied correctly?
-
-plugin: manual
-name: bluetooth/audio
-depends: bluetooth/detect-output
-command: arecord -d 5 -D bluetooth -f S16_LE | aplay -D bluetooth -f S16_LE
-_description:
- PURPOSE:
-     This test will check that you can record and hear audio using a bluetooth audio device
- STEPS:
-     1. Enable the bluetooth headset
-     2. Click on the bluetooth icon in the menu bar
-     3. Select 'Setup new device'
-     4. Look for the device in the list and select it
-     5. In the device write the PIN code automatically chosen by the wizard
-     6. The device should pair with the computer
-     7. Click "Test" to record for five seconds and reproduce in the bluetooth device
- VERIFICATION:
-     Did you hear the sound you recorded in the bluetooth
-
-plugin: manual
-name: bluetooth/HID
-depends: bluetooth/detect-output
-command: keyboard_test
-_description:
- PURPOSE:
-     This test will check that you can use a BlueTooth HID device
- STEPS:
-     1. Enable either a BT mouse or keyboard
-     2. Click on the bluetooth icon in the menu bar
-     3. Select 'Setup new device'
-     4. Look for the device in the list and select it
-     5. For mice, perform actions such as moving the pointer, right and left button clicks and double clicks
-     6. For keyboards, click the Test button to lauch a small tool. Enter some text into the tool and close it.
- VERIFICATION:
-     Did the device work as expected?

=== removed file 'jobs/camera.txt.in'
--- jobs/camera.txt.in	2013-05-03 14:31:50 +0000
+++ jobs/camera.txt.in	1970-01-01 00:00:00 +0000
@@ -1,48 +0,0 @@
-plugin: shell
-name: camera/detect
-requires:
- device.category == 'CAPTURE'
-command: camera_test detect
-_description: This Automated test attempts to detect a camera.
-
-plugin: user-verify
-name: camera/display
-depends: camera/detect
-requires:
- device.category == 'CAPTURE'
-command: camera_test display
-_description:
- PURPOSE:
-     This test will check that the built-in camera works
- STEPS:
-     1. Click on Test to display a video capture from the camera for ten seconds.
- VERIFICATION:
-     Did you see the video capture?
-
-plugin: user-verify
-name: camera/still
-depends: camera/detect
-requires:
- package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0'
- package.name == 'eog'
- package.name == 'fswebcam' or package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0'
- device.category == 'CAPTURE'
-command: camera_test still
-_description:
- PURPOSE:
-     This test will check that the built-in camera works
- STEPS:
-     1. Click on Test to display a still image from the camera for ten seconds.
- VERIFICATION:
-     Did you see the image?
-
-plugin: shell
-name: camera/multiple-resolution-images
-depends: camera/detect
-requires:
- package.name == 'fswebcam' or package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0'
- device.category == 'CAPTURE'
-command: camera_test resolutions
-_description:
-  Takes multiple pictures based on the resolutions supported by the camera and
-  validates their size and that they are of a valid format.

=== removed file 'jobs/codecs.txt.in'
--- jobs/codecs.txt.in	2012-06-07 12:26:26 +0000
+++ jobs/codecs.txt.in	1970-01-01 00:00:00 +0000
@@ -1,29 +0,0 @@
-plugin: manual
-name: codecs/ogg-vorbis
-requires:
- package.name == 'gstreamer0.10-plugins-base' or package.name == 'gstreamer1.0-plugins-base'
- package.name == 'totem' and package.name == 'ubuntu-sounds'
-command: totem /usr/share/sounds/ubuntu/stereo/system-ready.ogg
-_description:
- PURPOSE:
-    This test will verify your system's ability to play Ogg Vorbis audio files.
- STEPS:
-    1. Click Test to play an Ogg Vorbis file (.ogg)
-    2. Please close the player to proceed.
- VERIFICATION:
-    Did the sample play correctly?
-
-plugin: manual
-name: codecs/wav
-requires:
- package.name == 'gstreamer0.10-plugins-good' or package.name == 'gstreamer1.0-plugins-good'
- package.name == 'totem' and package.name == 'alsa-utils'
-command: totem /usr/share/sounds/alsa/Noise.wav
-_description:
- PURPOSE:
-    This test will verify your system's ability to play Wave Audio files.
- STEPS:
-    1. Select Test to play a Wave Audio format file (.wav)
-    2. Please close the player to proceed.
- VERIFICATION:
-    Did the sample play correctly?

=== removed file 'jobs/daemons.txt.in'
--- jobs/daemons.txt.in	2012-10-09 15:21:35 +0000
+++ jobs/daemons.txt.in	1970-01-01 00:00:00 +0000
@@ -1,66 +0,0 @@
-plugin: shell
-name: daemons/atd
-requires: package.name == 'at'
-command: pgrep -f '/usr/sbin/atd' >/dev/null
-_description: Test if the atd daemon is running when the package is installed.
-
-plugin: shell
-name: daemons/cron
-requires: package.name == 'cron'
-command: pgrep -f '/usr/sbin/cron' >/dev/null
-_description: Test if the cron daemon is running when the package is installed.
-
-plugin: shell
-name: daemons/cupsd
-requires: package.name == 'cupsys'
-command: pgrep -f '/usr/sbin/cupsd' >/dev/null
-_description: Test if the cupsd daemon is running when the package is installed.
-
-plugin: shell
-name: daemons/getty
-requires: package.name == 'util-linux'
-command: pgrep -f '/sbin/getty' >/dev/null
-_description: Test if the getty daemon is running when the package is installed.
-
-plugin: shell
-name: daemons/init
-requires: package.name == 'upstart'
-command: pgrep -f '/sbin/init' >/dev/null
-_description: Test if the init daemon is running when the package is installed.
-
-plugin: shell
-name: daemons/klogd
-requires: package.name == 'klogd'
-command: pgrep -f '/sbin/klogd' >/dev/null
-_description: Test if the klogd daemon is running when the package is installed.
-
-plugin: shell
-name: daemons/nmbd
-requires: package.name == 'samba'
-command: pgrep -f '/usr/sbin/nmbd' >/dev/null
-_description: Test if the nmbd daemon is running when the package is installed.
-
-plugin: shell
-name: daemons/smbd
-requires: package.name == 'samba'
-command: pgrep -f '/usr/sbin/smbd' >/dev/null
-_description: Test if the smbd daemon is running when the package is installed.
-
-plugin: shell
-name: daemons/syslogd
-requires: package.name == 'syslogd'
-command: pgrep -f '/sbin/syslogd' >/dev/null
-_description: Test if the syslogd daemon is running when the package is installed.
-
-plugin: shell
-name: daemons/udevd
-requires:
- package.name == 'udevd'
-command: pgrep -f '/sbin/udevd' >/dev/null
-_description: Test if the udevd daemon is running when the package is installed.
-
-plugin: shell
-name: daemons/winbindd
-requires: package.name == 'winbind'
-command: pgrep -f '/usr/sbin/winbindd' >/dev/null
-_description: Test if the winbindd daemon is running when the package is installed.

=== removed file 'jobs/esata.txt.in'
--- jobs/esata.txt.in	2013-03-07 07:46:10 +0000
+++ jobs/esata.txt.in	1970-01-01 00:00:00 +0000
@@ -1,37 +0,0 @@
-plugin: user-interact
-name: esata/insert
-command: removable_storage_watcher insert ata_serial_esata
-_description:
- PURPOSE:
-     This test will check the system can detect the insertion of an eSATA HDD
- STEPS:
-     1. Click 'Test' to begin the test. This test will
-        timeout and fail if the insertion has not been detected within 20 seconds.
-     2. Plug an eSATA HDD into an available eSATA port.
- VERIFICATION:
-     The verification of this test is automated. Do not change the automatically
-     selected result
-
-plugin: shell
-name: esata/storage-test
-user: root
-depends: esata/insert
-command: removable_storage_test -s 268400000 ata_serial_esata
-_description:
- This is an automated test which performs read/write operations on an attached
- eSATA HDD
-
-plugin: user-interact
-name: esata/remove
-depends: esata/storage-test
-command: removable_storage_watcher remove ata_serial_esata
-_description:
- PURPOSE:
-     This test will check the system can detect the removal of an eSATA HDD
- STEPS:
-     1. Click 'Test' to begin the test. This test will timeout and fail if
-        the removal has not been detected within 20 seconds.
-     2. Remove the previously attached eSATA HDD from the eSATA port.
- VERIFICATION:
-     The verification of this test is automated. Do not change the automatically
-     selected result

=== removed file 'jobs/expresscard.txt.in'
--- jobs/expresscard.txt.in	2012-10-23 21:52:31 +0000
+++ jobs/expresscard.txt.in	1970-01-01 00:00:00 +0000
@@ -1,10 +0,0 @@
-plugin: manual
-name: expresscard/verification
-_description:
- PURPOSE:
-     This will verify that an ExpressCard slot can detect inserted devices.
-     If you do not have an ExpressCard slot, please skip test.
- STEPS:
-     1. Plug an ExpressCard device into the ExpressCard slot
- VERIFICATION:
-     Was the device correctly detected?

=== removed file 'jobs/fingerprint.txt.in'
--- jobs/fingerprint.txt.in	2013-07-05 16:43:48 +0000
+++ jobs/fingerprint.txt.in	1970-01-01 00:00:00 +0000
@@ -1,29 +0,0 @@
-plugin: manual
-name: fingerprint/login
-_description:
- PURPOSE:
-    This test will verify that a fingerprint reader will work properly for logging into your system. This test case assumes that there's a testing account from which test cases are run and a personal account that the tester uses to verify the fingerprint reader
- STEPS:
-    1. Click on the User indicator on the left side of the panel (your user name).
-    2. Select "Switch User Account"
-    3. On the LightDM screen select your username.
-    4. Use the fingerprint reader to login.
-    5. Click on the user switcher applet.
-    6. Select the testing account to continue running tests.
- VERIFICATION:
-    Did the authentication procedure work correctly?
-
-plugin: manual
-name: fingerprint/unlock
-_description:
- PURPOSE:
-    This test will verify that a fingerprint reader can be used to unlock a locked system.
- STEPS:
-    1. Click on the Session indicator (Cog icon on the Left side of the panel) .
-    2. Select 'Lock screen'.
-    3. Press any key or move the mouse.
-    4. A window should appear that provides the ability to unlock either typing your password or using fingerprint authentication.
-    5. Use the fingerprint reader to unlock.
-    6. Your screen should be unlocked.
- VERIFICATION:
-    Did the authentication procedure work correctly?

=== removed file 'jobs/firewire.txt.in'
--- jobs/firewire.txt.in	2013-03-07 07:46:10 +0000
+++ jobs/firewire.txt.in	1970-01-01 00:00:00 +0000
@@ -1,38 +0,0 @@
-plugin: user-interact
-name: firewire/insert
-command: removable_storage_watcher insert firewire
-_description:
- PURPOSE:
-     This test will check the system can detect the insertion of a FireWire HDD
- STEPS:
-     1. Click 'Test' to begin the test. This test will
-        timeout and fail if the insertion has not been detected within 20 seconds.
-     2. Plug a FireWire HDD into an available FireWire port.
- VERIFICATION:
-     The verification of this test is automated. Do not change the automatically
-     selected result
-
-plugin: shell
-name: firewire/storage-test
-user: root
-depends: firewire/insert
-command: removable_storage_test -s 268400000 firewire
-_description:
- This is an automated test which performs read/write operations on an attached
- FireWire HDD
-
-plugin: user-interact
-name: firewire/remove
-depends: firewire/storage-test
-command: removable_storage_watcher remove firewire
-_description:
- PURPOSE:
-     This test will check the system can detect the removal of a FireWire HDD
- STEPS:
-     1. Click 'Test' to begin the test. This test will timeout and fail if
-        the removal has not been detected within 20 seconds.
-     2. Remove the previously attached FireWire HDD from the FireWire port.
- VERIFICATION:
-     The verification of this test is automated. Do not change the automatically
-     selected result
-

=== removed file 'jobs/floppy.txt.in'
--- jobs/floppy.txt.in	2011-07-07 10:00:04 +0000
+++ jobs/floppy.txt.in	1970-01-01 00:00:00 +0000
@@ -1,13 +0,0 @@
-plugin: local
-name: floppy/check
-requires: device.driver == 'floppy'
-_description: Floppy test
-command:
- cat <<'EOF' | run_templates -t -s 'udev_resource | filter_templates -w "driver=floppy"'
- plugin: shell
- name: floppy/check_`ls /sys$path/driver/*/*/*/block`
- requires: device.path == "$path"
- description: Floppy test for $product
- user: root
- command: floppy_test /dev/`ls /sys$path/driver/*/*/*/block`
- EOF

=== removed file 'jobs/graphics.txt.in'
--- jobs/graphics.txt.in	2013-05-10 13:03:39 +0000
+++ jobs/graphics.txt.in	1970-01-01 00:00:00 +0000
@@ -1,223 +0,0 @@
-plugin: shell
-name: graphics/driver_version
-command: graphics_driver
-_description: Parses Xorg.0.Log and discovers the running X driver and version
-
-plugin: shell
-name: graphics/xorg-version
-requires: package.name == "x11-utils"
-command: xdpyinfo | grep "^X.Org version" | cut -d ':' -f 2 | tr -d ' '
-_description: Test to output the Xorg version
-
-plugin: manual
-name: graphics/resolution-change
-depends: graphics/xorg-version
-_description:
- PURPOSE:
-     This test will verify that the GUI is usable after manually changing resolution
- STEPS:
-     1. Open the Displays application
-     2. Select a new resolution from the dropdown list
-     3. Click on Apply
-     4. Select the original resolution from the dropdown list
-     5. Click on Apply
- VERIFICATION:
-     Did the resolution change as expected?
-
-plugin: shell
-name: graphics/xorg-process
-requires:
- package.name == 'xorg'
- package.name == 'procps'
-command: pgrep -f '/usr/bin/X' >/dev/null
-_description: Test that the X process is running.
-
-plugin: shell
-name: graphics/xorg-failsafe
-requires: package.name == 'xorg'
-command: ! test -e /var/log/Xorg.failsafe.log
-_description: Test that the X is not running in failsafe mode.
-
-plugin: user-verify
-name: graphics/resolution
-requires:
- device.category == 'VIDEO'
-command: resolution_test
-_description:
- PURPOSE:
-     This test will verify the default display resolution
- STEPS:
-     1. This display is using the following resolution:
- INFO:
-     $output
- VERIFICATION:
-     Is this acceptable for your display?
-
-plugin: shell
-name: graphics/minimum_resolution
-requires:
- device.category == 'VIDEO'
-command: resolution_test --horizontal 800 --vertical 600
-_description:
- Ensure the current resolution meets or exceeds the recommended minimum
- resolution (800x600). See here for details:
- .
- https://help.ubuntu.com/community/Installation/SystemRequirements
-
-name: graphics/modes
-plugin: shell
-command: graphics_modes_info
-_description: Collect info on graphics modes (screen resolution and refresh rate)
-
-name: graphics/color_depth
-plugin: shell
-command: color_depth_info
-_description: Collect info on color depth and pixel format.
-
-name: graphics/fresh_rate
-plugin: shell
-command: fresh_rate_info
-_description: Collect info on fresh rate.
-
-name: graphics/graphic_memory
-plugin: shell
-command: graphic_memory_info
-_description: Collect info on graphic memory.
-
-plugin: user-verify
-name: graphics/display
-requires: 
- package.name == 'xorg'
- package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0'
-command: gst_pipeline_test -t 2 'videotestsrc ! ffmpegcolorspace ! autovideosink'
-_description:
- PURPOSE:
-     This test will test the default display
- STEPS:
-     1. Click "Test" to display a video test.
- VERIFICATION:
-     Do you see color bars and static?
-
-plugin: shell
-name: graphics/VESA_drivers_not_in_use
-command: cat /var/log/Xorg.0.log | perl -e '$a=0;while(<>){$a++ if /Loading.*vesa_drv\.so/;$a-- if /Unloading.*vesa/&&$a}exit 1 if $a'
-_description: Check that VESA drivers are not in use
-
-plugin: user-verify
-name: graphics/cycle_resolution
-requires: package.name == 'xorg'
-depends: graphics/VESA_drivers_not_in_use
-command: xrandr_cycle --screenshot-dir $CHECKBOX_DATA
-_description:
- PURPOSE:
-     This test cycles through the detected video modes
- STEPS:
-     1. Click "Test" to start cycling through the video modes
- VERIFICATION:
-     Did the screen appear to be working for each mode?
-
-plugin: user-verify
-name: graphics/rotation
-depends: graphics/xorg-version
-command: rotation_test
-_description:
- PURPOSE:
-     This test will test display rotation
- STEPS:
-     1. Click "Test" to test display rotation. The display will be rotated every 4 seconds.
-     2. Check if all rotations (normal right inverted left) took place without permanent screen corruption
- VERIFICATION:
-     Did the display rotation take place without without permanent screen corruption?
-
-plugin: shell
-name: graphics/compiz_check
-requires: package.name == 'nux-tools'
-command: set -o pipefail; /usr/lib/nux/unity_support_test -c -p | ansi_parser
-_description: Check that hardware is able to run compiz
-
-plugin: shell
-name: graphics/unity-support
-requires: package.name == 'nux-tools'
-command: set -o pipefail; /usr/lib/nux/unity_support_test -p | ansi_parser
-_description: Check that hardware is able to run Unity 3D
-
-plugin: user-verify
-name: graphics/glxgears
-requires: package.name == 'mesa-utils'
-command: glxgears; true
-_description:
- PURPOSE:
-     This test tests the basic 3D capabilities of your video card
- STEPS:
-     1. Click "Test" to execute an OpenGL demo. Press ESC at any time to close.
-     2. Verify that the animation is not jerky or slow.
- VERIFICATION:
-     1. Did the 3d animation appear?
-     2. Was the animation free from slowness/jerkiness?
-
-plugin: shell
-name: graphics/3d_window_open_close
-requires: package.name == 'mesa-utils'
-command: window_test -t open-close -i 10
-_description: Open and close a 3D window multiple times
-
-plugin: shell
-name: graphics/3d_window_suspend_resume
-requires: package.name == 'mesa-utils'
-command: window_test -t suspend-resume -i 10
-_description: Open, suspend resume and close a 3D window multiple times
-
-plugin: shell
-name: graphics/multi_3d_windows_open_close
-requires: package.name == 'mesa-utils'
-command: window_test -t open-close-multi -i 10 -w 4
-_description: Open and close 4 3D windows multiple times
-
-plugin: shell
-name: graphics/3d_window_move
-requires: package.name == 'mesa-utils'
-command: window_test -t move
-_description: Move a 3D window around the screen
-
-plugin: shell
-name: graphics/screenshot
-requires: package.name == 'fswebcam'
-command: set -o pipefail; camera_test still --device=/dev/external_webcam -f ${CHECKBOX_DATA}/screenshot.jpg -q 2>&1 | ansi_parser
-_description:
- PURPOSE:
-     Take a screengrab of the current screen (logged on Unity desktop)
- STEPS:
-     1. Take picture using USB webcam
- VERIFICATION:
-     Review attachment manually later
-
-plugin: attachment
-name: screenshot.jpg
-depends: graphics/screenshot
-command: base64 ${CHECKBOX_DATA}/screenshot.jpg
-_description: Attaches the screenshot captured in graphics/screenshot.
-
-plugin: shell
-name: graphics/screenshot_fullscreen_video
-requires: package.name == 'fswebcam'
-command:
- dbus-launch gsettings set org.gnome.totem repeat true
- totem --fullscreen ${CHECKBOX_SHARE}/data/video/Ogg_Theora_Video.ogv 2>/dev/null &
- set -o pipefail
- sleep 15 && camera_test still --device=/dev/external_webcam -f ${CHECKBOX_DATA}/screenshot_fullscreen_video.jpg -q 2>&1 | ansi_parser
- sleep 5 && totem --quit 2>/dev/null
- dbus-launch gsettings set org.gnome.totem repeat false
-_description:
- PURPOSE:
-     Take a screengrab of the current screen during fullscreen video playback
- STEPS:
-     1. Start a fullscreen video playback
-     2. Take picture using USB webcam after a few seconds
- VERIFICATION:
-     Review attachment manually later
-
-plugin: attachment
-name: screenshot_fullscreen_video.jpg
-depends: graphics/screenshot_fullscreen_video
-command: base64 ${CHECKBOX_DATA}/screenshot_fullscreen_video.jpg
-_description: Attaches the screenshot captured in graphics/screenshot_fullscreen_video.

=== removed file 'jobs/hibernate.txt.in'
--- jobs/hibernate.txt.in	2013-04-24 13:11:53 +0000
+++ jobs/hibernate.txt.in	1970-01-01 00:00:00 +0000
@@ -1,34 +0,0 @@
-plugin: manual
-name: power-management/hibernate_advanced
-depends: power-management/rtc
-environ: CHECKBOX_DATA
-user: root
-command:
- if type -P fwts >/dev/null; then
-  echo "Calling fwts"
-  fwts_test -l $CHECKBOX_DATA/hibernate-single -f none -s s4 --s4-device-check --s4-device-check-delay=45 --s4-sleep-delay=120
- else
-  echo "Calling sleep_test"
-  sleep_test -s disk -w 120
- fi
-_description:
- PURPOSE:
-     This test will check to make sure your system can successfully hibernate (if supported)
- STEPS:
-     1. Click on Test
-     2. The system will hibernate and should wake itself within 5 minutes
-     3. If your system does not wake itself after 5 minutes, please press the power button to wake the system manually
-     4. If the system fails to resume from hibernate, please restart System Testing and mark this test as Failed
- VERIFICATION:
-     Did the system successfully hibernate and did it work properly after waking up?
-
-plugin: shell
-name: power-management/hibernate-single-log-check
-command: [ -e $CHECKBOX_DATA/hibernate-single.log ] && sleep_test_log_check -v s4 $CHECKBOX_DATA/hibernate-single.log
-_description:
- Automated check of the hibernate log for errors discovered by fwts
-
-plugin: attachment
-name: power-management/hibernate-single-log-attach
-command: [ -e $CHECKBOX_DATA/hibernate-single.log ] && cat $CHECKBOX_DATA/hibernate-single.log
-description: attaches log from single hibernate/resume test to results

=== removed file 'jobs/input.txt.in'
--- jobs/input.txt.in	2013-03-15 20:31:24 +0000
+++ jobs/input.txt.in	1970-01-01 00:00:00 +0000
@@ -1,67 +0,0 @@
-plugin: local
-name: input/pointing
-requires:
- device.category == 'MOUSE' or device.category == 'TOUCH'
-_description: Pointing device tests.
-command:
- cat <<'EOF' | run_templates -t -s 'udev_resource | filter_templates -w "category=MOUSE" -w "category=TOUCH"'
- plugin: manual
- name: input/pointing_`basename $path`
- requires: device.path == "$path"
- description:
-  PURPOSE:
-      This will test your $product device
-  STEPS:
-      1. Move the cursor with your $product.
-  VERIFICATION:
-      Did the cursor move?
- EOF
-
-plugin: manual
-name: input/mouse
-_description:
- PURPOSE:
-     This test will test your pointing device
- STEPS:
-     1. Move the cursor using the pointing device or touch the screen.
-     2. Perform some single/double/right click operations.
- VERIFICATION:
-     Did the pointing device work as expected?
-
-plugin: manual
-name: input/keyboard
-command: keyboard_test
-requires: device.category == 'KEYBOARD'
-_description:
- PURPOSE:
-     This test will test your keyboard
- STEPS:
-     1. Click on Test
-     2. On the open text area, use your keyboard to type something
- VERIFICATION:
-     Is your keyboard working properly?
-
-plugin: manual
-name: input/accelerometer_verify
-_description:
- PURPOSE:
-     Manual detection of accelerometer.
- STEPS:
-     1. Look at the specifications for your system.
- VERIFICATION:
-     Is this system supposed to have an accelerometer?
-
-plugin: user-interact
-name: input/accelerometer
-user: root
-depends: input/accelerometer_verify
-command: accelerometer_test -m
-_description:
- PURPOSE:
-     This test will test your accelerometer to see if it is detected
-     and operational as a joystiq device. 
- STEPS:
-     1. Click on Test
-     2. Tilt your hardware in the directions onscreen until the axis threshold is met. 
- VERIFICATION:
-     Is your accelerometer properly detected? Can you use the device?

=== removed file 'jobs/install.txt.in'
--- jobs/install.txt.in	2012-08-27 20:04:37 +0000
+++ jobs/install.txt.in	1970-01-01 00:00:00 +0000
@@ -1,19 +0,0 @@
-plugin: shell
-name: install/apt-get-gets-updates
-requires: package.name == 'apt'
-user: root
-command: apt-get -d -y --force-yes dist-upgrade
-_description: 
- Tests to see that apt can access repositories and get updates (does
- not install updates). This is done to confirm that you could recover
- from an incomplete or broken update.
-
-plugin: shell
-name: install/oem-config
-requires: package.name == 'oem-config-gtk' and package.name == 'python-xpresser'
-user: root
-environ: CHECKBOX_SHARE
-command: oem_config_test -u 'testaccount1' -p 'testaccount1' -d $CHECKBOX_SHARE/data/images/oem-config/
-_description: 
- Tests oem-config using Xpresser, and then checks that the user has been created successfully.
- Cleans up the newly created user after the test has passed.

=== removed file 'jobs/keys.txt.in'
--- jobs/keys.txt.in	2013-04-19 13:40:29 +0000
+++ jobs/keys.txt.in	1970-01-01 00:00:00 +0000
@@ -1,145 +0,0 @@
-plugin: manual
-name: keys/brightness
-requires: dmi.product in ['Notebook','Laptop','Portable']
-_description:
- PURPOSE:
-     This test will test the brightness key
- STEPS:
-     1. Press the brightness buttons on the keyboard
- VERIFICATION:
-     Did the brightness change following to your key presses?
-
-plugin: manual
-name: keys/volume
-requires:
- device.category == 'KEYBOARD'
-user: root
-command: key_test -s '0xe02e,0xe0ae:Volume Down' '0xe030,0xe0b0:Volume Up'
-_description:
- PURPOSE:
-     This test will test the volume keys of your keyboard
- STEPS:
-     1. Click test to open a window on which to test the volume keys.
-     2. If all the keys work, the test will be marked as passed.
-     3. If your computer has no volume keys, Skip this test.
- VERIFICATION:
-     Do the keys work as expected?
-
-plugin: manual
-name: keys/mute
-requires:
- device.category == 'KEYBOARD'
-user: root
-command: key_test -s '0xe020,0xe0a0:Mute'
-_description:
- PURPOSE:
-     This test will test the mute key of your keyboard
- STEPS:
-     1. Click test to open a window on which to test the mute key.
-     2. If the key works, the test will pass and the window will close.
- VERIFICATION:
-     Does the mute key work as expected?
-
-plugin: manual
-name: keys/sleep
-requires:
- device.category == 'KEYBOARD'
-depends: suspend/suspend_advanced
-_description:
- PURPOSE:
-     This test will test the sleep key
- STEPS:
-     1. Press the sleep key on the keyboard
-     2. Wake your system up by pressing the power button
- VERIFICATION:
-     Did the system go to sleep after pressing the sleep key?
-
-plugin: manual
-name: keys/battery-info
-requires: dmi.product in ['Notebook','Laptop','Portable']
-user: root
-command: key_test -s '0xe071,0xef1:Battery Info'
-_description:
- PURPOSE:
-     This test will test the battery information key
- STEPS:
-     If you do not have a Battery Button, skip this test
-     1. Click Test to begin
-     2. Press the Battery Info button (or combo like Fn+F3)
-     3: Close the Power Statistics tool if it opens
- VERIFICATION:
-     Did the Battery Info key work as expected?
-
-plugin: manual
-name: keys/wireless
-requires: dmi.product in ['Notebook','Laptop','Portable']
-_description:
- PURPOSE:
-     This test will test the wireless key
- STEPS:
-     1. Press the wireless key on the keyboard
-     2. Check that the wifi LED turns off or changes color
-     3. Check that wireless is disabled
-     4. Press the same key again
-     5. Check that the wifi LED turns on or changes color
-     6. Check that wireless is enabled
- VERIFICATION:
-     Did the wireless turn off on the first press and on again on the second?
-     (NOTE: the LED functionality will be reviewed in a following test. Please
-     only consider the functionality of the wifi itself here.)
-
-plugin: user-interact
-name: keys/media-control
-requires:
- device.category == 'KEYBOARD'
-user: root
-command: key_test -s 0xe010,0xe090:Previous 0xe024,0xe0a4:Stop 0xe019,0xe099:Next 0xe022,0xe0a2:Play
-_description:
- PURPOSE:
-     This test will test the media keys of your keyboard
- STEPS:
-     1. Click test to open a window on which to test the media keys.
-     2. If all the keys work, the test will be marked as passed.
-     3. If your computer has no media keys, Skip this test.
- VERIFICATION:
-     Do the keys work as expected?
-
-plugin: user-interact
-name: keys/super
-requires:
- device.category == 'KEYBOARD'
-user: root
-command: key_test -s '0xe05b,0xe0db:Left Super Key'
-_description:
- PURPOSE:
-     This test will test the super key of your keyboard
- STEPS:
-     1. Click test to open a window on which to test the super key.
-     2. If the key works, the test will pass and the window will close.
- VERIFICATION:
-     Does the super key work as expected?
-
-plugin: manual
-name: keys/video-out
-requires: dmi.product in ['Notebook','Laptop','Portable']
-_description:
- PURPOSE:
-     Validate that the External Video hot key is working as expected
- STEPS:
-     1. Plug in an external monitor
-     2. Press the display hot key to change the monitors configuration
- VERIFICATION:
-     Check that the video signal can be mirrored, extended, displayed on external or onboard only.
-
-plugin: manual
-name: keys/touchpad
-requires: dmi.product in ['Notebook','Laptop','Portable']
-_description:
- PURPOSE:
-     Verify touchpad hotkey toggles touchpad functionality on and off
- STEPS:
-     1. Verify the touchpad is functional
-     2. Tap the touchpad toggle hotkey
-     3. Tap the touchpad toggle hotkey again
- VERIFICATION:
-     Verify the touchpad has been disabled and re-enabled.

=== removed file 'jobs/led.txt.in'
--- jobs/led.txt.in	2013-04-24 03:40:17 +0000
+++ jobs/led.txt.in	1970-01-01 00:00:00 +0000
@@ -1,197 +0,0 @@
-plugin: manual
-name: led/power
-_description:
- PURPOSE:
-     Power LED verification
- STEPS:
-     1. Power LED should be on while device is switched on
- VERIFICATION:
-     Does the power LED light as expected?
-
-plugin: manual
-name: led/power-blink-suspend
-depends: suspend/suspend_advanced
-_description:
- PURPOSE:
-     Power LED verification
- STEPS:
-     1. The Power LED should blink or change color while the system is suspended
- VERIFICATION:
-     Did the Power LED blink or change color while the system was suspended for the previous suspend test?
-
-plugin: manual
-name: led/suspend
-_description:
- PURPOSE:
-     Suspend LED verification. If your system does not have a dedicated Suspend
-     LED, skip this test.
- STEPS:
-     1. The Suspend LED should blink or change color while the system is
-     supended
- VERIFICATION
-     Did the Suspend LED blink or change color while the system was suspended?
-
-plugin: manual
-name: led/battery-charging
-_description:
- PURPOSE:
-     Validate that the battery light shows charging status
- STEPS:
-     1. Let system run on battery for a while
-     2. Plug in AC plug
- VERIFICATION:
-     Did the battery indicator LED turn orange?
-
-plugin: manual
-name: led/battery-charged
-_description:
- PURPOSE:
-     Validate that the battery LED properly displays charged status
- STEPS:
-     1. Let system run on battery for a short time
-     2. Plug in AC
-     3. Let system run on AC
- VERIFICATION:
-     Does the orange battery LED shut off when system is fully charged?
-
-plugin: manual
-name: led/battery-low
-_description:
- PURPOSE:
-     Validate that the battery LED indicated low power
- STEPS:
-     1. Let system run on battery for several hours
-     2. Monitor battery LED carefully
- VERIFICATION:
-     Does the LED light orange when battery is low?
-
-plugin: manual
-name: led/hdd
-command: led_hdd_test
-_description:
- PURPOSE:
-     HDD LED verification
- STEPS:
-     1. Select "Test" to write and read a temporary file for a few seconds
-     2. HDD LED should light when writing to/reading from HDD
- VERIFICATION:
-     Did the HDD LED light?
-
-plugin: manual
-name: led/numeric-keypad
-command: keyboard_test
-_description:
- PURPOSE:
-     Numeric keypad LED verification
- STEPS:
-     1. Press "Block Num" key to toggle numeric keypad LED
-     2. Click on the "Test" button to open a window to verify your typing
-     3. Type using the numeric keypad both when the LED is on and off
- VERIFICATION:
-     1. Numeric keypad LED status should toggle everytime the "Block Num" key is pressed
-     2. Numbers should only be entered in the keyboard verification window when the LED is on
-
-plugin: manual
-name: led/caps-lock
-_description:
- PURPOSE:
-     Block cap keys LED verification
- STEPS:
-     1. Press "Block Cap Keys" to activate/deactivate cap keys blocking
-     2. Cap Keys LED should be switched on/off every time the key is pressed
- VERIFICATION:
-     Did the Cap Keys LED light as expected?
-
-plugin: manual
-name: led/wlan
-depends: keys/wireless
-_description:
- PURPOSE:
-     WLAN LED verification
- STEPS:
-     1. During the keys/wireless test you should have observed the
-     wireless LED while turning wireless back on.
-     2. WLAN LED should light or change color when wireless is turned on
- VERIFICATION:
-     Did the WLAN LED turn on or change color as expected?
-
-plugin: manual
-name: led/wlan-disabled
-depends: keys/wireless
-_description:
- PURPOSE:
-     Validate that WLAN LED shuts off when disabled
- STEPS:
-     1. During the keys/wireless test you should have observed the WLAN LED
-     while performing that test after turning wireless off.
-     2. WLAN LED should turn off or change color when wireless is turned off
- VERIFICATION:
-     Did the WLAN LED turn off or change color as expected?
-
-plugin: manual
-name: led/bluetooth
-depends: bluetooth/detect-output
-_description:
- PURPOSE:
-     Validate that the Bluetooth LED turns on and off when BT is enabled/disabled
- STEPS:
-     1. Switch bluetooth off from a hardware switch (if present)
-     2. Switch bluetooth back on
-     3. Switch bluetooth off from the panel applet
-     4. Switch bluetooth back on
- VERIFICATION:
-     Did the bluetooth LED turn off and on twice?
-
-plugin: manual
-name: led/camera
-depends: camera/detect
-command: camera_test led
-_description:
- PURPOSE:
-     Camera LED verification
- STEPS:
-     1. Select Test to activate camera
-     2. Camera LED should light for a few seconds
- VERIFICATION:
-     Did the camera LED light?
-
-plugin: manual
-name: led/touchpad
-_description:
- PURPOSE:
-     Touchpad LED verification
- STEPS:
-     1. Click on the touchpad button or press key combination to enable/disable touchpad button
-     2. Slide your finger on the touchpad
- VERIFICATION:
-     1. Touchpad LED status should toggle everytime the button is clicked or the key combination is pressed
-     2. When the LED is on, the mouse pointer should move on touchpad usage
-     3. When the LED is off, the mouse pointer should not move on touchpad usage
-
-plugin: manual
-name: led/wireless
-_description:
- PURPOSE:
-     Wireless (WLAN + Bluetooth) LED verification
- STEPS:
-     1. Make sure WLAN connection is established and Bluetooth is enabled.
-     2. WLAN/Bluetooth LED should light
-     3. Switch WLAN and Bluetooth off from a hardware switch (if present)
-     4. Switch them back on
-     5. Switch WLAN and Bluetooth off from the panel applet
-     6. Switch them back on
- VERIFICATION:
-     Did the WLAN/Bluetooth LED light as expected?
-
-plugin: manual
-name: led/mute
-depends: keys/mute
-_description:
- PURPOSE:
-     Audio Mute LED verification. Skip this test if your system does not have
-     a special Audio Mute LED
- STEPS:
-     1. Press the Mute key twice and observe the Audio LED to determine if it
-     either turned off and on or changed colors.
- VERIFICATION:
-     Did the Audio LED turn on and off change color as expected?

=== removed file 'jobs/mediacard.txt.in'
--- jobs/mediacard.txt.in	2013-05-06 21:44:33 +0000
+++ jobs/mediacard.txt.in	1970-01-01 00:00:00 +0000
@@ -1,662 +0,0 @@
-plugin: user-interact
-name: mediacard/mmc-insert
-command: removable_storage_watcher --memorycard insert sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the systems media card reader can
-     detect the insertion of a Multimedia Card (MMC) media
- STEPS:
-     1. Click "Test" and insert an MMC card into the reader.
-        If a file browser opens up, you can safely close it.
-        (Note: this test will time-out after 20 seconds.)
-     2. Do not remove the device after this test.
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: shell
-name: mediacard/mmc-storage
-depends: mediacard/mmc-insert
-user: root
-command: removable_storage_test -s 67120000 --memorycard sdio usb scsi
-_description:
- This test is automated and executes after the mediacard/mmc-insert
- test is run. It tests reading and writing to the MMC card.
-
-plugin: user-interact
-name: mediacard/mmc-remove
-depends: mediacard/mmc-insert
-command: removable_storage_watcher --memorycard remove sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the system correctly detects 
-     the removal of the MMC card from the systems card reader.
- STEPS:
-     1. Click "Test" and remove the MMC card from the reader.
-        (Note: this test will time-out after 20 seconds.)
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: user-interact
-name: mediacard/mmc-insert-after-suspend
-depends: suspend/suspend_advanced
-command: removable_storage_watcher --memorycard insert sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the systems media card reader can
-     detect the insertion of an MMC card after the system has been suspended
- STEPS:
-     1. Click "Test" and insert an MMC card into the reader.
-        If a file browser opens up, you can safely close it.
-        (Note: this test will time-out after 20 seconds.)
-     2. Do not remove the device after this test.
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: shell
-name: mediacard/mmc-storage-after-suspend
-depends: mediacard/mmc-insert-after-suspend
-user: root
-command: removable_storage_test -s 67120000 --memorycard sdio usb scsi
-_description:
- This test is automated and executes after the mediacard/mmc-insert-after-suspend test
- is run. It tests reading and writing to the MMC card after the system has been suspended.
-
-plugin: user-interact
-name: mediacard/mmc-remove-after-suspend
-depends: mediacard/mmc-insert-after-suspend
-command: removable_storage_watcher --memorycard remove sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the system correctly detects the removal
-     of an MMC card from the systems card reader after the system has been suspended.
- STEPS:
-     1. Click "Test" and remove the MMC card from the reader.
-        (Note: this test will time-out after 20 seconds.)
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: user-interact
-name: mediacard/sd-insert
-command: removable_storage_watcher --memorycard insert sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the systems media card reader can
-     detect the insertion of an UNLOCKED Secure Digital (SD) media card
- STEPS:
-     1. Click "Test" and insert an UNLOCKED SD card into the reader.
-        If a file browser opens up, you can safely close it.
-        (Note: this test will time-out after 20 seconds.)
-     2. Do not remove the device after this test.
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: shell
-name: mediacard/sd-storage
-depends: mediacard/sd-insert
-user: root
-command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
-_description:
- This test is automated and executes after the mediacard/sd-insert
- test is run. It tests reading and writing to the SD card.
-
-plugin: user-interact
-name: mediacard/sd-remove
-depends: mediacard/sd-insert
-command: removable_storage_watcher --memorycard remove sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the system correctly detects 
-     the removal of an SD card from the systems card reader.
- STEPS:
-     1. Click "Test" and remove the SD card from the reader.
-        (Note: this test will time-out after 20 seconds.)
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: user-interact
-name: mediacard/sd-insert-after-suspend
-depends: suspend/suspend_advanced
-command: removable_storage_watcher --memorycard insert sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the systems media card reader can
-     detect the insertion of an UNLOCKED SD card after the system
-     has been suspended
- STEPS:
-     1. Click "Test" and insert an UNLOCKED SD card into the reader.
-        If a file browser opens up, you can safely close it.
-        (Note: this test will time-out after 20 seconds.)
-     2. Do not remove the device after this test.
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: shell
-name: mediacard/sd-storage-after-suspend
-depends: mediacard/sd-insert-after-suspend
-user: root
-command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
-_description:
- This test is automated and executes after the mediacard/sd-insert-after-suspend test
- is run. It tests reading and writing to the SD card after the system has been suspended.
-
-plugin: user-interact
-name: mediacard/sd-remove-after-suspend
-depends: mediacard/sd-insert-after-suspend
-command: removable_storage_watcher --memorycard remove sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the system correctly detects 
-     the removal of an SD card from the systems card reader 
-     after the system has been suspended.
- STEPS:
-     1. Click "Test" and remove the SD card from the reader.
-        (Note: this test will time-out after 20 seconds.)
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: shell
-name: mediacard/sd-preinserted
-user: root
-requires: device.category == 'CARDREADER'
-command: removable_storage_test -s 268400000 --memorycard -l sdio usb scsi && removable_storage_test --memorycard sdio usb scsi
-_description:
- This is a fully automated version of mediacard/sd-automated and assumes that the
- system under test has a memory card device plugged in prior to checkbox execution.
- It is intended for SRU automated testing.
-
-plugin: user-interact
-name: mediacard/sdhc-insert
-command: removable_storage_watcher --memorycard insert sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the systems media card reader can
-     detect the insertion of a UNLOCKED Secure Digital High-Capacity 
-     (SDHC) media card
- STEPS:
-     1. Click "Test" and insert an UNLOCKED SDHC card into the reader.
-        If a file browser opens up, you can safely close it.
-        (Note: this test will time-out after 20 seconds.)
-     2. Do not remove the device after this test.
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: shell
-name: mediacard/sdhc-storage
-depends: mediacard/sdhc-insert
-user: root
-command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
-_description:
- This test is automated and executes after the mediacard/sdhc-insert
- test is run. It tests reading and writing to the SDHC card.
-
-plugin: user-interact
-name: mediacard/sdhc-remove
-depends: mediacard/sdhc-insert
-command: removable_storage_watcher --memorycard remove sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the system correctly detects 
-     the removal of an SDHC card from the systems card reader.
- STEPS:
-     1. Click "Test" and remove the SDHC card from the reader.
-        (Note: this test will time-out after 20 seconds.)
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: user-interact
-name: mediacard/sdhc-insert-after-suspend
-depends: suspend/suspend_advanced
-command: removable_storage_watcher --memorycard insert sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the systems media card reader can
-     detect the insertion of an UNLOCKED SDHC media card after the 
-     system has been suspended
- STEPS:
-     1. Click "Test" and insert an UNLOCKED SDHC card into the reader.
-        If a file browser opens up, you can safely close it.
-        (Note: this test will time-out after 20 seconds.)
-     2. Do not remove the device after this test.
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: shell
-name: mediacard/sdhc-storage-after-suspend
-depends: mediacard/sdhc-insert-after-suspend
-user: root
-command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
-_description:
- This test is automated and executes after the mediacard/sdhc-insert-after-suspend test
- is run. It tests reading and writing to the SDHC card after the system has been suspended.
-
-plugin: user-interact
-name: mediacard/sdhc-remove-after-suspend
-depends: mediacard/sdhc-insert-after-suspend
-command: removable_storage_watcher --memorycard remove sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the system correctly detects the removal
-     of an SDHC card from the systems card reader after the system has been suspended.
- STEPS:
-     1. Click "Test" and remove the SDHC card from the reader.
-        (Note: this test will time-out after 20 seconds.)
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: user-interact
-name: mediacard/cf-insert
-command: removable_storage_watcher --memorycard insert sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the systems media card reader can
-     detect the insertion of a Compact Flash (CF) media card
- STEPS:
-     1. Click "Test" and insert a CF card into the reader.
-        If a file browser opens up, you can safely close it.
-        (Note: this test will time-out after 20 seconds.)
-     2. Do not remove the device after this test.
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: shell
-name: mediacard/cf-storage
-depends: mediacard/cf-insert
-user: root
-command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
-_description:
- This test is automated and executes after the mediacard/cf-insert
- test is run. It tests reading and writing to the CF card.
-
-plugin: user-interact
-name: mediacard/cf-remove
-depends: mediacard/cf-storage
-command: removable_storage_watcher --memorycard remove sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the system correctly detects 
-     the removal of a CF card from the systems card reader.
- STEPS:
-     1. Click "Test" and remove the CF card from the reader.
-        (Note: this test will time-out after 20 seconds.)
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: user-interact
-name: mediacard/cf-insert-after-suspend
-depends: suspend/suspend_advanced
-command: removable_storage_watcher --memorycard insert sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the systems media card reader can
-     detect the insertion of a CF card after the system has been suspended
- STEPS:
-     1. Click "Test" and insert a CF card into the reader.
-        If a file browser opens up, you can safely close it.
-        (Note: this test will time-out after 20 seconds.)
-     2. Do not remove the device after this test.
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: shell
-name: mediacard/cf-storage-after-suspend
-depends: mediacard/cf-insert-after-suspend
-user: root
-command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
-_description:
- This test is automated and executes after the mediacard/cf-insert-after-suspend test
- is run. It tests reading and writing to the CF card after the system has been suspended.
-
-plugin: user-interact
-name: mediacard/cf-remove-after-suspend
-depends: mediacard/cf-insert-after-suspend
-command: removable_storage_watcher --memorycard remove sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the system correctly detects the removal
-     of a CF card from the systems card reader after the system has been suspended.
- STEPS:
-     1. Click "Test" and remove the CF card from the reader.
-        (Note: this test will time-out after 20 seconds.)
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: user-interact
-name: mediacard/sdxc-insert
-command: removable_storage_watcher --memorycard insert sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the systems media card reader can
-     detect the insertion of a Secure Digital Extended Capacity (SDXC) media card
- STEPS:
-     1. Click "Test" and insert a SDXC card into the reader.
-        If a file browser opens up, you can safely close it.
-        (Note: this test will time-out after 20 seconds.)
-     2. Do not remove the device after this test.
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: shell
-name: mediacard/sdxc-storage
-depends: mediacard/sdxc-insert
-user: root
-command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
-_description:
- This test is automated and executes after the mediacard/sdxc-insert
- test is run. It tests reading and writing to the SDXC card.
-
-plugin: user-interact
-name: mediacard/sdxc-remove
-depends: mediacard/sdxc-insert
-command: removable_storage_watcher --memorycard remove sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the system correctly detects 
-     the removal of a SDXC card from the systems card reader.
- STEPS:
-     1. Click "Test" and remove the SDXC card from the reader.
-        (Note: this test will time-out after 20 seconds.)
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: user-interact
-name: mediacard/sdxc-insert-after-suspend
-depends: suspend/suspend_advanced
-command: removable_storage_watcher --memorycard insert sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the systems media card reader can
-     detect the insertion of a SDXC card after the system has been suspended
- STEPS:
-     1. Click "Test" and insert a SDXC card into the reader.
-        If a file browser opens up, you can safely close it.
-        (Note: this test will time-out after 20 seconds.)
-     2. Do not remove the device after this test.
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: shell
-name: mediacard/sdxc-storage-after-suspend
-depends: mediacard/sdxc-insert-after-suspend
-user: root
-command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
-_description:
- This test is automated and executes after the mediacard/sdxc-insert-after-suspend test
- is run. It tests reading and writing to the SDXC card after the system has been suspended.
-
-plugin: user-interact
-name: mediacard/sdxc-remove-after-suspend
-depends: mediacard/sdxc-insert-after-suspend
-command: removable_storage_watcher --memorycard remove sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the system correctly detects the removal
-     of a SDXC card from the systems card reader after the system has been suspended.
- STEPS:
-     1. Click "Test" and remove the SDXC card from the reader.
-        If a file browser opens up, you can safely close it.
-        (Note: this test will time-out after 20 seconds.)
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: user-interact
-name: mediacard/ms-insert
-command: removable_storage_watcher --memorycard insert sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the systems media card reader can
-     detect the insertion of a Memory Stick (MS) media card
- STEPS:
-     1. Click "Test" and insert a MS card into the reader.
-        If a file browser opens up, you can safely close it.
-        (Note: this test will time-out after 20 seconds.)
-     2. Do not remove the device after this test.
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: shell
-name: mediacard/ms-storage
-depends: mediacard/ms-insert
-user: root
-command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
-_description:
- This test is automated and executes after the mediacard/ms-insert
- test is run. It tests reading and writing to the MS card.
-
-plugin: user-interact
-name: mediacard/ms-remove
-depends: mediacard/ms-insert
-command: removable_storage_watcher --memorycard remove sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the system correctly detects 
-     the removal of a MS card from the systems card reader.
- STEPS:
-     1. Click "Test" and remove the MS card from the reader.
-        (Note: this test will time-out after 20 seconds.)
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: user-interact
-name: mediacard/ms-insert-after-suspend
-depends: suspend/suspend_advanced
-command: removable_storage_watcher --memorycard insert sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the systems media card reader can
-     detect the insertion of a MS card after the system has been suspended
- STEPS:
-     1. Click "Test" and insert a MS card into the reader.
-        If a file browser opens up, you can safely close it.
-        (Note: this test will time-out after 20 seconds.)
-     2. Do not remove the device after this test.
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: shell
-name: mediacard/ms-storage-after-suspend
-depends: mediacard/ms-insert-after-suspend
-user: root
-command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
-_description:
- This test is automated and executes after the mediacard/ms-insert-after-suspend test
- is run. It tests reading and writing to the MS card after the system has been suspended.
-
-plugin: user-interact
-name: mediacard/ms-remove-after-suspend
-depends: mediacard/ms-insert-after-suspend
-command: removable_storage_watcher --memorycard remove sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the system correctly detects the removal
-     of a MS card from the systems card reader after the system has been suspended.
- STEPS:
-     1. Click "Test" and remove the MS card from the reader.
-        (Note: this test will time-out after 20 seconds.)
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: user-interact
-name: mediacard/msp-insert
-command: removable_storage_watcher --memorycard insert sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the systems media card reader can
-     detect the insertion of a Memory Stick Pro (MSP) media card
- STEPS:
-     1. Click "Test" and insert a MSP card into the reader.
-        If a file browser opens up, you can safely close it.
-        (Note: this test will time-out after 20 seconds.)
-     2. Do not remove the device after this test.
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: shell
-name: mediacard/msp-storage
-depends: mediacard/msp-insert
-user: root
-command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
-_description:
- This test is automated and executes after the mediacard/msp-insert
- test is run. It tests reading and writing to the MSP card.
-
-plugin: user-interact
-name: mediacard/msp-remove
-depends: mediacard/msp-insert
-command: removable_storage_watcher --memorycard remove sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the system correctly detects 
-     the removal of a MSP card from the systems card reader.
- STEPS:
-     1. Click "Test" and remove the MSP card from the reader.
-        (Note: this test will time-out after 20 seconds.)
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: user-interact
-name: mediacard/msp-insert-after-suspend
-depends: suspend/suspend_advanced
-command: removable_storage_watcher --memorycard insert sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the systems media card reader can
-     detect the insertion of a MSP card after the system has been suspended
- STEPS:
-     1. Click "Test" and insert a MSP card into the reader.
-        If a file browser opens up, you can safely close it.
-        (Note: this test will time-out after 20 seconds.)
-     2. Do not remove the device after this test.
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: shell
-name: mediacard/msp-storage-after-suspend
-depends: mediacard/msp-insert-after-suspend
-user: root
-command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
-_description:
- This test is automated and executes after the mediacard/msp-insert-after-suspend test
- is run. It tests reading and writing to the MSP card after the system has been suspended.
-
-plugin: user-interact
-name: mediacard/msp-remove-after-suspend
-depends: mediacard/msp-insert-after-suspend
-command: removable_storage_watcher --memorycard remove sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the system correctly detects the removal
-     of a MSP card from the systems card reader after the system has been suspended.
- STEPS:
-     1. Click "Test" and remove the MSP card from the reader.
-        (Note: this test will time-out after 20 seconds.)
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: user-interact
-name: mediacard/xd-insert
-command: removable_storage_watcher --memorycard insert sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the systems media card reader can
-     detect the insertion of a Extreme Digital (xD) media card
- STEPS:
-     1. Click "Test" and insert a xD card into the reader.
-        If a file browser opens up, you can safely close it.
-        (Note: this test will time-out after 20 seconds.)
-     2. Do not remove the device after this test.
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: shell
-name: mediacard/xd-storage
-depends: mediacard/xd-insert
-user: root
-command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
-_description:
- This test is automated and executes after the mediacard/xd-insert
- test is run. It tests reading and writing to the xD card.
-
-plugin: user-interact
-name: mediacard/xd-remove
-depends: mediacard/xd-insert
-command: removable_storage_watcher --memorycard remove sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the system correctly detects 
-     the removal of a xD card from the systems card reader.
- STEPS:
-     1. Click "Test" and remove the xD card from the reader.
-        (Note: this test will time-out after 20 seconds.)
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: user-interact
-name: mediacard/xd-insert-after-suspend
-depends: suspend/suspend_advanced
-command: removable_storage_watcher --memorycard insert sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the systems media card reader can
-     detect the insertion of a xD card after the system has been suspended
- STEPS:
-     1. Click "Test" and insert a xD card into the reader.
-        If a file browser opens up, you can safely close it.
-        (Note: this test will time-out after 20 seconds.)
-     2. Do not remove the device after this test.
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.
-
-plugin: shell
-name: mediacard/xd-storage-after-suspend
-depends: mediacard/xd-insert-after-suspend
-user: root
-command: removable_storage_test -s 268400000 --memorycard sdio usb scsi
-_description:
- This test is automated and executes after the mediacard/xd-insert-after-suspend test
- is run. It tests reading and writing to the xD card after the system has been suspended.
-
-plugin: user-interact
-name: mediacard/xd-remove-after-suspend
-depends: mediacard/xd-insert-after-suspend
-command: removable_storage_watcher --memorycard remove sdio usb scsi
-_description:
- PURPOSE:
-     This test will check that the system correctly detects the removal
-     of a xD card from the systems card reader after the system has been suspended.
- STEPS:
-     1. Click "Test" and remove the xD card from the reader.
-        (Note: this test will time-out after 20 seconds.)
- VERIFICATION:
-     The verification of this test is automated. Do not change the
-     automatically selected result.

=== removed file 'jobs/mobilebroadband.txt.in'
--- jobs/mobilebroadband.txt.in	2013-04-17 20:18:21 +0000
+++ jobs/mobilebroadband.txt.in	1970-01-01 00:00:00 +0000
@@ -1,21 +0,0 @@
-plugin: shell
-name: mobilebroadband/gsm_connection
-requires:
-    package.name == 'network-manager'
-    package.name == 'modemmanager'
-    mobilebroadband.gsm == 'supported'
-user: root
-environ: GSM_CONN_NAME GSM_APN GSM_USERNAME GSM_PASSWORD
-command: trap "nmcli con delete id $GSM_CONN_NAME" EXIT; create_connection mobilebroadband gsm `if [ ${GSM_APN} ]; then echo "--apn=$GSM_APN"; fi` `if [ ${GSM_CONN_NAME} ]; then echo "--name=$GSM_CONN_NAME"; fi` `if [ ${GSM_USERNAME} ]; then echo "--username=$GSM_USERNAME"; fi` `if [ ${GSM_PASSWORD} ]; then echo "--password=$GSM_PASSWORD"; fi` && curl http://start.ubuntu.com/connectivity-check.html --interface `nmcli dev status | awk '/gsm/ {print $1}'`
-_description: Creates a mobile broadband connection for a GSM based modem and checks the connection to ensure it's working.
-
-plugin: shell
-name: mobilebroadband/cdma_connection
-requires:
-    package.name == 'network-manager'
-    package.name == 'modemmanager'
-    mobilebroadband.cdma == 'supported'
-user: root
-environ: CDMA_CONN_NAME CDMA_USERNAME CDMA_PASSWORD
-command: trap "nmcli con delete id $CDMA_CONN_NAME" EXIT; create_connection mobilebroadband cdma `if [ ${CDMA_CONN_NAME} ]; then echo "--name=$CDMA_CONN_NAME"; fi` `if [ ${CDMA_USERNAME} ]; then echo "--username=$CDMA_USERNAME"; fi` `if [ ${CDMA_PASSWORD} ]; then echo "--password=$CDMA_PASSWORD"; fi` && curl http://start.ubuntu.com/connectivity-check.html --interface `nmcli dev status | awk '/gsm/ {print $1}'`
-_description: Creates a mobile broadband connection for a CDMA based modem and checks the connection to ensure it's working.

=== removed file 'jobs/monitor.txt.in'
--- jobs/monitor.txt.in	2013-05-03 20:18:33 +0000
+++ jobs/monitor.txt.in	1970-01-01 00:00:00 +0000
@@ -1,105 +0,0 @@
-plugin: manual
-name: monitor/vga
-requires: display.vga == 'supported'
-_description:
- PURPOSE:
-     This test will check your VGA port. Skip if your system does not have a VGA port.
- STEPS:
-     1. Connect a display (if not already connected) to the VGA port on your system
- VERIFICATION:
-     Was the desktop displayed correctly on both screens?
-
-plugin: manual
-name: monitor/dvi
-requires: display.dvi == 'supported'
-_description:
- PURPOSE:
-     This test will check your DVI port. Skip if your system does not have a DVI port
- STEPS:
-     1. Connect a display (if not already connected) to the DVI port on your system
- VERIFICATION:
-     Was the desktop displayed correctly on both screens?
-
-plugin: manual
-name: monitor/displayport
-requires: display.dp == 'supported'
-_description:
- PURPOSE:
-     This test will check your DisplayPort port. Skip if your system does not have a DisplayPort port
- STEPS:
-     1. Connect a display (if not already connected) to the DisplayPort port on your system
- VERIFICATION:
-     Was the desktop displayed correctly on both screens?
-
-plugin: manual
-name: monitor/hdmi
-requires: display.hdmi == 'supported'
-_description:
- PURPOSE:
-     This test will check your HDMI port. Skip if your system does not have a HDMI port
- STEPS:
-     1. Connect a display (if not already connected) to the HDMI port on your system
- VERIFICATION:
-     Was the desktop displayed correctly on both screens?
-
-plugin: manual
-name: monitor/svideo
-requires: display.svideo == 'supported'
-_description:
- PURPOSE:
-     This test will check your S-VIDEO port. Skip if your system does not have a S-VIDEO port
- STEPS:
-     1. Connect a display (if not already connected) to the S-VIDEO port on your system
- VERIFICATION:
-     Was the desktop displayed correctly on both screens?
-
-plugin: manual
-name: monitor/rca
-requires: display.rca == 'supported'
-_description:
- PURPOSE:
-     This test will check your RCA port. Skip if your system does not have a RCA port
- STEPS:
-     1. Connect a display (if not already connected) to the RCA port on your system
- VERIFICATION:
-     Was the desktop displayed correctly on both screens?
-
-plugin: manual
-name: monitor/multi-head
-requires: dmi.product in ['Desktop','Low Profile Desktop','Tower','Mini Tower']
-_description:
- PURPOSE:
-     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.
- STEPS:
-     1. If your second monitor is not already connected, connect it now
-     2. Open the "Displays" tool (open the dash and search for "Displays")
-     3. Configure your output to provide one desktop across both monitors
-     4. Open any application and drag it from one monitor to the next.
- VERIFICATION:
-     Was the stretched desktop displayed correctly across both screens?
-
-plugin: manual
-name: monitor/powersaving
-command: xset dpms force off
-_description:
- PURPOSE:
-     This test will check your monitor power saving capabilities
- STEPS:
-     1. Click "Test" to try the power saving capabilities of your monitor
-     2. Press any key or move the mouse to recover
- VERIFICATION:
-     Did the monitor go blank and turn on again?
-
-plugin: manual
-name: monitor/dim_brightness
-user: root
-command: brightness_test
-_description:
- PURPOSE:
-     This test will test changes to screen brightness
- STEPS:
-     1. Click "Test" to try to dim the screen.
-     2. Check if the screen was dimmed approximately to half of the maximum brightness.
-     3. The screen will go back to the original brightness in 2 seconds.
- VERIFICATION:
-     Was your screen dimmed approximately to half of the maximum brightness?

=== removed file 'jobs/panel_clock_test.txt.in'
--- jobs/panel_clock_test.txt.in	2012-05-10 13:12:45 +0000
+++ jobs/panel_clock_test.txt.in	1970-01-01 00:00:00 +0000
@@ -1,29 +0,0 @@
-name: panel_clock/verify
-plugin: manual
-requires: package.name == 'gnome-system-tools'
-_description:
- PURPOSE:
-    This test will verify that the desktop clock displays the correct date and time
- STEPS:
-    1. Check the clock in the upper right corner of your desktop.
- VERIFICATION:
-    Is the clock displaying the correct date and time for your timezone?
-
-name: panel_clock/test
-plugin: manual
-depends: panel_clock/verify
-requires: package.name == 'gnome-system-tools'
-user: root
-command: date -s "`date -d '1 hour'`"
-_description:
- PURPOSE:
-    This test will verify that the desktop clock synchronizes with the system clock.
- STEPS:
-    1. Click the "Test" button and verify the clock moves ahead by 1 hour.
-    Note: It may take a minute or so for the clock to refresh
-    2. Right click on the clock, then click on "Time & Date Settings..."
-    3. Ensure that your clock application is set to manual.
-    4. Change the time 1 hour back
-    5. Close the window and reboot
- VERIFICATION:
-    Is your system clock displaying the correct date and time for your timezone?

=== removed file 'jobs/panel_reboot.txt.in'
--- jobs/panel_reboot.txt.in	2012-10-09 15:21:35 +0000
+++ jobs/panel_reboot.txt.in	1970-01-01 00:00:00 +0000
@@ -1,11 +0,0 @@
-plugin: manual
-name: panel_reboot_test
-_description:
- PURPOSE:
-    This test will verify that you can reboot your system from the desktop menu
- STEPS:
-    1. Click the Gear icon in the upper right corner of the desktop and click on "Shut Down"
-    2. Click the "Restart" button on the left side of the Shut Down dialog
-    3. After logging back in, restart System Testing and it should resume here
- VERIFICATION:
-    Did your system restart and bring up the GUI login cleanly?

=== removed file 'jobs/peripheral.txt.in'
--- jobs/peripheral.txt.in	2013-01-21 22:21:29 +0000
+++ jobs/peripheral.txt.in	1970-01-01 00:00:00 +0000
@@ -1,38 +0,0 @@
-plugin: manual
-name: peripheral/printer
-_description:
- PURPOSE:
-    This test will verify that a network printer is usable
- STEPS:
-    1. Make sure that a printer is available in your network
-    2. Click on the Gear icon in the upper right corner and then click on Printers
-    3. If the printer isn't already listed, click on Add
-    4. The printer should be detected and proper configuration values  should be displayed
-    5. Print a test page
- VERIFICATION:
-    Were you able to print a test page to the network printer?
-
-plugin: manual
-name: peripheral/external-usb-modem
-command: network_check
-_description:
- PURPOSE:
-    This test will verify that a USB DSL or Mobile Broadband modem works
- STEPS:
-    1. Connect the USB cable to the computer
-    2. Right click on the Network icon in the panel
-    3. Select 'Edit Connections'
-    4. Select the 'DSL' (for ADSL modem) or 'Mobile Broadband' (for 3G modem) tab
-    5. Click on 'Add' button
-    6. Configure the connection parameters properly
-    7. Notify OSD should confirm that the connection has been established
-    8. Select Test to verify that it's possible to establish an HTTP connection
- VERIFICATION:
-    Was the connection correctly established?
-
-plugin: shell
-name: peripheral/external-usb-modem-http
-depends: peripheral/external-usb-modem
-command: wget -SO /dev/null http://$TRANSFER_SERVER
-_description:
- Automated test case to make sure that it's possible to download files through HTTP

=== removed file 'jobs/piglit.txt.in'
--- jobs/piglit.txt.in	2012-12-11 12:09:53 +0000
+++ jobs/piglit.txt.in	1970-01-01 00:00:00 +0000
@@ -1,72 +0,0 @@
-plugin: shell
-name: piglit/fbo
-requires:
- package.name == 'piglit'
-command: piglit_test -t ^spec/EXT_framebuffer_object -n fbo
-_description:
- Runs piglit tests for checking support for framebuffer object operations, depth buffer and stencil buffer
-
-plugin: shell
-name: piglit/gl-2.1
-requires:
- package.name == 'piglit'
-command: piglit_test -t spec/'!OpenGL 2.1'/ -n gl-2.1
-_description:
- Runs piglit tests for checking OpenGL 2.1 support
-
-plugin: shell
-name: piglit/vbo
-requires:
- package.name == 'piglit'
-command: piglit_test -t spec/ARB_vertex_buffer_object/ -n vbo
-_description:
- Runs piglit tests for checking support for vertex buffer object operations
-
-plugin: shell
-name: piglit/glsl-fragment-shader
-requires:
- package.name == 'piglit'
-command: piglit_test -t ^shaders/glsl-arb-fragment -n glsl-fragment-shader
-_description:
- Runs piglit tests for checking support for GLSL fragment shader operations
-
-plugin: shell
-name: piglit/glsl-vertex-shader
-requires:
- package.name == 'piglit'
-command: piglit_test -t ^shaders/glsl-clamp-vertex-color -t ^shaders/glsl-max-vertex-attrib -t ^shaders/glsl-novertexdata -n glsl-vertex-shader
-_description:
- Runs piglit tests for checking support for GLSL vertex shader operations
-
-plugin: shell
-name: piglit/glx-tfp
-requires:
- package.name == 'piglit'
-command: piglit_test -t glx-tfp -n glx-tfp
-_description:
- Runs piglit tests for checking support for texture from pixmap
-
-plugin: shell
-name: piglit/stencil_buffer
-requires:
- package.name == 'piglit'
-command: piglit_test -t glx-visuals-stencil -t readpixels-24_8 -n stencil_buffer
-_description:
- Runs piglit_tests for checking support for stencil buffer operations
-
-plugin: shell
-name: piglit/summarize_results
-requires:
- package.name == 'piglit'
-command: [ -e $CHECKBOX_DATA/piglit-results ] && piglit-summary-html.py $CHECKBOX_DATA/piglit-summary/ `find $CHECKBOX_DATA/piglit-results/ -name main` && echo "Successfully summarized piglit results. They are available in $CHECKBOX_DATA/piglit-sumary/"
-_description:
- Runs the piglit results summarizing tool
-
-plugin: shell
-name: piglit/tarball
-requires:
- package.name == 'piglit'
-depends: piglit/summarize_results
-command: [ -e $CHECKBOX_DATA/piglit-summary ] && tar cvfz $CHECKBOX_DATA/piglit-results.tar.gz $CHECKBOX_DATA/piglit-summary/
-_description:
- Archives the piglit-summary directory into the piglit-results.tar.gz.

=== removed file 'jobs/rendercheck.txt.in'
--- jobs/rendercheck.txt.in	2013-05-03 10:46:46 +0000
+++ jobs/rendercheck.txt.in	1970-01-01 00:00:00 +0000
@@ -1,13 +0,0 @@
-plugin: shell
-name: rendercheck/tests
-requires:
- package.name == 'x11-apps'
-command: ( rendercheck_test -b repeat -b gradients -d -o $CHECKBOX_DATA/rendercheck-results && echo "Rendercheck tests completed successfully" ) || ( echo "Error running rendercheck. Please see the log $CHECKBOX_DATA/rendercheck-results for details" >&2 && false )
-_description:
- Runs all of the rendercheck test suites. This test can take a few minutes.
-
-plugin: attachment
-name: rendercheck/tarball
-depends: rendercheck/tests
-command: [ -e $CHECKBOX_DATA/rendercheck-results ] && tar cvfz $CHECKBOX_DATA/rendercheck-results.tar.gz $CHECKBOX_DATA/rendercheck-results && cat $CHECKBOX_DATA/rendercheck-results.tar.gz
-_description: Attach log from rendercheck tests

=== removed file 'jobs/server-services.txt.in'
--- jobs/server-services.txt.in	2011-10-05 21:01:59 +0000
+++ jobs/server-services.txt.in	1970-01-01 00:00:00 +0000
@@ -1,39 +0,0 @@
-plugin: shell
-name: services/open_ssh_test
-requires: package.name == 'ssh'
-command: pgrep sshd >/dev/null || (echo 'FAIL: sshd is not running.' 2>&1 && false)
-_description: Verifies that sshd is running.
-
-plugin: shell
-name: services/print_server_test
-requires: package.name == 'cups'
-command: pgrep cupsd >/dev/null || (echo 'FAIL: cupsd is not running.' 2>&1 && false)
-_description: Verifies that Print/CUPs server is running.
-
-plugin: shell
-name: services/dns_server_test
-requires: package.name == 'bind9' and package.name == 'dnsutils'
-user: root
-command: dns_server_test
-_description: Verifies that DNS server is running and working.
-
-plugin: shell
-name: services/samba_test
-requires: package.name == 'samba' and package.name == 'winbind'
-user: root
-command: samba_test
-_description: Verifies that Samba server is running.
-
-plugin: shell
-name: services/lamp_test
-requires: package.name == 'apache2' and package.name == 'php5-mysql' and package.name == 'libapache2-mod-php5' and package.name == 'mysql-server'
-user: root
-command: lamp_test
-_description: Verifies that the LAMP stack is running (Apache, MySQL and PHP).
-
-plugin: shell
-name: services/tomcat_test
-requires: package.name == 'tomcat6'
-user: root
-command: tomcat_test
-_description: Verifies that Tomcat server is running and working.

=== removed file 'jobs/suspend.txt.in'
--- jobs/suspend.txt.in	2013-07-05 16:43:48 +0000
+++ jobs/suspend.txt.in	1970-01-01 00:00:00 +0000
@@ -1,1237 +0,0 @@
-plugin: shell
-name: suspend/network_before_suspend
-depends: networking/detect
-_description: Record the current network before suspending.
-command: set -o pipefail; internet_test | tee $CHECKBOX_DATA/network_before_suspend.txt
-
-plugin: shell
-name: suspend/resolution_before_suspend
-_description: Record the current resolution before suspending.
-command: xrandr -q |grep '*'| awk '{print $1}' > $CHECKBOX_DATA/resolution_before_suspend.txt
-
-plugin: shell
-name: suspend/audio_before_suspend
-requires:
- device.category == 'AUDIO'
- package.name == 'alsa-base'
-_description: Record mixer settings before suspending.
-command: audio_settings store --file=$CHECKBOX_DATA/audio_settings_before_suspend
-
-plugin: shell
-name: suspend/cpu_before_suspend
-_description: Verify that all the CPUs are online before suspending
-command: cpuinfo_resource > $CHECKBOX_DATA/cpuinfo_before_suspend
-
-plugin: shell
-name: suspend/memory_before_suspend
-_description:
- Dumps memory info to a file for comparison after suspend test has been run
-command: meminfo_resource > $CHECKBOX_DATA/meminfo_before_suspend
-
-plugin: shell
-name: suspend/wireless_before_suspend
-depends: wireless/wireless_connection
-requires: device.category == 'WIRELESS'
-command: nmcli -t -f UUID con status > $CHECKBOX_DATA/connections && connect_wireless && internet_test --interface=`nmcli dev list | grep -B 1 wireless | grep GENERAL.DEVICE | awk '{print $2}'` && for con in `cat $CHECKBOX_DATA/connections`; do nmcli con up uuid "$con"; done
-_description:
- This test disconnects all connections and then connects to the wireless
- interface. It then checks the connection to confirm it's working as expected.
-
-plugin: shell
-name: suspend/bluetooth_obex_before_suspend
-requires:
- package.name == 'bluez'
- package.name == 'obexd-client'
- device.category == 'BLUETOOTH'
-command:
-  if [ -z "$BTDEVADDR" ]
-  then
-    echo "btdevaddr option not set to device address of Bluetooth target in checkbox.ini"
-    exit 1
-  fi
-  if rfkill list bluetooth | grep -q 'Hard blocked: yes'
-  then
-    echo "rfkill shows BT is hard blocked"
-  fi
-  if rfkill list bluetooth | grep -q 'Soft blocked: yes'
-  then
-    echo "rfkill shows BT is soft blocked, removing before testing."
-    rfkill unblock bluetooth
-    sleep 3
-  fi
-  obex_send $BTDEVADDR $CHECKBOX_SHARE/data/images/JPEG_Color_Image_Ubuntu.jpg
-_description:
- This is an automated Bluetooth file transfer test. It sends an image to the device specified by the BTDEVADDR environment variable.
-
-plugin: shell
-name: suspend/bluetooth_obex_send_before_suspend
-requires:
- package.name == 'bluez'
- package.name == 'obexftp'
- device.category == 'BLUETOOTH'
-command:
-  if [ -z "$BTDEVADDR" ]
-  then
-    echo "btdevaddr option not set to device address of Bluetooth target in checkbox.ini"
-    exit 1
-  fi
-  if rfkill list bluetooth | grep -q 'Hard blocked: yes'
-  then
-    echo "rfkill list shows BT is hard blocked"
-  fi
-  if rfkill list bluetooth | grep -q 'Soft blocked: yes'
-  then
-    echo "rfkill list shows BT is soft blocked, removing before testing"
-    rfkill unblock bluetooth
-    sleep 3
-  fi
-  set -o pipefail; bluetooth_test $CHECKBOX_SHARE/data/images/JPEG_Color_Image_Ubuntu.jpg $BTDEVADDR send 2>&1 | ansi_parser
-_description:
- This is an automated Bluetooth file transfer test. It sends an image to the device specified by the BTDEVADDR environment variable.
-
-plugin: shell
-name: suspend/bluetooth_obex_browse_before_suspend
-requires:
- package.name == 'bluez'
- package.name == 'obexftp'
- device.category == 'BLUETOOTH'
-command:
-  if [ -z "$BTDEVADDR" ]
-  then
-    echo "btdevaddr option not set to device address of Bluetooth target in checkbox.ini"
-    exit 1
-  fi
-  if rfkill list bluetooth | grep -q 'Hard blocked: yes'
-  then
-    echo "rfkill list shows BT is hard blocked"
-  fi
-  if rfkill list bluetooth | grep -q 'Soft blocked: yes'
-  then
-    echo "rfkill list shows BT is soft blocked, removing before testing"
-    rfkill unblock bluetooth
-    sleep 3
-  fi
-  set -o pipefail; bluetooth_test $CHECKBOX_SHARE/data/images/JPEG_Color_Image_Ubuntu.jpg $BTDEVADDR browse 2>&1 | ansi_parser
-_description:
- This is an automated Bluetooth test. It emulates browsing on a remote device specified by the BTDEVADDR environment variable.
-
-plugin: shell
-name: suspend/bluetooth_obex_get_before_suspend
-requires:
- package.name == 'bluez'
- package.name == 'obexftp'
- device.category == 'BLUETOOTH'
-command:
-  if [ -z "$BTDEVADDR" ]
-  then
-    echo "btdevaddr option not set to device address of Bluetooth target in checkbox.ini"
-    exit 1
-  fi
-  if rfkill list bluetooth | grep -q 'Hard blocked: yes'
-  then
-    echo "rfkill list shows BT is hard blocked"
-  fi
-  if rfkill list bluetooth | grep -q 'Soft blocked: yes'
-  then
-    echo "rfkill list shows BT is soft blocked, removing before testing"
-    rfkill unblock bluetooth
-    sleep 3
-  fi
-  set -o pipefail; bluetooth_test $CHECKBOX_SHARE/data/images/JPEG_Color_Image_Ubuntu.jpg $BTDEVADDR get 2>&1 | ansi_parser
-_description:
- This is an automated Bluetooth test. It receives the given file from a remote host specified by the BTDEVADDR environment variable
-
-plugin: manual
-name: suspend/bluetooth_obex_before_suspend_manual
-requires:
- package.name == 'bluez'
- package.name == 'obexd-client'
- device.category == 'BLUETOOTH'
-command: rfkill unblock bluetooth; obex_send `bluetooth_scan` $CHECKBOX_SHARE/data/images/JPEG_Color_Image_Ubuntu.jpg
-_description:
- PURPOSE:
-     This test will send the image 'JPEG_Color_Image_Ubuntu.jpg' to a specified device
- STEPS:
-     1. Make sure Bluetooth is enabled by checking the Bluetooth indicator applet
-     2. Click "Test" and you will be prompted to enter the Bluetooth device name of a device that can accept file transfers (It may take a few moments after entering the name for the file to begin sending)
-     3. Accept any prompts that appear on both devices
- VERIFICATION:
-     Was the data correctly transferred?
-
-plugin: user-verify
-name: suspend/suspend_advanced
-depends: power-management/rtc
-requires:
- sleep.mem == 'supported'
-user: root
-environ: CHECKBOX_DATA
-command:
- if type -P fwts >/dev/null; then
-  echo "Calling fwts"
-  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
- else
-  echo "Calling sleep_test"
-  set -o pipefail; sleep_test -p | tee $CHECKBOX_DATA/suspend_single_times.log
- fi
-_description:
- PURPOSE:
-     This test will check suspend and resume
- STEPS:
-     1. Click "Test" and your system will suspend for about 30 - 60 seconds
-     2. Observe the Power LED to see if it blinks or changes color during suspend
-     3. If your system does not wake itself up after 60 seconds, please press the power button momentarily to wake the system manually
-     4. If your system fails to wake at all and must be rebooted, restart System Testing after reboot and mark this test as Failed
- VERIFICATION:
-     Did your system suspend and resume correctly?
-     (NOTE: Please only consider whether the system successfully suspended and resumed. Power/Suspend LED verification will occur after this test is completed.)
-
-plugin: shell
-name: suspend/suspend_advanced_auto
-depends: power-management/rtc
-requires:
-    sleep.mem == 'supported'
-_description:
- This is the automated version of suspend/suspend_advanced.
-user: root
-environ: CHECKBOX_DATA
-command: set -o pipefail; fwts_test -f none -l $CHECKBOX_DATA/suspend_single -s s3 --s3-sleep-delay=30 --s3-device-check --s3-device-check-delay=45 | tee $CHECKBOX_DATA/suspend_single_times.log
-
-plugin: shell
-name: suspend/suspend-single-log-check
-command: [ -e $CHECKBOX_DATA/suspend_single.log ] && sleep_test_log_check -v s3 $CHECKBOX_DATA/suspend_single.log
-_description:
- Automated check of the suspend log to look for errors reported by fwts
-
-plugin: attachment
-name: suspend/suspend-single-log-attach
-command: [ -e $CHECKBOX_DATA/suspend_single.log ] && cat $CHECKBOX_DATA/suspend_single.log
-_description:
- Attaches the log from the single suspend/resume test to the results
-
-plugin: shell
-name: suspend/suspend-time-check
-command: [ -e $CHECKBOX_DATA/suspend_single_times.log ] && sleep_time_check $CHECKBOX_DATA/suspend_single_times.log
-_description:
- Checks the sleep times to ensure that a machine suspends and resumes within a given threshold
-
-plugin: manual
-name: power-management/usb_wakeup_keyboard
-user: root
-depends: suspend/suspend_advanced
-command: pm-suspend
-_description:
- PURPOSE:
-     Wake up by USB keyboard
- STEPS:
-     1. Enable "Wake by USB KB/Mouse" item in BIOS
-     2. Press "Test" to enter suspend (S3) mode
-     3. Press any key of USB keyboard to wake system up
- VERIFICATION:
-     Did the system wake up from suspend mode when you pressed a keyboard key?
-
-plugin: manual
-name: power-management/usb_wakeup_mouse
-user: root
-depends: suspend/suspend_advanced
-command: pm-suspend
-_description:
- PURPOSE:
-     Wake up by USB mouse
- STEPS:
-     1. Enable "Wake by USB KB/Mouse" item in BIOS
-     2. Press "Test" to enter suspend (S3) mode
-     3. Press any button of USB mouse to wake system up
- VERIFICATION:
-     Did the system wake up from suspend mode when you pressed the mouse button?
-
-plugin: shell
-name: suspend/network_after_suspend
-depends: suspend/suspend_advanced suspend/network_before_suspend
-_description: Test the network after resuming.
-command: network_wait; internet_test | diff $CHECKBOX_DATA/network_before_suspend.txt -
-
-plugin: shell
-name: suspend/resolution_after_suspend
-depends: suspend/suspend_advanced suspend/resolution_before_suspend
-_description: Test to see that we have the same resolution after resuming as before.
-command: xrandr -q |grep '*'| awk '{print $1}' | diff $CHECKBOX_DATA/resolution_before_suspend.txt -
-
-plugin: shell
-name: suspend/audio_after_suspend
-requires:
- device.category == 'AUDIO'
- package.name == 'alsa-base'
-depends: suspend/suspend_advanced suspend/audio_before_suspend
-_description: Verify that mixer settings after suspend are the same as before suspend.
-command: 
- audio_settings store --file=$CHECKBOX_DATA/audio_settings_after_suspend; diff $CHECKBOX_DATA/audio_settings_before_suspend $CHECKBOX_DATA/audio_settings_after_suspend
-
-plugin: shell
-name: suspend/audio_after_suspend_auto
-requires:
- device.category == 'AUDIO'
- package.name == 'alsa-base'
-depends: suspend/suspend_advanced_auto suspend/audio_before_suspend
-_description: Verify that mixer settings after suspend are the same as before suspend.
-command:
- audio_settings store --file=$CHECKBOX_DATA/audio_settings_after_suspend; diff $CHECKBOX_DATA/audio_settings_before_suspend $CHECKBOX_DATA/audio_settings_after_suspend
-
-plugin: shell
-name: suspend/cpu_after_suspend
-depends: suspend/suspend_advanced suspend/cpu_before_suspend
-_description: Verify that all CPUs are online after resuming.
-command: cpuinfo_resource | diff $CHECKBOX_DATA/cpuinfo_before_suspend -
-
-plugin: shell
-name: suspend/cpu_after_suspend_auto
-depends: suspend/suspend_advanced_auto suspend/cpu_before_suspend
-_description: Verify that all CPUs are online after resuming.
-command: cpuinfo_resource | diff $CHECKBOX_DATA/cpuinfo_before_suspend -
-
-plugin: shell
-name: suspend/memory_after_suspend
-depends: suspend/suspend_advanced suspend/memory_before_suspend
-_description:
- Verify that all memory is available after resuming from suspend.
-command: meminfo_resource | diff $CHECKBOX_DATA/meminfo_before_suspend -
-
-plugin: shell
-name: suspend/memory_after_suspend_auto
-depends: suspend/suspend_advanced_auto suspend/memory_before_suspend
-_description:
- Verify that all memory is available after resuming from suspend.
-command: meminfo_resource | diff $CHECKBOX_DATA/meminfo_before_suspend -
-
-plugin: manual
-name: suspend/display_after_suspend
-depends: suspend/suspend_advanced
-_description:
- PURPOSE:
-     This test will check that the display is correct after suspend and resume
- STEPS:
-     1. Check that your display does not show up visual artifacts after resuming.
- VERIFICATION:
-     Does the display work normally after resuming from suspend?
-
-plugin: shell
-name: suspend/wireless_after_suspend
-depends: suspend/suspend_advanced suspend/wireless_before_suspend
-requires:
- device.category == 'WIRELESS'
-command: connect_wireless && internet_test --interface=`nmcli dev list | grep -B 1 wireless | grep GENERAL.DEVICE | awk '{print $2}'` && for con in `cat $CHECKBOX_DATA/connections`; do nmcli con up uuid "$con"; done
-_description:
- This test checks that the wireless interface is working after suspending the system. It
- disconnects all interfaces and then connects to the wireless interface and checks that the
- connection is working as expected.
-
-plugin: shell
-name: suspend/wireless_connection_after_suspend_wpa_bg
-depends: suspend/suspend_advanced
-requires:
- device.category == 'WIRELESS'
- environment.ROUTERS == 'multiple'
-user: root
-environ: WPA_BG_SSID WPA_BG_PSK
-command: trap "rm -f /etc/NetworkManager/system-connections/$WPA_BG_SSID" EXIT; create_connection wifi $WPA_BG_SSID --security=wpa --key=$WPA_BG_PSK; internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
-_description:
- Tests that the systems wireless hardware can connect to a router using WPA
- security and the 802.11b/g protocols after the system has been suspended.
-
-plugin: shell
-name: suspend/wireless_connection_after_suspend_open_bg
-depends: suspend/suspend_advanced
-requires:
- device.category == 'WIRELESS'
- environment.ROUTERS == 'multiple'
-user: root
-environ: OPEN_BG_SSID
-command: trap "rm -f /etc/NetworkManager/system-connections/$OPEN_BG_SSID" EXIT; create_connection wifi $OPEN_BG_SSID; internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
-_description:
- Tests that the systems wireless hardware can connect to a router using no
- security and the 802.11b/g protocols after the system has been suspended.
-
-plugin: shell
-name: suspend/wireless_connection_after_suspend_wpa_n
-depends: suspend/suspend_advanced
-requires:
- device.category == 'WIRELESS'
- environment.ROUTERS == 'multiple'
-user: root
-environ: WPA_N_SSID WPA_N_PSK
-command: trap "rm -f /etc/NetworkManager/system-connections/$WPA_N_SSID" EXIT; create_connection wifi $WPA_N_SSID --security=wpa --key=$WPA_N_PSK; internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
-_description:
- Tests that the systems wireless hardware can connect to a router using WPA
- security and the 802.11n protocol after the system has been suspended.
-
-plugin: shell
-name: suspend/wireless_connection_after_suspend_open_n
-depends: suspend/suspend_advanced
-requires:
- device.category == 'WIRELESS'
- environment.ROUTERS == 'multiple'
-user: root
-environ: OPEN_N_SSID
-command: trap "rm -f /etc/NetworkManager/system-connections/$OPEN_N_SSID" EXIT; create_connection wifi $OPEN_N_SSID; internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
-_description:
- Tests that the systems wireless hardware can connect to a router using no
- security and the 802.11n protocol after the system has been suspended.
-
-plugin: shell
-name: suspend/wireless_connection_after_suspend_wpa_bg_auto
-depends: suspend/suspend_advanced_auto
-requires:
- device.category == 'WIRELESS'
- environment.ROUTERS == 'multiple'
-user: root
-environ: WPA_BG_SSID WPA_BG_PSK
-command: trap "rm -f /etc/NetworkManager/system-connections/$WPA_BG_SSID" EXIT; create_connection wifi $WPA_BG_SSID --security=wpa --key=$WPA_BG_PSK; internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
-_description:
- Tests that the systems wireless hardware can connect to a router using WPA
- security and the 802.11b/g protocols after the system has been suspended.
-
-plugin: shell
-name: suspend/wireless_connection_after_suspend_open_bg_auto
-depends: suspend/suspend_advanced_auto
-requires:
- device.category == 'WIRELESS'
- environment.ROUTERS == 'multiple'
-user: root
-environ: OPEN_BG_SSID
-command: trap "rm -f /etc/NetworkManager/system-connections/$OPEN_BG_SSID" EXIT; create_connection wifi $OPEN_BG_SSID; internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
-_description:
- Tests that the systems wireless hardware can connect to a router using no
- security and the 802.11b/g protocols after the system has been suspended.
-
-plugin: shell
-name: suspend/wireless_connection_after_suspend_wpa_n_auto
-depends: suspend/suspend_advanced_auto
-requires:
- device.category == 'WIRELESS'
- environment.ROUTERS == 'multiple'
-user: root
-environ: WPA_N_SSID WPA_N_PSK
-command: trap "rm -f /etc/NetworkManager/system-connections/$WPA_N_SSID" EXIT; create_connection wifi $WPA_N_SSID --security=wpa --key=$WPA_N_PSK; internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
-_description:
- Tests that the systems wireless hardware can connect to a router using WPA
- security and the 802.11n protocol after the system has been suspended.
-
-plugin: shell
-name: suspend/wireless_connection_after_suspend_open_n_auto
-depends: suspend/suspend_advanced_auto
-requires:
- device.category == 'WIRELESS'
- environment.ROUTERS == 'multiple'
-user: root
-environ: OPEN_N_SSID
-command: trap "rm -f /etc/NetworkManager/system-connections/$OPEN_N_SSID" EXIT; create_connection wifi $OPEN_N_SSID; internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
-_description:
- Tests that the systems wireless hardware can connect to a router using no
- security and the 802.11n protocol after the system has been suspended.
-
-plugin: manual
-name: suspend/wireless_connection_after_suspend_wpa_bg_manual
-depends: suspend/suspend_advanced
-requires:
- device.category == 'WIRELESS'
- environment.ROUTERS == 'single'
-user: root
-environ: ROUTER_SSID ROUTER_PSK
-command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection wifi $ROUTER_SSID --security=wpa --key=$ROUTER_PSK && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
-_description:
- PURPOSE:
-     Tests that the systems wireless hardware can connect to a router using WPA
-     security and the 802.11b/g protocols.
- STEPS:
-     1. Open your routers configuration tool
-     2. Change the settings to only accept connections on the B and G wireless bands
-     3. Make sure the SSID is set to ROUTER_SSID
-     4. Change the security settings to use WPA2 and ensure the PSK matches that set in ROUTER_PSK
-     5. Click the 'Test' button to create a connection to the router and test the connection
- VERIFICATION:
-     Verification is automated, do not change the automatically selected result.
-
-plugin: manual
-name: suspend/wireless_connection_after_suspend_open_bg_manual
-depends: suspend/suspend_advanced
-requires:
- device.category == 'WIRELESS'
- environment.ROUTERS == 'single'
-user: root
-environ: ROUTER_SSID
-command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection wifi $ROUTER_SSID && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
-_description:
- PURPOSE:
-     Tests that the systems wireless hardware can connect to a router using
-     no security and the 802.11b/g protocols.
- STEPS:
-     1. Open your routers configuration tool
-     2. Change the settings to only accept connections on the B and G wireless bands
-     3. Make sure the SSID is set to ROUTER_SSID
-     4. Change the security settings to use no security
-     5. Click the 'Test' button to create a connection to the router and test the connection
- VERIFICATION:
-     Verification is automated, do not change the automatically selected result.
-
-plugin: manual
-name: suspend/wireless_connection_after_suspend_wpa_n_manual
-depends: suspend/suspend_advanced
-requires:
- device.category == 'WIRELESS'
- environment.ROUTERS == 'single'
-user: root
-environ: ROUTER_SSID ROUTER_PSK
-command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection wifi $ROUTER_SSID --security=wpa --key=$ROUTER_PSK && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
-_description:
- PURPOSE:
-     Tests that the systems wireless hardware can connect to a router using WPA
-     security and the 802.11n protocols.
- STEPS:
-     1. Open your routers configuration tool
-     2. Change the settings to only accept connections on the N wireless band
-     3. Make sure the SSID is set to ROUTER_SSID
-     4. Change the security settings to use WPA2 and ensure the PSK matches that set in ROUTER_PSK
-     5. Click the 'Test' button to create a connection to the router and test the connection
- VERIFICATION:
-     Verification is automated, do not change the automatically selected result.
-
-plugin: manual
-name: suspend/wireless_connection_after_suspend_open_n_manual
-depends: suspend/suspend_advanced
-requires:
- device.category == 'WIRELESS'
- environment.ROUTERS == 'single'
-user: root
-environ: ROUTER_SSID
-command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection wifi $ROUTER_SSID && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
-_description:
- PURPOSE:
-     Tests that the systems wireless hardware can connect to a router using
-     no security and the 802.11n protocol.
- STEPS:
-     1. Open your routers configuration tool
-     2. Change the settings to only accept connections on the N wireless band
-     3. Make sure the SSID is set to ROUTER_SSID
-     4. Change the security settings to use no security
-     5. Click the 'Test' button to create a connection to the router and test the connection
- VERIFICATION:
-     Verification is automated, do not change the automatically selected result.
-
-plugin: shell
-name: suspend/bluetooth_detect_after_suspend
-depends: suspend/suspend_advanced bluetooth/detect-output
-requires:
- package.name == 'bluez'
- device.category == 'BLUETOOTH'
-command:
- if rfkill list bluetooth | grep -q 'Hard blocked: yes'; then
-   echo "rfkill shows BT is hard blocked"
- fi
- if rfkill list bluetooth | grep -q 'Soft blocked: yes'; then
-   echo "rfkill shows BT is soft blocked, removing before testing"
-   rfkill unblock bluetooth
-   sleep 3
- fi
- output=$(hcitool dev | tail -n+2 | awk '{print $2}')
- echo $output | diff $CHECKBOX_DATA/bluetooth_address -
- if [ -z "$output" ]; then
-     echo "BT hardware not available"
-     exit 1
- fi
-_description:
- This test grabs the hardware address of the bluetooth adapter after suspend and compares it to the address grabbed before suspend.
-
-plugin: shell
-name: suspend/bluetooth_obex_after_suspend
-depends: suspend/suspend_advanced suspend/bluetooth_obex_before_suspend
-requires:
- package.name == 'bluez'
- package.name == 'obexd-client'
- device.category == 'BLUETOOTH'
-command:
-  if [ -z "$BTDEVADDR" ]
-  then
-    echo "btdevaddr option not set to device address of Bluetooth target in checkbox.ini"
-    exit 1
-  fi
-  if rfkill list bluetooth | grep -q 'Hard blocked: yes'
-  then
-    echo "rfkill shows BT is hard blocked"
-  fi
-  if rfkill list bluetooth | grep -q 'Soft blocked: yes'
-  then
-    echo "rfkill shows BT is soft blocked, removing before testing."
-    rfkill unblock bluetooth
-    sleep 3
-  fi
-  obex_send $BTDEVADDR $CHECKBOX_SHARE/data/images/JPEG_Color_Image_Ubuntu.jpg
-_description:
- This is an automated Bluetooth file transfer test. It sends an image to the device specified by the BTDEVADDR environment variable.
-
-plugin: shell
-name: suspend/bluetooth_obex_after_suspend_auto
-depends: suspend/suspend_advanced_auto suspend/bluetooth_obex_before_suspend
-requires:
- package.name == 'bluez'
- package.name == 'obexd-client'
- device.category == 'BLUETOOTH'
-command:
-  if [ -z "$BTDEVADDR" ]
-  then
-    echo "btdevaddr option not set to device address of Bluetooth target in checkbox.ini"
-    exit 1
-  fi
-  if rfkill list bluetooth | grep -q 'Hard blocked: yes'
-  then
-    echo "rfkill shows BT is hard blocked"
-  fi
-  if rfkill list bluetooth | grep -q 'Soft blocked: yes'
-  then
-    echo "rfkill shows BT is soft blocked, removing before testing."
-    rfkill unblock bluetooth
-    sleep 3
-  fi
-  obex_send $BTDEVADDR $CHECKBOX_SHARE/data/images/JPEG_Color_Image_Ubuntu.jpg
-_description:
- This is an automated Bluetooth file transfer test. It sends an image to the device specified by the BTDEVADDR environment variable.
-
-plugin: shell
-name: suspend/bluetooth_obex_send_after_suspend
-depends: suspend/suspend_advanced
-requires:
- package.name == 'bluez'
- package.name == 'obexftp'
- device.category == 'BLUETOOTH'
-command:
-  if [ -z "$BTDEVADDR" ]
-  then
-    echo "btdevaddr option not set to device address of Bluetooth target in checkbox.ini"
-    exit 1
-  fi
-  if rfkill list bluetooth | grep -q 'Hard blocked: yes'
-  then
-    echo "rfkill list shows BT is hard blocked"
-  fi
-  if rfkill list bluetooth | grep -q 'Soft blocked: yes'
-  then
-    echo "rfkill list shows BT is soft blocked, removing before testing"
-    rfkill unblock bluetooth
-    sleep 3
-  fi
-  set -o pipefail; bluetooth_test $CHECKBOX_SHARE/data/images/JPEG_Color_Image_Ubuntu.jpg $BTDEVADDR send 2>&1 | ansi_parser
-_description:
- This is an automated Bluetooth file transfer test. It sends an image to the device specified by the BTDEVADDR environment variable.
-
-plugin: shell
-name: suspend/bluetooth_obex_send_after_suspend_auto
-depends: suspend/suspend_advanced_auto
-requires:
- package.name == 'bluez'
- package.name == 'obexftp'
- device.category == 'BLUETOOTH'
-command:
-  if [ -z "$BTDEVADDR" ]
-  then
-    echo "btdevaddr option not set to device address of Bluetooth target in checkbox.ini"
-    exit 1
-  fi
-  if rfkill list bluetooth | grep -q 'Hard blocked: yes'
-  then
-    echo "rfkill list shows BT is hard blocked"
-  fi
-  if rfkill list bluetooth | grep -q 'Soft blocked: yes'
-  then
-    echo "rfkill list shows BT is soft blocked, removing before testing"
-    rfkill unblock bluetooth
-    sleep 3
-  fi
-  set -o pipefail; bluetooth_test $CHECKBOX_SHARE/data/images/JPEG_Color_Image_Ubuntu.jpg $BTDEVADDR send 2>&1 | ansi_parser
-_description:
- This is an automated Bluetooth file transfer test. It sends an image to the device specified by the BTDEVADDR environment variable.
-
-plugin: shell
-name: suspend/bluetooth_obex_browse_after_suspend
-depends: suspend/suspend_advanced
-requires:
- package.name == 'bluez'
- package.name == 'obexftp'
- device.category == 'BLUETOOTH'
-command:
-  if [ -z "$BTDEVADDR" ]
-  then
-    echo "btdevaddr option not set to device address of Bluetooth target in checkbox.ini"
-    exit 1
-  fi
-  if rfkill list bluetooth | grep -q 'Hard blocked: yes'
-  then
-    echo "rfkill list shows BT is hard blocked"
-  fi
-  if rfkill list bluetooth | grep -q 'Soft blocked: yes'
-  then
-    echo "rfkill list shows BT is soft blocked, removing before testing"
-    rfkill unblock bluetooth
-    sleep 3
-  fi
-  set -o pipefail; bluetooth_test $CHECKBOX_SHARE/data/images/JPEG_Color_Image_Ubuntu.jpg $BTDEVADDR browse 2>&1 | ansi_parser
-_description:
- This is an automated Bluetooth test. It emulates browsing on a remote device specified by the BTDEVADDR environment variable.
-
-plugin: shell
-name: suspend/bluetooth_obex_browse_after_suspend_auto
-depends: suspend/suspend_advanced_auto
-requires:
- package.name == 'bluez'
- package.name == 'obexftp'
- device.category == 'BLUETOOTH'
-command:
-  if [ -z "$BTDEVADDR" ]
-  then
-    echo "btdevaddr option not set to device address of Bluetooth target in checkbox.ini"
-    exit 1
-  fi
-  if rfkill list bluetooth | grep -q 'Hard blocked: yes'
-  then
-    echo "rfkill list shows BT is hard blocked"
-  fi
-  if rfkill list bluetooth | grep -q 'Soft blocked: yes'
-  then
-    echo "rfkill list shows BT is soft blocked, removing before testing"
-    rfkill unblock bluetooth
-    sleep 3
-  fi
-  set -o pipefail; bluetooth_test $CHECKBOX_SHARE/data/images/JPEG_Color_Image_Ubuntu.jpg $BTDEVADDR browse 2>&1 | ansi_parser
-_description:
- This is an automated Bluetooth test. It emulates browsing on a remote device specified by the BTDEVADDR environment variable.
-
-plugin: shell
-name: suspend/bluetooth_obex_get_after_suspend
-depends: suspend/suspend_advanced
-requires:
- package.name == 'bluez'
- package.name == 'obexftp'
- device.category == 'BLUETOOTH'
-command:
-  if [ -z "$BTDEVADDR" ]
-  then
-    echo "btdevaddr option not set to device address of Bluetooth target in checkbox.ini"
-    exit 1
-  fi
-  if rfkill list bluetooth | grep -q 'Hard blocked: yes'
-  then
-    echo "rfkill list shows BT is hard blocked"
-  fi
-  if rfkill list bluetooth | grep -q 'Soft blocked: yes'
-  then
-    echo "rfkill list shows BT is soft blocked, removing before testing"
-    rfkill unblock bluetooth
-    sleep 3
-  fi
-  set -o pipefail; bluetooth_test $CHECKBOX_SHARE/data/images/JPEG_Color_Image_Ubuntu.jpg $BTDEVADDR get 2>&1 | ansi_parser
-_description:
- This is an automated Bluetooth test. It receives the given file from a remote host specified by the BTDEVADDR environment variable
-
-plugin: shell
-name: suspend/bluetooth_obex_get_after_suspend_auto
-depends: suspend/suspend_advanced_auto
-requires:
- package.name == 'bluez'
- package.name == 'obexftp'
- device.category == 'BLUETOOTH'
-command:
-  if [ -z "$BTDEVADDR" ]
-  then
-    echo "btdevaddr option not set to device address of Bluetooth target in checkbox.ini"
-    exit 1
-  fi
-  if rfkill list bluetooth | grep -q 'Hard blocked: yes'
-  then
-    echo "rfkill list shows BT is hard blocked"
-  fi
-  if rfkill list bluetooth | grep -q 'Soft blocked: yes'
-  then
-    echo "rfkill list shows BT is soft blocked, removing before testing"
-    rfkill unblock bluetooth
-    sleep 3
-  fi
-  set -o pipefail; bluetooth_test $CHECKBOX_SHARE/data/images/JPEG_Color_Image_Ubuntu.jpg $BTDEVADDR get 2>&1 | ansi_parser
-_description:
- This is an automated Bluetooth test. It receives the given file from a remote host specified by the BTDEVADDR environment variable
-
-plugin: manual
-name: suspend/bluetooth_obex_after_suspend_manual
-depends: suspend/suspend_advanced suspend/bluetooth_obex_before_suspend_manual
-requires:
- package.name == 'bluez'
- package.name == 'obexd-client'
- device.category == 'BLUETOOTH'
-command: rfkill unblock bluetooth; obex_send `bluetooth_scan` $CHECKBOX_SHARE/data/images/JPEG_Color_Image_Ubuntu.jpg
-_description:
- PURPOSE:
-     This test will send the image 'JPEG_Color_Image_Ubuntu.jpg' to a specified device
- STEPS:
-     1. Click "Test" and you will be prompted to enter the Bluetooth device name of a device that can accept file transfers (It may take a few moments after entering the name for the file to begin sending)
-     2. Accept any prompts that appear on both devices
- VERIFICATION:
-     Was the data correctly transferred?
-
-plugin: manual
-name: suspend/cycle_resolutions_after_suspend
-requires: package.name == 'xorg'
-depends: suspend/suspend_advanced graphics/cycle_resolution
-command: xrandr_cycle --keyword=after_suspend --screenshot-dir $CHECKBOX_DATA
-_description:
- PURPOSE:
-     This test will cycle through the detected display modes
- STEPS:
-     1. Click "Test" and the display will cycle trough the display modes
- VERIFICATION:
-     Did your display look fine in the detected mode?
-
-plugin: shell
-name: suspend/cycle_resolutions_after_suspend_auto
-requires: package.name == 'xorg'
-depends: suspend/suspend_advanced_auto graphics/cycle_resolution
-_description:
- This test will check to make sure supported video modes work after a suspend and resume.
- This is done automatically by taking screenshots and uploading them as an attachment.
-command: xrandr_cycle --keyword=after_suspend --screenshot-dir $CHECKBOX_DATA
-
-plugin: attachment
-name: suspend/xrandr_screens_after_suspend.tar.gz
-depends: suspend/cycle_resolutions_after_suspend_auto
-command: [ -e $CHECKBOX_DATA/xrandr_screens_after_suspend.tgz ] && cat $CHECKBOX_DATA/xrandr_screens_after_suspend.tgz
-_description: This attaches screenshots from the suspend/cycle_resolutions_after_suspend_auto test to the results submission.
-
-plugin: shell
-name: suspend/record_playback_after_suspend
-depends: suspend/suspend_advanced
-requires:
- package.name == 'python3-gi'
- package.name == 'gir1.2-gstreamer-1.0'
- package.name == 'libgstreamer1.0-0'
- package.name == 'gstreamer1.0-plugins-good'
- package.name == 'gstreamer1.0-pulseaudio'
- package.name == 'alsa-base'
- device.category == 'AUDIO'
-command: audio_test
-_description:
- 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.
-
-plugin: shell
-name: suspend/record_playback_after_suspend_auto
-depends: suspend/suspend_advanced_auto
-requires:
- package.name == 'python3-gi'
- package.name == 'gir1.2-gstreamer-1.0'
- package.name == 'libgstreamer1.0-0'
- package.name == 'gstreamer1.0-plugins-good'
- package.name == 'gstreamer1.0-pulseaudio'
- package.name == 'alsa-base'
- device.category == 'AUDIO'
-command: audio_test
-_description:
- 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.
-
-plugin: attachment
-name: suspend/suspend-auto-single-log-attach
-command: [ -e $CHECKBOX_DATA/suspend_auto_single_log ] && cat $CHECKBOX_DATA/suspend_auto_single_log
-_description:
- Attaches the log from the single suspend/resume test to the results
-
-plugin: shell
-name: suspend/screenshot_after_suspend
-depends: suspend/suspend_advanced_auto
-requires: package.name == 'fswebcam'
-command: set -o pipefail; camera_test still --device=/dev/external_webcam -f ${CHECKBOX_DATA}/screenshot_after_suspend.jpg -q 2>&1 | ansi_parser
-_description:
- PURPOSE:
-     Take a screengrab of the current screen after suspend (logged on Unity desktop)
- STEPS:
-     1. Take picture using USB webcam
- VERIFICATION:
-     Review attachment manually later
-
-plugin: attachment
-name: screenshot_after_suspend.jpg
-depends: suspend/screenshot_after_suspend
-command: base64 ${CHECKBOX_DATA}/screenshot_after_suspend.jpg
-_description: Attaches the screenshot captured in graphics/screenshot.
-
-plugin: shell
-name: suspend/gpu_lockup_after_suspend
-requires:
- package.name == 'wmctrl'
- package.name == 'mesa-utils'
- package.name == 'firefox'
-depends: suspend/suspend_advanced_auto
-command: gpu_test
-_description:
- PURPOSE:
-     Do some challenging operations then check for lockup on the GPU
- STEPS:
-     1. Create 2 glxgears windows and move them quickly
-     2. Switch workspaces with wmctrl
-     3. Launch an HTML5 video playback in firefox
- VERIFICATION:
-     After a 60s workload, check kern.log for reported GPU errors
-
-plugin: shell
-name: suspend/wifi_resume_time
-depends: suspend/suspend_advanced
-requires:
-   device.category == 'WIRELESS'
-command: network_reconnect_resume_test -t 20 -d wifi
-_description:
- Checks the length of time it takes to reconnect an existing wifi connection
- after a suspend/resume cycle.
-
-plugin: shell
-name: suspend/wifi_resume_time_auto
-depends: suspend/suspend_advanced_auto
-requires:
-   device.category == 'WIRELESS'
-command: network_reconnect_resume_test -t 20 -d wifi
-_description:
- Checks the length of time it takes to reconnect an existing wifi connection
- after a suspend/resume cycle.
-
-plugin: shell
-name: suspend/network_resume_time
-depends: suspend/suspend_advanced
-requires:
-   device.category == 'NETWORK'
-command: network_reconnect_resume_test -t 10 -d wired
-_description:
- Checks the length of time it takes to reconnect an existing wired connection
-  after a suspend/resume cycle.
-
-plugin: shell
-name: suspend/network_resume_time_auto
-depends: suspend/suspend_advanced_auto
-requires:
-   device.category == 'NETWORK'
-command: network_reconnect_resume_test -t 10 -d wired
-_description:
- Checks the length of time it takes to reconnect an existing wired connection
-  after a suspend/resume cycle.
-
-plugin: manual
-name: suspend/led_after_suspend/power
-depends: suspend/suspend_advanced
-_description:
- PURPOSE:
-     Validate that the power LED operated the same after resuming from suspend
- STEPS:
-     1. Power LED should be on while device is switched on
- VERIFICATION:
-     Does the power LED remain on after resuming from suspend?
-
-plugin: manual
-name: suspend/led_after_suspend/battery-charging
-depends: suspend/suspend_advanced
-_description:
- PURPOSE:
-     Validate that the battery light shows charging status after resuming from suspend
- STEPS:
-     1. Let system run on battery for a while
-     2. Plug in AC plug
- VERIFICATION:
-     Did the battery indicator LED still turn orange after resuming from suspend?
-
-plugin: manual
-name: suspend/led_after_suspend/battery-charged
-depends: suspend/suspend_advanced
-_description:
- PURPOSE:
-     Validate that the battery LED properly displays charged status after resuming from suspend
- STEPS:
-     1. Let system run on battery for a short time
-     2. Plug in AC
-     3. Let system run on AC
- VERIFICATION:
-     Does the orange battery LED still shut off when system is fully charged after resuming from suspend?
-
-plugin: manual
-name: suspend/led_after_suspend/battery-low
-depends: suspend/suspend_advanced
-_description:
- PURPOSE:
-     Validate that the battery LED indicated low power after resuming from suspend
- STEPS:
-     1. Let system run on battery for several hours
-     2. Monitor battery LED carefully
- VERIFICATION:
-     Does the LED light orange when battery is low after resuming from suspend?
-
-plugin: manual
-name: suspend/led_after_suspend/hdd
-depends: suspend/suspend_advanced
-command: led_hdd_test
-_description:
- PURPOSE:
-     Validate that the HDD LED still operates as expected after resuming from suspend
- STEPS:
-     1. Select "Test" to write and read a temporary file for a few seconds
-     2. HDD LED should blink when writing to/reading from HDD
- VERIFICATION:
-     Did the HDD LED still blink with HDD activity after resuming from suspend?
-
-plugin: manual
-name: suspend/led_after_suspend/numeric-keypad
-depends: suspend/suspend_advanced
-command: keyboard_test
-_description:
- PURPOSE:
-     Validate that the numeric keypad LED operates the same before and after resuming from suspend
- STEPS:
-     1. Press "Block Num" key to toggle numeric keypad LED
-     2. Click on the "Test" button to open a window to verify your typing
-     3. Type using the numeric keypad both when the LED is on and off
- VERIFICATION:
-     1. Numeric keypad LED status should toggle everytime the "Block Num" key is pressed
-     2. Numbers should only be entered in the keyboard verification window when the LED is on
-
-plugin: manual
-name: suspend/led_after_suspend/caps-lock
-depends: suspend/suspend_advanced
-_description:
- PURPOSE:
-     Validate that the Caps Lock key operates the same before and after resuming from suspend
- STEPS:
-     1. Press "Block Cap Keys" to activate/deactivate cap keys blocking
-     2. Cap Keys LED should be switched on/off every time the key is pressed
- VERIFICATION:
-     Did the Cap Keys LED light as expected after resuming from suspend?
-
-plugin: manual
-name: suspend/led_after_suspend/wlan
-depends: suspend/suspend_advanced
-_description:
- PURPOSE:
-     WLAN LED verification after resuming from suspend
- STEPS:
-     1. Make sure WLAN connection is established
-     2. WLAN LED should light
- VERIFICATION:
-     Did the WLAN LED light as expected after resuming from suspend?
-
-plugin: manual
-name: suspend/led_after_suspend/wlan-disabled
-depends: suspend/suspend_advanced
-_description:
- PURPOSE:
-     Validate that WLAN LED shuts off when disabled after resuming from suspend
- STEPS:
-     1. Connect to AP
-     2. Use Physical switch to disable WLAN
-     3. Re-enable
-     4. Use Network-Manager to disable WLAN
- VERIFICATION:
-     Did the LED turn off then WLAN is disabled after resuming from suspend?
-
-plugin: manual
-name: suspend/led_after_suspend/bluetooth
-depends: suspend/suspend_advanced
-_description:
- PURPOSE:
-     Validate that the Bluetooth LED turns on and off when BT is enabled/disabled after resuming from suspend
- STEPS:
-     1. Switch bluetooth off from a hardware switch (if present)
-     2. Switch bluetooth back on
-     3. Switch bluetooth off from the panel applet
-     4. Switch bluetooth back on
- VERIFICATION:
-     Did the bluetooth LED turn off and on twice after resuming from suspend?
-
-plugin: manual
-name: suspend/led_after_suspend/camera
-depends:
- camera/detect
- suspend/suspend_advanced
-command: camera_test led
-_description:
- PURPOSE:
-     Validate that the camera LED still works as expected after resuming from suspend
- STEPS:
-     1. Select Test to activate camera
-     2. Camera LED should light for a few seconds
- VERIFICATION:
-     Did the camera LED still turn on and off after resuming from suspend?
-
-plugin: manual
-name: suspend/led_after_suspend/touchpad
-depends: suspend/suspend_advanced
-_description:
- PURPOSE:
-     Touchpad LED verification after resuming from suspend
- STEPS:
-     1. Click on the touchpad button or press key combination to enable/disable touchpad button
-     2. Slide your finger on the touchpad
- VERIFICATION:
-     1. Touchpad LED status should toggle everytime the button is clicked or the key combination is pressed
-     2. When the LED is on, the mouse pointer should move on touchpad usage
-     3. When the LED is off, the mouse pointer should not move on touchpad usage
-
-plugin: manual
-name: suspend/led_after_suspend/wireless
-depends: suspend/suspend_advanced
-_description:
- PURPOSE:
-     Validate Wireless (WLAN + Bluetooth) LED operated the same after resuming from suspend
- STEPS:
-     1. Make sure WLAN connection is established and Bluetooth is enabled.
-     2. WLAN/Bluetooth LED should light
-     3. Switch WLAN and Bluetooth off from a hardware switch (if present)
-     4. Switch them back on
-     5. Switch WLAN and Bluetooth off from the panel applet
-     6. Switch them back on
- VERIFICATION:
-     Did the WLAN/Bluetooth LED light as expected after resuming from suspend?
-
-plugin: manual
-name: suspend/keys_after_suspend/brightness
-depends: suspend/suspend_advanced
-requires: dmi.product in ['Notebook','Laptop','Portable']
-_description:
- PURPOSE:
-     This test will test the brightness key after resuming from suspend
- STEPS:
-     1. Press the brightness buttons on the keyboard
- VERIFICATION:
-     Did the brightness change following to your key presses after resuming from suspend?
-
-plugin: manual
-name: suspend/keys_after_suspend/volume
-depends: suspend/suspend_advanced
-requires:
- device.category == 'KEYBOARD'
-user: root
-command: key_test -s '0xe02e,0xe0ae:Volume Up' '0xe030,0xe0b0:Volume Down'
-_description:
- PURPOSE:
-     This test will test the volume keys of your keyboard after resuming from suspend
- STEPS:
-     1. Click test to open a window on which to test the volume keys.
-     2. If all the keys work, the test will be marked as passed.
-     3. If your computer has no volume keys, Skip this test.
- VERIFICATION:
-     Did the volume change following to your key presses?
-
-plugin: manual
-name: suspend/keys_after_suspend/mute
-depends: suspend/suspend_advanced
-requires:
- device.category == 'KEYBOARD'
-user: root
-command: key_test -s '0xe020,0xe0a0:Mute'
-_description:
- PURPOSE:
-     This test will test the mute key of your keyboard after resuming from suspend
- STEPS:
-     1. Click test to open a window on which to test the mute key.
-     2. If the key works, the test will pass and the window will close.
- VERIFICATION:
-     Did the volume mute following your key presses?
-
-plugin: manual
-name: suspend/keys_after_suspend/sleep
-depends: suspend/suspend_advanced
-requires:
- device.category == 'KEYBOARD'
-_description:
- PURPOSE:
-     This test will test the sleep key after resuming from suspend
- STEPS:
-     1. Press the sleep key on the keyboard
-     2. Wake your system up by pressing the power button
- VERIFICATION:
-     Did the system go to sleep after pressing the sleep key after resuming from suspend?
-
-plugin: manual
-name: suspend/keys_after_suspend/battery-info
-depends: suspend/suspend_advanced
-requires: dmi.product in ['Notebook','Laptop','Portable']
-user: root
-command: key_test -s '0xe071,0xef1:Battery Info'
-_description:
- PURPOSE:
-     This test will test the battery information key after resuming from suspend
- STEPS:
-     If you do not have a Battery Button, skip this test
-     1. Click Test to begin
-     2. Press the Battery Info button (or combo like Fn+F3)
-     3: Close the Power Statistics tool if it opens
- VERIFICATION:
-     Did the Battery Info key work as expected after resuming from suspend?
-
-plugin: manual
-name: suspend/keys_after_suspend/wireless
-depends: suspend/suspend_advanced
-requires: dmi.product in ['Notebook','Laptop','Portable']
-_description:
- PURPOSE:
-     This test will test the wireless key after resuming from suspend
- STEPS:
-     1. Press the wireless key on the keyboard
-     2. Press the same key again
- VERIFICATION:
-     Did the wireless go off on the first press and on again on the second after resuming from suspend?
-
-plugin: manual
-name: suspend/keys_after_suspend/media-control
-depends: suspend/suspend_advanced
-requires:
- device.category == 'KEYBOARD'
-user: root
-command: key_test -s 0xe010,0xe090:Previous 0xe024,0xe0a4:Stop 0xe019,0xe099:Next 0xe022,0xe0a2:Play
-_description:
- PURPOSE:
-     This test will test the media keys of your keyboard after resuming from suspend
- STEPS:
-     1. Click test to open a window on which to test the media keys.
-     2. If all the keys work, the test will be marked as passed.
-     3. If your computer has no media keys, Skip this test.
- VERIFICATION:
-     Do the keys work as expected after resuming from suspend?
-
-plugin: manual
-name: suspend/keys_after_suspend/super
-depends: suspend/suspend_advanced
-requires:
- device.category == 'KEYBOARD'
-user: root
-command: key_test -s '0xe05b,0xe0db:Left Super Key'
-_description:
- PURPOSE:
-     This test will test the super key of your keyboard after resuming from suspend
- STEPS:
-     1. Click test to open a window on which to test the super key.
-     2. If the key works, the test will pass and the window will close.
- VERIFICATION:
-     Does the super key work as expected after resuming from suspend?
-
-plugin: manual
-name: suspend/keys_after_suspend/video-out
-depends: suspend/suspend_advanced
-requires: dmi.product in ['Notebook','Laptop','Portable']
-_description:
- PURPOSE:
-     Validate that the External Video hot key is working as expected after resuming from suspend
- STEPS:
-     1. Plug in an external monitor
-     2. Press the display hot key to change the monitors configuration
- VERIFICATION:
-     Check that the video signal can be mirrored, extended, displayed on external or onboard only, after resuming from suspend.
-
-plugin: manual
-name: suspend/keys_after_suspend/touchpad
-depends: suspend/suspend_advanced
-requires: dmi.product in ['Notebook','Laptop','Portable']
-_description:
- PURPOSE:
-     Verify touchpad hotkey toggles touchpad functionality on and off after resuming from suspend
- STEPS:
-     1. Verify the touchpad is functional
-     2. Tap the touchpad toggle hotkey
-     3. Tap the touchpad toggle hotkey again
- VERIFICATION:
-     Verify the touchpad has been disabled and re-enabled.

=== removed file 'jobs/touchpad.txt.in'
--- jobs/touchpad.txt.in	2013-07-05 16:43:48 +0000
+++ jobs/touchpad.txt.in	1970-01-01 00:00:00 +0000
@@ -1,68 +0,0 @@
-plugin: manual
-name: touchpad/basic
-requires: dmi.product in ['Notebook','Laptop','Portable']
-_description:
- PURPOSE:
-     Touchpad user-verify
- STEPS:
-     1. Make sure that touchpad is enabled.
-     2. Move cursor using the touchpad.
- VERIFICATION:
-     Did the cursor move?
-
-plugin: user-interact
-name: touchpad/horizontal
-requires:
-  'Button Horiz Wheel Left' in xinput.button_labels and 'Button Horiz Wheel Right' in xinput.button_labels
-command: touchpad_test right left
-_description:
- PURPOSE:
-     Touchpad horizontal scroll verification
- STEPS:
-     1. Select "Test" when ready and place your cursor within the borders of the displayed test window.
-     2. Verify that you can move the horizontal slider by moving your finger right and left in the lower part of the touchpad.
- VERIFICATION:
-     Could you scroll right and left?
-
-plugin: user-interact
-name: touchpad/vertical
-requires:
-  'Button Wheel Up' in xinput.button_labels and 'Button Wheel Down' in xinput.button_labels
-command: touchpad_test up down
-_description:
- PURPOSE:
-     Touchpad vertical scroll verification
- STEPS:
-     1. Select "Test" when ready and place your cursor within the borders of the displayed test window.
-     2. Verify that you can move the vertical slider by moving your finger up and down in the right part of the touchpad.
- VERIFICATION:
-     Could you scroll up and down?
-
-plugin: shell
-name: touchpad/singletouch-automated
-requires:
-  dmi.product in ['Notebook','Laptop','Portable']
-  xinput.device_class == 'XITouchClass' and xinput.touch_mode != 'dependent'
-command: true
-_description:
- Determine whether the touchpad is detected as a singletouch device automatically.
-
-plugin: shell
-name: touchpad/multitouch-automated
-requires:
-  dmi.product in ['Notebook','Laptop','Portable']
-  xinput.device_class == 'XITouchClass' and xinput.touch_mode == 'dependent'
-command: true
-_description:
- Determine whether the touchpad is detected as a multitouch device automatically.
-
-plugin: manual
-name: touchpad/multitouch-manual
-depends: touchpad/singletouch-automated
-_description:
- PURPOSE:
-     Touchpad manual detection of multitouch.
- STEPS:
-     1. Look at the specifications for your system.
- VERIFICATION:
-     Is the touchpad supposed to be multitouch?

=== removed file 'jobs/touchscreen.txt.in'
--- jobs/touchscreen.txt.in	2012-10-22 19:43:53 +0000
+++ jobs/touchscreen.txt.in	1970-01-01 00:00:00 +0000
@@ -1,58 +0,0 @@
-plugin: manual
-name: touchscreen/tap-detect
-_description:
- PURPOSE:
-     Check touchscreen tap recognition
- STEPS:
-     1. Tap an object on the screen with finger. The cursor should jump to location tapped and object should highlight
- VERIFICATION:
-     Does tap recognition work?
-
-plugin: manual
-name: touchscreen/drag-n-drop
-_description:
- PURPOSE:
-     Check touchscreen drag & drop
- STEPS:
-     1. Double tap, hold, and drag an object on the desktop
-     2. Drop the object in a different location
- VERIFICATION:
-     Does the object select and drag and drop?
-
-plugin: manual
-name: touchscreen/multitouch-zoom
-_description:
- PURPOSE:
-     Check touchscreen pinch gesture for zoom
- STEPS:
-     1. Place two fingers on the screen and pinch them together
-     2. Place two fingers on the screen and move then apart
- VERIFICATION:
-     Does the screen zoom in and out?
-
-plugin: shell
-name: touchscreen/nontouch-automated
-requires:
-  xinput.device_class == 'XITouchClass' and xinput.touch_mode != 'direct'
-command: true
-_description:
- Determine whether the screen is detected as a non-touch device automatically.
-
-plugin: shell
-name: touchscreen/multitouch-automated
-requires:
-  xinput.device_class == 'XITouchClass' and xinput.touch_mode == 'direct'
-command: true
-_description:
- Determine whether the screen is detected as a multitouch device automatically.
-
-plugin: manual
-name: touchscreen/multitouch-manual
-depends: touchscreen/nontouch-automated
-_description:
- PURPOSE:
-     Touchscreen manual detection of multitouch.
- STEPS:
-     1. Look at the specifications for your system.
- VERIFICATION:
-     Is the screen supposed to be multitouch?

=== removed file 'jobs/user_apps.txt.in'
--- jobs/user_apps.txt.in	2012-07-25 19:08:46 +0000
+++ jobs/user_apps.txt.in	1970-01-01 00:00:00 +0000
@@ -1,505 +0,0 @@
-plugin: manual
-name: software/update_manager_finds_updates
-depends: networking/detect
-user: root
-requires: package.name == 'update-manager'
-_description:
- PURPOSE:
-  This test will check that the update manager can find updates.
- STEPS:
-  1. Click Test to launch update-manager.
-  2. Follow the prompts and if updates are found, install them. 
-  3. When Update Manager has finished, please close the app by clicking the Close button in the lower right corner.
- VERIFICATION:
-  Did Update manager find and install updates (Pass if no updates are found,
-  but Fail if updates are found but not installed)
-command: update-manager --check-dist-upgrades
-
-plugin: manual
-name: software/nautilus_folder_create
-requires: package.name == 'nautilus'
-command: nautilus
-_description:
- PURPOSE:
-  This test will check that the file browser can create a new folder.
- STEPS:
-  1. Click Test to open the File Browser. 
-  2. On the menu bar, click File -> Create Folder. 
-  3. In the name box for the new folder, enter the name Test Folder and hit Enter.
-  4. Close the File browser.
- VERIFICATION:
-  Do you now have a new folder called Test Folder?
-
-plugin: manual
-name: software/nautilus_folder_copy
-depends: software/nautilus_folder_create
-command: nautilus
-_description:
- PURPOSE:
-  This test will check that the file browser can copy a folder
- STEPS:
-  1. Click Test to open the File Browser. 
-  2. Right click on the folder called Test Folder and click on Copy.
-  3. Right Click on any white area in the window and click on Paste.
-  4. Right click on the folder called Test Folder(copy) and click Rename.
-  5. Enter the name Test Data in the name box and hit Enter.
-  6. Close the File browser.
- VERIFICATION:
-  Do you now have a folder called Test Data?
-
-plugin: manual
-name: software/nautilus_folder_move
-depends: software/nautilus_folder_copy
-command: nautilus
-_description:
- PURPOSE:
-  This test will verify that the file browser can move a folder.
- STEPS:
-  1. Click Test to open the File Browser. 
-  2. Click and drag the folder called Test Data onto the icon called Test Folder. 
-  3. Release the button.
-  4. Double click the folder called Test Folder to open it up.
-  5. Close the File Browser.
- VERIFICATION:
-  Was the folder called Test Data successfully moved into the folder called Test Folder?
-
-plugin: manual
-name: software/nautilus_file_create
-depends: software/nautilus_folder_create
-command: nautilus $HOME/"Test Folder"
-_description:
- PURPOSE:
-  This test will check that the file browser can create a new file.
- STEPS:
-  1. Click Select Test to open the File Browser. 
-  2. Right click in the white space and click Create Document -> Empty Document. 
-  3. Enter the name Test File 1 in the name box and hit Enter.
-  4. Close the File browser.
- VERIFICATION:
-  Do you now have a file called Test File 1?
-
-plugin: manual
-name: software/nautilus_file_copy
-depends: software/nautilus_file_create
-command: nautilus $HOME/"Test Folder"
-_description:
- PURPOSE:
-  This test will check that the file browser can copy a file.
- STEPS:
-  1. Click Test to open the File Browser. 
-  2. Right click on the file called Test File 1 and click Copy. 
-  3. Right click in the white space and click Paste.
-  4. Right click on the file called Test File 1(copy) and click Rename. 
-  5. Enter the name Test File 2 in the name box and hit Enter.
-  6. Close the File Browser.
- VERIFICATION:
-  Do you now have a file called Test File 2?
-
-plugin: manual
-name: software/nautilus_file_move
-depends: software/nautilus_file_copy
-command: nautilus $HOME/"Test Folder"
-_description:
- PURPOSE:
-  This test will check that the file browser can move a file.
- STEPS:
-  1. Click Test to open the File Browser. 
-  2. Click and drag the file called Test File 2 onto the icon for the folder called Test Data. 
-  3. Release the button.
-  4. Double click the icon for Test Data to open that folder up.
-  5. Close the File Browser.
- VERIFICATION:
-  Was the file Test File 2 successfully moved into the Test Data folder?
-
-plugin: manual
-name: software/nautilus_file_delete
-depends: software/nautilus_file_create
-command: nautilus $HOME/"Test Folder"
-_description:
- PURPOSE:
-  This test will check that the file browser can delete a file.
- STEPS:
-  1. Click Test to open the File Browser. 
-  2. Right click on the file called Test File 1 and click on Move To Trash.
-  3. Verify that Test File 1 has been removed.
-  4. Close the File Browser.
- VERIFICATION:
-   Is Test File 1 now gone?
-
-plugin: manual
-name: software/nautilus_folder_delete
-depends: software/nautilus_folder_create
-command: nautilus
-_description:
- PURPOSE:
-  This test will check that the file browser can delete a folder.
- STEPS:
-  1. Click Test to open the File Browser. 
-  2. Right click on the folder called Test Folder and click on Move To Trash.
-  3. Verify that the folder was deleted.
-  4. Close the file browser.
- VERIFICATION:
-  Has Test Folder been successfully deleted?
-
-plugin: local
-name: software/view_office_document
-requires: package.name == "ubuntu-desktop"
-_description: Common Document Types Test
-command:
- cat <<'EOF' | run_templates -s "find $CHECKBOX_SHARE/data/documents -type f"
- name: `basename $0`_test
- plugin: manual
- description:
-  PURPOSE:
-   This test will check that common office document types can be opened in the default application.
-  STEPS:
-   1. Click Test to open the file '$0' with its default viewer. 
-   2. After the viewer opens, check out the file that was opened.
-   3. Close the application (LibreOffice, Doc Viewer, etc.)
-  VERIFICATION:
-   Did the application open the document properly? (e.g was it displayed and did it function properly?)
- command: xdg-open $0
- EOF
-
-plugin: local
-name: software/audio_file_play
-requires: package.name == "ubuntu-desktop"
-_description: Common Document Types Test
-command:
- cat <<'EOF' | run_templates -s "find $CHECKBOX_SHARE/data/audio -type f"
- name: `basename $0`_test
- plugin: manual
- description:
-  PURPOSE:
-   This test will check that common audio files can be opened in the default player.
-  STEPS:
-   1. Click Test to open the audio file '$0' with its default player. 
-   2. After the player opens listen to the sound.
-   3. Close the application.
-  VERIFICATION:
-   Did the application play the audio file properly? (no skips, crackles, etc)
- command: xdg-open $0
- EOF
-
-plugin: local
-name: software/video_file_play
-requires: package.name == "ubuntu-desktop"
-_description: Common Document Types Test
-command:
- cat <<'EOF' | run_templates -s "find $CHECKBOX_SHARE/data/video -type f"
- name: `basename $0`_test
- plugin: manual
- description:
-  PURPOSE:
-   This test will check that common video files can be played in the default player.
-  STEPS:
-   1. Click Test to play the video '$0' with its default player. 
-   2. Watch the video.
-   3. Close the application.
-  VERIFICATION:
-   Did the application play '$0' proplerly (no video or audio issues with playback?)
- command: xdg-open $0
- EOF
-
-plugin: local
-name: software/view_image_file
-requires: package.name == "ubuntu-desktop"
-_description: Common Document Types Test
-command:
- cat <<'EOF' | run_templates -s "find $CHECKBOX_SHARE/data/images -type f"
- name: `basename $0`_test
- plugin: manual
- description:
-  PURPOSE:
-   This test will check that common image formats can be opened in the default viewer.
-  STEPS:
-   1. Click Test to attempt to open the image '$0' with its default viewer.
-   2. Check out the file that was opened.
-   3. Close the application.
-  VERIFICATION:
-   Did the image display properly?
- command: xdg-open $0
- EOF
-
-plugin: manual
-name: software/firefox
-requires: package.name == 'firefox'
-command: firefox $CHECKBOX_SHARE/data/websites/testindex.html
-_description:
- PURPOSE:
-  This test will check that Firefox can render a basic web page.
- STEPS:
-  1. Select Test to launch Firefox and view the test web page.
- VERIFICATION:
-  Did the Ubuntu Test page load correctly?
-
-plugin: manual
-name: software/firefox-java
-depends: software/firefox
-requires: package.name == 'firefox'
-command: firefox $CHECKBOX_SHARE/data/websites/javatest.html
-_description:
- PURPOSE:
-  This test will check that Firefox can run a java applet in a web page. Note:
-  this may require installing additional software to complete successfully.
- STEPS:
-  1. Select Test to open Firefox with the Java test page, and follow the instructions there.
- VERIFICATION:
-  Did the applet display?
-
-plugin: manual
-name: software/firefox-flash
-depends: software/firefox
-requires: package.name == 'firefox'
-command: firefox $CHECKBOX_SHARE/data/websites/flashtest.html
-_description:
- PURPOSE:
-  This test will check that Firefox can run flash applications. Note: this may
-  require installing additional software to successfully complete.
- STEPS:
-  1. Select Test to launch Firefox and view a sample Flash test.
- VERIFICATION:
-  Did you see the text?
-
-plugin: manual
-name: software/firefox-flash-video
-depends: software/firefox-flash
-requires: package.name == 'firefox'
-command: firefox $CHECKBOX_SHARE/data/websites/flashvideo.html
-_description:
- PURPOSE:
-  This test will check that Firefox can play a Flash video. Note: this may
-  require installing additional software to successfully complete.
- STEPS:
-  1. Select Test to launch Firefox and view a short flash video.
- VERIFICATION:
-  Did the video play correctly?
-
-plugin: manual
-name: software/firefox-totem
-depends: software/firefox
-requires: 
-    package.name == 'firefox'
-    package.name == 'gstreamer0.10-ffmpeg'
-command: firefox $CHECKBOX_SHARE/data/video/Quicktime_Video.mov
-_description:
- PURPOSE:
-  This test will check that Firefox can play a Quicktime (.mov) video file.
-  Note: this may require installing additional software to successfully
-  complete.
- STEPS:
-  1. Select Test to launch Firefox with a sample video.
- VERIFICATION:
-  Did the video play using a plugin?
-
-plugin: manual
-name: software/empathy-facebook_chat
-requires: package.name == "empathy"
-command: empathy
-_description:
- PURPOSE:
-  This test will check that Empathy messaging client works.
- STEPS:
-  1. Select Test to launch Empathy.
-  2. Configure it to connect to the Facebook Chat service. 
-  3. Once you have completed the test, please quit Empathy to continue here.
- VERIFICATION:
-  Were you able to connect correctly and send/receive messages?
-
-plugin: manual
-name: software/empathy-google_talk
-requires: package.name == "empathy"
-command: empathy
-_description:
- PURPOSE:
-  This test will check that Empathy messaging client works.
- STEPS:
-  1. Select Test to launch Empathy.
-  2. Configure it to connect to the Google Talk (gtalk) service. 
-  3. Once you have completed the test, please quit Empathy to continue here.
- VERIFICATION:
-  Were you able to connect correctly and send/receive messages?
-
-plugin: manual
-name: software/empathy-jabber
-requires: package.name == "empathy"
-command: empathy
-_description:
- PURPOSE:
-  This test will check that Empathy messaging client works.
- STEPS:
-  1. Select Test to launch Empathy.
-  2. Configure it to connect to the Jabber service. 
-  3. Once you have completed the test, please quit Empathy to continue here.
- VERIFICATION:
-  Were you able to connect correctly and send/receive messages?
-
-plugin: manual
-name: software/empathy-aim
-requires: package.name == "empathy"
-command: empathy
-_description:
- PURPOSE:
-  This test will check that Empathy messaging client works.
- STEPS:
-  1. Select Test to launch Empathy.
-  2. Configure it to connect to the AOL Instant Messaging (AIM) service. 
-  3. Once you have completed the test, please quit Empathy to continue here.
- VERIFICATION:
-  Were you able to connect correctly and send/receive messages?
-
-plugin: manual
-name: software/empathy-msn
-requires: package.name == "empathy"
-command: empathy
-_description:
- PURPOSE:
-  This test will check that Empathy messaging client works.
- STEPS:
-  1. Select Test to launch Empathy.
-  2. Configure it to connect to the Microsoft Network (MSN) service. 
-  3. Once you have completed the test, please quit Empathy to continue here.
- VERIFICATION:
-  Were you able to connect correctly and send/receive messages?
-
-plugin: manual
-name: software/evolution-pop3
-requires: package.name == "evolution"
-command: evolution
-_description:
- PURPOSE:
-  This test will check that Evolution works.
- STEPS:
-  1. Click the "Test" button to launch Evolution.
-  2. Configure it to connect to a POP3 account.
- VERIFICATION:
-  Were you able to receive and read e-mail correctly?
-
-plugin: manual
-name: software/evolution-imap
-requires: package.name == "evolution"
-command: evolution
-_description:
- PURPOSE:
-  This test will check that Evolution works.
- STEPS:
-  1. Click the "Test" button to launch Evolution.
-  2. Configure it to connect to a IMAP account.
- VERIFICATION:
-  Were you able to receive and read e-mail correctly?
-
-plugin: manual
-name: software/evolution-smtp
-requires: package.name == "evolution"
-command: evolution
-_description:
- PURPOSE:
-  This test will check that Evolution works.
- STEPS:
-  1. Click the "Test" button to launch Evolution.
-  2. Configure it to connect to a SMTP account.
- VERIFICATION:
-  Were you able to send e-mail without errors?
-
-plugin: manual
-name: software/gcalctool
-requires: package.name == "gcalctool"
-command: gcalctool
-_description:
- PURPOSE:
-  This test checks that gcalctool (Calculator) works.
- STEPS:
-  Click the "Test" button to open the calculator.
- VERIFICATION:
-  Did it launch correctly?
-
-plugin: manual
-name: software/gcalctool-functions
-depends: software/gcalctool
-requires: package.name == "gcalctool"
-command: gcalctool
-_description:
- PURPOSE:
-  This test checks that gcalctool (Calculator) works.
- STEPS:
-  Click the "Test" button to open the calculator and perform:
-  1. Simple math functions (+,-,/,*)
-  2. Nested math functions ((,))
-  3. Fractional math
-  4. Decimal math
- VERIFICATION:
-  Did the functions perform as expected?
-
-plugin: manual
-name: software/gcalctool-memory
-depends: software/gcalctool
-requires: package.name == "gcalctool"
-command: gcalctool
-_description:
- PURPOSE:
-  This test checks that gcalctool (Calculator) works.
- STEPS:
-  Click the "Test" button to open the calculator and perform:
-   1. Memory set
-   2. Memory reset
-   3. Memory last clear
-   4. Memory clear
- VERIFICATION:
-  Did the functions perform as expected?
-
-plugin: manual
-name: software/gcalctool-clipboard
-depends: software/gcalctool
-requires: package.name == "gcalctool"
-command: gcalctool
-_description:
- PURPOSE:
-  This test checks that gcalctool (Calculator) works.
- STEPS:
-  Click the "Test" button to open the calculator and perform:
-   1. Cut
-   2. Copy
-   3. Paste
- VERIFICATION:
-  Did the functions perform as expected?
-
-plugin: manual
-name: software/gedit
-requires: package.name == "gedit"
-command: gedit
-_description:
- PURPOSE:
-  This test checks that gedit works.
- STEPS:
-  1. Click the "Test" button to open gedit.
-  2. Enter some text and save the file (make a note of the file name you use), then close gedit.
- VERIFICATION:
-  Did this perform as expected?
-
-plugin: manual
-name: software/gedit-read
-depends: software/gedit
-requires: package.name == "gedit"
-command: gedit
-_description:
- PURPOSE:
-  This test checks that gedit works.
- STEPS:
-  1. Click the "Test" button to open gedit, and re-open the file you created previously.
-  2. Edit then save the file, then close gedit.
- VERIFICATION:
-  Did this perform as expected?
-
-plugin: manual
-name: software/gnome-terminal
-requires: package.name == "gnome-terminal"
-command: gnome-terminal
-_description:
- PURPOSE:
-  This test will check that Gnome Terminal works.
- STEPS:
-  1. Click the "Test" button to open Terminal.
-  2. Type 'ls' and press enter. You should see a list of files and folder in your home directory.
-  3. Close the terminal window.
- VERIFICATION:
-  Did this perform as expected?

=== removed file 'jobs/wireless.txt.in'
--- jobs/wireless.txt.in	2013-04-18 11:48:32 +0000
+++ jobs/wireless.txt.in	1970-01-01 00:00:00 +0000
@@ -1,221 +0,0 @@
-plugin: shell
-name: wireless/wireless_scanning
-requires:
-  package.name == 'network-manager'
-  device.category == 'WIRELESS'
-command:
- rfkill unblock wlan wifi
- if rfkill list wlan wifi | grep -q 'Hard blocked: yes'; then
-   echo "Hard block is applied to WiFi device. Please remove and retest."
-   exit 1
- fi
- wireless_networks=`nmcli -f SSID dev wifi list`
- if [ `echo "$wireless_networks" | wc -l` -gt 1 ]; then
-   echo "Wireless networks discovered: "
-   echo "$wireless_networks"
-   exit 0
- fi
- echo "No wireless networks discovered."
- exit 1
-_description: Wireless scanning test. It scans and reports on discovered APs.
-
-plugin: manual
-name: wireless/wireless_connection
-command: network_check
-requires: device.category == 'WIRELESS'
-_description:
- PURPOSE:
-     This test will check your wireless connection.
- STEPS:
-     1. Click on the Network icon in the panel.
-     2. Select a network below the 'Wireless networks' section.
-     3. Click "Test" to verify that it's possible to establish an HTTP connection.
- VERIFICATION:
-     Did a notification show and was the connection correctly established?
-
-plugin: shell
-name: wireless/wireless_connection_wpa_bg
-requires:
- device.category == 'WIRELESS'
- environment.ROUTERS == 'multiple'
-user: root
-environ: WPA_BG_SSID WPA_BG_PSK
-command: trap "nmcli con delete id $WPA_BG_SSID" EXIT; create_connection wifi $WPA_BG_SSID --security=wpa --key=$WPA_BG_PSK && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
-_description:
- Tests that the systems wireless hardware can connect to a router using WPA
- security and the 802.11b/g protocols.
-
-plugin: shell
-name: wireless/wireless_connection_open_bg
-requires:
- device.category == 'WIRELESS'
- environment.ROUTERS == 'multiple'
-user: root
-environ: OPEN_BG_SSID
-command: trap "nmcli con delete id $OPEN_BG_SSID" EXIT; create_connection wifi $OPEN_BG_SSID && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
-_description:
- Tests that the systems wireless hardware can connect to a router using no
- security and the 802.11b/g protocols.
-
-plugin: shell
-name: wireless/wireless_connection_wpa_n
-requires:
- device.category == 'WIRELESS'
- environment.ROUTERS == 'multiple'
-user: root
-environ: WPA_N_SSID WPA_N_PSK
-command: trap "nmcli con delete id $WPA_N_SSID" EXIT; create_connection wifi $WPA_N_SSID --security=wpa --key=$WPA_N_PSK && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
-_description:
- Tests that the systems wireless hardware can connect to a router using WPA
- security and the 802.11n protocol.
-
-plugin: shell
-name: wireless/wireless_connection_open_n
-requires:
- device.category == 'WIRELESS'
- environment.ROUTERS == 'multiple'
-user: root
-environ: OPEN_N_SSID
-command: trap "nmcli con delete id $OPEN_N_SSID" EXIT; create_connection wifi $OPEN_N_SSID &&  internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
-_description:
- Tests that the systems wireless hardware can connect to a router using no
- security and the 802.11n protocol.
-
-plugin: manual
-name: wireless/wireless_connection_wpa_bg_manual
-requires:
- device.category == 'WIRELESS'
- environment.ROUTERS == 'single'
-user: root
-environ: ROUTER_SSID ROUTER_PSK
-command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection wifi $ROUTER_SSID --security=wpa --key=$ROUTER_PSK && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
-_description:
- PURPOSE:
-     Tests that the systems wireless hardware can connect to a router using WPA
-     security and the 802.11b/g protocols.
- STEPS:
-     1. Open your routers configuration tool
-     2. Change the settings to only accept connections on the B and G wireless bands
-     3. Make sure the SSID is set to ROUTER_SSID
-     4. Change the security settings to use WPA2 and ensure the PSK matches that set in ROUTER_PSK
-     5. Click the 'Test' button to create a connection to the router and test the connection
- VERIFICATION:
-     Verification is automated, do not change the automatically selected result.
-
-plugin: manual
-name: wireless/wireless_connection_open_bg_manual
-requires:
- device.category == 'WIRELESS'
- environment.ROUTERS == 'single'
-user: root
-environ: ROUTER_SSID
-command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection wifi $ROUTER_SSID && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
-_description:
- PURPOSE:
-     Tests that the systems wireless hardware can connect to a router using
-     no security and the 802.11b/g protocols.
- STEPS:
-     1. Open your routers configuration tool
-     2. Change the settings to only accept connections on the B and G wireless bands
-     3. Make sure the SSID is set to ROUTER_SSID
-     4. Change the security settings to use no security
-     5. Click the 'Test' button to create a connection to the router and test the connection
- VERIFICATION:
-     Verification is automated, do not change the automatically selected result.
-
-plugin: manual
-name: wireless/wireless_connection_wpa_n_manual
-requires:
- device.category == 'WIRELESS'
- environment.ROUTERS == 'single'
-user: root
-environ: ROUTER_SSID ROUTER_PSK
-command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection wifi $ROUTER_SSID --security=wpa --key=$ROUTER_PSK && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
-_description:
- PURPOSE:
-     Tests that the systems wireless hardware can connect to a router using WPA
-     security and the 802.11n protocols.
- STEPS:
-     1. Open your routers configuration tool
-     2. Change the settings to only accept connections on the N wireless band
-     3. Make sure the SSID is set to ROUTER_SSID
-     4. Change the security settings to use WPA2 and ensure the PSK matches that set in ROUTER_PSK
-     5. Click the 'Test' button to create a connection to the router and test the connection
- VERIFICATION:
-     Verification is automated, do not change the automatically selected result.
-
-plugin: manual
-name: wireless/wireless_connection_open_n_manual
-requires:
- device.category == 'WIRELESS'
- environment.ROUTERS == 'single'
-user: root
-environ: ROUTER_SSID
-command: trap "nmcli con delete id $ROUTER_SSID" EXIT; create_connection wifi $ROUTER_SSID && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
-_description:
- PURPOSE:
-     Tests that the systems wireless hardware can connect to a router using
-     no security and the 802.11n protocol.
- STEPS:
-     1. Open your routers configuration tool
-     2. Change the settings to only accept connections on the N wireless band
-     3. Make sure the SSID is set to ROUTER_SSID
-     4. Change the security settings to use no security
-     5. Click the 'Test' button to create a connection to the router and test the connection
- VERIFICATION:
-     Verification is automated, do not change the automatically selected result.
-
-plugin: shell
-name: wireless/monitor_wireless_connection
-requires:
- package.name == 'iperf'
- device.category == 'WIRELESS'
-user: root
-environ: WPA_BG_SSID WPA_BG_PSK SERVER_IPERF
-command: trap "nmcli con delete id $WPA_BG_SSID" EXIT; create_connection wifi $WPA_BG_SSID --security=wpa --key=$WPA_BG_PSK && iperf -c $SERVER_IPERF -t 300 -i 30
-_description:
- Tests the performance of a systems wireless connection through the iperf tool.
-
-plugin: shell
-name: wireless/monitor_wireless_connection_udp
-requires:
- package.name == 'iperf'
- device.category == 'WIRELESS'
-user: root
-environ: WPA_BG_SSID WPA_BG_PSK SERVER_IPERF
-command: trap "nmcli con delete id $WPA_BG_SSID" EXIT; create_connection wifi $WPA_BG_SSID --security=wpa --key=$WPA_BG_PSK && iperf -c $SERVER_IPERF -t 300 -i 30 -u -b 100m -p 5050
-_description:
- Tests the performance of a systems wireless connection through the iperf tool, using UDP packets.
-
-plugin: shell
-name: wireless/wireless_connection_open_a
-requires: device.category == 'WIRELESS'
-user: root
-environ: OPEN_A_SSID
-command: trap "nmcli con delete id $OPEN_A_SSID" EXIT; create_connection wifi $OPEN_A_SSID && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
-_description:
-  Test that the system's wireless hardware can connect to a router using the
-  802.11a protocol. This requires that you have a router pre-configured to only
-  respond to requests on the 802.11a protocol.
-
-plugin: shell
-name: wireless/wireless_connection_open_b
-requires: device.category == 'WIRELESS'
-user: root
-environ: OPEN_B_SSID
-command: trap "nmcli con delete id $OPEN_B_SSID" EXIT; create_connection wifi $OPEN_B_SSID && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
-_description:
-  Test that the system's wireless hardware can connect to a router using the
-  802.11b protocol. This requires that you have a router pre-configured to only
-  respond to requests on the 802.11b protocol.
-
-plugin: shell
-name: wireless/wireless_connection_open_g
-requires: device.category == 'WIRELESS'
-user: root
-environ: OPEN_G_SSID
-command: trap "nmcli con delete id $OPEN_G_SSID" EXIT; create_connection wifi $OPEN_G_SSID && internet_test --interface=`nmcli dev status | awk '/802-11-wireless/ {print $1}'`
-_description:
-  Test that the system's wireless hardware can connect to a router using the
-  802.11g protocol. This requires that you have a router pre-configured to only
-  respond to requests on the 802.11g protocol.

=== modified file 'po/POTFILES.in'
--- po/POTFILES.in	2013-08-06 16:40:53 +0000
+++ po/POTFILES.in	2013-08-12 19:42:56 +0000
@@ -1,54 +1,24 @@
 [encoding: UTF-8]
 [type: gettext/glade] gtk/checkbox-gtk.ui
 qt/checkbox-qt.desktop.in
-[type: gettext/rfc822deb] jobs/audio.txt.in
 [type: gettext/rfc822deb] jobs/benchmarks.txt.in
-[type: gettext/rfc822deb] jobs/bluetooth.txt.in
-[type: gettext/rfc822deb] jobs/camera.txt.in
-[type: gettext/rfc822deb] jobs/codecs.txt.in
 [type: gettext/rfc822deb] jobs/cpu.txt.in
-[type: gettext/rfc822deb] jobs/daemons.txt.in
 [type: gettext/rfc822deb] jobs/dcmi_in_band.txt.in
 [type: gettext/rfc822deb] jobs/disk.txt.in
-[type: gettext/rfc822deb] jobs/esata.txt.in
-[type: gettext/rfc822deb] jobs/expresscard.txt.in
-[type: gettext/rfc822deb] jobs/fingerprint.txt.in
-[type: gettext/rfc822deb] jobs/firewire.txt.in
-[type: gettext/rfc822deb] jobs/floppy.txt.in
-[type: gettext/rfc822deb] jobs/graphics.txt.in
-[type: gettext/rfc822deb] jobs/hibernate.txt.in
 [type: gettext/rfc822deb] jobs/info.txt.in
-[type: gettext/rfc822deb] jobs/input.txt.in
-[type: gettext/rfc822deb] jobs/install.txt.in
 [type: gettext/rfc822deb] jobs/ipmi_out_of_band.txt.in
-[type: gettext/rfc822deb] jobs/keys.txt.in
-[type: gettext/rfc822deb] jobs/led.txt.in
 [type: gettext/rfc822deb] jobs/local.txt.in
-[type: gettext/rfc822deb] jobs/mediacard.txt.in
 [type: gettext/rfc822deb] jobs/memory.txt.in
 [type: gettext/rfc822deb] jobs/miscellanea.txt.in
-[type: gettext/rfc822deb] jobs/mobilebroadband.txt.in
-[type: gettext/rfc822deb] jobs/monitor.txt.in
 [type: gettext/rfc822deb] jobs/networking.txt.in
 [type: gettext/rfc822deb] jobs/optical.txt.in
-[type: gettext/rfc822deb] jobs/panel_clock_test.txt.in
-[type: gettext/rfc822deb] jobs/panel_reboot.txt.in
-[type: gettext/rfc822deb] jobs/peripheral.txt.in
-[type: gettext/rfc822deb] jobs/piglit.txt.in
 [type: gettext/rfc822deb] jobs/power-management.txt.in
-[type: gettext/rfc822deb] jobs/rendercheck.txt.in
 [type: gettext/rfc822deb] jobs/resource.txt.in
-[type: gettext/rfc822deb] jobs/server-services.txt.in
 [type: gettext/rfc822deb] jobs/smoke.txt.in
 [type: gettext/rfc822deb] jobs/sniff.txt.in
 [type: gettext/rfc822deb] jobs/stress.txt.in
-[type: gettext/rfc822deb] jobs/suspend.txt.in
-[type: gettext/rfc822deb] jobs/touchpad.txt.in
-[type: gettext/rfc822deb] jobs/touchscreen.txt.in
 [type: gettext/rfc822deb] jobs/usb.txt.in
-[type: gettext/rfc822deb] jobs/user_apps.txt.in
 [type: gettext/rfc822deb] jobs/virtualization.txt.in
-[type: gettext/rfc822deb] jobs/wireless.txt.in
 checkbox/application.py
 checkbox/job.py
 checkbox/lib/signal.py

=== removed file 'scripts/accelerometer_test'
--- scripts/accelerometer_test	2012-08-30 16:00:12 +0000
+++ scripts/accelerometer_test	1970-01-01 00:00:00 +0000
@@ -1,347 +0,0 @@
-#!/usr/bin/env python3
-'''
-script to test accerometer functionality
-
-Copyright (C) 2012 Canonical Ltd.
-
-Authors
-  Jeff Marcom <jeff.marcom@xxxxxxxxxxxxx>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License version 3,
-as published by the Free Software Foundation.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-The purpose of this script is to simply interact with an onboard
-accelerometer, and check to be sure that the x, y, z axis respond
-to physical movement of hardware.
-'''
-from argparse import ArgumentParser
-from gi.repository import Gdk, GLib, Gtk
-import logging
-import os
-import re
-import sys
-import threading
-import time
-from subprocess import Popen, PIPE, check_output, STDOUT, CalledProcessError
-from checkbox.parsers.modinfo import ModinfoParser
-
-handler = logging.StreamHandler()
-logger = logging.getLogger()
-logger.addHandler(handler)
-logger.setLevel(logging.DEBUG)
-
-
-class AccelerometerUI(Gtk.Window):
-    """Builds UI Framework for axis threshold tests using Gtk"""
-
-    def __init__(self):
-        Gtk.Window.__init__(self, title="Accelerometer Test")
-
-        self.set_default_size(450, 100)
-        self.set_type_hint(Gdk.WindowType.TOPLEVEL)
-
-        self.enabled = False
-
-        # Create UI Grid
-        w_table = Gtk.Grid()
-        self.add(w_table)
-
-        # Create axis buttons
-        self.up_icon = Gtk.Image(stock=Gtk.STOCK_GO_UP)
-        self.up_icon.set_padding(10, 30)
-        self.down_icon = Gtk.Image(stock=Gtk.STOCK_GO_DOWN)
-        self.down_icon.set_padding(10, 30)
-        self.left_icon = Gtk.Image(stock=Gtk.STOCK_GO_BACK)
-        self.right_icon = Gtk.Image(stock=Gtk.STOCK_GO_FORWARD)
-
-        # Set debug
-        self.debug_label = Gtk.Label("Debug")
-
-        # Set Grid layout for UI
-        message = "Please tilt your hardware in the positions shown below:"
-        w_table.attach(Gtk.Label(message), 0, 0, 4, 1)
-
-        w_table.attach(self.up_icon, 2, 2, 1, 1)
-        w_table.attach_next_to(self.debug_label, self.up_icon,
-                               Gtk.PositionType.BOTTOM, 1, 1)
-        w_table.attach_next_to(self.down_icon, self.debug_label,
-                               Gtk.PositionType.BOTTOM, 1, 1)
-        w_table.attach_next_to(self.left_icon, self.debug_label,
-                               Gtk.PositionType.LEFT, 1, 1)
-        w_table.attach_next_to(self.right_icon, self.debug_label,
-                               Gtk.PositionType.RIGHT, 1, 1)
-
-    def update_axis_icon(self, direction):
-        """Change desired directional icon to checkmark"""
-        exec('self.%s_icon.set_from_stock' % (direction) \
-             + '(Gtk.STOCK_YES, size=Gtk.IconSize.BUTTON)')
-
-    def update_debug_label(self, text):
-        """Update axis information in center of UI"""
-        self.debug_label.set_text(text)
-
-    def destroy(self):
-        Gtk.main_quit()
-
-    def enable(self):
-        self.enabled = True
-        self.connect("delete-event", Gtk.main_quit)
-        self.show_all()
-
-        # Enable GLib/Gdk threading so the UI won't lock main
-        GLib.threads_init()
-        Gdk.threads_init()
-        Gdk.threads_enter()
-        Gtk.main()
-        Gdk.threads_leave()
-
-
-class PermissionException(RuntimeError):
-    def __init__(self, error):
-        message = "Please re-run with root permissions: %s" % error.strip()
-        super(PermissionException, self).__init__(message)
-
-
-class AxisData(threading.Thread):
-    """Acquire information from kernel regarding the state of the
-    accelerometer axis positions. Gathered data will be compared to
-    a preset threshold reading. The default threshold (either - or + )
-    for any direction is 600. Return values for thread are SUCCESS:0
-    FAILURE:1. FAILURE is likely to exists when thread is unable to
-    obtain a valid reading from the hardware."""
-
-    def __init__(self, device_path, ui_control=None):
-        threading.Thread.__init__(self)
-        self.ui = ui_control
-        self.device_path = device_path.strip("/")
-        self.tilt_threshold = 600
-        self.x_test_pool = ["up", "down"]
-        self.y_test_pool = ["left", "right"]
-
-        if self.ui == None:
-            self.ui.enabled = False
-
-    def grab_current_readings(self):
-        """Search device path and return axis tuple"""
-        time.sleep(0.5)  # Sleep to accomodate slower processors
-        data_file = os.path.join("/sys", self.device_path,
-                                 "device", "position")
-
-        # Try and retrieve positional data from kernel
-        try:
-            position_tuple = open(data_file)
-        except (OSError, IOError):
-            logging.error("Failed to open: %s" % data_file)
-            return False
-
-        # Split data for x, y, z as it's easier to manage threshold tests.
-        axis_set = position_tuple.read().strip("\n()")
-
-        return axis_set.split(",")
-
-    def parse_reading(self, value, mapping):
-        """Check for positive or negative threshold match"""
-        if abs(value) >= abs(self.tilt_threshold):
-            # And return test pool array position based on integer
-            if value < 0:
-                return 2
-            return 1
-
-    def direction_poll(self, x_axis, y_axis):
-        """Poll for threshold being met per x, and y axis"""
-        direction_map = {"X": x_axis, "Y": y_axis}
-
-        for mapping, data in direction_map.items():
-            reading = self.parse_reading(int(data), mapping)
-
-            if type(reading) == int:
-                return reading, mapping
-
-        # Return nothing if threshold is not met
-        return False, None
-
-    def run(self):
-        rem_tests = self.y_test_pool + self.x_test_pool
-        while len(rem_tests) > 0:
-            axis_data_bundle = self.grab_current_readings()
-
-            if type(axis_data_bundle) != list:
-                logging.error("Failed to grab appropriate readings")
-                return 1
-
-            # Parse for current positional values
-            # Hdaps will only report X, and Y positional data
-            x_data = int(axis_data_bundle[0])
-            y_data = int(axis_data_bundle[1])
-            if len(axis_data_bundle) > 2:
-                z_data = int(axis_data_bundle[2])
-            else:
-                z_data = 0
-
-            debug_info = "X: %s Y: %s Z: %s" % (x_data, y_data, z_data)
-
-            if self.ui.enabled:
-                # Update positional values in UI
-                self.ui.update_debug_label(debug_info)
-
-                position, axis = self.direction_poll(x_data, y_data)
-                if position:
-                    # Check axis set and delete test from pool
-                    if axis == "X":
-                        pool = self.x_test_pool
-                    else:
-                        pool = self.y_test_pool
-                    if len(pool) >= position:
-                        direction = pool[position - 1]
-                        if direction in rem_tests:
-                            # Remove direction from test pool
-                            del rem_tests[rem_tests.index(direction)]
-                            self.ui.update_axis_icon(direction)
-            else:
-                # Accept readings as successful test result
-                logging.debug("Latest Readings: %s" % debug_info)
-                break
-
-        if self.ui.enabled:
-            self.ui.destroy()
-        return 0
-
-
-def insert_supported_module(oem_module):
-    """Try and insert supported module to see if we get any init errors"""
-    try:
-        stream = check_output(['modinfo', oem_module], stderr=STDOUT,
-                               universal_newlines=True)
-    except CalledProcessError as err:
-        print("Error accessing modinfo for %s: " % oem_module, file=sys.stderr)
-        print(err.output, file=sys.stderr)
-        return err.returncode
-
-    parser = ModinfoParser(stream)
-    module = os.path.basename(parser.get_field('filename'))
-    
-    insmod_output = Popen(['insmod %s' % module], stderr=PIPE,
-                          shell=True, universal_newlines=True)
-
-    error = insmod_output.stderr.read()
-    if "Permission denied" in error:
-        raise PermissionException(error)
-
-    return insmod_output.returncode
-
-
-def check_module_status():
-    """Looks to see if it can determine the hardware manufacturer
-    and report corresponding accelerometer driver status"""
-    oem_driver_pool = {"hewlett-packard": "hp_accel",
-                       "toshiba": "hp_accel",
-                       "ibm": "hdaps", "lenovo": "hdaps"}
-
-    oem_module = None
-    dmi_info = Popen(['dmidecode'], stdout=PIPE, stderr=PIPE,
-                     universal_newlines=True)
-
-    output, error = dmi_info.communicate()
-
-    if "Permission denied" in error:
-        raise PermissionException(error)
-
-    vendor_data = re.findall("Vendor:\s.*", output)
-    try:
-        manufacturer = vendor_data[0].split(":")[1].strip()
-    except IndexError as exception:
-        logging.error("Failed to find Manufacturing data")
-        return
-
-    logging.debug(manufacturer)
-
-    # Now we look to see if there was any info during boot
-    # time that would help in debugging this failure
-    for vendor, module in oem_driver_pool.items():
-        if manufacturer.lower() == vendor:
-            oem_module = oem_driver_pool.get(vendor)
-            break  # We've found our desired module to probe.
-
-    if oem_module != None:
-        if insert_supported_module(oem_module) != None:
-            logging.error("Failed module insertion")
-        # Check dmesg status for supported module
-        driver_status = Popen(['dmesg'], stdout=PIPE, universal_newlines=True)
-        module_regex = oem_module + ".*"
-        kernel_notes = re.findall(module_regex, driver_status.stdout.read())
-        # Report ALL findings, it's useful to note it the driver failed init
-        # more than once of actually passed despite a reading failure
-        logging.debug("\n".join((kernel_notes)))
-    else:
-        logging.error("No supported module")
-
-
-def check_for_accelerometer():
-    """Checks device list for existence of accelerometer and returns
-    name, manufacturer, and system path info."""
-
-    found = False
-    device_info = open("/proc/bus/input/devices").readlines()
-    for line in device_info:
-        if "accelerometer" in line.lower():
-            target = device_info.index(line)
-
-            name = device_info[target].split("=")[1]
-            path = device_info[target + 2].split("=")[1]
-            found = True
-            break
-
-    if found:
-        logger.debug("Name: %s\nPath: %s" % (name, path))
-        return path.strip()
-    else:
-        # Return False as it's expected
-        logger.error("Accelerometer hardware not found")
-
-    return False
-
-
-def main():
-
-    parser = ArgumentParser(description="Tests accelerometer functionality")
-
-    parser.add_argument('-m', '--manual', default=False,
-                        action='store_true',
-                        help="For manual test with visual notification")
-    parser.add_argument('-a', '--automated', default=True,
-                        action='store_true',
-                        help="For automated test using defined parameters")
-
-    args = parser.parse_args()
-
-    sys_path = check_for_accelerometer()
-    if not sys_path:
-        try:
-            check_module_status()
-        except PermissionException as error:
-            print(error, file=sys.stderr)
-        sys.exit(1)
-
-    ui = AccelerometerUI()
-    grab_data = AxisData(sys_path, ui)
-    grab_data.setDaemon(True)
-    grab_data.start()
-
-    if args.manual:
-        ui.enable()
-    else:
-        # Sleep for enough time to retrieve a reading.
-        # Reading is not instant.
-        time.sleep(5)
-
-if __name__ == '__main__':
-    main();

=== removed file 'scripts/alsa_info'
--- scripts/alsa_info	2012-11-15 15:50:36 +0000
+++ scripts/alsa_info	1970-01-01 00:00:00 +0000
@@ -1,939 +0,0 @@
-#!/bin/bash
-
-SCRIPT_VERSION=0.4.61
-CHANGELOG="http://www.alsa-project.org/alsa-info.sh.changelog";
-
-#################################################################################
-#Copyright (C) 2007 Free Software Foundation.
-
-#This program is free software; you can redistribute it and/or modify
-#it under the terms of the GNU General Public License as published by
-#the Free Software Foundation; either version 2 of the License, or
-#(at your option) any later version.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#GNU General Public License for more details.
-
-#You should have received a copy of the GNU General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-
-##################################################################################
-
-#The script was written for 2 main reasons:
-# 1. Remove the need for the devs/helpers to ask several questions before we can easily help the user.
-# 2. Allow newer/inexperienced ALSA users to give us all the info we need to help them.
-
-#Set the locale (this may or may not be a good idea.. let me know)
-export LC_ALL=C
-
-#Change the PATH variable, so we can run lspci (needed for some distros)
-PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin
-BGTITLE="ALSA-Info v $SCRIPT_VERSION"
-PASTEBINKEY="C9cRIO8m/9y8Cs0nVs0FraRx7U0pHsuc"
-#Define some simple functions
-
-pbcheck(){
-	[[ $UPLOAD = "no" ]] && return
-
-	if [[ -z $PASTEBIN ]]; then
-		[[ $(ping -c1 www.alsa-project.org) ]] || KEEP_FILES="yes" UPLOAD="no" PBERROR="yes"
-	else
-		[[ $(ping -c1 www.pastebin.ca) ]] || KEEP_FILES="yes" UPLOAD="no" PBERROR="yes"
-	fi
-}
-
-update() {
-	SHFILE=`mktemp -t alsa-info.XXXXXXXXXX` || exit 1
-	wget -O $SHFILE "http://www.alsa-project.org/alsa-info.sh"; >/dev/null 2>&1
-	REMOTE_VERSION=`grep SCRIPT_VERSION $SHFILE |head -n1 |sed 's/.*=//'`
-	if [ "$REMOTE_VERSION" != "$SCRIPT_VERSION" ]; then
-		if [[ -n $DIALOG ]]
-		then
-			OVERWRITE=
-			if [ -w $0 ]; then
-				dialog --yesno "Newer version of ALSA-Info has been found\n\nDo you wish to install it?\nNOTICE: The original file $0 will be overwritten!" 0 0
-				DIALOG_EXIT_CODE=$?
-				if [[ $DIALOG_EXIT_CODE = 0 ]]; then
-				  OVERWRITE=yes
-				fi
-			fi
-			if [ -z "$OVERWRITE" ]; then
-				dialog --yesno "Newer version of ALSA-Info has been found\n\nDo you wish to download it?" 0 0
-				DIALOG_EXIT_CODE=$?
-			fi
-			if [[ $DIALOG_EXIT_CODE = 0 ]]
-			then
-				echo "Newer version detected: $REMOTE_VERSION"
-				echo "To view the ChangeLog, please visit $CHANGELOG"
-				if [ "$OVERWRITE" = "yes" ]; then
-					cp $SHFILE $0
-					echo "ALSA-Info script has been updated to v $REMOTE_VERSION"
-					echo "Please re-run the script"
-					rm $SHFILE 2>/dev/null
-				else
-					echo "ALSA-Info script has been downloaded as $SHFILE."
-					echo "Please re-run the script from new location."
-				fi
-				exit
-			else
-				rm $SHFILE 2>/dev/null
-			fi
-		else
-			echo "Newer version detected: $REMOTE_VERSION"
-			echo "To view the ChangeLog, please visit $CHANGELOG"
-			if [ -w $0 ]; then
-				echo "The original file $0 will be overwritten!"
-				echo -n "If you do not like to proceed, press Ctrl-C now.." ; read inp
-				cp $SHFILE $0
-				echo "ALSA-Info script has been updated. Please re-run it."
-				rm $SHFILE 2>/dev/null
-			else
-				echo "ALSA-Info script has been downloaded $SHFILE."
-				echo "Please, re-run it from new location."
-			fi
-			exit
-		fi
-	else
-		rm $SHFILE 2>/dev/null
-	fi
-}
-
-cleanup() {
-	if [ -n "$TEMPDIR" -a "$KEEP_FILES" != "yes" ]; then
-		rm -rf "$TEMPDIR" 2>/dev/null
-	fi
-	test -n "$KEEP_OUTPUT" || rm -f "$NFILE"
-}
-
-
-withaplay() {
-        echo "!!Aplay/Arecord output" >> $FILE
-        echo "!!--------------------" >> $FILE
-        echo "" >> $FILE
-       	echo "APLAY" >> $FILE
-	echo "" >> $FILE 
-	aplay -l >> $FILE 2>&1
-        echo "" >> $FILE
-       	echo "ARECORD" >> $FILE
-	echo "" >> $FILE
-	arecord -l >> $FILE 2>&1
-	echo "" >> $FILE
-}
-
-withlsmod() {
-	echo "!!All Loaded Modules" >> $FILE
-	echo "!!------------------" >> $FILE
-	echo "" >> $FILE
-	lsmod |awk {'print $1'} >> $FILE
-	echo "" >> $FILE
-	echo "" >> $FILE
-}
-
-withamixer() {
-        echo "!!Amixer output" >> $FILE
-        echo "!!-------------" >> $FILE
-        echo "" >> $FILE
-	for i in `grep "]: " /proc/asound/cards | awk -F ' ' '{ print $1} '` ; do
-	CARD_NAME=`grep "^ *$i " $TEMPDIR/alsacards.tmp|awk {'print $2'}`
-	echo "!!-------Mixer controls for card $i $CARD_NAME]" >> $FILE
-	echo "" >>$FILE
-	amixer -c$i info>> $FILE 2>&1
-	amixer -c$i>> $FILE 2>&1
-        echo "" >> $FILE
-	done
-	echo "" >> $FILE
-}
-
-withalsactl() {
-	echo "!!Alsactl output" >> $FILE
-        echo "!!--------------" >> $FILE
-        echo "" >> $FILE
-        exe=""
-        if [ -x /usr/sbin/alsactl ]; then
-        	exe="/usr/sbin/alsactl"
-        fi
-        if [ -x /usr/local/sbin/alsactl ]; then
-        	exe="/usr/local/sbin/alsactl"
-        fi
-        if [ -z "$exe" ]; then
-        	exe=`whereis alsactl | cut -d ' ' -f 2`
-        fi
-	$exe -f $TEMPDIR/alsactl.tmp store
-	echo "--startcollapse--" >> $FILE
-	cat $TEMPDIR/alsactl.tmp >> $FILE
-	echo "--endcollapse--" >> $FILE
-	echo "" >> $FILE
-	echo "" >> $FILE
-}
-
-withdevices() {
-        echo "!!ALSA Device nodes" >> $FILE
-        echo "!!-----------------" >> $FILE
-        echo "" >> $FILE
-        ls -la /dev/snd/* >> $FILE
-        echo "" >> $FILE
-        echo "" >> $FILE
-}
-
-withconfigs() {
-if [[ -e $HOME/.asoundrc ]] || [[ -e /etc/asound.conf ]] || [[ -e $HOME/.asoundrc.asoundconf ]]
-then
-        echo "!!ALSA configuration files" >> $FILE
-        echo "!!------------------------" >> $FILE
-        echo "" >> $FILE
-
-        #Check for ~/.asoundrc
-        if [[ -e $HOME/.asoundrc ]]
-        then
-                echo "!!User specific config file (~/.asoundrc)" >> $FILE
-                echo "" >> $FILE
-                cat $HOME/.asoundrc >> $FILE
-                echo "" >> $FILE
-                echo "" >> $FILE
-        fi
-	#Check for .asoundrc.asoundconf (seems to be Ubuntu specific)
-	if [[ -e $HOME/.asoundrc.asoundconf ]]
-	then
-		echo "!!asoundconf-generated config file" >> $FILE
-		echo "" >> $FILE
-		cat $HOME/.asoundrc.asoundconf >> $FILE
-		echo "" >> $FILE
-		echo "" >> $FILE
-	fi
-        #Check for /etc/asound.conf
-        if [[ -e /etc/asound.conf ]]
-        then
-                echo "!!System wide config file (/etc/asound.conf)" >> $FILE
-                echo "" >> $FILE
-                cat /etc/asound.conf >> $FILE
-                echo "" >> $FILE
-                echo "" >> $FILE
-        fi
-fi
-}
-
-withsysfs() {
-    local i f
-    local printed=""
-    for i in /sys/class/sound/*; do
-	case "$i" in
-	    */hwC?D?)
-		if [ -f $i/init_pin_configs ]; then
-		    if [ -z "$printed" ]; then
-			echo "!!Sysfs Files" >> $FILE
-			echo "!!-----------" >> $FILE
-			echo "" >> $FILE
-		    fi
-		    for f in init_pin_configs driver_pin_configs user_pin_configs init_verbs; do
-			echo "$i/$f:" >> $FILE
-			cat $i/$f >> $FILE
-			echo >> $FILE
-		    done
-		    printed=yes
-		fi
-		;;
-	    esac
-    done
-    if [ -n "$printed" ]; then
-	echo "" >> $FILE
-    fi
-}
-
-withdmesg() {
-	echo "!!ALSA/HDA dmesg" >> $FILE
-	echo "!!--------------" >> $FILE
-	echo "" >> $FILE
-	dmesg | grep -C1 -E 'ALSA|HDA|HDMI|sound|hda.codec|hda.intel' >> $FILE
-	echo "" >> $FILE
-	echo "" >> $FILE
-}
-
-withall() {
-	withdevices
-	withconfigs
-	withaplay
-	withamixer
-	withalsactl
-	withlsmod
-	withsysfs
-	withdmesg
-}
-
-get_alsa_library_version() {
-	ALSA_LIB_VERSION=`grep VERSION_STR /usr/include/alsa/version.h 2>/dev/null|awk {'print $3'}|sed 's/"//g'`
-
-	if [ -z "$ALSA_LIB_VERSION" ]; then
-		if [ -f /etc/lsb-release ]; then
-			. /etc/lsb-release
-			case "$DISTRIB_ID" in
-				Ubuntu)
-					if which dpkg > /dev/null ; then
-						ALSA_LIB_VERSION=`dpkg -l libasound2 | tail -1 | awk '{print $3}' | cut -f 1 -d -`
-					fi
-
-					if [ "$ALSA_LIB_VERSION" = "<none>" ]; then
-						ALSA_LIB_VERSION=""
-					fi
-					return
-					;;
-				*)
-					return
-					;;
-			esac
-		elif [ -f /etc/debian_version ]; then
-			if which dpkg > /dev/null ; then
-				ALSA_LIB_VERSION=`dpkg -l libasound2 | tail -1 | awk '{print $3}' | cut -f 1 -d -`
-			fi
-
-			if [ "$ALSA_LIB_VERSION" = "<none>" ]; then
-				ALSA_LIB_VERSION=""
-			fi
-			return
-		fi
-	fi
-}
-
-
-#Run checks to make sure the programs we need are installed.
-LSPCI=$(which lspci 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null);
-TPUT=$(which tput 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null);
-DIALOG=$(which dialog 2>/dev/null | sed 's|^[^/]*||' 2>/dev/null);
-
-#Check to see if sysfs is enabled in the kernel. We'll need this later on
-SYSFS=$(mount |grep sysfs|awk {'print $3'});
-
-#Check modprobe config files for sound related options
-SNDOPTIONS=$(modprobe -c|sed -n 's/^options \(snd[-_][^ ]*\)/\1:/p')
-
-KEEP_OUTPUT=
-NFILE=""
-
-PASTEBIN=""
-WWWSERVICE="www.alsa-project.org"
-WELCOME="yes"
-PROCEED="yes"
-UPLOAD="ask"
-REPEAT=""
-while [ -z "$REPEAT" ]; do
-REPEAT="no"
-case "$1" in
-	--update|--help|--about)
-		WELCOME="no"
-		PROCEED="no"
-		;;
-	--upload)
-		UPLOAD="yes"
-		WELCOME="no"
-		;;
-	--no-upload)
-		UPLOAD="no"
-		WELCOME="no"
-		;;
-	--pastebin)
-		PASTEBIN="yes"
-		WWWSERVICE="pastebin"
-		;;
-	--no-dialog)
-		DIALOG=""
-		REPEAT=""
-		shift
-		;;
-	--stdout)
-		DIALOG=""
-		UPLOAD="no"
-		WELCOME="no"
-		TOSTDOUT="yes"
-		;;
-esac
-done
-
-
-#Script header output.
-if [ "$WELCOME" = "yes" ]; then
-greeting_message="\
-
-This script visits the following commands/files to collect diagnostic
-information about your ALSA installation and sound related hardware.
-
-  dmesg
-  lspci
-  lsmod
-  aplay
-  amixer
-  alsactl
-  /proc/asound/
-  /sys/class/sound/
-  ~/.asoundrc (etc.)
-
-See '$0 --help' for command line options.
-"
-if [[ -n "$DIALOG" ]]; then
-	dialog  --backtitle "$BGTITLE" \
-		--title "ALSA-Info script v $SCRIPT_VERSION" \
-		--msgbox "$greeting_message" 20 80
-else
-	echo "ALSA Information Script v $SCRIPT_VERSION"
-	echo "--------------------------------"
-	echo "$greeting_message"
-fi # dialog
-fi # WELCOME
-
-#Set the output file
-TEMPDIR=`mktemp -t -d alsa-info.XXXXXXXXXX` || exit 1
-FILE="$TEMPDIR/alsa-info.txt"
-if [ -z "$NFILE" ]; then
-	NFILE=`mktemp -t alsa-info.txt.XXXXXXXXXX` || exit 1
-fi
-
-trap cleanup 0
-
-if [ "$PROCEED" = "yes" ]; then
-
-if [[ -z "$LSPCI" ]] 
-then
-	echo "This script requires lspci. Please install it, and re-run this script."
-	exit 0
-fi
-
-#Fetch the info and store in temp files/variables
-DISTRO=`grep -ihs "buntu\|SUSE\|Fedora\|PCLinuxOS\|MEPIS\|Mandriva\|Debian\|Damn\|Sabayon\|Slackware\|KNOPPIX\|Gentoo\|Zenwalk\|Mint\|Kubuntu\|FreeBSD\|Puppy\|Freespire\|Vector\|Dreamlinux\|CentOS\|Arch\|Xandros\|Elive\|SLAX\|Red\|BSD\|KANOTIX\|Nexenta\|Foresight\|GeeXboX\|Frugalware\|64\|SystemRescue\|Novell\|Solaris\|BackTrack\|KateOS\|Pardus" /etc/{issue,*release,*version}`
-KERNEL_VERSION=`uname -r`
-KERNEL_PROCESSOR=`uname -p`
-KERNEL_MACHINE=`uname -m`
-KERNEL_OS=`uname -o`
-[[ `uname -v |grep SMP`  ]] && KERNEL_SMP="Yes" || KERNEL_SMP="No" 
-ALSA_DRIVER_VERSION=`cat /proc/asound/version |head -n1|awk {'print $7'} |sed 's/\.$//'`
-get_alsa_library_version
-ALSA_UTILS_VERSION=`amixer -v |awk {'print $3'}`
-VENDOR_ID=`lspci -vn |grep 040[1-3] | awk -F':' '{print $3}'|awk {'print substr($0, 2);}' >$TEMPDIR/vendor_id.tmp`
-DEVICE_ID=`lspci -vn |grep 040[1-3] | awk -F':' '{print $4}'|awk {'print $1'} >$TEMPDIR/device_id.tmp`
-LAST_CARD=$((`grep "]: " /proc/asound/cards | wc -l` - 1 ))
-
-ESDINST=$(which esd 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null)
-PAINST=$(which pulseaudio 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null)
-ARTSINST=$(which artsd 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null)
-JACKINST=$(which jackd 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null)
-ROARINST=$(which roard 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null)
-DMIDECODE=$(which dmidecode 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null)
-
-#Check for DMI data
-if [ -d /sys/class/dmi/id ]; then
-    # No root privileges are required when using sysfs method
-    DMI_SYSTEM_MANUFACTURER=$(cat /sys/class/dmi/id/sys_vendor 2>/dev/null)
-    DMI_SYSTEM_PRODUCT_NAME=$(cat /sys/class/dmi/id/product_name 2>/dev/null)
-    DMI_SYSTEM_PRODUCT_VERSION=$(cat /sys/class/dmi/id/product_version 2>/dev/null)
-    DMI_SYSTEM_FIRMWARE_VERSION=$(cat /sys/class/dmi/id/bios_version 2>/dev/null)
-elif [ -x $DMIDECODE ]; then
-    DMI_SYSTEM_MANUFACTURER=$($DMIDECODE -s system-manufacturer 2>/dev/null)
-    DMI_SYSTEM_PRODUCT_NAME=$($DMIDECODE -s system-product-name 2>/dev/null)
-    DMI_SYSTEM_PRODUCT_VERSION=$($DMIDECODE -s system-version 2>/dev/null)
-    DMI_SYSTEM_FIRMWARE_VERSION=$($DMIDECODE -s bios-version 2>/dev/null)
-fi
-
-cat /proc/asound/modules 2>/dev/null|awk {'print $2'}>$TEMPDIR/alsamodules.tmp
-cat /proc/asound/cards >$TEMPDIR/alsacards.tmp
-lspci |grep -i "multi\|audio">$TEMPDIR/lspci.tmp
-
-#Check for HDA-Intel cards codec#*
-cat /proc/asound/card*/codec\#* > $TEMPDIR/alsa-hda-intel.tmp 2> /dev/null
-
-#Check for AC97 cards codec
-cat /proc/asound/card*/codec97\#0/ac97\#0-0 > $TEMPDIR/alsa-ac97.tmp 2> /dev/null
-cat /proc/asound/card*/codec97\#0/ac97\#0-0+regs > $TEMPDIR/alsa-ac97-regs.tmp 2> /dev/null
-
-#Check for USB mixer setup
-cat /proc/asound/card*/usbmixer > $TEMPDIR/alsa-usbmixer.tmp 2> /dev/null
-
-#Fetch the info, and put it in $FILE in a nice readable format.
-if [[ -z $PASTEBIN ]]; then
-echo "upload=true&script=true&cardinfo=" > $FILE
-else
-echo "name=$USER&type=33&description=/tmp/alsa-info.txt&expiry=&s=Submit+Post&content=" > $FILE
-fi
-echo "!!################################" >> $FILE
-echo "!!ALSA Information Script v $SCRIPT_VERSION" >> $FILE
-echo "!!################################" >> $FILE
-echo "" >> $FILE
-echo "!!Script ran on: `LANG=C TZ=UTC date`" >> $FILE
-echo "" >> $FILE
-echo "" >> $FILE
-echo "!!Linux Distribution" >> $FILE
-echo "!!------------------" >> $FILE
-echo "" >> $FILE
-echo $DISTRO >> $FILE
-echo "" >> $FILE
-echo "" >> $FILE
-echo "!!DMI Information" >> $FILE
-echo "!!---------------" >> $FILE
-echo "" >> $FILE
-echo "Manufacturer:      $DMI_SYSTEM_MANUFACTURER" >> $FILE
-echo "Product Name:      $DMI_SYSTEM_PRODUCT_NAME" >> $FILE
-echo "Product Version:   $DMI_SYSTEM_PRODUCT_VERSION" >> $FILE
-echo "Firmware Version:  $DMI_SYSTEM_FIRMWARE_VERSION" >> $FILE
-echo "" >> $FILE
-echo "" >> $FILE
-echo "!!Kernel Information" >> $FILE
-echo "!!------------------" >> $FILE
-echo "" >> $FILE
-echo "Kernel release:    $KERNEL_VERSION" >> $FILE
-echo "Operating System:  $KERNEL_OS" >> $FILE
-echo "Architecture:      $KERNEL_MACHINE" >> $FILE
-echo "Processor:         $KERNEL_PROCESSOR" >> $FILE
-echo "SMP Enabled:       $KERNEL_SMP" >> $FILE
-echo "" >> $FILE
-echo "" >> $FILE
-echo "!!ALSA Version" >> $FILE
-echo "!!------------" >> $FILE
-echo "" >> $FILE
-echo "Driver version:     $ALSA_DRIVER_VERSION" >> $FILE
-echo "Library version:    $ALSA_LIB_VERSION" >> $FILE
-echo "Utilities version:  $ALSA_UTILS_VERSION" >> $FILE
-echo "" >> $FILE
-echo "" >> $FILE
-echo "!!Loaded ALSA modules" >> $FILE
-echo "!!-------------------" >> $FILE
-echo "" >> $FILE
-cat $TEMPDIR/alsamodules.tmp >> $FILE
-echo "" >> $FILE
-echo "" >> $FILE
-echo "!!Sound Servers on this system" >> $FILE
-echo "!!----------------------------" >> $FILE
-echo "" >> $FILE
-if [[ -n $PAINST ]];then
-[[ `pgrep '^(.*/)?pulseaudio$'` ]] && PARUNNING="Yes" || PARUNNING="No"
-echo "Pulseaudio:" >> $FILE
-echo "      Installed - Yes ($PAINST)" >> $FILE
-echo "      Running - $PARUNNING" >> $FILE
-echo "" >> $FILE
-fi
-if [[ -n $ESDINST ]];then
-[[ `pgrep '^(.*/)?esd$'` ]] && ESDRUNNING="Yes" || ESDRUNNING="No"
-echo "ESound Daemon:" >> $FILE
-echo "      Installed - Yes ($ESDINST)" >> $FILE
-echo "      Running - $ESDRUNNING" >> $FILE
-echo "" >> $FILE
-fi
-if [[ -n $ARTSINST ]];then
-[[ `pgrep '^(.*/)?artsd$'` ]] && ARTSRUNNING="Yes" || ARTSRUNNING="No"
-echo "aRts:" >> $FILE
-echo "      Installed - Yes ($ARTSINST)" >> $FILE
-echo "      Running - $ARTSRUNNING" >> $FILE
-echo "" >> $FILE
-fi
-if [[ -n $JACKINST ]];then
-[[ `pgrep '^(.*/)?jackd$'` ]] && JACKRUNNING="Yes" || JACKRUNNING="No"
-echo "Jack:" >> $FILE
-echo "      Installed - Yes ($JACKINST)" >> $FILE
-echo "      Running - $JACKRUNNING" >> $FILE
-echo "" >> $FILE
-fi
-if [[ -n $ROARINST ]];then
-[[ `pgrep '^(.*/)?roard$'` ]] && ROARRUNNING="Yes" || ROARRUNNING="No"
-echo "RoarAudio:" >> $FILE
-echo "      Installed - Yes ($ROARINST)" >> $FILE
-echo "      Running - $ROARRUNNING" >> $FILE
-echo "" >> $FILE
-fi
-if [[ -z "$PAINST" && -z "$ESDINST" && -z "$ARTSINST" && -z "$JACKINST" && -z "$ROARINST" ]];then
-echo "No sound servers found." >> $FILE
-echo "" >> $FILE
-fi
-echo "" >> $FILE
-echo "!!Soundcards recognised by ALSA" >> $FILE
-echo "!!-----------------------------" >> $FILE
-echo "" >> $FILE
-cat $TEMPDIR/alsacards.tmp >> $FILE
-echo "" >> $FILE
-echo "" >> $FILE
-echo "!!PCI Soundcards installed in the system" >> $FILE
-echo "!!--------------------------------------" >> $FILE
-echo "" >> $FILE
-cat $TEMPDIR/lspci.tmp >> $FILE
-echo "" >> $FILE
-echo "" >> $FILE
-echo "!!Advanced information - PCI Vendor/Device/Subsystem ID's" >> $FILE
-echo "!!-------------------------------------------------------" >> $FILE
-echo "" >> $FILE
-lspci -vvn |grep -A1 040[1-3] >> $FILE
-echo "" >> $FILE
-echo "" >> $FILE
-
-if [ "$SNDOPTIONS" ]
-then
-echo "!!Modprobe options (Sound related)" >> $FILE
-echo "!!--------------------------------" >> $FILE
-echo "" >> $FILE
-modprobe -c|sed -n 's/^options \(snd[-_][^ ]*\)/\1:/p' >> $FILE
-echo "" >> $FILE
-echo "" >> $FILE
-fi
-
-if [ -d "$SYSFS" ]
-then
-echo "!!Loaded sound module options" >> $FILE
-echo "!!---------------------------" >> $FILE
-echo "" >> $FILE
-for mod in `cat /proc/asound/modules|awk {'print $2'}`;do
-echo "!!Module: $mod" >> $FILE
-for params in `echo $SYSFS/module/$mod/parameters/*`; do
-	echo -ne "\t";
-	echo "$params : `cat $params`" | sed 's:.*/::';
-done >> $FILE
-echo "" >> $FILE
-done
-echo "" >> $FILE
-fi
-
-if [ -s "$TEMPDIR/alsa-hda-intel.tmp" ] 
-then
-	echo "!!HDA-Intel Codec information" >> $FILE
-	echo "!!---------------------------" >> $FILE
-	echo "--startcollapse--" >> $FILE
-	echo "" >> $FILE
-	cat $TEMPDIR/alsa-hda-intel.tmp >> $FILE
-	echo "--endcollapse--" >> $FILE
-	echo "" >> $FILE
-	echo "" >> $FILE
-fi
-
-if [ -s "$TEMPDIR/alsa-ac97.tmp" ]
-then
-        echo "!!AC97 Codec information" >> $FILE
-        echo "!!----------------------" >> $FILE
-        echo "--startcollapse--" >> $FILE
-        echo "" >> $FILE
-        cat $TEMPDIR/alsa-ac97.tmp >> $FILE
-        echo "" >> $FILE
-        cat $TEMPDIR/alsa-ac97-regs.tmp >> $FILE
-        echo "--endcollapse--" >> $FILE
-	echo "" >> $FILE
-	echo "" >> $FILE
-fi
-
-if [ -s "$TEMPDIR/alsa-usbmixer.tmp" ]
-then
-        echo "!!USB Mixer information" >> $FILE
-        echo "!!---------------------" >> $FILE
-        echo "--startcollapse--" >> $FILE
-        echo "" >> $FILE
-        cat $TEMPDIR/alsa-usbmixer.tmp >> $FILE
-        echo "--endcollapse--" >> $FILE
-	echo "" >> $FILE
-	echo "" >> $FILE
-fi
-
-#If no command line options are specified, then run as though --with-all was specified
-if [[ -z "$1" ]]
-then
-	update
-	withall
-	pbcheck	
-fi
-
-fi # proceed
-
-#loop through command line arguments, until none are left.
-if [[ -n "$1" ]]
-then
-	until [ -z "$1" ]
-	do
-	case "$1" in
-		--pastebin)
-		        update
-			withall
-        		pbcheck
-			;;
-		--update)
-			update
-			exit
-			;;
-		--upload)
-			UPLOAD="yes"
-			withall
-			;;
-		--no-upload)
-			UPLOAD="no"
-			withall
-			;;
-		--output)
-			shift
-			NFILE="$1"
-			KEEP_OUTPUT="yes"
-			;;
-		--debug)
-			echo "Debugging enabled. $FILE and $TEMPDIR will not be deleted"
-			KEEP_FILES="yes"
-			echo ""
-			withall
-			;;
-		--with-all)
-			withall
-			;;
-		--with-aplay)
-			withaplay
-			;;
-		--with-amixer)
-			withamixer
-			;;
-		--with-alsactl)
-			withalsactl
-			;;
-		--with-devices)
-			withdevices
-			;;
-		--with-dmesg)
-			withdmesg
-			;;
-		--with-configs)
-			if [[ -e $HOME/.asoundrc ]] || [[ -e /etc/asound.conf ]]
-			then
-				echo "!!ALSA configuration files" >> $FILE
-				echo "!!------------------------" >> $FILE
-				echo "" >> $FILE
-
-				#Check for ~/.asoundrc
-				if [[ -e $HOME/.asoundrc ]]
-				then
-					echo "!!User specific config file ($HOME/.asoundrc)" >> $FILE
-					echo "" >> $FILE
-					cat $HOME/.asoundrc >> $FILE
-					echo "" >> $FILE
-					echo "" >> $FILE
-				fi
-
-				#Check for /etc/asound.conf
-				if [[ -e /etc/asound.conf ]]
-				then
-					echo "!!System wide config file (/etc/asound.conf)" >> $FILE
-					echo "" >> $FILE
-					cat /etc/asound.conf >> $FILE
-					echo "" >> $FILE
-					echo "" >> $FILE
-				fi
-			fi
-			;;
-		--stdout)
-			UPLOAD="no"
-			withall
-			cat $FILE
-			rm $FILE
-			;;
-		--about)
-			echo "Written/Tested by the following users of #alsa on irc.freenode.net:"
-			echo ""
-			echo "	wishie - Script author and developer / Testing"
-			echo "	crimsun - Various script ideas / Testing"
-			echo "	gnubien - Various script ideas / Testing"
-			echo "	GrueMaster - HDA Intel specific items / Testing"
-			echo "	olegfink - Script update function"
-			echo "  TheMuso - display to stdout functionality"
-			exit 0
-			;;
-		*)
-			echo "alsa-info.sh version $SCRIPT_VERSION"
-			echo ""
-			echo "Available options:"
-			echo "	--with-aplay (includes the output of aplay -l)"
-			echo "	--with-amixer (includes the output of amixer)"
-			echo "	--with-alsactl (includes the output of alsactl)"
-			echo "	--with-configs (includes the output of ~/.asoundrc and"
-			echo "	    /etc/asound.conf if they exist)" 
-			echo "	--with-devices (shows the device nodes in /dev/snd/)"
-			echo "	--with-dmesg (shows the ALSA/HDA kernel messages)"
-			echo ""
-			echo "	--output FILE (specify the file to output for no-upload mode)"
-			echo "	--update (check server for script updates)"
-			echo "	--upload (upload contents to remote server)"
-			echo "	--no-upload (do not upload contents to remote server)"
-			echo "	--pastebin (use http://pastebin.ca) as remote server"
-			echo "	    instead www.alsa-project.org"
-			echo "	--stdout (print alsa information to standard output"
-			echo "	    instead of a file)"
-			echo "	--about (show some information about the script)"
-			echo "	--debug (will run the script as normal, but will not"
-			echo "	     delete $FILE)"
-			exit 0
-			;;
-	esac
-	shift 1
-	done
-fi
-
-if [ "$PROCEED" = "no" ]; then
-	exit 1
-fi
-
-if [ "$UPLOAD" = "ask" ]; then
-	if [[ -n "$DIALOG" ]]; then
-		dialog --backtitle "$BGTITLE" --title "Information collected" --yes-label " UPLOAD / SHARE " --no-label " SAVE LOCALLY " --defaultno --yesno "\n\nAutomatically upload ALSA information to $WWWSERVICE?" 10 80
-		DIALOG_EXIT_CODE=$?
-		if [ $DIALOG_EXIT_CODE != 0 ]; then
-			UPLOAD="no"
-		else
-			UPLOAD="yes"
-		fi
-	else
-		echo -n "Automatically upload ALSA information to $WWWSERVICE? [y/N] : "
-		read -e CONFIRM
-		if [ "$CONFIRM" != "y" ]; then
-			UPLOAD="no"
-		else
-			UPLOAD="yes"
-		fi
-	fi
-
-fi
-
-if [ "$UPLOAD" = "no" ]; then
-
-	if [ -z "$TOSTDOUT" ]; then
-		mv -f $FILE $NFILE || exit 1
-		KEEP_OUTPUT="yes"
-	fi
-
-	if [[ -n $DIALOG ]]
-	then
-		if [[ -n $PBERROR ]]; then
-			dialog --backtitle "$BGTITLE" --title "Information collected" --msgbox "An error occurred while contacting the $WWWSERVICE.\n Your information was NOT automatically uploaded.\n\nYour ALSA information is in $NFILE" 10 100
-		else
-			dialog --backtitle "$BGTITLE" --title "Information collected" --msgbox "\n\nYour ALSA information is in $NFILE" 10 60
-		fi
-	else
-		echo
-
-		if [[ -n $PBERROR ]]; then
-			echo "An error occurred while contacting the $WWWSERVICE."
-			echo "Your information was NOT automatically uploaded."
-			echo ""
-			echo "Your ALSA information is in $NFILE"
-			echo ""
-		else
-			if [ -z "$TOSTDOUT" ]; then
-				echo ""
-				echo "Your ALSA information is in $NFILE"
-				echo ""
-			fi
-		fi
-	fi
-
-	exit
-
-fi # UPLOAD
-
-#Test that wget is installed, and supports --post-file. Upload $FILE if it does, and prompt user to upload file if it doesnt. 
-if
-WGET=$(which wget 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null); [[ -n "${WGET}" ]] && [[ -x "${WGET}" ]] && [[ `wget --help |grep post-file` ]]
-then
-
-if [[ -n $DIALOG ]]
-then
-
-if [[ -z $PASTEBIN ]]; then
-	wget -O - --tries=5 --timeout=60 --post-file=$FILE "http://www.alsa-project.org/cardinfo-db/"; &>$TEMPDIR/wget.tmp || echo "Upload failed; exit"
-	{ for i in 10 20 30 40 50 60 70 80 90; do
-		echo $i
-		sleep 0.2
-	done
-	echo; } |dialog --backtitle "$BGTITLE" --guage "Uploading information to www.alsa-project.org ..." 6 70 0
-else
-	wget -O - --tries=5 --timeout=60 --post-file=$FILE "http://pastebin.ca/quiet-paste.php?api=$PASTEBINKEY&encrypt=t&encryptpw=blahblah"; &>$TEMPDIR/wget.tmp || echo "Upload failed; exit"
-	{ for i in 10 20 30 40 50 60 70 80 90; do
-		echo $i
-		sleep 0.2
-	done
-	echo; } |dialog --backtitle "$BGTITLE" --guage "Uploading information to www.pastebin.ca ..." 6 70 0
-fi
-
-dialog --backtitle "$BGTITLE" --title "Information uploaded" --yesno "Would you like to see the uploaded information?" 5 100 
-DIALOG_EXIT_CODE=$?
-if [ $DIALOG_EXIT_CODE = 0 ]; then
-	grep -v "alsa-info.txt" $FILE >$TEMPDIR/uploaded.txt
-	dialog --backtitle "$BGTITLE" --textbox $TEMPDIR/uploaded.txt 0 0
-fi
-
-clear
-
-# no dialog
-else
-
-if [[ -z $PASTEBIN ]]; then
-	echo -n "Uploading information to www.alsa-project.org ... " 
-	wget -O - --tries=5 --timeout=60 --post-file=$FILE http://www.alsa-project.org/cardinfo-db/ &>$TEMPDIR/wget.tmp &
-else
-	echo -n "Uploading information to www.pastebin.ca ... " 
-	wget -O - --tries=5 --timeout=60 --post-file=$FILE http://pastebin.ca/quiet-paste.php?api=$PASTEBINKEY &>$TEMPDIR/wget.tmp &
-fi
-
-#Progess spinner for wget transfer.
-i=1
-sp="/-\|"
-echo -n ' '
-while pgrep wget &>/dev/null
-do
-	echo -en "\b${sp:i++%${#sp}:1}"
-done
-
-echo -e "\b Done!"
-echo ""
-
-fi #dialog
-
-#See if tput is available, and use it if it is.	
-if [[ -n "$TPUT" ]]
-then
-	if [[ -z $PASTEBIN ]]; then
-		FINAL_URL=`tput setaf 1; grep "SUCCESS:" $TEMPDIR/wget.tmp | cut -d ' ' -f 2 ; tput sgr0`
-	else
-		FINAL_URL=`tput setaf 1; grep "SUCCESS:" $TEMPDIR/wget.tmp |sed -n 's/.*\:\([0-9]\+\).*/http:\/\/pastebin.ca\/\1/p';tput sgr0`
-	fi
-else
-	if [[ -z $PASTEBIN ]]; then
-		FINAL_URL=`grep "SUCCESS:" $TEMPDIR/wget.tmp | cut -d ' ' -f 2`
-	else
-		FINAL_URL=`grep "SUCCESS:" $TEMPDIR/wget.tmp |sed -n 's/.*\:\([0-9]\+\).*/http:\/\/pastebin.ca\/\1/p'`
-	fi
-fi
-
-#Output the URL of the uploaded file.	
-echo "Your ALSA information is located at $FINAL_URL"
-echo "Please inform the person helping you."
-echo ""
-
-#We couldnt find a suitable wget, so tell the user to upload manually.
-else
-	mv -f $FILE $NFILE || exit 1
-	KEEP_OUTPUT="yes"
-	if [[ -z $DIALOG ]]
-	then
-		if [[ -z $PASTEBIN ]]; then
-		echo ""
-		echo "Could not automatically upload output to http://www.alsa-project.org";
-		echo "Possible reasons are:"
-		echo "    1. Couldnt find 'wget' in your PATH"
-		echo "    2. Your version of wget is less than 1.8.2"
-		echo ""
-		echo "Please manually upload $NFILE to http://www.alsa-project.org/cardinfo-db/ and submit your post."
-		echo ""
-		else
-		echo ""
-		echo "Could not automatically upload output to http://www.pastebin.ca";
-		echo "Possible reasons are:"
-		echo "    1. Couldnt find 'wget' in your PATH"
-		echo "    2. Your version of wget is less than 1.8.2"
-		echo ""
-		echo "Please manually upload $NFILE to http://www.pastebin.ca/upload.php and submit your post."
-		echo ""
-		fi
-	else
-		if [[ -z $PASTEBIN ]]; then
-			dialog --backtitle "$BGTITLE" --msgbox "Could not automatically upload output to http://www.alsa-project.org.\nPossible reasons are:\n\n    1. Couldn't find 'wget' in your PATH\n    2. Your version of wget is less than 1.8.2\n\nPlease manually upload $NFILE to http://www.alsa-project,org/cardinfo-db/ and submit your post." 25 100
-		else
-			dialog --backtitle "$BGTITLE" --msgbox "Could not automatically upload output to http://www.pastebin.ca.\nPossible reasons are:\n\n    1. Couldn't find 'wget' in your PATH\n    2. Your version of wget is less than 1.8.2\n\nPlease manually upload $NFILE to http://www.pastebin.ca/upload.php and submit your post." 25 100
-		fi
-	fi
-fi
-
-

=== removed file 'scripts/alsa_record_playback'
--- scripts/alsa_record_playback	2013-04-25 16:52:29 +0000
+++ scripts/alsa_record_playback	1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-#!/bin/sh
-
-OUTPUT=`mktemp -d`
-gst_pipeline_test -t 5 "autoaudiosrc ! audioconvert ! level name=recordlevel interval=10000000 ! audioconvert ! wavenc ! filesink location=$OUTPUT/test.wav"
-aplay $OUTPUT/test.wav
-rm $OUTPUT/test.wav
-rmdir $OUTPUT

=== removed file 'scripts/audio_driver_info'
--- scripts/audio_driver_info	2012-08-30 16:00:12 +0000
+++ scripts/audio_driver_info	1970-01-01 00:00:00 +0000
@@ -1,109 +0,0 @@
-#!/usr/bin/python3
-
-import sys
-import re
-
-from argparse import ArgumentParser
-from subprocess import check_output, STDOUT, CalledProcessError
-from checkbox.parsers.modinfo import ModinfoParser
-
-TYPES = ("source", "sink")
-
-entries_regex = re.compile("index.*?(?=device.icon_name)", re.DOTALL)
-driver_regex = re.compile("(?<=driver_name = )\"(.*)\"")
-name_regex = re.compile("(?<=name:).*")
-
-
-class PacmdAudioDevice():
-    """
-    Class representing an audio device with information gathered from pacmd
-    """
-
-    def __init__(self, name, driver):
-        self._name = name
-        self._driver = driver
-        self._modinfo = self._modinfo_parser(driver)
-        self._driver_version = self._find_driver_ver()
-
-    def __str__(self):
-        retstr = "Device: %s\n" % self._name
-        if self._driver:
-            retstr += "Driver: %s (%s)" % (self._driver, self._driver_version)
-        else:
-            retstr += "Driver: Unknown"
-        return retstr
-
-    def _modinfo_parser(self, driver):
-        cmd = ['/sbin/modinfo', driver]
-        try:
-            stream = check_output(cmd, stderr=STDOUT, universal_newlines=True)
-        except CalledProcessError as err:
-            print("Error running %s:" % cmd, file=sys.stderr)
-            print(err.output, file=sys.stderr)
-            return None
-        
-        if not stream:
-            print("Error: modinfo returned nothing", file=sys.stderr)
-            return None
-        else:
-            parser = ModinfoParser(stream)
-            modinfo = parser.get_all()
-
-        return modinfo
-
-    def _find_driver_ver(self):
-        # try the version field first, then vermagic second, some audio
-        # drivers don't report version if the driver is in-tree
-        if self._modinfo['version']:
-            return self._modinfo['version']
-        else:
-            # vermagic will look like this (below) and we only care about the
-            # first part:
-            # "3.2.0-29-generic SMP mod_unload modversions"
-            return self._modinfo['vermagic'].split()[0]
-
-
-def list_device_info():
-    """
-    Lists information on audio devices including device driver and version
-    """
-
-    retval = 0
-    for vtype in TYPES:
-        try:
-            pacmd_entries = check_output(["pacmd", "list-%ss" % vtype],
-                                         universal_newlines=True)
-        except Exception as e:
-            print("Error when running pacmd list-%ss: %s" % (vtype, e),
-                file=sys.stderr)
-            return 1
-
-        entries = entries_regex.findall(pacmd_entries)
-        for entry in entries:
-            name_match = name_regex.search(entry)
-            if name_match:
-                name = name_match.group().strip()
-            else:
-                print("Unable to determine device bus information from the"
-                      " pacmd list-%ss output\npacmd output was: %s" %
-                      (vtype, pacmd_entries), file=sys.stderr)
-                return 1
-
-            driver_name = driver_regex.findall(entry)
-            if driver_name:
-                driver = driver_name[0]
-            else:
-                driver = None
-
-            print("%s\n" % PacmdAudioDevice(name, driver))
-
-    return retval
-
-
-def main():
-    parser = ArgumentParser("List audio device and driver information")
-    args = parser.parse_args()
-    return list_device_info()
-
-if __name__ == "__main__":
-    sys.exit(main())

=== removed file 'scripts/audio_settings'
--- scripts/audio_settings	2013-07-05 16:43:48 +0000
+++ scripts/audio_settings	1970-01-01 00:00:00 +0000
@@ -1,9 +0,0 @@
-#!/usr/bin/python3
-
-import sys
-
-from checkbox.scripts.audio_settings import main
-
-
-if __name__ == "__main__":
-    sys.exit(main())

=== removed file 'scripts/audio_test'
--- scripts/audio_test	2013-07-05 16:43:48 +0000
+++ scripts/audio_test	1970-01-01 00:00:00 +0000
@@ -1,635 +0,0 @@
-#!/usr/bin/env python3
-
-from __future__ import division, print_function
-import argparse
-import collections
-import json
-import logging
-import math
-import re
-import subprocess
-import sys
-import time
-try:
-    import gi
-    gi.require_version('Gst','1.0')
-    from gi.repository import GObject
-    from gi.repository import Gst
-    from gi.repository import GLib
-    Gst.init(None)  # This has to be done very early so it can find elements
-except ImportError:
-    print("Can't import module: %s. it may not be available for this"
-          "version of Python, which is: " % sys.exc_info()[1], file=sys.stderr)
-    print((sys.version), file=sys.stderr)
-    sys.exit(127)
-
-
-#Frequency bands for FFT
-BINS = 256
-#How often to take a sample and do FFT on it.
-FFT_INTERVAL = 100000000  # In nanoseconds, so this is every 1/10th second
-#Sampling frequency. The effective maximum frequency we can analyze is
-#half of this (see Nyquist's theorem)
-SAMPLING_FREQUENCY = 44100
-#The default test frequency should be in the middle of the frequency band
-#that delimits the first and second thirds of the frequency range.
-#That gives a not-so-ear-piercing tone and should ensure there's no
-#spillout to neighboring frequency bands.
-DEFAULT_TEST_FREQUENCY = (SAMPLING_FREQUENCY / (2 * BINS)) * int(BINS / 3) - \
-                         (SAMPLING_FREQUENCY / (2 * BINS)) / 2
-#only sample a signal when peak level is in this range (in dB attenuation,
-#0 means no attenuation (and horrible clipping).
-REC_LEVEL_RANGE = (-2.0, -12.0)
-#For our test signal to be considered present, it has to be this much higher
-#than the base level (minimum magnitude). This is in dB.
-MAGNITUDE_THRESHOLD = 2.5
-#Volume for the sample tone (in %)
-PLAY_VOLUME = 70
-
-class PIDController(object):
-    """ A Proportional-Integrative-Derivative controller (PID) controls a
-    process's output to try to maintain a desired output value (known as
-    'setpoint', by continually adjusting the process's input.
-
-    It does so by calculating the "error" (difference between output and
-    setpoint) and attempting to minimize it manipulating the input.
-
-    The desired change to the input is calculated based on error and three
-    constants (Kp, Ki and Kd).  These values can be interpreted in terms of
-    time: P depends on the present error, I on the accumulation of past errors,
-    and D is a prediction of future errors, based on current rate of change.
-    The weighted sum of these three actions is used to adjust the process via a
-    control element.
-
-    In practice, Kp, Ki and Kd are process-dependent and usually have to
-    be tweaked by hand, but once reasonable constants are arrived at, they
-    can apply to a particular process without further modification.
-
-    """
-    def __init__(self, Kp, Ki, Kd, setpoint=0):
-        """ Creates a PID controller with given constants and setpoint.
-
-           Arguments:
-           Kp, Ki, Kd: PID constants, see class description.
-           setpoint: desired output value; calls to input_change with
-                     a process output reading will return a desired change
-                     to the input to attempt matching output to this value.
-        """
-        self.setpoint = setpoint
-        self.Kp = Kp
-        self.Ki = Ki
-        self.Kd = Kd
-        self._integral = 0
-        self._previous_error = 0
-        self._change_limit = 0
-
-    def input_change(self, process_feedback, dt):
-        """ Calculates desired input value change.
-
-            Based on process feedback and time interval (dt).
-        """
-        error = self.setpoint - process_feedback
-        self._integral = self._integral + (error * dt)
-        derivative = (error - self._previous_error) / dt
-        self._previous_error = error
-        input_change = (self.Kp * error) + \
-                       (self.Ki * self._integral) + \
-                       (self.Kd * derivative)
-        if self._change_limit and abs(input_change) > abs(self._change_limit):
-            sign = input_change / abs(input_change)
-            input_change = sign * self._change_limit
-        return input_change
-
-    def set_change_limit(self, limit):
-        """Ensures that input value changes are lower than limit.
-
-           Setting limit of zero disables this.
-        """
-        self._change_limit = limit
-
-
-class PAVolumeController(object):
-    pa_types = {'input': 'source', 'output': 'sink'}
-
-    def __init__(self, type, method=None, logger=None):
-        """Initializes the volume controller.
-
-           Arguments:
-           type: either input or output
-           method: a method that will run a command and return pulseaudio
-           information in the described format, as a single string with
-           line breaks (to be processed with str.splitlines())
-
-        """
-        self.type = type
-        self._volume = None
-        self.identifier = None
-        self.method = method
-        if not isinstance(method, collections.Callable):
-            self.method = self._pactl_output
-        self.logger = logger
-
-    def set_volume(self, volume):
-        if not 0 <= volume <= 100:
-            return False
-        if not self.identifier:
-            return False
-        command = ['pactl',
-                   'set-%s-volume' % (self.pa_types[self.type]),
-                   str(self.identifier[0]),
-                   str(int(volume)) + "%"]
-        if False == self.method(command):
-            return False
-        self._volume = volume
-        return True
-
-    def get_volume(self):
-        if not self.identifier:
-            return None
-        return self._volume
-
-    def mute(self, mute):
-        mute = str(int(mute))
-        if not self.identifier:
-            return False
-        command = ['pactl',
-                   'set-%s-mute' % (self.pa_types[self.type]),
-                   str(self.identifier[0]),
-                   mute]
-        if False == self.method(command):
-            return False
-        return True
-
-    def get_identifier(self):
-        if self.type:
-            self.identifier = self._get_identifier_for(self.type)
-            if self.identifier and self.logger:
-                message = "Using PulseAudio identifier %s (%s) for %s" %\
-                       (self.identifier + (self.type,))
-                self.logger.info(message)
-            return self.identifier
-
-    def _get_identifier_for(self, type):
-        """Gets default PulseAudio identifier for given type.
-
-           Arguments:
-           type: either input or output
-
-           Returns:
-           A tuple: (pa_id, pa_description)
-
-        """
-
-        if type not in self.pa_types:
-            return None
-        command = ['pactl', 'list', self.pa_types[type] + "s", 'short']
-
-        #Expect lines of this form (field separator is tab):
-        #<ID>\t<NAME>\t<MODULE>\t<SAMPLE_SPEC_WITH_SPACES>\t<STATE>
-        #What we need to return is the ID for the first element on this list
-        #that does not contain auto_null or monitor.
-        pa_info = self.method(command)
-        valid_elements = None
-
-        if pa_info:
-            reject_regex = '.*(monitor|auto_null).*'
-            valid_elements = [element for element in pa_info.splitlines()
-                              if not re.match(reject_regex, element)]
-        if not valid_elements:
-            if self.logger:
-                self.logger.error("No valid PulseAudio elements"
-                                  " for %s" % (self.type))
-            return None
-        #We only need the pulseaudio numeric ID and long name for each element
-        valid_elements = [(int(e.split()[0]), e.split()[1])
-                          for e in valid_elements]
-        return valid_elements[0]
-
-    def _pactl_output(self, command):
-        #This method mainly calls pactl (hence the name). Since pactl may
-        #return a failure if the audio layer is not yet initialized, we will
-        #try running a few times in case of failure. All our invocations of
-        #pactl should be "idempotent" so repeating them should not have
-        #any bad effects.
-        for attempt in range(0, 3):
-            try:
-                return subprocess.check_output(command,
-                                               universal_newlines=True)
-            except (subprocess.CalledProcessError):
-                time.sleep(5)
-        return False
-
-
-class FileDumper(object):
-    def write_to_file(self, filename, data):
-        try:
-            with open(filename, "w") as f:
-                for i in data:
-                    print(i, file=f)
-            return_value = True
-        except (TypeError, IOError):
-            return_value = False
-        return return_value
-
-
-class SpectrumAnalyzer(object):
-    def __init__(self, points, sampling_frequency=44100,
-                 wanted_samples=20):
-        self.spectrum = [0] * points
-        self.number_of_samples = 0
-        self.wanted_samples = wanted_samples
-        self.sampling_frequency = sampling_frequency
-        #Frequencies should contain *real* frequency which is half of
-        #the sampling frequency
-        self.frequencies = [((sampling_frequency / 2.0) / points) * i
-                            for i in range(points)]
-
-    def _average(self):
-        return sum(self.spectrum) / len(self.spectrum)
-
-    def sample(self, sample):
-        if len(sample) != len(self.spectrum):
-            return
-        self.spectrum = [((old * self.number_of_samples) + new) /
-                         (self.number_of_samples + 1)
-                         for old, new in zip(self.spectrum, sample)]
-        self.number_of_samples += 1
-
-    def frequencies_with_peak_magnitude(self, threshold=1.0):
-        #First establish the base level
-        per_magnitude_bins = collections.defaultdict(int)
-        for magnitude in self.spectrum:
-            per_magnitude_bins[magnitude] += 1
-        base_level = max(per_magnitude_bins,
-                         key=lambda x: per_magnitude_bins[x])
-        #Now return all values that are higher (more positive)
-        #than base_level + threshold
-        peaks = []
-        for i in range(1, len(self.spectrum) - 1):
-            first_index = i - 1
-            last_index = i + 1
-            if self.spectrum[first_index] < self.spectrum[i] and \
-                    self.spectrum[last_index] < self.spectrum[i] and \
-                    self.spectrum[i] > base_level + threshold:
-                peaks.append(i)
-
-        return peaks
-
-    def frequency_band_for(self, frequency):
-        """Convenience function to tell me which band
-           a frequency is contained in
-        """
-        #Note that actual frequencies are half of what the sampling
-        #frequency would tell us. If SF is 44100 then maximum actual
-        #frequency is 22050, and if I have 10 frequency bins each will
-        #contain only 2205 Hz, not 4410 Hz.
-        max_frequency = self.sampling_frequency / 2
-        if frequency > max_frequency or frequency < 0:
-            return None
-        band = float(frequency) / (max_frequency / len(self.spectrum))
-        return int(math.ceil(band)) - 1
-
-    def frequencies_for_band(self, band):
-        """Convenience function to tell me the delimiting frequencies
-           for a band
-        """
-        if band >= len(self.spectrum) or band < 0:
-            return None
-        lower = self.frequencies[band]
-        upper = lower + ((self.sampling_frequency / 2.0) / len(self.spectrum))
-        return (lower, upper)
-
-    def sampling_complete(self):
-        return self.number_of_samples >= self.wanted_samples
-
-
-class GStreamerMessageHandler(object):
-    def __init__(self, rec_level_range, logger, volumecontroller,
-                 pidcontroller, spectrum_analyzer):
-        """Initializes the message handler. It knows how to handle
-           spectrum and level gstreamer messages.
-
-           Arguments:
-           rec_level_range: tuple with acceptable recording level
-                            ranges
-           logger: logging object with debug, info, error methods.
-           volumecontroller: an instance of VolumeController to use
-                             to adjust RECORDING level
-           pidcontroller: a PID controller instance which helps control
-                          volume
-           spectrum_analyzer: instance of SpectrumAnalyzer to collect
-                              data from spectrum messages
-
-        """
-        self.current_level = sys.maxsize
-        self.logger = logger
-        self.pid_controller = pidcontroller
-        self.rec_level_range = rec_level_range
-        self.spectrum_analyzer = spectrum_analyzer
-        self.volume_controller = volumecontroller
-
-    def set_quit_method(self, method):
-        """ Method that will be called when sampling is complete."""
-        self._quit_method = method
-
-    def bus_message_handler(self, bus, message):
-        if message.type == Gst.MessageType.ELEMENT:
-            message_name = message.get_structure().get_name()
-            if message_name == 'spectrum':
-                #TODO: Due to an upstream bug, a structure's get_value method
-                #doesn't work if the value in question is an array (as is the
-                #case with the magnitudes).
-                #https://bugzilla.gnome.org/show_bug.cgi?id=693168
-                #We have to resort to parsing the string representation of the
-                #structure. It's an ugly hack but it works.
-                #Ideally we'd be able to say this to get fft_magnitudes:
-                #message.get_structure.get_value('magnitude').
-                #If an upstream fix ever makes it into gstreamer,
-                #remember to remove this hack and the parse_spectrum
-                #method
-                struct_string = message.get_structure().to_string()
-                structure = parse_spectrum_message_structure(struct_string)
-                fft_magnitudes = structure['magnitude']
-                self.spectrum_method(self.spectrum_analyzer, fft_magnitudes)
-
-            if message_name == 'level':
-                #peak_value is our process feedback
-                #It's returned as an array, so I need the first (and only)
-                #element
-                peak_value = message.get_structure().get_value('peak')[0]
-                self.level_method(peak_value, self.pid_controller,
-                                  self.volume_controller)
-
-    #Adjust recording level
-    def level_method(self, level, pid_controller, volume_controller):
-        #If volume controller doesn't return a valid volume,
-        #we can't control it :(
-        current_volume = volume_controller.get_volume()
-        if current_volume is None:
-            self.logger.error("Unable to control recording volume."
-                              "Test results may be wrong")
-            return
-        self.current_level = level
-        change = pid_controller.input_change(level, 0.10)
-        if self.logger:
-            self.logger.debug("Peak level: %(peak_level).2f, "
-                         "volume: %(volume)d%%, Volume change: %(change)f%%" %
-                      {'peak_level': level,
-                       'change': change,
-                       'volume': current_volume})
-        volume_controller.set_volume(current_volume + change)
-
-    #Only sample if level is within the threshold
-    def spectrum_method(self, analyzer, spectrum):
-        if self.rec_level_range[1] <= self.current_level \
-           or self.current_level <= self.rec_level_range[0]:
-            self.logger.debug("Sampling, recorded %d samples" %
-                               analyzer.number_of_samples)
-            analyzer.sample(spectrum)
-        if analyzer.sampling_complete() and self._quit_method:
-            self.logger.info("Sampling complete, ending process")
-            self._quit_method()
-
-
-class GstAudioObject(object):
-    def __init__(self):
-        self.class_name = self.__class__.__name__
-
-    def _set_state(self, state, description):
-        self.pipeline.set_state(state)
-        message = "%s: %s" % (self.class_name, description)
-        if self.logger:
-            self.logger.info(message)
-
-    def start(self):
-        self._set_state(Gst.State.PLAYING, "Starting")
-
-    def stop(self):
-        self._set_state(Gst.State.NULL, "Stopping")
-
-
-class Player(GstAudioObject):
-    def __init__(self, frequency=DEFAULT_TEST_FREQUENCY, logger=None):
-        super(Player, self).__init__()
-        self.pipeline_description = ("audiotestsrc wave=sine freq=%s "
-                                "! audioconvert "
-                                "! audioresample "
-                                "! autoaudiosink" % int(frequency))
-        self.logger = logger
-        if self.logger:
-            self.logger.debug(self.pipeline_description)
-        self.pipeline = Gst.parse_launch(self.pipeline_description)
-
-
-class Recorder(GstAudioObject):
-    def __init__(self, output_file, bins=BINS,
-                 sampling_frequency=SAMPLING_FREQUENCY,
-                 fft_interval=FFT_INTERVAL, logger=None):
-        super(Recorder, self).__init__()
-        pipeline_description = ('''autoaudiosrc
-        ! queue
-        ! level message=true
-        ! audioconvert
-        ! audio/x-raw, channels=1, rate=(int)%(rate)s
-        ! audioresample
-        ! spectrum interval=%(fft_interval)s bands = %(bands)s
-        ! wavenc
-        ! filesink location=%(file)s''' %
-        {'bands': bins,
-         'rate': sampling_frequency,
-         'fft_interval': fft_interval,
-         'file': output_file})
-        self.logger = logger
-        if self.logger:
-            self.logger.debug(pipeline_description)
-        self.pipeline = Gst.parse_launch(pipeline_description)
-
-    def register_message_handler(self, handler_method):
-        if self.logger:
-            message = "Registering message handler: %s" % handler_method
-            self.logger.debug(message)
-        self.bus = self.pipeline.get_bus()
-        self.bus.add_signal_watch()
-        self.bus.connect('message', handler_method)
-
-
-def parse_spectrum_message_structure(struct_string):
-    #First let's jsonize this
-    #This is the message name, which we don't need
-    text = struct_string.replace("spectrum, ", "")
-    #name/value separator in json is : and not =
-    text = text.replace("=",": ")
-    #Mutate the {} array notation from the structure to
-    #[] notation for json.
-    text = text.replace("{","[")
-    text = text.replace("}","]")
-    #Remove a few stray semicolons that aren't needed
-    text = text.replace(";","")
-    #Remove the data type fields, as json doesn't need them
-    text = re.sub(r"\(.+?\)", "", text)
-    #double-quote the identifiers
-    text = re.sub(r"([\w-]+):", r'"\1":', text)
-    #Wrap the whole thing in brackets
-    text = ("{"+text+"}")
-    #Try to parse and return something sensible here, even if
-    #the data was unparsable.
-    try:
-        return json.loads(text)
-    except ValueError:
-        return None
-
-
-def process_arguments():
-    description = """
-        Plays a single frequency through the default output, then records on
-        the default input device. Analyzes the recorded signal to test for
-        presence of the played frequency, if present it exits with success.
-    """
-    parser = argparse.ArgumentParser(description=description)
-    parser.add_argument("-t", "--time",
-            dest='test_duration',
-            action='store',
-            default=30,
-            type=int,
-            help="""Maximum test duration, default %(default)s seconds.
-                    It may exit sooner if it determines it has enough data.""")
-    parser.add_argument("-a", "--audio",
-            action='store',
-            default="/dev/null",
-            type=str,
-            help="File to save recorded audio in .wav format")
-    parser.add_argument("-q", "--quiet",
-            action='store_true',
-            default=False,
-            help="Be quiet, no output unless there's an error.")
-    parser.add_argument("-d", "--debug",
-            action='store_true',
-            default=False,
-            help="Debugging output")
-    parser.add_argument("-f", "--frequency",
-            action='store',
-            default=DEFAULT_TEST_FREQUENCY,
-            type=int,
-            help="Frequency for test signal, default %(default)s Hz")
-    parser.add_argument("-u", "--spectrum",
-            action='store',
-            type=str,
-            help="""File to save spectrum information for plotting
-                    (one frequency/magnitude pair per line)""")
-    return parser.parse_args()
-
-
-#
-def main():
-    #Get arguments.
-    args = process_arguments()
-
-    #Setup logging
-    level = logging.INFO
-    if args.debug:
-        level = logging.DEBUG
-    if args.quiet:
-        level = logging.ERROR
-    logging.basicConfig(level=level)
-    try:
-        #Launches recording pipeline. I need to hook up into the gst
-        #messages.
-        recorder = Recorder(output_file=args.audio, logger=logging)
-        #Just launches the playing pipeline
-        player = Player(frequency=args.frequency, logger=logging)
-    except GObject.GError as excp:
-        logging.critical("Unable to initialize GStreamer pipelines: %s", excp)
-        sys.exit(127)
-
-    #This just receives a process feedback and tells me how much to change to
-    #achieve the setpoint
-    pidctrl = PIDController(Kp=0.7, Ki=.01, Kd=0.01,
-                            setpoint=REC_LEVEL_RANGE[0])
-    pidctrl.set_change_limit(5)
-    #This  gathers spectrum data.
-    analyzer = SpectrumAnalyzer(points=BINS,
-                                sampling_frequency=SAMPLING_FREQUENCY)
-
-    #Volume controllers actually set volumes for their device types.
-    #we should at least issue a warning
-    recorder.volumecontroller = PAVolumeController(type='input',
-                                                   logger=logging)
-    if not recorder.volumecontroller.get_identifier():
-        logging.warning("Unable to get input volume control identifier. "
-                       "Test results will probably be invalid")
-    recorder.volumecontroller.set_volume(0)
-    recorder.volumecontroller.mute(False)
-
-    player.volumecontroller = PAVolumeController(type='output',
-                                                 logger=logging)
-    if not player.volumecontroller.get_identifier():
-        logging.warning("Unable to get output volume control identifier. "
-                       "Test results will probably be invalid")
-    player.volumecontroller.set_volume(PLAY_VOLUME)
-    player.volumecontroller.mute(False)
-
-    #This handles the messages from gstreamer and orchestrates
-    #the passed volume controllers, pid controller and spectrum analyzer
-    #accordingly.
-    gmh = GStreamerMessageHandler(rec_level_range=REC_LEVEL_RANGE,
-                                  logger=logging,
-                                  volumecontroller=recorder.volumecontroller,
-                                  pidcontroller=pidctrl,
-                                  spectrum_analyzer=analyzer)
-
-    #I need to tell the recorder which method will handle messages.
-    recorder.register_message_handler(gmh.bus_message_handler)
-
-    #Create the loop and add a few triggers
-#    GObject.threads_init() #Not needed?
-    loop = GLib.MainLoop()
-    GLib.timeout_add_seconds(0, player.start)
-    GLib.timeout_add_seconds(0, recorder.start)
-    GLib.timeout_add_seconds(args.test_duration, loop.quit)
-
-    # Tell the gmh which method to call when enough samples are collected
-    gmh.set_quit_method(loop.quit)
-
-    loop.run()
-
-    #When the loop ends, set things back to reasonable states
-    player.stop()
-    recorder.stop()
-    player.volumecontroller.set_volume(50)
-    recorder.volumecontroller.set_volume(10)
-
-    #See if data gathering was successful.
-    test_band = analyzer.frequency_band_for(args.frequency)
-    candidate_bands = analyzer.frequencies_with_peak_magnitude(MAGNITUDE_THRESHOLD)
-    for band in candidate_bands:
-        logging.debug("Band (%.2f,%.2f) contains a magnitude peak" %
-                      analyzer.frequencies_for_band(band))
-    if test_band in candidate_bands:
-        freqs_for_band = analyzer.frequencies_for_band(test_band)
-        logging.info("PASS: Test frequency of %s in band (%.2f, %.2f) "
-              "which contains a magnitude peak" %
-            ((args.frequency,) + freqs_for_band))
-        return_value = 0
-    else:
-        logging.info("FAIL: Test frequency of %s is not in one of the "
-              "bands with magnitude peaks" % args.frequency)
-        return_value = 1
-    #Is the microphone broken?
-    if len(set(analyzer.spectrum)) <= 1:
-        logging.info("WARNING: Microphone seems broken, didn't even "
-                     "record ambient noise")
-
-    if args.spectrum:
-        logging.info("Saving spectrum data for plotting as %s" %
-                     args.spectrum)
-        if not FileDumper().write_to_file(args.spectrum,
-                                       ["%s,%s" % t for t in
-                                        zip(analyzer.frequencies,
-                                            analyzer.spectrum)]):
-            logging.error("Couldn't save spectrum data for plotting",
-                          file=sys.stderr)
-
-    return return_value
-
-if __name__ == "__main__":
-    sys.exit(main())

=== removed file 'scripts/battery_test'
--- scripts/battery_test	2012-08-31 14:44:05 +0000
+++ scripts/battery_test	1970-01-01 00:00:00 +0000
@@ -1,175 +0,0 @@
-#!/usr/bin/env python3
-
-import os
-import time
-import re
-import subprocess
-import sys
-import argparse
-from gi.repository import Gio
-
-
-class Battery():
-
-    def __init__(self, data):
-        lines = data.split("\n")
-        for line in lines:
-            if line.find("state:") != -1:
-                self._state = line.split(':')[1].strip()
-            elif line.find("energy:") != -1:
-                self._energy, self._energy_units = self._get_capacity(line)
-            elif line.find("energy-full:") != -1:
-                self._energy_full, self._energy_full_units =\
-                    self._get_capacity(line)
-            elif line.find("energy-full-design:") != -1:
-                self._energy_full_design, self._energy_full_design_units =\
-                    self._get_capacity(line)
-
-    def _get_capacity(self, line):
-        """
-        Given a line of input that represents a battery capacity (energy)
-        value, return a tuple of (value, units).  Value is returned as a
-        float.
-        """
-        capacity = line.split(':')[1].strip()
-        values = capacity.split()
-        return (float(values[0]), values[1])
-
-    def __str__(self):
-        ret = "-----------------------------------------\n"
-        ret += "State: %s\n" % self._state
-        ret += "Energy: %s %s\n" % (self._energy, self._energy_units)
-        ret += "Energy Full: %s %s\n" % (self._energy_full,
-                                         self._energy_full_units)
-        ret += "Energy Full-Design: %s %s\n" % (self._energy_full_design,
-                                                self._energy_full_design_units)
-        return ret
-
-
-def find_battery():
-    batinfo = subprocess.Popen('upower -d',
-                               stdout=subprocess.PIPE, shell=True,
-                               universal_newlines=True)
-    if not batinfo:
-        return None
-    else:
-        out, err = batinfo.communicate()
-        if out:
-            device_regex = re.compile("Device: (.*battery_.*)")
-            batteries = device_regex.findall(out)
-            if len(batteries) == 0:
-                return None
-            elif len(batteries) > 1:
-                print("Warning: This system has more than 1 battery, only the"
-                      "first battery will be measured")
-            return batteries[0]
-        else:
-            return None
-
-
-def get_battery_state():
-    battery_name = find_battery()
-    if battery_name is None:
-        return None
-
-    batinfo = subprocess.Popen('upower -i %s' % battery_name,
-                               stdout=subprocess.PIPE, shell=True,
-                               universal_newlines=True)
-    if not batinfo:
-        return None
-    else:
-        out, err = batinfo.communicate()
-        if out:
-            return Battery(out)
-        else:
-            return None
-
-
-def validate_battery_info(battery):
-    if battery is None:
-        print ("Error obtaining battery info")
-        return False
-    if battery._state != "discharging":
-        print ("Error: battery is not discharging, test will not be valid")
-        return False
-    return True
-
-
-def battery_life(before, after, time):
-    capacity_difference = before._energy - after._energy
-    print("Battery drained by %f %s" % (capacity_difference,
-                                        before._energy_units))
-    if capacity_difference == 0:
-        print("Battery capacity did not change, unable to determine remaining"
-              " time", file=sys.stderr)
-        return 1
-    drain_per_second = capacity_difference / time
-    print("Battery drained %f %s per second" % (drain_per_second,
-                                                before._energy_units))
-
-    # the battery at it's max design capacity (when it was brand new)
-    design_life_minutes = round(
-        ((before._energy_full_design / drain_per_second) / 60), 2)
-    print("Battery Life with full battery at design capacity (when new): %.2f"
-          "minutes" % (design_life_minutes))
-
-    # the battery at it's current max capacity
-    current_full_life_minutes = round(
-        ((before._energy_full / drain_per_second) / 60), 2)
-    print("Battery Life with a full battery at current capacity: %.2f minutes"
-          % (current_full_life_minutes))
-
-    # the battery at it's current capacity
-    current_life_minutes = round(
-        ((before._energy / drain_per_second) / 60), 2)
-    print("Battery Life with at current battery capacity: %.2f minutes" %
-          (current_life_minutes))
-    return 0
-
-
-def main():
-    parser = argparse.ArgumentParser(
-        description="""Determine battery drain and battery life by running
-                       the specified action.  Battery life is shown for:
-                       current capacity, capacity when battery is full,
-                       and capacity when battery is full and was brand new
-                       (design capacity)""")
-    parser.add_argument('-i', '--idle', help="Run the test while system is"
-                        " idling", action='store_true')
-    parser.add_argument('-s3', '--sleep', help="Run the test while system"
-                        " is suspended", action='store_true')
-    parser.add_argument('-t', '--time',
-                        help="Specify the allotted time in seconds to run",
-                        type=int, required=True)
-    parser.add_argument('-m', '--movie',
-                        help="Run the test while playing the file MOVIE")
-    args = parser.parse_args()
-
-    test_time = args.time
-    battery_before = get_battery_state()
-    if not validate_battery_info(battery_before):
-        return 1
-    print(battery_before)
-
-    if args.idle:
-        time.sleep(test_time)
-    elif args.movie:
-        totem_settings = Gio.Settings.new("org.gnome.totem")
-        totem_settings.set_boolean("repeat", True)
-        a = subprocess.Popen(['totem', '--fullscreen', args.movie])
-        time.sleep(test_time)
-        a.kill()
-        totem_settings = Gio.Settings.new("org.gnome.totem")
-        totem_settings.set_boolean("repeat", False)
-    elif args.sleep:
-        subprocess.call(['fwts', 's3', '--s3-sleep-delay=' + str(test_time)])
-
-    battery_after = get_battery_state()
-    if not validate_battery_info(battery_after):
-        return 1
-    print(battery_after)
-
-    return(battery_life(battery_before, battery_after, test_time))
-
-if __name__ == "__main__":
-    sys.exit(main())

=== removed file 'scripts/bluetooth_scan'
--- scripts/bluetooth_scan	2011-08-10 10:34:47 +0000
+++ scripts/bluetooth_scan	1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-#!/bin/bash
-
-hciconfig hci0 reset
-
-name=`zenity --title="Bluetooth Send" --entry --text="Bluetooth Send"`
-address=`hcitool scan | grep "$name" | awk '{print $1}'`
-echo $address

=== removed file 'scripts/bluetooth_test'
--- scripts/bluetooth_test	2013-04-25 13:37:21 +0000
+++ scripts/bluetooth_test	1970-01-01 00:00:00 +0000
@@ -1,47 +0,0 @@
-#!/bin/bash
-set -e
-
-TEST_FILENAME=`basename $1`
-TEST_FILE=$1
-BTADDR=$2
-ACTION=$3
-
-if ! dpkg-query -W obexftp >/dev/null 2>&1; then
-    echo "You must install obexftp to run this script"
-    exit 1
-fi
-
-if [ $# -ne 3 ]; then
-    echo "Usage: bt_send.sh <file to send> <bluetooth mac address> <send|browse|get|remove>"
-    exit 1
-fi
-
-if [ $ACTION == "send" ]; then
-    echo "Using" $TEST_FILENAME "as a test file"
-    echo "Sending" $TEST_FILE "to" $BTADDR
-    obexput -b $BTADDR $TEST_FILE 2>&1 | grep "Sending\(.*\)done"
-    sleep 1
-    echo "PASS"
-elif [ $ACTION == "browse" ]; then
-    FILE_SIZE=`ls -al $TEST_FILE|awk '{print $5}'`
-    echo "Checking" $BTADDR "for" $TEST_FILENAME
-    echo "Will check for a filesize of " $FILE_SIZE
-    sleep 1
-    obexftp -b $BTADDR -l | grep $TEST_FILENAME | grep 'size="'$FILE_SIZE'"'
-    sleep 1
-    echo "PASS"
-elif [ $ACTION == "remove" ]; then
-    echo "Removing" $TEST_FILENAME "from" $BTADDR
-    sleep 1
-    obexrm -b $BTADDR $TEST_FILENAME 2>&1 | grep "Disconnecting"
-    echo "PASS"
-elif [ $ACTION == "get" ]; then
-    cd /tmp
-    echo "Checking for file size of" $TEST_FILENAME
-    RECV_FILE_SIZE=`obexftp -b $BTADDR -l | grep $TEST_FILENAME | awk '{print $3}'| tr -cd [:digit:]`
-    sleep 4
-    echo "Getting file" $TEST_FILENAME "from" $BTADDR "with a size of" $RECV_FILE_SIZE
-    obexget -b $BTADDR $TEST_FILENAME 2>&1 | grep "Receiving\(.*\)done"
-    ls -l |grep $TEST_FILENAME | grep $RECV_FILE_SIZE
-    echo "PASS"
-fi

=== removed file 'scripts/brightness_test'
--- scripts/brightness_test	2012-08-16 09:04:55 +0000
+++ scripts/brightness_test	1970-01-01 00:00:00 +0000
@@ -1,165 +0,0 @@
-#!/usr/bin/python3
-# -*- coding: utf-8 -*-
-#
-#  brightness_test
-#
-# This file is part of Checkbox.
-#
-# Copyright 2012 Canonical Ltd.
-#
-# Authors: Alberto Milone <alberto.milone@xxxxxxxxxxxxx>
-#
-# Checkbox is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Checkbox is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Checkbox.  If not, see <http://www.gnu.org/licenses/>.
-
-import sys
-import os
-import time
-
-from sys import stdout, stderr
-from glob import glob
-
-
-class Brightness(object):
-    def __init__(self, path='/sys/class/backlight'):
-        self.sysfs_path = path
-        self._interfaces = self._get_interfaces_from_path()
-
-    def read_value(self, path):
-        '''Read the value from a file'''
-        # See if the source is a file or a file object
-        # and act accordingly
-        file = path
-        if file == None:
-            lines_list = []
-        else:
-            # It's a file
-            if not hasattr(file, 'write'):
-                myfile = open(file, 'r')
-                lines_list = myfile.readlines()
-                myfile.close()
-            # It's a file object
-            else:
-                lines_list = file.readlines()
-
-        return int(''.join(lines_list).strip())
-
-    def write_value(self, value, path, test=None):
-        '''Write a value to a file'''
-        value = '%d' % value
-        # It's a file
-        if not hasattr(path, 'write'):
-            if test:
-                path = open(path, 'a')
-            else:
-                path = open(path, 'w')
-            path.write(value)
-            path.close()
-        # It's a file object
-        else:
-            path.write(value)
-
-    def get_max_brightness(self, path):
-        full_path = os.path.join(path, 'max_brightness')
-
-        return self.read_value(full_path)
-
-    def get_actual_brightness(self, path):
-        full_path = os.path.join(path, 'actual_brightness')
-
-        return self.read_value(full_path)
-
-    def get_last_set_brightness(self, path):
-        full_path = os.path.join(path, 'brightness')
-
-        return self.read_value(full_path)
-
-    def _get_interfaces_from_path(self):
-        '''check all the files in a directory looking for quirks'''
-        interfaces = []
-        if os.path.isdir(self.sysfs_path):
-            for d in glob(os.path.join(self.sysfs_path, '*')):
-                if os.path.isdir(d):
-                    interfaces.append(d)
-
-        return interfaces
-
-    def get_best_interface(self):
-        '''Get the best acpi interface'''
-        # Let's prefer the driver specific interface
-        # over the more common acpi_video one
-        if len(self._interfaces) == 0:
-            return None
-        elif len(self._interfaces) > 1:
-            for interface in self._interfaces:
-                if not interface.__contains__('acpi_video'):
-                    return interface
-            return self._interfaces[-1]
-        else:
-            return self._interfaces[0]
-
-    def was_brightness_applied(self, interface):
-        '''See if the selected brightness was applied
-
-        Note: this doesn't guarantee that screen brightness
-              changed.
-        '''
-        if (self.get_actual_brightness(interface) !=
-            self.get_last_set_brightness(interface)):
-            return False
-        else:
-            return True
-
-
-def main():
-    brightness = Brightness()
-
-    # Make sure that we have root privileges
-    if os.geteuid() != 0:
-        print('Error: please run this program as root',
-              file=sys.stderr)
-        exit(1)
-
-    interface = brightness.get_best_interface()
-    # If no backlight interface can be found
-    if not interface:
-        exit(1)
-
-    # Get the current brightness which we can restore later
-    current_brightness = brightness.get_actual_brightness(interface)
-
-    # Get the maximum value for brightness
-    max_brightness = brightness.get_max_brightness(interface)
-
-    # Set the brightness to half the max value
-    brightness.write_value(max_brightness / 2,
-                           os.path.join(interface,
-                           'brightness'))
-
-    # Check that "actual_brightness" reports the same value we
-    # set "brightness" to
-    exit_status = not brightness.was_brightness_applied(interface)
-
-    # Wait a little bit before going back to the original value
-    time.sleep(2)
-
-    # Set the brightness back to its original value
-    brightness.write_value(current_brightness,
-                           os.path.join(interface,
-                           'brightness'))
-
-    exit(exit_status)
-
-
-if __name__ == '__main__':
-    main()

=== removed file 'scripts/camera_test'
--- scripts/camera_test	2013-05-03 14:32:26 +0000
+++ scripts/camera_test	1970-01-01 00:00:00 +0000
@@ -1,558 +0,0 @@
-#!/usr/bin/env python3
-#
-# This file is part of Checkbox.
-#
-# Copyright 2008-2012 Canonical Ltd.
-#
-# The v4l2 ioctl code comes from the Python bindings for the v4l2
-# userspace api (http://pypi.python.org/pypi/v4l2):
-# Copyright (C) 1999-2009 the contributors
-#
-# The JPEG metadata parser is a part of bfg-pages:
-# http://code.google.com/p/bfg-pages/source/browse/trunk/pages/getimageinfo.py
-# Copyright (C) Tim Hoffman
-#
-# Checkbox is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Checkbox is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Checkbox.  If not, see <http://www.gnu.org/licenses/>.
-#
-
-import os
-import re
-import sys
-import time
-import errno
-import fcntl
-import ctypes
-import struct
-import imghdr
-from tempfile import NamedTemporaryFile
-from subprocess import check_call, CalledProcessError, STDOUT
-import argparse
-from glob import glob
-from gi.repository import GObject
-
-
-_IOC_NRBITS = 8
-_IOC_TYPEBITS = 8
-_IOC_SIZEBITS = 14
-
-_IOC_NRSHIFT = 0
-_IOC_TYPESHIFT = _IOC_NRSHIFT + _IOC_NRBITS
-_IOC_SIZESHIFT = _IOC_TYPESHIFT + _IOC_TYPEBITS
-_IOC_DIRSHIFT = _IOC_SIZESHIFT + _IOC_SIZEBITS
-
-_IOC_WRITE = 1
-_IOC_READ = 2
-
-
-def _IOC(dir_, type_, nr, size):
-    return (
-        ctypes.c_int32(dir_ << _IOC_DIRSHIFT).value |
-        ctypes.c_int32(ord(type_) << _IOC_TYPESHIFT).value |
-        ctypes.c_int32(nr << _IOC_NRSHIFT).value |
-        ctypes.c_int32(size << _IOC_SIZESHIFT).value)
-
-
-def _IOC_TYPECHECK(t):
-    return ctypes.sizeof(t)
-
-
-def _IOR(type_, nr, size):
-    return _IOC(_IOC_READ, type_, nr, ctypes.sizeof(size))
-
-
-def _IOWR(type_, nr, size):
-    return _IOC(_IOC_READ | _IOC_WRITE, type_, nr, _IOC_TYPECHECK(size))
-
-
-class v4l2_capability(ctypes.Structure):
-    """
-    Driver capabilities
-    """
-    _fields_ = [
-        ('driver', ctypes.c_char * 16),
-        ('card', ctypes.c_char * 32),
-        ('bus_info', ctypes.c_char * 32),
-        ('version', ctypes.c_uint32),
-        ('capabilities', ctypes.c_uint32),
-        ('reserved', ctypes.c_uint32 * 4),
-    ]
-
-
-# Values for 'capabilities' field
-V4L2_CAP_VIDEO_CAPTURE = 0x00000001
-V4L2_CAP_VIDEO_OVERLAY = 0x00000004
-V4L2_CAP_READWRITE = 0x01000000
-V4L2_CAP_STREAMING = 0x04000000
-
-v4l2_frmsizetypes = ctypes.c_uint
-(
-    V4L2_FRMSIZE_TYPE_DISCRETE,
-    V4L2_FRMSIZE_TYPE_CONTINUOUS,
-    V4L2_FRMSIZE_TYPE_STEPWISE,
-) = range(1, 4)
-
-
-class v4l2_frmsize_discrete(ctypes.Structure):
-    _fields_ = [
-        ('width', ctypes.c_uint32),
-        ('height', ctypes.c_uint32),
-    ]
-
-
-class v4l2_frmsize_stepwise(ctypes.Structure):
-    _fields_ = [
-        ('min_width', ctypes.c_uint32),
-        ('min_height', ctypes.c_uint32),
-        ('step_width', ctypes.c_uint32),
-        ('min_height', ctypes.c_uint32),
-        ('max_height', ctypes.c_uint32),
-        ('step_height', ctypes.c_uint32),
-    ]
-
-
-class v4l2_frmsizeenum(ctypes.Structure):
-    class _u(ctypes.Union):
-        _fields_ = [
-            ('discrete', v4l2_frmsize_discrete),
-            ('stepwise', v4l2_frmsize_stepwise),
-        ]
-
-    _fields_ = [
-        ('index', ctypes.c_uint32),
-        ('pixel_format', ctypes.c_uint32),
-        ('type', ctypes.c_uint32),
-        ('_u', _u),
-        ('reserved', ctypes.c_uint32 * 2)
-    ]
-
-    _anonymous_ = ('_u',)
-
-
-class v4l2_fmtdesc(ctypes.Structure):
-    _fields_ = [
-        ('index', ctypes.c_uint32),
-        ('type', ctypes.c_int),
-        ('flags', ctypes.c_uint32),
-        ('description', ctypes.c_char * 32),
-        ('pixelformat', ctypes.c_uint32),
-        ('reserved', ctypes.c_uint32 * 4),
-    ]
-
-V4L2_FMT_FLAG_COMPRESSED = 0x0001
-V4L2_FMT_FLAG_EMULATED = 0x0002
-
-# ioctl code for video devices
-VIDIOC_QUERYCAP = _IOR('V', 0, v4l2_capability)
-VIDIOC_ENUM_FRAMESIZES = _IOWR('V', 74, v4l2_frmsizeenum)
-VIDIOC_ENUM_FMT = _IOWR('V', 2, v4l2_fmtdesc)
-
-
-class CameraTest:
-    """
-    A simple class that displays a test image via GStreamer.
-    """
-    def __init__(self, args, gst_plugin=None, gst_video_type=None):
-        self.args = args
-        self._mainloop = GObject.MainLoop()
-        self._width = 640
-        self._height = 480
-        self._gst_plugin = gst_plugin
-        self._gst_video_type = gst_video_type
-
-    def detect(self):
-        """
-        Display information regarding webcam hardware
-        """
-        cap_status = dev_status = 1
-        for i in range(10):
-            cp = v4l2_capability()
-            device = '/dev/video%d' % i
-            try:
-                with open(device, 'r') as vd:
-                    fcntl.ioctl(vd, VIDIOC_QUERYCAP, cp)
-            except IOError:
-                continue
-            dev_status = 0
-            print("%s: OK" % device)
-            print("    name   : %s" % cp.card.decode('UTF-8'))
-            print("    driver : %s" % cp.driver.decode('UTF-8'))
-            print("    version: %s.%s.%s"
-                  % (cp.version >> 16,
-                  (cp.version >> 8) & 0xff,
-                  cp.version & 0xff))
-            print("    flags  : 0x%x [" % cp.capabilities,
-                  ' CAPTURE' if cp.capabilities & V4L2_CAP_VIDEO_CAPTURE
-                  else '',
-                  ' OVERLAY' if cp.capabilities & V4L2_CAP_VIDEO_OVERLAY
-                  else '',
-                  ' READWRITE' if cp.capabilities & V4L2_CAP_READWRITE
-                  else '',
-                  ' STREAMING' if cp.capabilities & V4L2_CAP_STREAMING
-                  else '',
-                  ' ]', sep="")
-
-            resolutions = self._get_supported_resolutions(device)
-            print('    ',
-                  self._supported_resolutions_to_string(resolutions).replace(
-                  "\n", " "),
-                  sep="")
-
-            if cp.capabilities & V4L2_CAP_VIDEO_CAPTURE:
-                cap_status = 0
-        return dev_status | cap_status
-
-    def led(self):
-        """
-        Activate camera (switch on led), but don't display any output
-        """
-        pipespec = ("v4l2src device=%(device)s "
-                    "! %(type)s "
-                    "! %(plugin)s "
-                    "! testsink"
-                    % {'device': self.args.device,
-                       'type': self._gst_video_type,
-                       'plugin': self._gst_plugin})
-        self._pipeline = Gst.parse_launch(pipespec)
-        self._pipeline.set_state(Gst.State.PLAYING)
-        time.sleep(10)
-        self._pipeline.set_state(Gst.State.NULL)
-
-    def display(self):
-        """
-        Displays the preview window
-        """
-        pipespec = ("v4l2src device=%(device)s "
-                    "! %(type)s,width=%(width)d,height=%(height)d "
-                    "! %(plugin)s "
-                    "! autovideosink"
-                    % {'device': self.args.device,
-                       'type': self._gst_video_type,
-                       'width': self._width,
-                       'height': self._height,
-                       'plugin': self._gst_plugin})
-        self._pipeline = Gst.parse_launch(pipespec)
-        self._pipeline.set_state(Gst.State.PLAYING)
-        time.sleep(10)
-        self._pipeline.set_state(Gst.State.NULL)
-
-    def still(self):
-        """
-        Captures an image to a file
-        """
-        if self.args.filename:
-            self._still_helper(self.args.filename, self._width, self._height,
-                               self.args.quiet)
-        else:
-            with NamedTemporaryFile(prefix='camera_test_', suffix='.jpg') as f:
-                self._still_helper(f.name, self._width, self._height,
-                                   self.args.quiet)
-
-    def _still_helper(self, filename, width, height, quiet, pixelformat=None):
-        """
-        Captures an image to a given filename.  width and height specify the
-        image size and quiet controls whether the image is displayed to the
-        user (quiet = True means do not display image).
-        """
-        command = ["fswebcam", "-S 3", "--no-banner",
-                   "-d", self.args.device,
-                   "-r", "%dx%d"
-                   % (width, height), filename]
-        use_gstreamer = False
-        if pixelformat:
-            command.extend(["-p", pixelformat])
-
-        try:
-            check_call(command, stdout=open(os.devnull, 'w'), stderr=STDOUT)
-        except (CalledProcessError, OSError):
-            use_gstreamer = True
-
-        if use_gstreamer:
-            pipespec = ("v4l2src device=%(device)s "
-                        "! %(type)s,width=%(width)d,height=%(height)d "
-                        "! %(plugin)s "
-                        "! jpegenc "
-                        "! filesink location=%(filename)s"
-                        % {'device': self.args.device,
-                           'type': self._gst_video_type,
-                           'width': width,
-                           'height': height,
-                           'plugin': self._gst_plugin,
-                           'filename': filename})
-            self._pipeline = Gst.parse_launch(pipespec)
-            self._pipeline.set_state(Gst.State.PLAYING)
-            time.sleep(3)
-            self._pipeline.set_state(Gst.State.NULL)
-
-        if not quiet:
-            try:
-                check_call(["timeout", "-k", "11", "10", "eog", filename])
-            except CalledProcessError:
-                pass
-
-    def _supported_resolutions_to_string(self, supported_resolutions):
-        """
-        Return a printable string representing a list of supported resolutions
-        """
-        ret = ""
-        for resolution in supported_resolutions:
-            ret += "Format: %s (%s)\n" % (resolution['pixelformat'],
-                   resolution['description'])
-            ret += "Resolutions: "
-            for res in resolution['resolutions']:
-                ret += "%sx%s," % (res[0], res[1])
-            # truncate the extra comma with :-1
-            ret = ret[:-1] + "\n"
-        return ret
-
-    def resolutions(self):
-        """
-        After querying the webcam for supported formats and resolutions,
-        take multiple images using the first format returned by the driver,
-        and see if they are valid
-        """
-        resolutions = self._get_supported_resolutions(self.args.device)
-        # print supported formats and resolutions for the logs
-        print(self._supported_resolutions_to_string(resolutions))
-
-        # pick the first format, which seems to be what the driver wants for a
-        # default.  This also matches the logic that fswebcam uses to select
-        # a default format.
-        resolution = resolutions[0]
-        if resolution:
-            print("Taking multiple images using the %s format"
-                  % resolution['pixelformat'])
-            for res in resolution['resolutions']:
-                w = res[0]
-                h = res[1]
-                f = NamedTemporaryFile(prefix='camera_test_%s%sx%s' %
-                                       (resolution['pixelformat'], w, h),
-                                       suffix='.jpg', delete=False)
-                print("Taking a picture at %sx%s" % (w, h))
-                self._still_helper(f.name, w, h, True,
-                                   pixelformat=resolution['pixelformat'])
-                if self._validate_image(f.name, w, h):
-                    print("Validated image %s" % f.name)
-                    os.remove(f.name)
-                else:
-                    print("Failed to validate image %s" % f.name,
-                          file=sys.stderr)
-                    os.remove(f.name)
-                    return 1
-            return 0
-
-    def _get_pixel_formats(self, device, maxformats=5):
-        """
-        Query the camera to see what pixel formats it supports.  A list of
-        dicts is returned consisting of format and description.  The caller
-        should check whether this camera supports VIDEO_CAPTURE before
-        calling this function.
-        """
-        supported_formats = []
-        fmt = v4l2_fmtdesc()
-        fmt.index = 0
-        fmt.type = V4L2_CAP_VIDEO_CAPTURE
-        try:
-            while fmt.index < maxformats:
-                with open(device, 'r') as vd:
-                    if fcntl.ioctl(vd, VIDIOC_ENUM_FMT, fmt) == 0:
-                        pixelformat = {}
-                        # save the int type for re-use later
-                        pixelformat['pixelformat_int'] = fmt.pixelformat
-                        pixelformat['pixelformat'] = "%s%s%s%s" % \
-                            (chr(fmt.pixelformat & 0xFF),
-                             chr((fmt.pixelformat >> 8) & 0xFF),
-                             chr((fmt.pixelformat >> 16) & 0xFF),
-                             chr((fmt.pixelformat >> 24) & 0xFF))
-                        pixelformat['description'] = fmt.description.decode()
-                        supported_formats.append(pixelformat)
-                fmt.index = fmt.index + 1
-        except IOError as e:
-            # EINVAL is the ioctl's way of telling us that there are no
-            # more formats, so we ignore it
-            if e.errno != errno.EINVAL:
-                print("Unable to determine Pixel Formats, this may be a "
-                      "driver issue.")
-            return supported_formats
-        return supported_formats
-
-    def _get_supported_resolutions(self, device):
-        """
-        Query the camera for supported resolutions for a given pixel_format.
-        Data is returned in a list of dictionaries with supported pixel
-        formats as the following example shows:
-        resolution['pixelformat'] = "YUYV"
-        resolution['description'] = "(YUV 4:2:2 (YUYV))"
-        resolution['resolutions'] = [[width, height], [640, 480], [1280, 720] ]
-
-        If we are unable to gather any information from the driver, then we
-        return YUYV and 640x480 which seems to be a safe default.
-        Per the v4l2 spec the ioctl used here is experimental
-        but seems to be well supported.
-        """
-        supported_formats = self._get_pixel_formats(device)
-        if not supported_formats:
-            resolution = {}
-            resolution['description'] = "YUYV"
-            resolution['pixelformat'] = "YUYV"
-            resolution['resolutions'] = [[640, 480]]
-            supported_formats.append(resolution)
-            return supported_formats
-
-        for supported_format in supported_formats:
-            resolutions = []
-            framesize = v4l2_frmsizeenum()
-            framesize.index = 0
-            framesize.pixel_format = supported_format['pixelformat_int']
-            with open(device, 'r') as vd:
-                try:
-                    while fcntl.ioctl(vd,
-                                      VIDIOC_ENUM_FRAMESIZES,
-                                      framesize) == 0:
-                        if framesize.type == V4L2_FRMSIZE_TYPE_DISCRETE:
-                            resolutions.append([framesize.discrete.width,
-                                               framesize.discrete.height])
-                        # for continuous and stepwise, let's just use min and
-                        # max they use the same structure and only return
-                        # one result
-                        elif framesize.type == V4L2_FRMSIZE_TYPE_CONTINUOUS or\
-                            framesize.type == V4L2_FRMSIZE_TYPE_STEPWISE:
-                            resolutions.append([framesize.stepwise.min_width,
-                                                framesize.stepwise.min_height]
-                                               )
-                            resolutions.append([framesize.stepwise.max_width,
-                                                framesize.stepwise.max_height]
-                                               )
-                            break
-                        framesize.index = framesize.index + 1
-                except IOError as e:
-                    # EINVAL is the ioctl's way of telling us that there are no
-                    # more formats, so we ignore it
-                    if e.errno != errno.EINVAL:
-                        print("Unable to determine supported framesizes "
-                              "(resolutions), this may be a driver issue.")
-                        return supported_formats
-            supported_format['resolutions'] = resolutions
-        return supported_formats
-
-    def _validate_image(self, filename, width, height):
-        """
-        Given a filename, ensure that the image is the width and height
-        specified and is a valid image file.
-        """
-        if imghdr.what(filename) != 'jpeg':
-            return False
-
-        outw = outh = 0
-        with open(filename, mode='rb') as jpeg:
-            jpeg.seek(2)
-            b = jpeg.read(1)
-            try:
-                while (b and ord(b) != 0xDA):
-                    while (ord(b) != 0xFF):
-                        b = jpeg.read(1)
-                    while (ord(b) == 0xFF):
-                        b = jpeg.read(1)
-                    if (ord(b) >= 0xC0 and ord(b) <= 0xC3):
-                        jpeg.seek(3, 1)
-                        h, w = struct.unpack(">HH", jpeg.read(4))
-                        break
-                    b = jpeg.read(1)
-                outw, outh = int(w), int(h)
-            except (struct.error, ValueError):
-                pass
-
-            if outw != width:
-                print("Image width does not match, was %s should be %s" %
-                      (outw, width), file=sys.stderr)
-                return False
-            if outh != height:
-                print("Image width does not match, was %s should be %s" %
-                      (outh, height), file=sys.stderr)
-                return False
-
-            return True
-
-        return True
-
-
-def parse_arguments(argv):
-    """
-    Parse command line arguments
-    """
-    parser = argparse.ArgumentParser(description="Run a camera-related test")
-    subparsers = parser.add_subparsers(dest='test',
-                                       title='test',
-                                       description='Available camera tests')
-
-    def add_device_parameter(parser):
-        group = parser.add_mutually_exclusive_group()
-        group.add_argument("-d", "--device", default="/dev/video0",
-                           help="Device for the webcam to use")
-        group.add_argument("--highest-device", action="store_true",
-                           help=("Use the /dev/videoN "
-                                 "where N is the highest value available"))
-        group.add_argument("--lowest-device", action="store_true",
-                           help=("Use the /dev/videoN "
-                                 "where N is the lowest value available"))
-
-    subparsers.add_parser('detect')
-    led_parser = subparsers.add_parser('led')
-    add_device_parameter(led_parser)
-    display_parser = subparsers.add_parser('display')
-    add_device_parameter(display_parser)
-    still_parser = subparsers.add_parser('still')
-    add_device_parameter(still_parser)
-    still_parser.add_argument("-f", "--filename",
-                              help="Filename to store the picture")
-    still_parser.add_argument("-q", "--quiet", action="store_true",
-                              help=("Don't display picture, "
-                                    "just write the picture to a file"))
-    resolutions_parser = subparsers.add_parser('resolutions')
-    add_device_parameter(resolutions_parser)
-    args = parser.parse_args(argv)
-
-    def get_video_devices():
-        devices = sorted(glob('/dev/video[0-9]'),
-                         key=lambda d: re.search(r'\d', d).group(0))
-        assert len(devices) > 0, "No video devices found"
-        return devices
-
-    if hasattr(args, 'highest_device') and args.highest_device:
-        args.device = get_video_devices()[-1]
-    elif hasattr(args, 'lowest_device') and args.lowest_device:
-        args.device = get_video_devices()[0]
-    return args
-
-
-if __name__ == "__main__":
-    args = parse_arguments(sys.argv[1:])
-
-    if not args.test:
-        args.test = 'detect'
-
-    # Import Gst only for the test cases that will need it
-    if args.test in ['display', 'still', 'led', 'resolutions']:
-        from gi.repository import Gst
-        if Gst.version()[0] > 0:
-            gst_plugin = 'videoconvert'
-            gst_video_type = 'video/x-raw'
-        else:
-            gst_plugin = 'ffmpegcolorspace'
-            gst_video_type = 'video/x-raw-yuv'
-        Gst.init(None)
-        camera = CameraTest(args, gst_plugin, gst_video_type)
-    else:
-        camera = CameraTest(args)
-
-    sys.exit(getattr(camera, args.test)())

=== removed file 'scripts/check_is_laptop'
--- scripts/check_is_laptop	2012-05-22 18:01:21 +0000
+++ scripts/check_is_laptop	1970-01-01 00:00:00 +0000
@@ -1,29 +0,0 @@
-#!/bin/bash
-
-# Establish the system type based on DMI info
-TYPE=$(dmidecode -t 3 | awk '/Type:/ { print $2 }')
-echo "Type: " $TYPE
-
-BATTERY="NO"
-for device in `find /sys -name "type"`
-do
-    if [ "$(cat $device)" == "Battery" ]; then
-        BATTERY="YES"
-    fi
-done
-
-echo "Battery: " $BATTERY
-
-case $TYPE in
-Notebook|Laptop|Portable)
-    exit 0
-    ;;
-*)
-    # Give the system a second chance based on the battery info
-    if [ $BATTERY == "YES" ]; then
-    	exit 0
-   	else
-   		exit 1
-   	fi
-    ;;
-esac

=== removed file 'scripts/cking_suite'
--- scripts/cking_suite	2012-06-05 20:04:14 +0000
+++ scripts/cking_suite	1970-01-01 00:00:00 +0000
@@ -1,105 +0,0 @@
-#!/usr/bin/env python3
-
-import os
-import sys
-import posixpath
-import subprocess
-
-from optparse import OptionParser
-
-
-DEFAULT_DIRECTORY = "/tmp/checkbox.cking-scripts"
-DEFAULT_LOCATION = "git://kernel.ubuntu.com/cking/scripts"
-
-COMMAND_TEMPLATE = "cd %(scripts)s; ./%(script)s"
-
-
-def print_line(key, value):
-    if type(value) is list:
-        print("%s:" % key)
-        for v in value:
-            print(" %s" % v)
-    else:
-        print("%s: %s" % (key, value))
-
-
-def print_element(element):
-    for key, value in element.items():
-        print_line(key, value)
-
-    print()
-
-
-def clone_cking_scripts(location, directory):
-    if posixpath.exists(directory):
-        return
-
-    dirname = posixpath.dirname(directory)
-    if not posixpath.exists(dirname):
-        os.makedirs(dirname)
-
-    process = subprocess.Popen(["git", "clone", location, directory],
-        stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-    stdout, stderr = process.communicate()
-    if process.wait():
-        raise Exception("Failed to clone cking scripts from %s" % location)
-
-
-def run_cking_scripts(scripts, location, directory, dry_run):
-    if not dry_run:
-        clone_cking_scripts(location, directory)
-
-    for script in scripts:
-        path = posixpath.join(directory, script)
-
-        # Initialize test structure
-        test = {}
-        test["plugin"] = "shell"
-        test["name"] = posixpath.splitext(posixpath.basename(path))[0]
-        test["command"] = COMMAND_TEMPLATE % {
-            "scripts": posixpath.dirname(path),
-            "script": posixpath.basename(path)}
-
-        # Get description from first line of the README file
-        readme_path = posixpath.join(posixpath.dirname(path), "README")
-        if os.path.exists(readme_path):
-            file = open(readme_path)
-            test["description"] = file.readline().strip()
-            file.close
-        else:
-            test["description"] = "No description found"
-
-        yield test
-
-
-def main(args):
-    usage = "Usage: %prog [OPTIONS] [SCRIPTS]"
-    parser = OptionParser(usage=usage)
-    parser.add_option("--dry-run",
-        default=False,
-        action="store_true",
-        help="Dry run to avoid branching from the given location.")
-    parser.add_option("-d", "--directory",
-        default=DEFAULT_DIRECTORY,
-        help="Directory where to branch qa-regression-testing")
-    parser.add_option("-l", "--location",
-        default=DEFAULT_LOCATION,
-        help="Location from where to branch qa-regression-testing")
-
-    (options, scripts) = parser.parse_args(args)
-
-    if not scripts:
-        parser.error("Must specify a script")
-
-    tests = run_cking_scripts(scripts, options.location, options.directory,
-        options.dry_run)
-    if not tests:
-        return 1
-
-    for test in tests:
-        print_element(test)
-
-    return 0
-
-if __name__ == "__main__":
-    sys.exit(main(sys.argv[1:]))

=== removed file 'scripts/color_depth_info'
--- scripts/color_depth_info	2013-07-05 16:43:48 +0000
+++ scripts/color_depth_info	1970-01-01 00:00:00 +0000
@@ -1,76 +0,0 @@
-#!/usr/bin/python3
-# -*- coding: utf-8 -*-
-#
-# color_depth_info
-#
-# This file is part of Checkbox.
-#
-# Copyright 2012 Canonical Ltd.
-#
-# Authors: Alberto Milone <alberto.milone@xxxxxxxxxxxxx>
-#
-# Checkbox is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Checkbox is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Checkbox.  If not, see <http://www.gnu.org/licenses/>.
-
-"""
-    The get_color_depth got information from Xorg.*.log
-"""
-
-import os
-import re
-import sys
-
-from glob import glob
-
-
-def get_color_depth(log_dir='/var/log/'):
-
-    '''Return color depth and pixmap format'''
-
-    # find the most recent X.org log
-    depth = 8
-    pixmap_format = 8
-    log = None
-    max_time = 0
-    for log in glob(os.path.join(log_dir, 'Xorg.*.log')):
-        mtime = os.stat(log).st_mtime
-        if mtime > max_time:
-            max_time = mtime
-            current_log = log
-    if current_log is None:
-        depth = 0
-        pixmap_format = 0
-        return (depth, pixmap_format)
-
-    with open(current_log, 'rb') as stream:
-        for match in re.finditer('Depth (\d+) pixmap format is (\d+) bpp',
-                                 str(stream.read())):
-            depth = int(match.group(1))
-            pixmap_format = int(match.group(2))
-
-    return (depth, pixmap_format)
-
-
-def main():
-
-    '''main function'''
-
-    depth, pixmap_format = get_color_depth()
-    print('Color Depth: {0}\nPixmap Format: {1} bpp'.format(depth,
-                                                            pixmap_format))
-    if depth == 8:
-        return 1
-    return 0
-
-if __name__ == '__main__':
-    sys.exit(main())

=== removed file 'scripts/connect_wireless'
--- scripts/connect_wireless	2011-12-21 08:21:37 +0000
+++ scripts/connect_wireless	1970-01-01 00:00:00 +0000
@@ -1,45 +0,0 @@
-#!/bin/bash
-
-# Any active connections?
-conn=''
-
-active_connection=$(nmcli -f SSID,ACTIVE dev wifi list | grep yes)
-
-if [ $? -eq 0 ]
-then
-    ap=$(echo $active_connection | awk -F\' '{print $2}')
-    conn=$(nmcli -t -f UUID,TYPE,NAME con list | grep wireless | grep -e "$ap$" | awk -F\: '{print $1}')
-else
-    conn=$(nmcli -t -f UUID,TYPE con list | grep wireless | head -n 1 | awk -F\: '{print $1}')
-fi
-
-#Strip trailing/leading whitespace
-conn=$(echo $conn |sed 's/^[ \t]*//;s/[ \t]*$//')
-
-# Find out if wireless is enabled
-nmcli nm wifi | grep -q 'enabled'
-if [ $? -ne 0 ]
-then
-    # Find out why
-    rfkill list wifi | grep 'Hard blocked' | grep -q yes
-    if [ $? -eq 0 ]
-    then
-        blkmessage='Your wireless may be hardware blocked. You may need
-                    to use your wireless key/switch to re-enable it.'
-        echo $blkmessage
-    fi
-fi
-
-# Check if there's a connection already (wireless or otherwise)
-nmcli dev status | grep -q '\<connected\>'
-if [ $? -eq 0 ]
-then
-    # Disconnect, pause for a short time
-    for iface in `nmcli -f GENERAL dev list | grep 'GENERAL.DEVICE' | awk '{print $2}'`
-    do
-        nmcli dev disconnect iface $iface
-    done
-    sleep 2
-fi
-
-nmcli con up uuid "$conn"

=== removed file 'scripts/create_connection'
--- scripts/create_connection	2013-04-17 20:18:21 +0000
+++ scripts/create_connection	1970-01-01 00:00:00 +0000
@@ -1,280 +0,0 @@
-#!/usr/bin/env python3
-
-import sys
-import os
-import time
-
-from subprocess import check_call, check_output, CalledProcessError
-
-from uuid import uuid4
-from argparse import ArgumentParser
-
-CONNECTIONS_PATH = '/etc/NetworkManager/system-connections/'
-
-
-def wifi_connection_section(ssid, uuid):
-
-    if not uuid:
-        uuid = uuid4()
-
-    connection = """
-[connection]
-id=%s
-uuid=%s
-type=802-11-wireless
-    """ % (ssid, uuid)
-
-    wireless = """
-[802-11-wireless]
-ssid=%s
-mode=infrastructure""" % (ssid)
-
-    return connection + wireless
-
-
-def wifi_security_section(security, key):
-    # Add security field to 802-11-wireless section
-    wireless_security = """
-security=802-11-wireless-security
-
-[802-11-wireless-security]
-    """
-
-    if security.lower() == 'wpa':
-        wireless_security += """
-key-mgmt=wpa-psk
-auth-alg=open
-psk=%s
-        """ % key
-
-    elif security.lower() == 'wep':
-        wireless_security += """
-key-mgmt=none
-wep-key=%s
-        """ % key
-
-    return wireless_security
-
-
-def wifi_ip_sections():
-    ip = """
-[ipv4]
-method=auto
-
-[ipv6]
-method=auto
-    """
-
-    return ip
-
-
-def mobilebroadband_connection_section(name, uuid, connection_type):
-    if not uuid:
-        uuid = uuid4()
-
-    connection_section = """
-[connection]
-id={name}
-uuid={uuid}
-type={type}
-autoconnect=false
-    """.format(name=name, uuid=uuid, type=connection_type)
-
-    return connection_section
-
-
-def mobilebroadband_type_section(connection_type, apn,
-                                 username, password, pin):
-    number = ('*99#' if connection_type == 'gsm' else '#777')
-    type_section = """
-[{type}]
-number={number}
-""".format(type=connection_type, number=number)
-
-    if apn:
-        type_section += "\napn={apn}".format(apn=apn)
-    if username:
-        type_section += "\nusername={username}".format(username=username)
-    if password:
-        type_section += "\npassword={password}".format(password=password)
-    if pin:
-        type_section += "\npin={pin}".format(pin=pin)
-
-    return type_section
-
-
-def mobilebroadband_ppp_section():
-    return """
-[ppp]
-lcp-echo-interval=4
-lcp-echo-failure=30
-    """
-
-
-def mobilebroadband_ip_section():
-    return """
-[ipv4]
-method=auto
-    """
-
-
-def mobilebroadband_serial_section():
-    return """
-[serial]
-baud=115200
-    """
-
-
-def block_until_created(connection, retries, interval):
-    while retries > 0:
-        nmcli_con_list = check_output(['nmcli', 'con', 'list'],
-                                      universal_newlines=True)
-
-        if connection in nmcli_con_list:
-            print("Connection %s registered" % connection)
-            break
-
-        time.sleep(interval)
-        retries = retries - 1
-
-    if retries <= 0:
-        print("Failed to register %s." % connection, file=sys.stderr)
-        sys.exit(1)
-    else:
-        try:
-            nmcli_con_up = check_call(['nmcli', 'con', 'up', 'id', connection])
-            print("Connection %s activated." % connection)
-        except CalledProcessError as error:
-            print("Failed to activate %s." % connection, file=sys.stderr)
-            sys.exit(error.returncode)
-
-
-def write_connection_file(name, connection_info):
-    try:
-        connection_file = open(CONNECTIONS_PATH + name, 'w')
-        connection_file.write(connection_info)
-        os.fchmod(connection_file.fileno(), 0o600)
-        connection_file.close()
-    except IOError:
-        print("Can't write to " + CONNECTIONS_PATH + name
-              + ". Is this command being run as root?", file=sys.stderr)
-        sys.exit(1)
-
-
-def create_wifi_connection(args):
-    wifi_connection = wifi_connection_section(args.ssid, args.uuid)
-
-    if args.security:
-        # Set security options
-        if not args.key:
-            print("You need to specify a key using --key "
-                  "if using wireless security.", file=sys.stderr)
-            sys.exit(1)
-
-        wifi_connection += wifi_security_section(args.security, args.key)
-    elif args.key:
-        print("You specified an encryption key "
-              "but did not give a security type "
-              "using --security.", file=sys.stderr)
-        sys.exit(1)
-
-    try:
-        check_call(['rfkill', 'unblock', 'wlan', 'wifi'])
-    except CalledProcessError:
-        print("Could not unblock wireless "
-              "devices with rfkill.", file=sys.stderr)
-        # Don't fail the script if unblock didn't work though
-
-    wifi_connection += wifi_ip_sections()
-
-    # NetworkManager replaces forward-slashes in SSIDs with asterisks
-    name = args.ssid.replace('/', '*')
-    write_connection_file(name, wifi_connection)
-
-    return name
-
-
-def create_mobilebroadband_connection(args):
-    name = args.name
-
-    mobilebroadband_connection = mobilebroadband_connection_section(name,
-                                                                    args.uuid,
-                                                                    args.type)
-    mobilebroadband_connection += mobilebroadband_type_section(args.type,
-                                                               args.apn,
-                                                               args.username,
-                                                               args.password,
-							       args.pin)
-
-    if args.type == 'cdma':
-        mobilebroadband_connection += mobilebroadband_ppp_section()
-
-    mobilebroadband_connection += mobilebroadband_ip_section()
-    mobilebroadband_connection += mobilebroadband_serial_section()
-
-    write_connection_file(name, mobilebroadband_connection)
-    return name
-
-
-def main():
-    parser = ArgumentParser()
-    subparsers = parser.add_subparsers(help="sub command help")
-
-    wifi_parser = subparsers.add_parser('wifi',
-                                        help='Create a Wifi connection.')
-    wifi_parser.add_argument('ssid',
-                             help="The SSID to connect to.")
-    wifi_parser.add_argument('-S', '--security',
-                             choices=['wpa', 'wep'],
-                             help=("The type of security to be used by the "
-                                   "connection. No security will be used if "
-                                   "nothing is specified."))
-    wifi_parser.add_argument('-K', '--key',
-                             help="The encryption key required by the router.")
-    wifi_parser.set_defaults(func=create_wifi_connection)
-
-    mobilebroadband_parser = subparsers.add_parser('mobilebroadband',
-                                                   help="Create a "
-                                                        "mobile "
-                                                        "broadband "
-                                                        "connection.")
-    mobilebroadband_parser.add_argument('type',
-                                        choices=['gsm', 'cdma'],
-                                        help="The type of connection.")
-    mobilebroadband_parser.add_argument('-n', '--name',
-                                        default='MobileBB',
-                                        help="The name of the connection.")
-    mobilebroadband_parser.add_argument('-a', '--apn',
-                                        help="The APN to connect to.")
-    mobilebroadband_parser.add_argument('-u', '--username',
-                                        help="The username required by the "
-                                             "mobile broadband access point.")
-    mobilebroadband_parser.add_argument('-p', '--password',
-                                        help="The password required by the "
-                                             "mobile broadband access point.")
-    mobilebroadband_parser.add_argument('-P', '--pin',
-                                        help="The PIN of the SIM "
-                                             "card, if set.")
-    mobilebroadband_parser.set_defaults(func=create_mobilebroadband_connection)
-
-    parser.add_argument('-U', '--uuid',
-                        help="""The uuid to assign to the connection for use by
-                                NetworkManager. One will be generated if not
-                                specified here.""")
-    parser.add_argument('-R', '--retries',
-                        help="""The number of times to attempt bringing up the
-                                connection until it is confirmed as active.""",
-                        default=5)
-    parser.add_argument('-I', '--interval',
-                        help=("The time to wait between attempts to detect "
-                              "the registration of the connection."),
-                        default=2)
-    args = parser.parse_args()
-
-    # Call function to create the appropriate connection type
-    connection_name = args.func(args)
-    # Make sure we don't exit until the connection is fully created
-    block_until_created(connection_name, args.retries, args.interval)
-
-if __name__ == "__main__":
-    main()

=== removed file 'scripts/cycle_vts'
--- scripts/cycle_vts	2012-08-06 21:16:30 +0000
+++ scripts/cycle_vts	1970-01-01 00:00:00 +0000
@@ -1,32 +0,0 @@
-#!/bin/bash
-
-set -o errexit
-
-# NB: This script must be run with root privileges in order to have any effect!
-
-CURRENT_VT=`/bin/fgconsole`
-
-if [ "$CURRENT_VT" == "" ]
-then
-    echo "Unable to determine current virtual terminal." >&2
-    exit 1
-fi
-
-if [ "$CURRENT_VT" -ne "1" ]
-then
-    chvt 1
-else
-    chvt 2
-fi
-
-sleep 2
-chvt "$CURRENT_VT"
-sleep 2
-
-# make sure we switched back
-END_VT=`/bin/fgconsole`
-if [ "$END_VT" -ne "$CURRENT_VT" ]
-then
-    echo "didn't get back to the original VT" >&2
-    exit 1
-fi

=== removed file 'scripts/display_resource'
--- scripts/display_resource	2012-10-01 08:55:16 +0000
+++ scripts/display_resource	1970-01-01 00:00:00 +0000
@@ -1,84 +0,0 @@
-#!/usr/bin/python3
-
-import re
-import sys
-import subprocess
-
-CONNECTOR_RE = re.compile(
-    r"\n(?P<Name>[\w\-]+)"
-    r"(?:\s+.*?"
-    r"SignalFormat:\s+(?P<SignalFormat>[\w\-_]+)\s+.*?"
-    r"ConnectorType:\s+(?P<ConnectorType>[\w\-_]+))?", re.S)
-SVIDEO_RE = re.compile(r"s\-?video|din|cv", re.I)
-DP_RE = re.compile(r"dp|displayport", re.I)
-
-
-def main():
-    try:
-        xrandr_output = subprocess.check_output(
-            ["xrandr", "-q", "--verbose"], universal_newlines=True)
-    except subprocess.CalledProcessError:
-        return 0
-
-    xrandr_output = "\n" + ''.join(xrandr_output.splitlines(True)[1:])
-    supported_connections = dict()
-
-    for m in CONNECTOR_RE.finditer(xrandr_output):
-        name = m.group('Name').lower()
-        signal_format = connector_type = ''  # RandR 1.3 only
-        if m.group('SignalFormat'):
-            signal_format = m.group('SignalFormat').lower()
-        if m.group('ConnectorType'):
-            connector_type = m.group('ConnectorType').lower()
-
-        if name.startswith('vga'):
-            supported_connections['vga'] = 'supported'
-
-        elif name.startswith('dvi'):
-            supported_connections['dvi'] = 'supported'
-
-        elif DP_RE.match(name):
-            # HDMI uses TMDS links, DisplayPort (DP) uses LVDS pairs (lanes)
-            # to transmit micro data packets.
-            # Reported by NVIDIA proprietary drivers (version >= 302.17)
-            if signal_format == 'tmds':
-                supported_connections['hdmi'] = 'supported'
-            else:
-                supported_connections['dp'] = 'supported'
-
-        elif name.startswith('hdmi'):
-            supported_connections['hdmi'] = 'supported'
-
-        elif SVIDEO_RE.match(name):
-            supported_connections['svideo'] = 'supported'
-
-        elif name.startswith('rca'):
-            supported_connections['rca'] = 'supported'
-
-        elif name.startswith('tv'):
-            if SVIDEO_RE.match(signal_format):
-                supported_connections['svideo'] = 'supported'
-            else:
-                supported_connections['tv'] = 'supported'
-
-        # ATI/AMD proprietary FGLRX graphics driver codenames:
-        elif name.startswith('crt') or name.startswith('dfp'):
-            if connector_type.startswith('dvi'):
-                supported_connections['dvi'] = 'supported'
-            elif connector_type.startswith('vga'):
-                supported_connections['vga'] = 'supported'
-            elif DP_RE.match(connector_type) and DP_RE.match(signal_format):
-                supported_connections['dp'] = 'supported'
-            else:
-                # HDMI ports may appear as unknown
-                # (for both signal format and connector type).
-                supported_connections['hdmi'] = 'supported'
-
-    for connector in supported_connections.keys():
-        print("%s: supported" % connector)
-
-    return 0
-
-
-if __name__ == "__main__":
-    sys.exit(main())

=== removed file 'scripts/floppy_test'
--- scripts/floppy_test	2012-06-21 18:40:03 +0000
+++ scripts/floppy_test	1970-01-01 00:00:00 +0000
@@ -1,105 +0,0 @@
-#!/usr/bin/env python3
-
-import os
-import sys
-import filecmp
-import subprocess
-import posixpath
-
-DEFAULT_DIR = "/tmp/checkbox.floppy"
-DEFAULT_DEVICE_DIR = "floppy_device"
-DEFAULT_IMAGE_DIR = "floppy_image"
-DEFAULT_IMAGE = "floppy.img"
-
-
-class FloppyTest(object):
-
-    def __init__(self, device):
-        self.device = device
-        self.device_dir = os.path.join(DEFAULT_DIR, DEFAULT_DEVICE_DIR)
-        self.image_dir = os.path.join(DEFAULT_DIR, DEFAULT_IMAGE_DIR)
-        self.image = os.path.join(DEFAULT_DIR, DEFAULT_IMAGE)
-        self.interactive = True
-
-        for dir in (self.device_dir, self.image_dir):
-            if not posixpath.exists(dir):
-                os.makedirs(dir)
-
-    def run(self):
-        floppyDevice = self.device
-        if floppyDevice:
-            print("  Testing on floppy drive %s " % floppyDevice)
-        else:
-            print("  Error ! No floppy drive found !")
-            return 1
-        # remove temp files if they exist
-        os.system("umount /media/floppy 2>/dev/null")
-        if (os.path.exists(self.device_dir)
-            or os.path.exists(self.image_dir)
-            or os.path.exists(self.image)):
-            os.system("umount %s %s 2>/dev/null"
-                      % (self.device_dir, self.image_dir))
-            os.system("rm -rf %s %s %s 2>/dev/null"
-                      % (self.device_dir, self.image_dir, self.image))
-        # Create the test images
-        os.mkdir(self.device_dir)
-        os.mkdir(self.image_dir)
-        os.system("dd if=/dev/zero of=%s bs=1k count=1440" % self.image)
-        os.system("mkdosfs %s" % self.image)
-        os.system("mount -o loop %s %s" % (self.image, self.image_dir))
-        os.system("cp -a /etc/*.conf %s 2> /dev/null" % self.image_dir)
-        os.system("umount %s" % self.image_dir)
-        # start testing
-        (noFloppyDisk, junkOutput1) = \
-            subprocess.getstatusoutput("dd bs=1c if=%s count=0 2>/dev/null"
-                                     % floppyDevice)
-        if noFloppyDisk != 0:
-            print("Error ! No floppy disc or bad media in %s !" % floppyDevice)
-            return 1
-        else:
-            # writing files
-            print("  Writing data to floppy disc ... ")
-            (ddStatus, ddOutput) = \
-                subprocess.getstatusoutput("dd if=%s of=%s bs=1k count=1440"
-                                         % (self.image, floppyDevice))
-            if ddStatus == 0:
-                print("  Write data to floppy disc done ! ")
-            else:
-                print("  Error ! Write data to floppy disc error ! ")
-                print("  Please check if your floppy disc is write-protected !")
-                return 1
-            # comparing files
-            os.system("mount %s %s" % (floppyDevice, self.device_dir))
-            os.system("mount -o loop %s %s" % (self.image, self.image_dir))
-            print("  Comparing files ... ")
-            fileList = os.listdir(self.image_dir)
-            returnValue = 0
-            for textFile in fileList:
-                file1 = os.path.join(self.device_dir, textFile)
-                file2 = os.path.join(self.image_dir, textFile)
-                if filecmp.cmp(file1, file2):
-                    print("        comparing file %s" % textFile)
-                else:
-                    print("  --  Error ! File %s comparison failed ! -- "
-                          % textFile)
-                    returnValue = 1
-            print("  File comparison done ! ")
-            # remove temp files
-            os.system("umount /media/floppy 2>/dev/null")
-            os.system("umount %s %s " % (self.image_dir, self.device_dir))
-            os.system("rm -rf %s %s %s"
-                      % (self.device_dir, self.image_dir, self.image))
-            print("Done !")
-            return returnValue
-
-
-def main(args):
-    return_values = []
-    for device in args:
-        test = FloppyTest(device)
-        return_values.append(test.run())
-
-    return 1 in return_values
-
-if __name__ == "__main__":
-    sys.exit(main(sys.argv[1:]))

=== removed file 'scripts/fresh_rate_info'
--- scripts/fresh_rate_info	2013-05-10 08:39:40 +0000
+++ scripts/fresh_rate_info	1970-01-01 00:00:00 +0000
@@ -1,76 +0,0 @@
-#!/usr/bin/python3
-# -*- coding: utf-8 -*-
-#
-# fresh_rate_info
-#
-# This file is part of Checkbox.
-#
-# Copyright 2012 Canonical Ltd.
-#
-# Authors: Shawn Wang <shawn.wang@xxxxxxxxxxxxx>
-#
-# Checkbox is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Checkbox is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Checkbox.  If not, see <http://www.gnu.org/licenses/>.
-
-"""
-    The fresh_rate_info got information from xrandr
-"""
-
-import re
-import sys
-import subprocess
-
-
-def xrandr_paser(data=None):
-
-    '''return an array(xrandrs)'''
-
-    resolution = None
-    xrandrs = list()
-    for line in str(data).split('\n'):
-        for match in re.finditer('(.+) connected (\d+x\d+)\+', line):
-            connector = match.group(1)
-            resolution = match.group(2)
-            break
-        if resolution is None:
-            continue
-        for match in re.finditer('{0}\s+(.+)\*'.format(resolution),
-                                 line):
-            refresh_rate = match.group(1)
-            xrandr = {'connector': connector,
-                      'resolution': resolution,
-                      'refresh_rate': refresh_rate}
-            xrandrs.append(xrandr)
-
-    return xrandrs
-
-
-def main():
-
-    '''main function'''
-
-    try:
-        data = subprocess.check_output(['xrandr', '--current'],
-                                       universal_newlines=True)
-    except subprocess.CalledProcessError as exc:
-        return exc.returncode
-
-    xrandrs = xrandr_paser(data)
-    for xrandr in xrandrs:
-        output_str = "Connector({0}):\t Resolution: {1} \t RefreshRate: {2}"
-        print(output_str.format(xrandr['connector'],
-                                xrandr['resolution'],
-                                xrandr['refresh_rate']))
-
-if __name__ == '__main__':
-    sys.exit(main())

=== removed file 'scripts/gcov_tarball'
--- scripts/gcov_tarball	2010-03-02 19:20:19 +0000
+++ scripts/gcov_tarball	1970-01-01 00:00:00 +0000
@@ -1,11 +0,0 @@
-#!/bin/sh
-
-set -o errexit
-
-cd /usr/share
-tar -xzf gcov.tar.gz
-
-cd /tmp
-lcov -q -c -o gcov.info
-genhtml -q -o gcov gcov.info 2>/dev/null
-tar -czf - gcov

=== removed file 'scripts/glob_test'
--- scripts/glob_test	2013-03-20 20:28:23 +0000
+++ scripts/glob_test	1970-01-01 00:00:00 +0000
@@ -1,121 +0,0 @@
-#!/usr/bin/python
-from Globs import benchmarks, hwd
-import argparse
-import locale
-import logging
-import sys
-import os
-
-#Magic to override the _ function from gettext, since
-#it's overkill for our needs here.
-def underscore(string, *args, **kwargs):
-    return(string)
-
-__builtins__._ = underscore 
-
-class Application:
-
-    def __init__(self, share_dir='', bench_dir='', width=800, height=600,
-                 time=5, repetitions=1, fullscreen=False, min_fps=60,
-                 ignore_problems=False):
-        self.opts= {}
-        self.opts['width'] = width
-        self.opts['height'] = height
-        self.opts['time'] = time
-        self.opts['repetitions'] = repetitions
-        self.opts['fullscreen'] = fullscreen
-        self.min_fps = min_fps
-        self.ignore_problems = ignore_problems
-    
-        self.share_dir = share_dir
-        self.bench_dir = bench_dir
-
-
-    def run(self):
-        test_pass = True
-
-        self.hwd = hwd.HWDetect()
-        self.bm = benchmarks.Benchmarks(os.path.join(self.bench_dir,
-                                                     'benchmarks'))
-        ver_str = self.hwd.get_gl_info()['version']
-        hwd_ext = self.hwd.get_gl_info()['extensions']
-        bench_list = [name for name in self.bm.get_names() if name != 'Fake']
-        for benchmark_name in bench_list :
-            runnable = True
-            if  self.bm.check_ver(benchmark_name, ver_str) == False:
-                logging.warning("%s requires OpenGL version %s, I have %s",
-                               benchmark_name,
-                               self.bm.get_info(benchmark_name)['glversion'],
-                               ver_str)
-                runnable = False
-                test_pass = False
-
-            ext_list = self.bm.check_ext(benchmark_name, hwd_ext)
-            if ext_list.__class__ == list: # Returned a list of missing exts
-                missing_ext = ''
-                for ext in ext_list:
-                    missing_ext += ext
-                    if ext_list.index(ext) != len(ext_list) - 1:
-                        missing_ext += ', '
-                    logging.warning("Missing extensions: %s",missing_ext)
-                    runnable = False
-                    test_pass = False
-            if runnable:
-                fps = self.bm.run(benchmark_name, self.opts)
-                if fps is None:
-                    #oops, test failed to produce usable result!
-                    print("Test failed to produce FPS measurement.")
-                    print("Possible causes: OpenGL version too low/high")
-                    if self.ignore_problems:
-                        print("Ignoring this as requested")
-                    else:
-                        print("Considering this a FAIL test")
-                        test_pass = False
-                else:
-                    print("{} {} fps".format(benchmark_name, fps))
-                    if ( self.min_fps > fps):
-                        print("(Failed to meet minimum {} FPS)".format(
-                              self.min_fps))
-                        test_pass = False
-        return test_pass
-        
-
-
-
-share_dir = '/usr/share/globs'
-locale_dir = '/usr/share/locale'
-bench_dir = '/usr/lib/globs'
-
-parser = argparse.ArgumentParser("Executes gl benchmarks non-interactively")
-parser.add_argument("--width", action='store',
-                    default=800, type=int)
-parser.add_argument("--height", action='store',
-                    default=600, type=int)
-parser.add_argument("--repetitions", action='store',
-                    default=1, type=int)
-parser.add_argument("--time", action='store',
-                    default=10, type=int)
-parser.add_argument("--ignore-problems", action='store_true',
-                    default=False, help=("If a test fails to "
-                    "produce a FPS rating, ignore it for global test "
-                    "outcome purposes"))
-parser.add_argument("--fullscreen", action='store_true',
-                    default=False)
-parser.add_argument("--min-fps", action='store',
-                    default=60.0, type=float, help=("If any of the benchmarks"
-                    "obtains less than this FPS, the test will be considered"
-                    "failed"))
-
-args = parser.parse_args()
-
-app = Application(share_dir, bench_dir, args.width, args.height, 
-                  args.time, args.repetitions, args.fullscreen, args.min_fps,
-                  args.ignore_problems)
-
-if app.run():
-    print("PASS")
-    sys.exit(0)
-else:
-    print("FAIL")
-    sys.exit(1)
-

=== removed file 'scripts/gpu_test'
--- scripts/gpu_test	2013-07-05 16:43:48 +0000
+++ scripts/gpu_test	1970-01-01 00:00:00 +0000
@@ -1,207 +0,0 @@
-#!/usr/bin/python3
-# Copyright 2013 Canonical Ltd.
-# Written by:
-#   Sylvain Pineau <sylvain.pineau@xxxxxxxxxxxxx>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 3,
-# as published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-"""
-Script checking gpu lockups.
-
-Several threads are started to exercise the GPU in ways that can cause gpu
-lockups.
-Inspired by the workload directory of the xdiagnose package.
-"""
-
-import os
-import re
-import subprocess
-import sys
-import time
-from gi.repository import Gio
-from math import cos, sin
-from threading import Thread
-
-
-class GlxThread(Thread):
-    """
-    Start a thread running glxgears
-    """
-
-    def run(self):
-        subprocess.call(
-            'glxgears -geometry 400x400',
-            stdout=open(os.devnull, 'w'),
-            stderr=subprocess.STDOUT,
-            shell=True)
-
-    def terminate(self):
-        subprocess.call('wmctrl -i -c %s' % self.id, shell=True)
-
-
-class RotateGlxThread(Thread):
-    """
-    Start a thread performing glxgears windows rotations
-    """
-
-    def __init__(self, id, offset):
-        Thread.__init__(self)
-        self.id = id
-        self.offset = offset
-        self.cancel = False
-
-    def run(self):
-        while(1):
-            for j in range(60):
-                x = int(200 * self.offset + 100 * sin(j * 0.2))
-                y = int(200 * self.offset + 100 * cos(j * 0.2))
-                coords = "%s,%s" % (x, y)
-                subprocess.call(
-                    'wmctrl -i -r %s -e 0,%s,-1,-1' % (self.id, coords),
-                    shell=True
-                )
-                time.sleep(0.002 * self.offset)
-                if self.cancel:
-                    return
-
-
-class ChangeWorkspace(Thread):
-    """
-    Start a thread performing fast workspace switches
-    """
-
-    def __init__(self, hsize, vsize, xsize, ysize):
-        Thread.__init__(self)
-        self.hsize = hsize
-        self.vsize = vsize
-        self.xsize = xsize
-        self.ysize = ysize
-        self.cancel = False
-
-    def run(self):
-        while(1):
-            for i in range(self.hsize):
-                for j in range(self.vsize):
-                    subprocess.call(
-                        'wmctrl -o %s,%s' % (self.xsize * j, self.ysize * i),
-                        shell=True)
-                    time.sleep(0.5)
-                    if self.cancel:
-                        # Switch back to workspace #1
-                        subprocess.call('wmctrl -o 0,0', shell=True)
-                        return
-
-
-class Html5VideoThread(Thread):
-    """
-    Start a thread performing playback of an HTML5 video in firefox
-    """
-
-    def run(self):
-        html5_path = os.path.join(
-            os.getenv('CHECKBOX_SHARE'),
-            'data/websites/html5_video.html')
-        subprocess.call(
-            'firefox %s' % html5_path,
-            stdout=open(os.devnull, 'w'),
-            stderr=subprocess.STDOUT,
-            shell=True)
-
-    def terminate(self):
-            subprocess.call("pkill firefox", shell=True)
-
-
-def check_gpu(log=None):
-    if not log:
-        log = '/var/log/kern.log'
-    with open(log, 'r') as f:
-        if re.findall(r'gpu\s+hung', f.read(), flags=re.I):
-            print("GPU hung Detected")
-            return 1
-
-
-def main():
-    if check_gpu():
-        return 1
-    GlxWindows = []
-    GlxRotate = []
-    subprocess.call("pkill 'glxgears|firefox'", shell=True)
-
-    Html5Video = Html5VideoThread()
-    Html5Video.start()
-
-    source = Gio.SettingsSchemaSource.get_default()
-
-    for i in range(2):
-        GlxWindows.append(GlxThread())
-        GlxWindows[i].start()
-        time.sleep(5)
-        windows = subprocess.check_output(
-            'wmctrl -l | grep glxgears',
-            shell=True)
-        for app in sorted(windows.splitlines(), reverse=True):
-            if not b'glxgears' in app:
-                continue
-            GlxWindows[i].id = str(
-                re.match(b'^(0x\w+)', app).group(0), 'utf-8')
-            break
-        GlxRotate.append(RotateGlxThread(GlxWindows[i].id, i + 1))
-        GlxRotate[i].start()
-
-    hsize = vsize = 2
-    hsize_ori = vsize_ori = None
-    if source.lookup("org.compiz.core", True):
-        settings = Gio.Settings(
-            "org.compiz.core",
-            "/org/compiz/profiles/unity/plugins/core/"
-        )
-        hsize_ori = settings.get_int("hsize")
-        vsize_ori = settings.get_int("vsize")
-        settings.set_int("hsize", hsize)
-        settings.set_int("vsize", vsize)
-        time.sleep(5)
-    else:
-        hsize = int(subprocess.check_output(
-            'gconftool --get /apps/compiz-1/general/screen0/options/hsize',
-            shell=True))
-        vsize = int(subprocess.check_output(
-            'gconftool --get /apps/compiz-1/general/screen0/options/vsize',
-            shell=True))
-    (x_res, y_res) = re.search(
-        b'DG:\s+(\d+)x(\d+)',
-        subprocess.check_output('wmctrl -d', shell=True)).groups()
-    DesktopSwitch = ChangeWorkspace(
-        hsize, vsize, int(x_res) // hsize, int(y_res) // vsize)
-    DesktopSwitch.start()
-
-    time.sleep(35)
-
-    for i in range(2):
-        GlxRotate[i].cancel = True
-        GlxWindows[i].terminate()
-    DesktopSwitch.cancel = True
-    time.sleep(10)
-    Html5Video.terminate()
-    if check_gpu():
-        return 1
-
-    if source.lookup("org.compiz.core", True):
-        settings = Gio.Settings(
-            "org.compiz.core",
-            "/org/compiz/profiles/unity/plugins/core/")
-        settings.set_int("hsize", hsize_ori)
-        settings.set_int("vsize", vsize_ori)
-        Gio.Settings.sync()
-
-if __name__ == '__main__':
-    sys.exit(main())

=== removed file 'scripts/gputest_benchmark'
--- scripts/gputest_benchmark	2013-07-05 16:43:48 +0000
+++ scripts/gputest_benchmark	1970-01-01 00:00:00 +0000
@@ -1,27 +0,0 @@
-#!/usr/bin/python3
-# This file is part of Checkbox.
-#
-# Copyright 2013 Canonical Ltd.
-# Written by:
-#   Sylvain Pineau <sylvain.pineau@xxxxxxxxxxxxx>
-#
-# Checkbox is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Checkbox is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Checkbox.  If not, see <http://www.gnu.org/licenses/>.
-
-import sys
-
-from checkbox.scripts.gputest_benchmark import main
-
-
-if __name__ == '__main__':
-    sys.exit(main())

=== removed file 'scripts/graphic_memory_info'
--- scripts/graphic_memory_info	2013-05-10 09:42:47 +0000
+++ scripts/graphic_memory_info	1970-01-01 00:00:00 +0000
@@ -1,81 +0,0 @@
-#!/usr/bin/python3
-# -*- coding: utf-8 -*-
-#
-# graphic_memory_info
-#
-# This file is part of Checkbox.
-#
-# Copyright 2012 Canonical Ltd.
-#
-# Authors: Shawn Wang <shawn.wang@xxxxxxxxxxxxx>
-#
-# Checkbox is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Checkbox is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Checkbox.  If not, see <http://www.gnu.org/licenses/>.
-
-"""
-    The graphic_memory_info got information from lspci
-"""
-
-import re
-import sys
-import subprocess
-
-# 00:01.0 VGA compatible controller: \
-# Advanced Micro Devices [AMD] nee ATI Wrestler [Radeon HD 6320] \
-# (prog-if 00 [VGA controller])
-
-
-def vgamem_paser(data=None):
-
-    '''Parsing type vga and find memory information'''
-
-    device = None
-    vgamems = list()
-    for line in data.split('\n'):
-        for match in re.finditer('(\d\d:\d\d\.\d) VGA(.+): (.+)', line):
-            device = match.group(1)
-            name = match.group(3)
-        if device is None:
-            continue
-#Memory at e0000000 (32-bit, prefetchable) [size=256M]
-        for match in re.finditer('Memory(.+) prefetchable\) \[size=(\d+)M\]',
-                                 line):
-            vgamem_size = match.group(2)
-            vgamem = {'device': device,
-                      'name': name,
-                      'vgamem_size': vgamem_size}
-            vgamems.append(vgamem)
-    return vgamems
-
-
-def main():
-
-    '''main function
-       lspci -v -s 00:01.0 | grep ' prefetchable'
-    '''
-
-    try:
-        data = subprocess.check_output(['lspci', '-v'],
-                                       universal_newlines=True)
-    except subprocess.CalledProcessError as exc:
-        return exc.returncode
-
-    vgamems = vgamem_paser(data)
-    for vgamem in vgamems:
-        output_str = "Device({0})\t Name: {1}\tVGA Memory Size: {2}M"
-        print(output_str.format(vgamem['device'],
-                                vgamem['name'],
-                                vgamem['vgamem_size']))
-
-if __name__ == '__main__':
-    sys.exit(main())

=== removed file 'scripts/graphics_driver'
--- scripts/graphics_driver	2012-10-03 11:49:13 +0000
+++ scripts/graphics_driver	1970-01-01 00:00:00 +0000
@@ -1,354 +0,0 @@
-#!/usr/bin/env python3
-#========================================================================
-#
-# based on xlogparse
-#
-# DESCRIPTION
-#
-# Parses Xlog.*.log format files and allows looking up data from it
-#
-# AUTHOR
-#   Bryce W. Harrington <bryce@xxxxxxxxxxxxx>
-#
-# COPYRIGHT
-#   Copyright (C) 2010-2012 Bryce W. Harrington
-#   All Rights Reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-#========================================================================
-import re
-import sys
-import os
-
-from subprocess import Popen, PIPE, check_output, CalledProcessError
-
-
-class XorgLog(object):
-
-    def __init__(self, logfile=None):
-        self.modules = []
-        self.errors = []
-        self.warnings = []
-        self.info = []
-        self.notimpl = []
-        self.notices = []
-        self.cards = []
-        self.displays = {}
-        self.xserver_version = None
-        self.boot_time = None
-        self.boot_logfile = None
-        self.kernel_version = None
-        self.video_driver = None
-        self.xorg_conf_path = None
-        self.logfile = logfile
-
-        if logfile:
-            self.parse(logfile)
-
-    def parse(self, filename):
-        self.displays = {}
-        display = {}
-        display_name = "Unknown"
-        in_file = open(filename, errors='ignore')
-        gathering_module = False
-        found_ddx = False
-        module = None
-        for line in in_file.readlines():
-
-            m = re.search(r'\(..\)', line)
-            if m:
-                if gathering_module and module is not None:
-                    self.modules.append(module)
-                gathering_module = False
-                module = None
-                m = re.search(
-                    '\(II\) Loading.*modules\/drivers\/(.+)_drv\.so', line)
-                if m:
-                    found_ddx = True
-                m = re.search(r'\(II\) Module (\w+):', line)
-                if m:
-                    module = {
-                        'name':         m.group(1),
-                        'vendor':       None,
-                        'version':      None,
-                        'class':        None,
-                        'abi_name':     None,
-                        'abi_version':  None,
-                        'ddx':          found_ddx,
-                        }
-                    found_ddx = False
-                    gathering_module = True
-
-            if gathering_module:
-                m = re.search(r'vendor="(.*:?)"', line)
-                if m:
-                    module['vendor'] = m.group(1)
-
-                m = re.search(r'module version = (.*)', line)
-                if m:
-                    module['version'] = m.group(1)
-
-                if module['name'] == 'nvidia':
-                    try:
-                        version = check_output(
-                            "nvidia-settings -v",
-                            shell=True,
-                            universal_newlines=True)
-                        m = re.search(r'.*version\s+([0-9\.]+).*', version)
-                        if m:
-                            module['version'] = m.group(1)
-                    except CalledProcessError:
-                        pass
-
-                m = re.search(r'class: (.*)', line)
-                if m:
-                    module['class'] = m.group(1)
-
-                m = re.search(r'ABI class:\s+(.*:?), version\s+(.*:?)', line)
-                if m:
-                    if m.group(1)[:5] == "X.Org":
-                        module['abi_name'] = m.group(1)[6:]
-                    else:
-                        module['abi_name'] = m.group(1)
-                    module['abi_version'] = m.group(2)
-                continue
-
-            # General details
-            m = re.search(r'Current Operating System: (.*)$', line)
-            if m:
-                uname = m.group(1)
-                self.kernel_version = uname.split()[2]
-                continue
-
-            m = re.search(r'Kernel command line: (.*)$', line)
-            if m:
-                self.kernel_command_line = m.group(1)
-                continue
-
-            m = re.search(r'Build Date: (.*)$', line)
-            if m:
-                self.kernel_command_line = m.group(1)
-                continue
-
-            m = re.search(r'Log file: "(.*)", Time: (.*)$', line)
-            if m:
-                self.boot_logfile = m.group(1)
-                self.boot_time = m.group(2)
-
-            m = re.search(r'xorg-server ([^ ]+) .*$', line)
-            if m:
-                self.xserver_version = m.group(1)
-                continue
-
-            m = re.search(r'Using a default monitor configuration.', line)
-            if m and self.xorg_conf_path is None:
-                self.xorg_conf_path = 'default'
-                continue
-
-            m = re.search(r'Using config file: "(.*)"', line)
-            if m:
-                self.xorg_conf_path = m.group(1)
-                continue
-
-            # EDID and Modelines
-            m = re.search(r'\(II\) (.*)\(\d+\): EDID for output (.*)', line)
-            if m:
-                self.displays[display_name] = display
-                self.video_driver = m.group(1)
-                display_name = m.group(2)
-                display = {'Output': display_name}
-                continue
-
-            m = re.search(
-                r'\(II\) (.*)\(\d+\): Assigned Display Device: (.*)$', line)
-            if m:
-                self.displays[display_name] = display
-                self.video_driver = m.group(1)
-                display_name = m.group(2)
-                display = {'Output': display_name}
-                continue
-
-            m = re.search(r'\(II\) (.*)\(\d+\): Setting mode "(.*?):', line)
-            if m:
-                self.displays[display_name] = display
-                self.video_driver = m.group(1)
-                display_name = m.group(2)
-                display = {'Output': display_name}
-                continue
-
-            m = re.search(
-                r'Manufacturer: (.*) *Model: (.*) *Serial#: (.*)', line)
-            if m:
-                display['display manufacturer'] = m.group(1)
-                display['display model'] = m.group(2)
-                display['display serial no.'] = m.group(3)
-
-            m = re.search(r'EDID Version: (.*)', line)
-            if m:
-                display['display edid version'] = m.group(1)
-
-            m = re.search(r'EDID vendor \"(.*)\", prod id (.*)', line)
-            if m:
-                display['vendor'] = m.group(1)
-                display['product id'] = m.group(2)
-
-            m = re.search(
-                r'Max Image Size \[(.*)\]: *horiz.: (.*) *vert.: (.*)', line)
-            if m:
-                display['size max horizontal'] = "%s %s" % (
-                    m.group(2), m.group(1))
-                display['size max vertical'] = "%s %s" % (
-                    m.group(3), m.group(1))
-
-            m = re.search(r'Image Size: *(.*) x (.*) (.*)', line)
-            if m:
-                display['size horizontal'] = "%s %s" % (m.group(1), m.group(3))
-                display['size vertical'] = "%s %s" % (m.group(2), m.group(3))
-
-            m = re.search(r'(.*) is preferred mode', line)
-            if m:
-                display['mode preferred'] = m.group(1)
-
-            m = re.search(r'Modeline \"(\d+)x(\d+)\"x([0-9\.]+) *(.*)$', line)
-            if m:
-                key = "mode %sx%s@%s" % (m.group(1), m.group(2), m.group(3))
-                display[key] = m.group(4)
-                continue
-
-            # Errors and Warnings
-            m = re.search(r'\(WW\) (.*)$', line)
-            if m:
-                self.warnings.append(m.group(1))
-                continue
-
-            m = re.search(r'\(EE\) (.*)$', line)
-            if m:
-                self.errors.append(m.group(1))
-                continue
-
-        if display_name not in self.displays.keys():
-            self.displays[display_name] = display
-        in_file.close()
-
-    def errors_filtered(self):
-        excludes = set([
-            'error, (NI) not implemented, (??) unknown.',
-            'Failed to load module "fglrx" (module does not exist, 0)',
-            'Failed to load module "nv" (module does not exist, 0)',
-            ])
-        return [err for err in self.errors if err not in excludes]
-
-    def warnings_filtered(self):
-        excludes = set([
-            'warning, (EE) error, (NI) not implemented, (??) unknown.',
-            'The directory "/usr/share/fonts/X11/cyrillic" does not exist.',
-            'The directory "/usr/share/fonts/X11/100dpi/" does not exist.',
-            'The directory "/usr/share/fonts/X11/75dpi/" does not exist.',
-            'The directory "/usr/share/fonts/X11/100dpi" does not exist.',
-            'The directory "/usr/share/fonts/X11/75dpi" does not exist.',
-            'Warning, couldn\'t open module nv',
-            'Warning, couldn\'t open module fglrx',
-            'Falling back to old probe method for vesa',
-            'Falling back to old probe method for fbdev',
-            ])
-        return [err for err in self.warnings if err not in excludes]
-
-
-def get_driver_info(xlog):
-    '''Return the running driver and version'''
-    print('-' * 13, 'VIDEO DRIVER INFORMATION', '-' * 13)
-    if xlog.video_driver:
-        for module in xlog.modules:
-            if module['name'] == xlog.video_driver.lower():
-                print("Video Driver: %s" % module['name'])
-                print("Driver Version: %s" % module['version'])
-                print('\n')
-                return 0
-    else:
-        print("ERROR: No video driver loaded! Possibly in failsafe mode!",
-                file=sys.stderr)
-        return 1
-
-
-def is_laptop():
-    return os.path.isdir('/proc/acpi/button/lid')
-
-
-def hybrid_graphics_check(xlog):
-    '''Check for Hybrid Graphics'''
-    card_id1 = re.compile('.*0300: *(.+):(.+) \(.+\)')
-    card_id2 = re.compile('.*0300: *(.+):(.+)')
-    cards_dict = {'8086': 'Intel', '10de': 'NVIDIA', '1002': 'AMD'}
-    cards = []
-    drivers = []
-    formatted_cards = []
-
-    output = Popen(['lspci', '-n'], stdout=PIPE, universal_newlines=True)
-    card_list = output.communicate()[0].split('\n')
-
-    # List of discovered cards
-    for line in card_list:
-        m1 = card_id1.match(line)
-        m2 = card_id2.match(line)
-        if m1:
-            id1 = m1.group(1).strip().lower()
-            id2 = m1.group(2).strip().lower()
-            id = id1 + ':' + id2
-            cards.append(id)
-        elif m2:
-            id1 = m2.group(1).strip().lower()
-            id2 = m2.group(2).strip().lower()
-            id = id1 + ':' + id2
-            cards.append(id)
-
-    print('-' * 13, 'HYBRID GRAPHICS CHECK', '-' * 16)
-    for card in cards:
-        formatted_name = cards_dict.get(card.split(':')[0], 'Unknown')
-        formatted_cards.append(formatted_name)
-        print('Graphics Chipset: %s (%s)' % (formatted_name, card))
-
-    for module in xlog.modules:
-        if module['ddx'] and module['name'] not in drivers:
-            drivers.append(module['name'])
-    print('Loaded DDX Drivers: %s' %
-            ', '.join(drivers))
-
-    has_hybrid_graphics = (len(cards) > 1 and is_laptop()
-        and (cards_dict.get('8086') in formatted_cards
-        or cards_dict.get('1002') in formatted_cards))
-
-    print('Hybrid Graphics: %s' % (has_hybrid_graphics
-                                   and 'yes' or 'no'))
-
-    return 0
-
-
-def main():
-    xlog = XorgLog("/var/log/Xorg.0.log")
-    results = []
-
-    results.append(get_driver_info(xlog))
-    results.append(hybrid_graphics_check(xlog))
-
-    return 1 if 1 in results else 0
-
-if __name__ == "__main__":
-    sys.exit(main())

=== removed file 'scripts/graphics_modes_info'
--- scripts/graphics_modes_info	2012-09-07 17:01:12 +0000
+++ scripts/graphics_modes_info	1970-01-01 00:00:00 +0000
@@ -1,74 +0,0 @@
-#!/usr/bin/python3
-# -*- coding: utf-8 -*-
-#
-# graphics_modes_info
-#
-# This file is part of Checkbox.
-#
-# Copyright 2012 Canonical Ltd.
-#
-# Authors: Alberto Milone <alberto.milone@xxxxxxxxxxxxx>
-#
-# Checkbox is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Checkbox is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Checkbox.  If not, see <http://www.gnu.org/licenses/>.
-
-from __future__ import print_function
-from __future__ import unicode_literals
-import sys
-
-from checkbox.contrib import xrandr
-
-
-def print_modes_info(screen):
-    """Print some information about the detected screen and its outputs"""
-    xrandr._check_required_version((1, 0))
-    print("Screen %s: minimum %s x %s, current %s x %s, maximum %s x %s" %\
-          (screen._screen,
-           screen._width_min, screen._height_min,
-           screen._width, screen._height,
-           screen._width_max, screen._height_max))
-    print("          %smm x %smm" % (screen._width_mm, screen._height_mm))
-    print("Outputs:")
-    for o in list(screen.outputs.keys()):
-        output = screen.outputs[o]
-        print("  %s" % o, end=' ')
-        if output.is_connected():
-            print("(%smm x %smm)" % (output.get_physical_width(),
-                                     output.get_physical_height()))
-            modes = output.get_available_modes()
-            print("    Modes:")
-            for m in range(len(modes)):
-                mode = modes[m]
-                refresh = mode.dotClock / (mode.hTotal * mode.vTotal)
-                print("      [%s] %s x %s @ %s Hz" % (m,
-                                                   mode.width,
-                                                   mode.height,
-                                                   refresh), end=' ')
-                if mode.id == output._mode:
-                    print("(current)", end=' ')
-                if m == output.get_preferred_mode():
-                    print("(preferred)", end=' ')
-                print("")
-        else:
-            print("(not connected)")
-
-
-def main():
-    screen = xrandr.get_current_screen()
-    try:
-        print_modes_info(screen)
-    except(xrandr.UnsupportedRRError):
-        print('Error: RandR version lower than 1.0', file=sys.stderr)
-
-if __name__ == '__main__':
-    main()

=== removed file 'scripts/graphics_stress_test'
--- scripts/graphics_stress_test	2013-05-07 13:59:04 +0000
+++ scripts/graphics_stress_test	1970-01-01 00:00:00 +0000
@@ -1,467 +0,0 @@
-#!/usr/bin/python3
-# -*- coding: utf-8 -*-
-#
-# graphics_stress_test
-#
-# This file is part of Checkbox.
-#
-# Copyright 2012 Canonical Ltd.
-#
-# Authors: Alberto Milone <alberto.milone@xxxxxxxxxxxxx>
-#
-# Checkbox is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Checkbox is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Checkbox.  If not, see <http://www.gnu.org/licenses/>.
-
-import errno
-import logging
-import os
-import re
-import sys
-import tempfile
-import time
-
-from argparse import ArgumentParser
-from subprocess import call, Popen, PIPE
-from checkbox.contrib import xrandr
-
-
-class VtWrapper(object):
-    """docstring for VtWrapper"""
-    def __init__(self):
-        self.x_vt = self._get_x_vt()
-
-    def _get_x_vt(self):
-        '''Get the vt where X lives'''
-        vt = 0
-        proc = Popen(['ps', 'aux'], stdout=PIPE, universal_newlines=True)
-        proc_output = proc.communicate()[0].split('\n')
-        proc_line = re.compile('.*tty(\d+).+/usr/bin/X.*')
-        for line in proc_output:
-            match = proc_line.match(line)
-            if match:
-                vt = match.group(1).strip().lower()
-        return int(vt)
-
-    def set_vt(self, vt):
-        retcode = call(['chvt', '%d' % vt])
-        return retcode
-
-class SuspendWrapper(object):
-    def __init__(self):
-        pass
-
-    def can_we_sleep(self, mode):
-        '''
-        Test to see if S3 state is available to us.  /proc/acpi/* is old
-        and will be deprecated, using /sys/power to maintine usefulness for
-        future kernels.
-
-        '''
-        states_fh = open('/sys/power/state', 'r')
-        try:
-            states = states_fh.read().split()
-        finally:
-            states_fh.close()
-
-        if mode in states:
-            return True
-        else:
-            return False
-
-    def get_current_time(self):
-        cur_time = 0
-        time_fh = open('/sys/class/rtc/rtc0/since_epoch', 'r')
-        try:
-            cur_time = int(time_fh.read())
-        finally:
-            time_fh.close()
-        return cur_time
-
-    def set_wake_time(self, time):
-        '''
-        Get the current epoch time from /sys/class/rtc/rtc0/since_epoch
-        then add time and write our new wake_alarm time to
-        /sys/class/rtc/rtc0/wakealarm.
-
-        The math could probably be done better but this method avoids having to
-        worry about whether or not we're using UTC or local time for both the
-        hardware and system clocks.
-
-        '''
-        cur_time = self.get_current_time()
-        logging.debug('Current epoch time: %s' % cur_time)
-
-        wakealarm_fh = open('/sys/class/rtc/rtc0/wakealarm', 'w')
-
-        try:
-            wakealarm_fh.write('0\n')
-            wakealarm_fh.flush()
-
-            wakealarm_fh.write('+%s\n' % time)
-            wakealarm_fh.flush()
-        finally:
-            wakealarm_fh.close()
-
-        logging.debug('Wake alarm in %s seconds' % time)
-
-    def do_suspend(self, mode):
-        '''
-        Suspend the system and hope it wakes up.
-        Previously tried writing new state to /sys/power/state but that
-        seems to put the system into an uncrecoverable S3 state.  So far,
-        pm-suspend seems to be the most reliable way to go.
-
-        '''
-        if mode == 'mem':
-            status = call('/usr/sbin/pm-suspend')
-        elif mode == 'disk':
-            status = call('/usr/sbin/pm-hibernate')
-        else:
-            logging.debug('Unknown sleep state passed')
-            status == 1
-
-        return status
-
-class RotationWrapper(object):
-
-    def __init__(self):
-        self._rotations = {'normal': xrandr.RR_ROTATE_0,
-                           'right': xrandr.RR_ROTATE_90,
-                           'inverted': xrandr.RR_ROTATE_180,
-                           'left': xrandr.RR_ROTATE_270}
-
-    def _rotate_screen(self, rotation):
-        # Refresh the screen. Required by NVIDIA
-        screen = xrandr.get_current_screen()
-        screen.set_rotation(rotation)
-        return screen.apply_config()
-
-    def do_rotation_cycle(self):
-        '''Cycle through all possible rotations'''
-        rots_statuses = {}
-
-        for rot in self._rotations:
-            try:
-                status = self._rotate_screen(self._rotations[rot])
-            except(xrandr.RRError, xrandr.UnsupportedRRError) as err:
-                status = 1
-                error = err
-            else:
-                error = 'N/A'
-            # Collect the status and the error message
-            rots_statuses[rot] = (status, error)
-            time.sleep(4)
-
-        # Try to set the screen back to normal
-        try:
-            self._rotate_screen(xrandr.RR_ROTATE_0)
-        except(xrandr.RRError, xrandr.UnsupportedRRError) as error:
-            print(error)
-
-        result = 0
-        for elem in rots_statuses:
-            status = rots_statuses.get(elem)[0]
-            error = rots_statuses.get(elem)[1]
-            if status != 0:
-                logging.error('Error: rotation "%s" failed with status %d: %s.'
-                              % (elem, status, error))
-                result = 1
-        return result
-
-class RenderCheckWrapper(object):
-    """A simple class to run the rendercheck suites"""
-
-    def __init__(self, temp_dir=None):
-        self._temp_dir = temp_dir
-
-    def _print_test_info(self, suites='all', iteration=1, show_errors=False):
-        '''Print the output of the test suite'''
-
-        main_command = 'rendercheck'
-        passed = 0
-        total = 0
-
-        if self._temp_dir:
-            # Use the specified path
-            temp_file = tempfile.NamedTemporaryFile(dir=self._temp_dir,
-                                                    delete=False)
-        else:
-            # Use /tmp
-            temp_file = tempfile.NamedTemporaryFile(delete=False)
-
-        if suites == all:
-            full_command = [main_command, '-f', 'a8r8g8b8']
-        else:
-            full_command = [main_command, '-t', suites, '-f', 'a8r8g8b8']
-
-        try:
-            # Let's dump the output into file as it can be very large
-            # and we don't want to store it in memory
-            process = Popen(full_command, stdout=temp_file,
-                            universal_newlines=True)
-        except OSError as exc:
-            if exc.errno == errno.ENOENT:
-                logging.error('Error: please make sure that rendercheck '
-                              'is installed.')
-                exit(1)
-            else:
-                raise
-
-        exit_code = process.wait()
-
-        temp_file.close()
-
-        # Read values from the file
-        errors = re.compile('.*test error.*')
-        results = re.compile('(.+) tests passed of (.+) total.*')
-
-        first_error = True
-        with open(temp_file.name) as temp_handle:
-            for line in temp_handle:
-                match_output = results.match(line)
-                match_errors = errors.match(line)
-                if match_output:
-                    passed = int(match_output.group(1).strip())
-                    total = int(match_output.group(2).strip())
-                    logging.info('Results:')
-                    logging.info('    %d tests passed out of %d.'
-                                  % (passed, total))
-                if show_errors and match_errors:
-                    error = match_errors.group(0).strip()
-                    if first_error:
-                        logging.debug('Rendercheck %s suite errors '
-                                      'from iteration %d:'
-                                       % (suites, iteration))
-                        first_error = False
-                    logging.debug('    %s' % error)
-
-        # Remove the file
-        os.unlink(temp_file.name)
-
-        return (exit_code, passed, total)
-
-    def run_test(self, suites=[], iterations=1, show_errors=False):
-        exit_status = 0
-        for suite in suites:
-            for it in range(iterations):
-                logging.info('Iteration %d of Rendercheck %s suite...'
-                              % (it + 1, suite))
-                (status, passed, total) = \
-                self._print_test_info(suites=suite,
-                                      iteration=it + 1,
-                                      show_errors=show_errors)
-                if status != 0:
-                    # Make sure to catch a non-zero exit status
-                    logging.info('Iteration %d of Rendercheck %s suite '
-                                  'exited with status %d.'
-                                  % (it + 1, suite, status))
-                    exit_status = status
-                it += 1
-
-                # exit with 1 if passed < total
-                if passed < total:
-                    if exit_status == 0:
-                        exit_status = 1
-        return exit_status
-
-    def get_suites_list(self):
-        '''Return a list of the available test suites'''
-        try:
-            process = Popen(['rendercheck', '--help'], stdout=PIPE,
-                            stderr=PIPE, universal_newlines=True)
-        except OSError as exc:
-            if exc.errno == errno.ENOENT:
-                logging.error('Error: please make sure that rendercheck '
-                              'is installed.')
-                exit(1)
-            else:
-                raise
-
-        proc = process.communicate()[1].split('\n')
-        found = False
-        tests_pattern = re.compile('.*Available tests: *(.+).*')
-        temp_line = ''
-        tests = []
-        for line in proc:
-            if found:
-                temp_line += line
-            match = tests_pattern.match(line)
-            if match:
-                first_line = match.group(1).strip().lower()
-                found = True
-                temp_line += first_line
-        for elem in temp_line.split(','):
-            test = elem.strip()
-            if elem:
-                tests.append(test)
-        return tests
-
-
-def main():
-    # Make sure that we have root privileges
-    if os.geteuid() != 0:
-        print('Error: please run this program as root',
-              file=sys.stderr)
-        exit(1)
-
-    usage = 'Usage: %prog [OPTIONS]'
-    parser = ArgumentParser(usage)
-    parser.add_argument('-i', '--iterations',
-                        type=int,
-                        default=10,
-                        help='The number of times to run the test. \
-                              Default is 10')
-    parser.add_argument('-d', '--debug',
-                        action='store_true',
-                        help='Choose this to add verbose output \
-                              for debug purposes')
-    parser.add_argument('-b', '--blacklist',
-                        nargs='+',
-                        help='Name(s) of rendercheck test(s) to blacklist.')
-    parser.add_argument('-o', '--output',
-                        default='',
-                        help='The path to the log which will be dumped. \
-                              Default is stdout')
-    parser.add_argument('-tp', '--temp',
-                        default='',
-                        help='The path where to store temporary files. \
-                              Default is /tmp')
-    args = parser.parse_args()
-
-    # Set up logging to console
-    format = '%(message)s'
-
-    console_handler = logging.StreamHandler()
-    console_handler.setFormatter(logging.Formatter(format))
-
-    # Set up the overall logger
-    logger = logging.getLogger()
-    # This is necessary to ensure debug messages are passed through the logger
-    # to the handler
-    logger.setLevel(logging.DEBUG)
-
-    # This is what happens when -d and/or -o are passed:
-    # -o ->     stdout (info)                - log (info)
-    # -d ->     only stdout (info and debug) - no log
-    # -d -o ->  stdout (info)                - log (info and debug)
-
-    # Write to a log
-    if args.output:
-        # Write INFO to stdout
-        console_handler.setLevel(logging.INFO)
-        logger.addHandler(console_handler)
-        # Specify a log file
-        logfile = args.output
-        logfile_handler = logging.FileHandler(logfile)
-        if args.debug:
-            # Write INFO and DEBUG to a log
-            logfile_handler.setLevel(logging.DEBUG)
-        else:
-            # Write INFO to a log
-            logfile_handler.setLevel(logging.INFO)
-
-        logfile_handler.setFormatter(logging.Formatter(format))
-        logger.addHandler(logfile_handler)
-        log_path = os.path.abspath(logfile)
-
-    # Write only to stdout
-    else:
-        if args.debug:
-            # Write INFO and DEBUG to stdout
-            console_handler.setLevel(logging.DEBUG)
-            logger.addHandler(console_handler)
-        else:
-            # Write INFO to stdout
-            console_handler.setLevel(logging.INFO)
-            logger.addHandler(console_handler)
-
-    status = 0
-
-    rendercheck = RenderCheckWrapper(args.temp)
-    tests = rendercheck.get_suites_list()
-    for test in args.blacklist:
-        if test in tests:
-            tests.remove(test)
-
-    # Switch between the tty where X lives and tty10
-    vt_wrap = VtWrapper()
-    target_vt = 10
-    if vt_wrap.x_vt != target_vt:
-        logging.info('== Vt switch test ==')
-        for it in range(args.iterations):
-            logging.info('Iteration %d...', it)
-            retcode = vt_wrap.set_vt(target_vt)
-            if retcode != 0:
-                logging.error('Error: switching to tty%d failed with code %d '
-                      'on iteration %d' % (target_vt, retcode, it))
-                status = 1
-            else:
-                logging.info('Switching to tty%d: passed' % (target_vt))
-            time.sleep(2)
-            retcode = vt_wrap.set_vt(vt_wrap.x_vt)
-            if retcode != 0:
-                logging.error('Error: switching to tty%d failed with code %d '
-                      'on iteration %d' % (vt_wrap.x_vt, retcode, it))
-            else:
-                logging.info('Switching to tty%d: passed' % (vt_wrap.x_vt))
-                status = 1
-    else:
-        logging.error('Error: please run X on a tty other than 10')
-
-    # Call sleep x times
-    logging.info('== Sleep test ==')
-    sleep_test = SuspendWrapper()
-    sleep_mode = 'mem'
-    # See if we can sleep
-    if sleep_test.can_we_sleep(sleep_mode):
-        for it in range(args.iterations):
-            # Run the test
-            logging.info('Iteration %d...', it + 1)
-            # Set wake time
-            sleep_test.set_wake_time(20)
-            # Suspend to RAM
-            if sleep_test.do_suspend(sleep_mode) == 0:
-                logging.info('Passed')
-            else:
-                logging.error('Failed')
-                status = 1
-    else:
-        # Skip the test
-        logging.info('Skipped (the system does not seem to support S3')
-
-    # Rotate the screen x times
-    # The app already rotates the screen 5 times
-    logging.info('== Rotation test ==')
-    rotation_test = RotationWrapper()
-
-    for it in range(args.iterations):
-        logging.info('Iteration %d...', it + 1)
-        if rotation_test.do_rotation_cycle() == 0:
-            logging.info('Passed')
-        else:
-            logging.error('Failed')
-            status = 1
-
-    # Call rendercheck x times
-    logging.info('== Rendercheck test ==')
-    if rendercheck.run_test(tests, args.iterations,
-                            args.debug) == 0:
-        logging.info('Passed')
-    else:
-        logging.error('Failed')
-        status = 1
-
-    return status
-
-if __name__ == '__main__':
-    exit(main())

=== removed file 'scripts/gst_pipeline_test'
--- scripts/gst_pipeline_test	2013-07-05 16:43:48 +0000
+++ scripts/gst_pipeline_test	1970-01-01 00:00:00 +0000
@@ -1,67 +0,0 @@
-#!/usr/bin/env python3
-
-from argparse import ArgumentParser
-import logging
-import re
-import os
-import sys
-import time
-from gi.repository import Gst
-from subprocess import check_output
-
-
-def check_state(device):
-    """Checks whether the sink is available for the given device.
-    """
-    sink_info = check_output(['pacmd', 'list-sinks'],
-                             universal_newlines=True)
-
-    data = sink_info.split("\n")
-    try:
-        device_name = re.findall(".*name:\s.*%s.*" % device, sink_info)[0].lstrip()
-        sink = re.findall(".*name:\s<(.*%s.*)>" % device, sink_info)[0].lstrip()
-        status = data[data.index("\t" + device_name) + 3]
-    except (IndexError, ValueError):
-        logging.error("Failed to find status for device: %s" % device)
-        return False
-
-    os.environ['PULSE_SINK'] = sink
-    logging.info("[ Pulse sink ]".center(80, '='))
-    logging.info("Device: %s %s" % (device_name.strip(), status.strip()))
-    return status 
-
-
-def main():
-    parser = ArgumentParser(description='Simple GStreamer pipeline player')
-    parser.add_argument('PIPELINE',
-        help='Quoted GStreamer pipeline to launch')
-    parser.add_argument('-t', '--timeout',
-        type=int, required=True,
-        help='Timeout for running the pipeline')
-    parser.add_argument('-d', '--device',
-        type=str,
-        help="Device to check for status")
-    args = parser.parse_args()
-
-    logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.INFO,
-        stream=sys.stdout)
-
-    exit_code = 0
-    if args.device:
-        if not check_state(args.device):
-            exit_code = 1
-
-    Gst.init(None)
-    element = Gst.parse_launch(args.PIPELINE)
-    element.set_state(Gst.State.PLAYING)
-
-    if args.timeout:
-        time.sleep(args.timeout)
-
-    element.set_state(Gst.State.NULL)
-
-    return exit_code
-
-
-if __name__ == "__main__":
-    sys.exit(main())

=== removed file 'scripts/hal_resource'
--- scripts/hal_resource	2012-05-31 20:21:08 +0000
+++ scripts/hal_resource	1970-01-01 00:00:00 +0000
@@ -1,475 +0,0 @@
-#!/usr/bin/python3
-#
-# This file is part of Checkbox.
-#
-# Copyright 2009 Canonical Ltd.
-#
-# Checkbox is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Checkbox is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Checkbox.  If not, see <http://www.gnu.org/licenses/>.
-#
-import re
-import sys
-import dbus
-import string
-import posixpath
-
-from checkbox.lib.pci import Pci
-from checkbox.lib.usb import Usb
-
-
-class UnknownName:
-    def __init__(self, function):
-        self._function = function
-
-    def __get__(self, instance, cls=None):
-        self._instance = instance
-        return self
-
-    def __call__(self, *args, **kwargs):
-        name = self._function(self._instance, *args, **kwargs)
-        if name and name.startswith("Unknown ("):
-            name = None
-
-        return name
-
-
-class DeviceResource:
-    __slots__ = ("_properties")
-
-    def __init__(self, properties):
-        self._properties = properties
-
-    @property
-    def bus(self):
-        return self._properties.get("linux.subsystem")
-
-    @property
-    def category(self):
-        if "system.hardware.vendor" in self._properties:
-            return "SYSTEM"
-
-        if "net.interface" in self._properties:
-            return "NETWORK"
-
-        if "pci.device_class" in self._properties:
-            class_id = self._properties["pci.device_class"]
-            subclass_id = self._properties["pci.device_subclass"]
-
-            if class_id == Pci.BASE_CLASS_NETWORK:
-                return "NETWORK"
-
-            if class_id == Pci.BASE_CLASS_DISPLAY:
-                return "VIDEO"
-
-            if class_id == Pci.BASE_CLASS_SERIAL \
-               and subclass_id == Pci.CLASS_SERIAL_USB:
-                return "USB"
-
-            if class_id == Pci.BASE_CLASS_STORAGE:
-                if subclass_id == Pci.CLASS_STORAGE_SCSI:
-                    return "SCSI"
-
-                if subclass_id == Pci.CLASS_STORAGE_IDE:
-                    return "IDE"
-
-                if subclass_id == Pci.CLASS_STORAGE_FLOPPY:
-                    return "FLOPPY"
-
-                if subclass_id == Pci.CLASS_STORAGE_RAID:
-                    return "RAID"
-
-            if class_id == Pci.BASE_CLASS_COMMUNICATION \
-               and subclass_id == Pci.CLASS_COMMUNICATION_MODEM:
-                return "MODEM"
-
-            if class_id == Pci.BASE_CLASS_INPUT \
-               and subclass_id == Pci.CLASS_INPUT_SCANNER:
-                return "SCANNER"
-
-            if class_id == Pci.BASE_CLASS_MULTIMEDIA:
-                if subclass_id == Pci.CLASS_MULTIMEDIA_VIDEO:
-                    return "CAPTURE"
-
-                if subclass_id == Pci.CLASS_MULTIMEDIA_AUDIO \
-                   or subclass_id == Pci.CLASS_MULTIMEDIA_AUDIO_DEVICE:
-                    return "AUDIO"
-
-            if class_id == Pci.BASE_CLASS_SERIAL \
-               and subclass_id == Pci.CLASS_SERIAL_FIREWIRE:
-                return "FIREWIRE"
-
-            if class_id == Pci.BASE_CLASS_BRIDGE \
-               and (subclass_id == Pci.CLASS_BRIDGE_PCMCIA \
-                    or subclass_id == Pci.CLASS_BRIDGE_CARDBUS):
-                return "SOCKET"
-
-        if "usb.interface.class" in self._properties:
-            interface_class = self._properties["usb.interface.class"]
-            interface_subclass = self._properties["usb.interface.subclass"]
-
-            if interface_class == Usb.BASE_CLASS_AUDIO:
-                return "AUDIO"
-
-            if interface_class == Usb.BASE_CLASS_PRINTER:
-                return "PRINTER"
-
-            if interface_class == Usb.BASE_CLASS_STORAGE:
-                if interface_subclass == Usb.CLASS_STORAGE_FLOPPY:
-                    return "FLOPPY"
-
-                if interface_subclass == Usb.CLASS_STORAGE_SCSI:
-                    return "SCSI"
-
-            if interface_class == Usb.BASE_CLASS_VIDEO:
-                return "VIDEO"
-
-            if interface_class == Usb.BASE_CLASS_WIRELESS:
-                return "NETWORK"
-
-        if "info.capabilities" in self._properties:
-            capabilities = self._properties["info.capabilities"]
-            if "input.keyboard" in capabilities:
-                return "KEYBOARD"
-
-            if "input.mouse" in capabilities:
-                return "MOUSE"
-
-        if "storage.drive_type" in self._properties:
-            drive_type = self._properties["storage.drive_type"]
-            if drive_type == "cdrom":
-                return "CDROM"
-
-            if drive_type == "disk":
-                return "DISK"
-
-            if drive_type == "floppy":
-                return "FLOPPY"
-
-        if "scsi.type" in self._properties:
-            type = self._properties["scsi.type"]
-            if type == "disk":
-                return "DISK"
-
-            if type == "tape":
-                return "TAPE"
-
-            if type == "printer":
-                return "PRINTER"
-
-            if type == "cdrom":
-                return "CDROM"
-
-            if type == "scanner":
-                return "SCANNER"
-
-            if type == "raid":
-                return "RAID"
-
-        if self.product_id:
-            return "OTHER"
-
-        return None
-
-    @property
-    def driver(self):
-        return self._properties.get("info.linux.driver")
-
-    @property
-    def path(self):
-        return self._properties.get("linux.sysfs_path", "").replace("/sys", "")
-
-    @property
-    def product_id(self):
-        if "info.subsystem" in self._properties:
-            product_id = "%s.product_id" % self._properties["info.subsystem"]
-            if product_id in self._properties:
-                return self._properties[product_id]
-
-        # pnp
-        if "pnp.id" in self._properties:
-            match = re.match(r"^(?P<vendor_name>.*)(?P<product_id>[%s]{4})$"
-                % string.hexdigits, self._properties["pnp.id"])
-            if match:
-                return int(match.group("product_id"), 16)
-
-        return None
-
-    @property
-    def vendor_id(self):
-        if "info.subsystem" in self._properties:
-            vendor_id = "%s.vendor_id" % self._properties["info.subsystem"]
-            if vendor_id in self._properties:
-                return self._properties[vendor_id]
-
-        return None
-
-    @property
-    def subproduct_id(self):
-        return self._properties.get("pci.subsys_product_id")
-
-    @property
-    def subvendor_id(self):
-        return self._properties.get("pci.subsys_vendor_id")
-
-    @property
-    def product(self):
-        return self._get_product()
-
-    @UnknownName
-    def _get_product(self):
-        bus = self.bus
-
-        # Ignore subsystems using parent or generated names
-        if bus in ("drm", "net", "pci", "pnp", "scsi_generic",
-                   "scsi_host", "tty", "usb", "video4linux"):
-            return None
-
-        # Treat the floppy device specifically
-        if bus == "platform":
-            if self.driver == "floppy":
-                return "Platform Device"
-            else:
-                return None
-
-        if "usb.interface.number" in self._properties:
-            return None
-
-        if self._properties.get("info.category") == "ac_adapter":
-            return None
-
-        for property in ("alsa.device_id",
-                         "alsa.card_id",
-                         "sound.card_id",
-                         "battery.model",
-                         "ieee1394.product",
-                         "killswitch.name",
-                         "oss.device_id",
-                         "scsi.model",
-                         "system.hardware.product",
-                         "info.product"):
-            if property in self._properties:
-                return self._properties[property]
-
-        return None
-
-    @property
-    def vendor(self):
-        return self._get_vendor()
-
-    @UnknownName
-    def _get_vendor(self):
-        bus = self.bus
-
-        # Ignore subsystems using parent or generated names
-        if bus in ("drm", "pci", "rfkill", "usb"):
-            return None
-
-        # pnp
-        if "pnp.id" in self._properties:
-            match = re.match(r"^(?P<vendor_name>.*)(?P<product_id>[%s]{4})$"
-                % string.hexdigits, self._properties["pnp.id"])
-            if match:
-                return match.group("vendor_name")
-
-        for property in ("battery.vendor",
-                         "ieee1394.vendor",
-                         "scsi.vendor",
-                         "system.hardware.vendor",
-                         "info.vendor"):
-            if property in self._properties:
-                return self._properties[property]
-
-        return None
-
-
-class DmiDeviceResource(DeviceResource):
-
-    _category_to_property = {
-        "BIOS": "system.firmware",
-        "BOARD": "system.board",
-        "CHASSIS": "system.chassis"}
-
-    def __init__(self, properties, category):
-        super(DmiDeviceResource, self).__init__(properties)
-        if category not in self._category_to_property:
-            raise Exception("Unsupported category: %s" % category)
-
-        self._category = category
-
-    @property
-    def _property(self):
-        return self._category_to_property[self._category]
-
-    @property
-    def category(self):
-        return self._category
-
-    @property
-    def path(self):
-        path = super(DmiDeviceResource, self).path
-        return posixpath.join(path, self._category.lower())
-
-    @property
-    def product(self):
-        for subproperty in "product", "type", "version":
-            property = "%s.%s" % (self._property, subproperty)
-            product = self._properties.get(property)
-            if product and product != "Not Available":
-                return product
-
-        return None
-
-    @property
-    def vendor(self):
-        for subproperty in "vendor", "manufacturer":
-            property = "%s.%s" % (self._property, subproperty)
-            if property in self._properties:
-                return self._properties[property]
-
-        return None
-
-
-class HalResource:
-    """Resource for HAL information.
-
-    Each item contained in this resource consists of the udi as key and
-    the corresponding device resource as value.
-    """
-
-    # See also section "Deprecated Properties"
-    # of the "HAL 0.5.10 Specification",
-    # available from
-    # http://people.freedesktop.org/~david/hal-spec/hal-spec.html
-    _deprecated_expressions = (
-        (r"info\.bus",                             "info.subsystem"),
-        (r"([^\.]+)\.physical_device",             "\1.originating_device"),
-        (r"power_management\.can_suspend_to_ram",  "power_management.can_suspend"),
-        (r"power_management\.can_suspend_to_disk", "power_management.can_hibernate"),
-        (r"smbios\.system\.manufacturer",          "system.hardware.vendor"),
-        (r"smbios\.system\.product",               "system.hardware.product"),
-        (r"smbios\.system\.version",               "system.hardware.version"),
-        (r"smbios\.system\.serial",                "system.hardware.serial"),
-        (r"smbios\.system\.uuid",                  "system.hardware.uuid"),
-        (r"smbios\.bios\.vendor",                  "system.firmware.vendor"),
-        (r"smbios\.bios\.version",                 "system.firmware.version"),
-        (r"smbios\.bios\.release_date",            "system.firmware.release_date"),
-        (r"smbios\.chassis\.manufacturer",         "system.chassis.manufacturer"),
-        (r"smbios\.chassis\.type",                 "system.chassis.type"),
-        (r"system\.vendor",                        "system.hardware.vendor"),
-        (r"usb_device\.speed_bcd",                 "usb_device.speed"),
-        (r"usb_device\.version_bcd",               "usb_device.version"))
-
-    _conversion_types = {
-        dbus.Boolean: bool,
-        dbus.Int16: int,
-        dbus.UInt16: int,
-        dbus.Int32: int,
-        dbus.UInt32: int,
-        dbus.Int64: int,
-        dbus.UInt64: int,
-        dbus.Double: float,
-        dbus.Array: list,
-        dbus.Dictionary: dict,
-        dbus.String: str,
-        dbus.UTF8String: str}
-
-    def __init__(self, *args, **kwargs):
-        super(HalResource, self).__init__(*args, **kwargs)
-        self._deprecated_patterns = ((re.compile("^%s$" % a), b)
-            for (a, b) in self._deprecated_expressions)
-
-    def _get_key(self, key):
-        key = str(key)
-        for (old, new) in self._deprecated_patterns:
-            key = old.sub(new, key)
-
-        return key
-
-    def _get_value(self, value):
-        return self._conversion_types[type(value)](value)
-
-    def _ignore_device(self, device):
-        # Ignore devices without bus information
-        if not device.bus:
-            return True
-
-        # Ignore devices without product information
-        if not device.product and device.product_id is None:
-            return True
-
-        # Ignore invalid subsystem information
-        if (device.subproduct_id is None and device.subvendor_id is not None) \
-           or (device.subproduct_id is not None
-               and device.subvendor_id is None):
-            return True
-
-        # Ignore virtual devices except for dmi information
-        if device.bus != "dmi" \
-           and "virtual" in device.path.split(posixpath.sep):
-            return True
-
-        return False
-
-    @property
-    def devices(self):
-        devices = []
-        bus = dbus.SystemBus()
-        manager_obj = bus.get_object("org.freedesktop.Hal",
-                                     "/org/freedesktop/Hal/Manager")
-        manager = dbus.Interface(manager_obj, "org.freedesktop.Hal.Manager")
-        for udi in manager.GetAllDevices():
-            name = udi.split(posixpath.sep)[-1]
-            object = bus.get_object("org.freedesktop.Hal", udi)
-            interface = dbus.Interface(object, "org.freedesktop.Hal.Device")
-
-            properties = {}
-            for key, value in interface.GetAllProperties().items():
-                key = self._get_key(key)
-                value = self._get_value(value)
-                properties[key] = value
-
-            if name == "computer":
-                properties["linux.subsystem"] = "dmi"
-                properties["linux.sysfs_path"] = "/sys/devices/virtual/dmi/id"
-
-                device = DeviceResource(properties)
-                devices.append(device)
-                for category in "BIOS", "BOARD", "CHASSIS":
-                    device = DmiDeviceResource(properties, category)
-                    devices.append(device)
-            else:
-                device = DeviceResource(properties)
-                devices.append(device)
-
-        return [d for d in devices if not self._ignore_device(d)]
-
-
-def main():
-    attributes = ("path", "bus", "category", "driver", "product_id",
-        "vendor_id", "subproduct_id", "subvendor_id", "product", "vendor",)
-
-    hal = HalResource()
-    for device in hal.devices:
-        for attribute in attributes:
-            value = getattr(device, attribute)
-            if value is not None:
-                print("%s: %s" % (attribute, value))
-
-        # Empty line
-        print()
-
-    return 0
-
-
-if __name__ == "__main__":
-    sys.exit(main())

=== removed file 'scripts/key_test'
--- scripts/key_test	2012-09-22 22:10:56 +0000
+++ scripts/key_test	1970-01-01 00:00:00 +0000
@@ -1,409 +0,0 @@
-#!/usr/bin/env python3
-#
-# This file is part of Checkbox.
-#
-# Copyright 2012 Canonical Ltd.
-#
-# Checkbox is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Checkbox is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Checkbox.  If not, see <http://www.gnu.org/licenses/>.
-
-
-import os
-import sys
-
-import fcntl
-import gettext
-import struct
-import termios
-
-from gettext import gettext as _
-from gi.repository import GObject
-from optparse import OptionParser
-
-
-EXIT_WITH_FAILURE = 1
-EXIT_WITH_SUCCESS = 0
-EXIT_TIMEOUT = 30
-
-# Keyboard options from /usr/include/linux/kd.h
-K_RAW = 0x00
-K_XLATE = 0x01
-K_MEDIUMRAW = 0x02
-K_UNICODE = 0x03
-K_OFF = 0x04
-KDGKBMODE = 0x4B44
-KDSKBMODE = 0x4B45
-
-
-def ioctl_p_int(fd, request, value=0):
-    s = struct.pack("i", value)
-    s2 = fcntl.ioctl(fd, request, s)
-    (ret,) = struct.unpack("i", s2)  # This always returns a tuple.
-    return ret
-
-
-class Key:
-
-    def __init__(self, codes, name=None):
-        self.codes = codes
-        self.name = name
-        self.tested = False
-        self.required = True
-
-    @property
-    def status(self):
-        if not self.required:
-            return _("Not required")
-        if not self.tested:
-            return _("Untested")
-        return _("Tested")
-
-
-class Reporter(object):
-
-    exit_code = EXIT_WITH_FAILURE
-
-    def __init__(self, main_loop, keys, scancodes=False):
-        self.main_loop = main_loop
-        self.keys = keys
-        self.scancodes = scancodes
-
-        self.fileno = os.open("/dev/console", os.O_RDONLY)
-        GObject.io_add_watch(self.fileno, GObject.IO_IN, self.on_key)
-
-        # Set terminal attributes
-        self.saved_attributes = termios.tcgetattr(self.fileno)
-        attributes = termios.tcgetattr(self.fileno)
-        attributes[3] &= ~(termios.ICANON | termios.ECHO)
-        attributes[6][termios.VMIN] = 1
-        attributes[6][termios.VTIME] = 0
-        termios.tcsetattr(self.fileno, termios.TCSANOW, attributes)
-
-        # Set keyboard mode
-        self.saved_mode = ioctl_p_int(self.fileno, KDGKBMODE)
-        mode = K_RAW if scancodes else K_MEDIUMRAW
-        fcntl.ioctl(self.fileno, KDSKBMODE, mode)
-
-    def _parse_codes(self, raw_bytes):
-        """Parse the given string of bytes to scancodes or keycodes."""
-        if self.scancodes:
-            return self._parse_scancodes(raw_bytes)
-        else:
-            return self._parse_keycodes(raw_bytes)
-
-    def _parse_scancodes(self, raw_bytes):
-        """Parse the bytes in raw_bytes into a scancode."""
-        index = 0
-        length = len(raw_bytes)
-        while index < length:
-            if (index + 1 < length and raw_bytes[index] == 0xE0):
-                code = ((raw_bytes[index] << 8) | raw_bytes[index + 1])
-                index += 2
-            else:
-                code = raw_bytes[0]
-                index += 1
-
-            yield code
-
-    def _parse_keycodes(self, raw_bytes):
-        """Parse the bytes in raw_bytes into a keycode."""
-        index = 0
-        length = len(raw_bytes)
-        while index < length:
-            if (index + 2 < length and (raw_bytes[index] & 0x7f) == 0
-                    and (raw_bytes[index + 1] & 0x80) != 0
-                    and (raw_bytes[index + 2] & 0x80) != 0):
-                code = (((raw_bytes[index + 1] & 0x7f) << 7) |
-                        (raw_bytes[2] & 0x7f))
-                index += 3
-            else:
-                code = (raw_bytes[0] & 0x7f)
-                index += 1
-
-            yield code
-
-    @property
-    def required_keys_tested(self):
-        """Returns True if all keys marked as required have been tested"""
-        return all([key.tested for key in self.keys if key.required])
-
-    def show_text(self, string):
-        pass
-
-    def quit(self, exit_code=EXIT_WITH_FAILURE):
-        self.exit_code = exit_code
-
-        termios.tcsetattr(self.fileno, termios.TCSANOW, self.saved_attributes)
-        fcntl.ioctl(self.fileno, KDSKBMODE, self.saved_mode)
-
-        # FIXME: Having a reference to the mainloop is suboptimal.
-        self.main_loop.quit()
-
-    def found_key(self, key):
-        key.tested = True
-
-    def toggle_key(self, key):
-        key.required = not key.required
-        key.tested = False
-
-    def on_key(self, source, cb_condition):
-        raw_bytes = os.read(source, 18)
-        for code in self._parse_codes(raw_bytes):
-            if code == 1:
-                # Check for ESC key pressed
-                self.show_text(_("Test cancelled"))
-                self.quit()
-            elif code > 1 and code < 10:
-                # Check for number to skip
-                self.toggle_key(self.keys[code - 2])
-            else:
-                # Check for other key pressed
-                for key in self.keys:
-                    if code in key.codes:
-                        self.found_key(key)
-                        break
-
-        return True
-
-
-class CLIReporter(Reporter):
-
-    def __init__(self, *args, **kwargs):
-        super(CLIReporter, self).__init__(*args, **kwargs)
-
-        self.show_text(_("Please press each key on your keyboard."))
-        self.show_text(_("I will exit automatically once all keys "
-                         "have been pressed."))
-        self.show_text(_("If your keyboard lacks one or more keys, "
-                         "press its number to skip testing that key."))
-        self.show_text(_("You can also close me by pressing ESC or Ctrl+C."))
-
-        self.show_keys()
-
-    def show_text(self, string):
-        sys.stdout.write(string + "\n")
-        sys.stdout.flush()
-
-    def show_keys(self):
-        self.show_text("---")
-        for index, key in enumerate(self.keys):
-            self.show_text(
-                "%(number)d - %(key)s - %(status)s" %
-                {"number": index + 1, "key": key.name, "status": key.status})
-
-    def found_key(self, key):
-        super(CLIReporter, self).found_key(key)
-        self.show_text(
-            _("%(key_name)s key has been pressed" % {'key_name': key.name}))
-
-        self.show_keys()
-        if self.required_keys_tested:
-            self.show_text(_("All required keys have been tested!"))
-            self.quit(EXIT_WITH_SUCCESS)
-
-    def toggle_key(self, key):
-        super(CLIReporter, self).toggle_key(key)
-        self.show_keys()
-
-
-class GtkReporter(Reporter):
-
-    def __init__(self, *args, **kwargs):
-        super(GtkReporter, self).__init__(*args, **kwargs)
-
-        from gi.repository import Gdk, Gtk
-
-        # Initialize GTK constants
-        self.ICON_SIZE = Gtk.IconSize.BUTTON
-        self.ICON_TESTED = Gtk.STOCK_YES
-        self.ICON_UNTESTED = Gtk.STOCK_INDEX
-        self.ICON_NOT_REQUIRED = Gtk.STOCK_REMOVE
-
-        self.button_factory = Gtk.Button
-        self.hbox_factory = Gtk.HBox
-        self.image_factory = Gtk.Image
-        self.label_factory = Gtk.Label
-        self.vbox_factory = Gtk.VBox
-
-        # Create GTK window.
-        window = Gtk.Window()
-        window.set_type_hint(Gdk.WindowType.TOPLEVEL)
-        window.set_size_request(100, 100)
-        window.set_resizable(False)
-        window.set_title(_("Key test"))
-        window.connect("delete_event", lambda w, e: self.quit())
-        window.connect(
-            "key-release-event",
-            lambda w, k: k.keyval == Gdk.KEY_Escape and self.quit())
-        window.show()
-
-        # Add common widgets to the window.
-        vbox = self._add_vbox(window)
-        self.label = self._add_label(vbox)
-        button_hbox = self._add_hbox(vbox)
-        validation_hbox = self._add_hbox(vbox)
-        skip_hbox = self._add_hbox(vbox)
-        exit_button = self._add_button(vbox, _("_Exit"), True)
-        exit_button.connect("clicked", lambda w: self.quit())
-
-        # Add widgets for each key.
-        self.icons = {}
-        for key in self.keys:
-            stock = getattr(Gtk, "STOCK_MEDIA_%s" % key.name.upper(), None)
-            if stock:
-                self._add_image(button_hbox, stock)
-            else:
-                self._add_label(button_hbox, key.name)
-            self.icons[key] = self._add_image(validation_hbox, Gtk.STOCK_INDEX)
-            button = self._add_button(skip_hbox, _("Skip"))
-            button.connect("clicked", self.on_skip, key)
-
-        self.show_text(_("Please press each key on your keyboard."))
-        self.show_text(_("If a key is not present in your keyboard, "
-                         "press the 'Skip' button below it to remove it "
-                         "from the test."))
-
-    def _add_button(self, context, label, use_underline=False):
-        button = self.button_factory(label=label, use_underline=use_underline)
-        context.add(button)
-        button.show()
-        return button
-
-    def _add_hbox(self, context, spacing=4):
-        hbox = self.hbox_factory()
-        context.add(hbox)
-        hbox.set_spacing(4)
-        hbox.show()
-        return hbox
-
-    def _add_image(self, context, stock):
-        image = self.image_factory(stock=stock, icon_size=self.ICON_SIZE)
-        context.add(image)
-        image.show()
-        return image
-
-    def _add_label(self, context, text=None):
-        label = self.label_factory()
-        context.add(label)
-        label.set_size_request(0, 0)
-        label.set_line_wrap(True)
-        if text:
-            label.set_text(text)
-        label.show()
-        return label
-
-    def _add_vbox(self, context):
-        vbox = self.vbox_factory()
-        vbox.set_homogeneous(False)
-        vbox.set_spacing(8)
-        context.add(vbox)
-        vbox.show()
-        return vbox
-
-    def show_text(self, string):
-        self.label.set_text(self.label.get_text() + "\n" + string)
-
-    def check_keys(self):
-        if self.required_keys_tested:
-            self.show_text(_("All required keys have been tested!"))
-            self.quit(EXIT_WITH_SUCCESS)
-
-    def found_key(self, key):
-        super(GtkReporter, self).found_key(key)
-        self.icons[key].set_from_stock(self.ICON_TESTED, size=self.ICON_SIZE)
-
-        self.check_keys()
-
-    def on_skip(self, sender, key):
-        self.toggle_key(key)
-        if key.required:
-            stock_icon = self.ICON_UNTESTED
-        else:
-            stock_icon = self.ICON_NOT_REQUIRED
-        self.icons[key].set_from_stock(stock_icon, self.ICON_SIZE)
-
-        self.check_keys()
-
-
-def main(args):
-    gettext.textdomain("checkbox")
-
-    usage = """\
-Usage: %prog [OPTIONS] CODE...
-
-Syntax for codes:
-
-  57435               - Decimal code without name
-  0160133:Super       - Octal code with name
-  0xe05b,0xe0db:Super - Multiple hex codes with name
-
-Hint to find codes:
-
-  The showkey command can show keycodes and scancodes.
-"""
-    parser = OptionParser(usage=usage)
-    parser.add_option("-i", "--interface",
-                      default="auto",
-                      help="Interface to use: cli, gtk or auto")
-    parser.add_option("-s", "--scancodes",
-                      default=False,
-                      action="store_true",
-                      help="Test for scancodes instead of keycodes.")
-    (options, args) = parser.parse_args(args)
-
-    # Get reporter factory from options or environment.
-    if options.interface == "auto":
-        if "DISPLAY" in os.environ:
-            reporter_factory = GtkReporter
-        else:
-            reporter_factory = CLIReporter
-    elif options.interface == "cli":
-        reporter_factory = CLIReporter
-    elif options.interface == "gtk":
-        reporter_factory = GtkReporter
-    else:
-        parser.error("Unsupported interface: %s" % options.interface)
-
-    if not args:
-        parser.error("Must specify codes to test.")
-
-    # Get keys from command line arguments.
-    keys = []
-    for codes_name in args:
-        if ":" in codes_name:
-            codes, name = codes_name.split(":", 1)
-        else:
-            codes, name = codes_name, codes_name
-
-        # Guess the proper base from the string.
-        codes = [int(code, 0) for code in codes.split(",")]
-        key = Key(codes, name)
-        keys.append(key)
-
-    main_loop = GObject.MainLoop()
-    try:
-        reporter = reporter_factory(main_loop, keys, options.scancodes)
-    except:
-        parser.error("Failed to initialize interface: %s" % options.interface)
-    GObject.timeout_add_seconds(EXIT_TIMEOUT, reporter.quit)
-
-    try:
-        main_loop.run()
-    except KeyboardInterrupt:
-        reporter.show_text(_("Test interrupted"))
-        reporter.quit()
-
-    return reporter.exit_code
-
-if __name__ == "__main__":
-    sys.exit(main(sys.argv[1:]))

=== removed file 'scripts/keyboard_test'
--- scripts/keyboard_test	2012-06-06 14:38:53 +0000
+++ scripts/keyboard_test	1970-01-01 00:00:00 +0000
@@ -1,86 +0,0 @@
-#!/usr/bin/env python3
-
-import os
-import sys
-from gettext import gettext as _
-import gettext
-
-
-def cli_prompt():
-    import termios
-
-    limit = 50
-    separator = ord("\n")
-    fileno = sys.stdin.fileno()
-    saved_attributes = termios.tcgetattr(fileno)
-    attributes = termios.tcgetattr(fileno)
-    attributes[3] = attributes[3] & ~(termios.ICANON)
-    attributes[6][termios.VMIN] = 1
-    attributes[6][termios.VTIME] = 0
-    termios.tcsetattr(fileno, termios.TCSANOW, attributes)
-
-    sys.stdout.write(_("Enter text:\n"))
-
-    input = ""
-    try:
-        while len(input) < limit:
-            ch = str(sys.stdin.read(1))
-            if ord(ch) == separator:
-                break
-            input += ch
-    finally:
-        termios.tcsetattr(fileno, termios.TCSANOW, saved_attributes)
-
-
-def gtk_prompt():
-    from gi.repository import Gtk, Gdk
-
-    # create a new window
-    window = Gtk.Window()
-    window.set_type_hint(Gdk.WindowType.TOPLEVEL)
-    window.set_size_request(200, 100)
-    window.set_resizable(False)
-    window.set_title(_("Type Text"))
-    window.connect("delete_event", lambda w, e: Gtk.main_quit())
-
-    vbox = Gtk.VBox()
-    vbox.set_homogeneous(False)
-    vbox.set_spacing(0)
-    window.add(vbox)
-    vbox.show()
-
-    entry = Gtk.Entry()
-    entry.set_max_length(50)
-    vbox.pack_start(entry, True, True, 0)
-    entry.show()
-
-    hbox = Gtk.HBox()
-    hbox.set_homogeneous(False)
-    hbox.set_spacing(0)
-    vbox.add(hbox)
-    hbox.show()
-
-    button = Gtk.Button(stock=Gtk.STOCK_CLOSE)
-    button.connect("clicked", lambda w: Gtk.main_quit())
-    vbox.pack_start(button, False, False, 0)
-    button.set_can_default(True)
-    button.grab_default()
-    button.show()
-    window.show()
-
-    Gtk.main()
-
-
-def main(args):
-
-    gettext.textdomain("checkbox")
-
-    if "DISPLAY" in os.environ:
-        gtk_prompt()
-    else:
-        cli_prompt()
-
-    return 0
-
-if __name__ == "__main__":
-    sys.exit(main(sys.argv[1:]))

=== removed file 'scripts/lamp_test'
--- scripts/lamp_test	2011-06-28 10:11:51 +0000
+++ scripts/lamp_test	1970-01-01 00:00:00 +0000
@@ -1,31 +0,0 @@
-#!/bin/bash
-#
-#  Test LAMP by checking Apache, MySQL, and PHP
-#  Requires: apache2, php5-mysql, libapache2-mod-php5, mysql-server
-#
-
-# Check Apache is running; requires network connection so verify that
-check=`ping -c 2 www.ubuntu.com |grep "2 received"`
-if [ -n "$check" ]; then
-  run1=`w3m http://127.0.0.1/ | grep "404"`
-  if [ -n "$run1" ]; then
-    echo "FAIL: apache is not running."
-    exit 1
-  fi
-fi
-
-# Check if MySQL server is running
-run2=`netstat -tap | grep mysql`
-if [ -z "$run2" ]; then
-  echo "FAIL: mysql is not running."
-  exit 1
-fi
-
-# Check PHP
-run3=`php -r 'phpinfo();' | grep 'PHP License'`
-if [ -z "$run3" ]; then
-  echo "FAIL: php is not running."
-  exit 1
-fi
-
-exit 0

=== removed file 'scripts/led_hdd_test'
--- scripts/led_hdd_test	2012-08-16 10:59:05 +0000
+++ scripts/led_hdd_test	1970-01-01 00:00:00 +0000
@@ -1,20 +0,0 @@
-#!/bin/bash
-
-TIMEOUT=3
-TEMPFILE=`mktemp`
-
-trap "rm $TEMPFILE" EXIT
-
-for i in $(seq $TIMEOUT); do
-    #launch background writer
-    dd if=/dev/urandom of=$TEMPFILE bs=1024 oflag=direct &
-    WRITE_PID=$!
-    echo "Writing..."
-    sleep 1
-    kill $WRITE_PID
-    sync
-    echo "Reading..."
-    dd if=$TEMPFILE of=/dev/null bs=1024 iflag=direct
-done
-
-echo "OK, now exiting"

=== removed file 'scripts/max_diskspace_used'
--- scripts/max_diskspace_used	2012-05-22 18:01:21 +0000
+++ scripts/max_diskspace_used	1970-01-01 00:00:00 +0000
@@ -1,34 +0,0 @@
-#!/bin/bash
-
-# Verify default partitioning has used the entire local hard disk.
-# Please remove any non-local attached storage prior to running this
-# test.
-
-for disk in $@; do
-  echo "Checking maximum disk space available on : $disk"
-
-  psize=`parted -l | grep $disk | awk '{print $3}'`
-
-  if [ -n "$psize" ]
-  then
-    echo "Disk space available : $psize"
-
-    fsizes=`df -B ${psize:(-2)} | grep $disk | awk '{print $2}'`
-
-    if [ -n "$fsizes" ]
-    then
-      echo "Disk space used : $fsizes"
-
-      fsize=0
-      for i in $fsizes; do
-          i=`echo $i | grep -oe '[0-9\.]*'`
-          fsize=$(($fsize + $i))
-      done
-
-      psize=`echo $psize | grep -oe '[0-9\.]*'`
-      pct_difference=`awk "BEGIN{print(($psize - $fsize) / $fsize)}"`
-      echo "Difference ( > 0.15 fails ) : $pct_difference"
-      awk "BEGIN{exit($pct_difference > 0.15)}" || exit 1
-    fi
-  fi
-done

=== removed file 'scripts/memory_info'
--- scripts/memory_info	2012-06-05 18:21:01 +0000
+++ scripts/memory_info	1970-01-01 00:00:00 +0000
@@ -1,35 +0,0 @@
-#!/usr/bin/env python3
-
-import re
-import sys
-
-
-def get_meminfo():
-    meminfo = {}
-    for line in open("/proc/meminfo").readlines():
-        match = re.match(r"(.*):\s+(.*)", line)
-        if match:
-            key = match.group(1)
-            value = match.group(2)
-            meminfo[key] = value
-
-    return meminfo
-
-
-def main(args):
-    meminfo = get_meminfo()
-    amount, units = meminfo["MemTotal"].split()
-
-    amount = float(amount)
-    next_units = {'kB': 'MB',
-                  'MB': 'GB'}
-
-    while amount > 1024:
-        amount = amount / 1024
-        units = next_units[units]
-
-    print("%.1f %s" % (amount, units))
-    return 0
-
-if __name__ == "__main__":
-    sys.exit(main(sys.argv[1:]))

=== removed file 'scripts/mm-test'
--- scripts/mm-test	2013-04-12 11:02:38 +0000
+++ scripts/mm-test	1970-01-01 00:00:00 +0000
@@ -1,527 +0,0 @@
-#!/usr/bin/python3
-# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details:
-#
-# Copyright (C) 2008 Novell, Inc.
-# Copyright (C) 2009 Red Hat, Inc.
-#
-
-import sys, dbus, time, os, string, subprocess, socket
-
-DBUS_INTERFACE_PROPERTIES='org.freedesktop.DBus.Properties'
-MM_DBUS_SERVICE='org.freedesktop.ModemManager'
-MM_DBUS_PATH='/org/freedesktop/ModemManager'
-MM_DBUS_INTERFACE='org.freedesktop.ModemManager'
-MM_DBUS_INTERFACE_MODEM='org.freedesktop.ModemManager.Modem'
-MM_DBUS_INTERFACE_MODEM_CDMA='org.freedesktop.ModemManager.Modem.Cdma'
-MM_DBUS_INTERFACE_MODEM_GSM_CARD='org.freedesktop.ModemManager.Modem.Gsm.Card'
-MM_DBUS_INTERFACE_MODEM_GSM_NETWORK='org.freedesktop.ModemManager.Modem.Gsm.Network'
-MM_DBUS_INTERFACE_MODEM_SIMPLE='org.freedesktop.ModemManager.Modem.Simple'
-
-def get_cdma_band_class(band_class):
-    if band_class == 1:
-        return "800MHz"
-    elif band_class == 2:
-        return "1900MHz"
-    else:
-        return "Unknown"
-
-def get_reg_state(state):
-    if state == 1:
-        return "registered (roaming unknown)"
-    elif state == 2:
-        return "registered on home network"
-    elif state == 3:
-        return "registered on roaming network"
-    else:
-        return "unknown"
-
-def cdma_inspect(proxy, dump_private):
-    cdma = dbus.Interface(proxy, dbus_interface=MM_DBUS_INTERFACE_MODEM_CDMA)
-
-    esn = "<private>"
-    if dump_private:
-        try:
-            esn = cdma.GetEsn()
-        except dbus.exceptions.DBusException:
-            esn = "<unavailable>"
-
-    print("")
-    print("ESN: %s" % esn)
-
-    try:
-        (cdma_1x_state, evdo_state) = cdma.GetRegistrationState()
-        print("1x State:   %s" % get_reg_state (cdma_1x_state))
-        print("EVDO State: %s" % get_reg_state (evdo_state))
-    except dbus.exceptions.DBusException as e:
-        print("Error reading registration state: %s" % e)
-
-    try:
-        quality = cdma.GetSignalQuality()
-        print("Signal quality: %d" % quality)
-    except dbus.exceptions.DBusException as e:
-        print("Error reading signal quality: %s" % e)
-
-    try:
-        info = cdma.GetServingSystem()
-        print("Class: %s" % get_cdma_band_class(info[0]))
-        print("Band:  %s" % info[1])
-        print("SID:   %d" % info[2])
-    except dbus.exceptions.DBusException as e:
-        print("Error reading serving system: %s" % e)
-
-def cdma_connect(proxy, user, password):
-    # Modem.Simple interface
-    simple = dbus.Interface(proxy, dbus_interface=MM_DBUS_INTERFACE_MODEM_SIMPLE)
-    try:
-        simple.Connect({'number':"#777"}, timeout=92)
-        print("\nConnected!")
-        return True
-    except Exception as e:
-        print("Error connecting: %s" % e)
-    return False
-
-
-def get_gsm_network_mode(modem):
-    mode = modem.GetNetworkMode()
-    if mode == 0x0:
-        mode = "Unknown"
-    elif mode == 0x1:
-        mode = "Any"
-    elif mode == 0x2:
-        mode = "GPRS"
-    elif mode == 0x4:
-        mode = "EDGE"
-    elif mode == 0x8:
-        mode = "UMTS"
-    elif mode == 0x10:
-        mode = "HSDPA"
-    elif mode == 0x20:
-        mode = "2G Preferred"
-    elif mode == 0x40:
-        mode = "3G Preferred"
-    elif mode == 0x80:
-        mode = "2G Only"
-    elif mode == 0x100:
-        mode = "3G Only"
-    elif mode == 0x200:
-        mode = "HSUPA"
-    elif mode == 0x400:
-        mode = "HSPA"
-    else:
-        mode = "(Unknown)"
-
-    print("Mode: %s" % mode)
-
-def get_gsm_band(modem):
-    band = modem.GetBand()
-    if band == 0x0:
-        band = "Unknown"
-    elif band == 0x1:
-        band = "Any"
-    elif band == 0x2:
-        band = "EGSM (900 MHz)"
-    elif band == 0x4:
-        band = "DCS (1800 MHz)"
-    elif band == 0x8:
-        band = "PCS (1900 MHz)"
-    elif band == 0x10:
-        band = "G850 (850 MHz)"
-    elif band == 0x20:
-        band = "U2100 (WCSMA 2100 MHZ, Class I)"
-    elif band == 0x40:
-        band = "U1700 (WCDMA 3GPP UMTS1800 MHz, Class III)"
-    elif band == 0x80:
-        band = "17IV (WCDMA 3GPP AWS 1700/2100 MHz, Class IV)"
-    elif band == 0x100:
-        band = "U800 (WCDMA 3GPP UMTS800 MHz, Class VI)"
-    elif band == 0x200:
-        band = "U850 (WCDMA 3GPP UMT850 MHz, Class V)"
-    elif band == 0x400:
-        band = "U900 (WCDMA 3GPP UMTS900 MHz, Class VIII)"
-    elif band == 0x800:
-        band = "U17IX (WCDMA 3GPP UMTS MHz, Class IX)"
-    else:
-        band = "(invalid)"
-
-    print("Band: %s" % band)
-
-
-def gsm_inspect(proxy, dump_private, do_scan):
-    # Gsm.Card interface
-    card = dbus.Interface(proxy, dbus_interface=MM_DBUS_INTERFACE_MODEM_GSM_CARD)
-
-    imei = "<private>"
-    imsi = "<private>"
-    if dump_private:
-        try:
-            imei = card.GetImei()
-        except dbus.exceptions.DBusException:
-            imei = "<unavailable>"
-        try:
-            imsi = card.GetImsi()
-        except dbus.exceptions.DBusException:
-            imsi = "<unavailable>"
-
-    print("IMEI: %s" % imei)
-    print("IMSI: %s" % imsi)
-
-    # Gsm.Network interface
-    net = dbus.Interface(proxy, dbus_interface=MM_DBUS_INTERFACE_MODEM_GSM_NETWORK)
-    try:
-        quality = net.GetSignalQuality()
-        print("Signal quality: %d" % quality)
-    except dbus.exceptions.DBusException as e:
-        print("Error reading signal quality: %s" % e)
-
-    if not do_scan:
-        return
-
-    print("Scanning...")
-    try:
-        results = net.Scan(timeout=120)
-    except dbus.exceptions.DBusException as e:
-        print("Error scanning: %s" % e)
-        results = {}
-
-    for r in results:
-        status = r['status']
-        if status == "1":
-            status = "available"
-        elif status == "2":
-            status = "current"
-        elif status == "3":
-            status = "forbidden"
-        else:
-            status = "(Unknown)"
-
-        access_tech = ""
-        try:
-            access_tech_num = r['access-tech']
-            if access_tech_num == "0":
-                access_tech = "(GSM)"
-            elif access_tech_num == "1":
-                access_tech = "(Compact GSM)"
-            elif access_tech_num == "2":
-                access_tech = "(UMTS)"
-            elif access_tech_num == "3":
-                access_tech = "(EDGE)"
-            elif access_tech_num == "4":
-                access_tech = "(HSDPA)"
-            elif access_tech_num == "5":
-                access_tech = "(HSUPA)"
-            elif access_tech_num == "6":
-                access_tech = "(HSPA)"
-        except KeyError:
-            pass
-
-        if 'operator-long' in r and len(r['operator-long']):
-            print("%s: %s %s" % (r['operator-long'], status, access_tech))
-        elif 'operator-short' in r and len(r['operator-short']):
-            print("%s: %s %s" % (r['operator-short'], status, access_tech))
-        else:
-            print("%s: %s %s" % (r['operator-num'], status, access_tech))
-
-def gsm_connect(proxy, apn, user, password):
-    # Modem.Simple interface
-    simple = dbus.Interface(proxy, dbus_interface=MM_DBUS_INTERFACE_MODEM_SIMPLE)
-    try:
-        opts = {'number':"*99#"}
-        if apn is not None:
-            opts['apn'] = apn
-        if user is not None:
-            opts['username'] = user
-        if password is not None:
-            opts['password'] = password
-        simple.Connect(opts, timeout=120)
-        print("\nConnected!")
-        return True
-    except Exception as e:
-        print("Error connecting: %s" % e)
-    return False
-
-def pppd_find():
-    paths = ["/usr/local/sbin/pppd", "/usr/sbin/pppd", "/sbin/pppd"]
-    for p in paths:
-        if os.path.exists(p):
-            return p
-    return None
-
-def ppp_start(device, user, password, tmpfile):
-    path = pppd_find()
-    if not path:
-        return None
-
-    args = [path]
-    args += ["nodetach"]
-    args += ["lock"]
-    args += ["nodefaultroute"]
-    args += ["debug"]
-    if user:
-        args += ["user"]
-        args += [user]
-    args += ["noipdefault"]
-    args += ["115200"]
-    args += ["noauth"]
-    args += ["crtscts"]
-    args += ["modem"]
-    args += ["usepeerdns"]
-    args += ["ipparam"]
-
-    ipparam = ""
-    if user:
-        ipparam += user
-    ipparam += "+"
-    if password:
-        ipparam += password
-    ipparam += "+"
-    ipparam += tmpfile
-    args += [ipparam]
-
-    args += ["plugin"]
-    args += ["mm-test-pppd-plugin.so"]
-
-    args += [device]
-
-    return subprocess.Popen(args, close_fds=True, cwd="/", env={})
-
-def ppp_wait(p, tmpfile):
-    i = 0
-    while p.poll() == None and i < 30:
-        time.sleep(1)
-        if os.path.exists(tmpfile):
-            f = open(tmpfile, 'r')
-            stuff = f.read(500)
-            idx = string.find(stuff, "DONE")
-            f.close()
-            if idx >= 0:
-                return True
-        i += 1
-    return False
-
-def ppp_stop(p):
-    import signal
-    p.send_signal(signal.SIGTERM)
-    p.wait()
-
-def ntop_helper(ip):
-    ip = socket.ntohl(ip)
-    n1 = ip >> 24 & 0xFF
-    n2 = ip >> 16 & 0xFF
-    n3 = ip >> 8 & 0xFF
-    n4 = ip & 0xFF
-    a = "%c%c%c%c" % (n1, n2, n3, n4)
-    return socket.inet_ntop(socket.AF_INET, a)
-
-def static_start(iface, modem):
-    (addr_num, dns1_num, dns2_num, dns3_num) = modem.GetIP4Config()
-    addr = ntop_helper(addr_num)
-    dns1 = ntop_helper(dns1_num)
-    dns2 = ntop_helper(dns2_num)
-    configure_iface(iface, addr, 0, dns1, dns2)
-
-def down_iface(iface):
-    ip = ["ip", "addr", "flush", "dev", iface]
-    print(" ".join(ip))
-    subprocess.call(ip)
-    ip = ["ip", "link", "set", iface, "down"]
-    print(" ".join(ip))
-    subprocess.call(ip)
-
-def configure_iface(iface, addr, gw, dns1, dns2):
-    print("\n\n******************************")
-    print("iface: %s" % iface)
-    print("addr:  %s" % addr)
-    print("gw:    %s" % gw)
-    print("dns1:  %s" % dns1)
-    print("dns2:  %s" % dns2)
-
-    ifconfig = ["ifconfig", iface, "%s/32" % addr]
-    if gw != 0:
-        ifconfig += ["pointopoint", gw]
-    print(" ".join(ifconfig))
-    print("\n******************************\n")
-
-    subprocess.call(ifconfig)
-
-def file_configure_iface(tmpfile):
-    addr = None
-    gw = None
-    iface = None
-    dns1 = None
-    dns2 = None
-
-    f = open(tmpfile, 'r')
-    lines = f.readlines()
-    for l in lines:
-        if l.startswith("addr"):
-            addr = l[len("addr"):].strip()
-        if l.startswith("gateway"):
-            gw = l[len("gateway"):].strip()
-        if l.startswith("iface"):
-            iface = l[len("iface"):].strip()
-        if l.startswith("dns1"):
-            dns1 = l[len("dns1"):].strip()
-        if l.startswith("dns2"):
-            dns2 = l[len("dns2"):].strip()
-    f.close()
-
-    configure_iface(iface, addr, gw, dns1, dns2)
-    return iface
-
-def try_ping(iface):
-    cmd = ["ping", "-I", iface, "-c", "4", "-i", "3", "-w", "20", "4.2.2.1"]
-    print(" ".join(cmd))
-    retcode = subprocess.call(cmd)
-    if retcode != 0:
-        print("PING: failed")
-    else:
-        print("PING: success")
-
-
-dump_private = False
-connect = False
-apn = None
-user = None
-password = None
-do_ip = False
-do_scan = True
-x = 1
-while x < len(sys.argv):
-    if sys.argv[x] == "--private":
-        dump_private = True
-    elif sys.argv[x] == "--connect":
-        connect = True
-    elif (sys.argv[x] == "--user" or sys.argv[x] == "--username"):
-        x += 1
-        user = sys.argv[x]
-    elif sys.argv[x] == "--apn":
-        x += 1
-        apn = sys.argv[x]
-    elif sys.argv[x] == "--password":
-        x += 1
-        password = sys.argv[x]
-    elif sys.argv[x] == "--ip":
-        do_ip = True
-        if os.geteuid() != 0:
-            print("You probably want to be root to use --ip")
-            sys.exit(1)
-    elif sys.argv[x] == "--no-scan":
-        do_scan = False
-    x += 1
-
-bus = dbus.SystemBus()
-
-# Get available modems:
-manager_proxy = bus.get_object('org.freedesktop.ModemManager', '/org/freedesktop/ModemManager')
-manager_iface = dbus.Interface(manager_proxy, dbus_interface='org.freedesktop.ModemManager')
-modems = manager_iface.EnumerateDevices()
-
-if not modems:
-    print("No modems found")
-    sys.exit(1)
-
-for m in modems:
-    connect_success = False
-    data_device = None
-
-    proxy = bus.get_object(MM_DBUS_SERVICE, m)
-
-    # Properties
-    props_iface = dbus.Interface(proxy, dbus_interface='org.freedesktop.DBus.Properties')
-
-    type = props_iface.Get(MM_DBUS_INTERFACE_MODEM, 'Type')
-    if type == 1:
-        print("GSM modem")
-    elif type == 2:
-        print("CDMA modem")
-    else:
-        print("Invalid modem type: %d" % type)
-
-    print("Driver: '%s'" % (props_iface.Get(MM_DBUS_INTERFACE_MODEM, 'Driver')))
-    print("Modem device: '%s'" % (props_iface.Get(MM_DBUS_INTERFACE_MODEM, 'MasterDevice')))
-    data_device = props_iface.Get(MM_DBUS_INTERFACE_MODEM, 'Device')
-    print("Data device: '%s'" % data_device)
-
-    # Modem interface
-    modem = dbus.Interface(proxy, dbus_interface=MM_DBUS_INTERFACE_MODEM)
-
-    try:
-        modem.Enable(True)
-    except dbus.exceptions.DBusException as e:
-        print("Error enabling modem: %s" % e)
-        sys.exit(1)
-
-    info = modem.GetInfo()
-    print("Vendor:  %s" % info[0])
-    print("Model:   %s" % info[1])
-    print("Version: %s" % info[2])
-
-    if type == 1:
-        gsm_inspect(proxy, dump_private, do_scan)
-        if connect == True:
-            connect_success = gsm_connect(proxy, apn, user, password)
-    elif type == 2:
-        cdma_inspect(proxy, dump_private)
-        if connect == True:
-            connect_success = cdma_connect(proxy, user, password)
-    print()
-
-    if connect_success and do_ip:
-        tmpfile = "/tmp/mm-test-%d.tmp" % os.getpid()
-        success = False
-        try:
-            ip_method = props_iface.Get(MM_DBUS_INTERFACE_MODEM, 'IpMethod')
-            if ip_method == 0:
-                # ppp
-                p = ppp_start(data_device, user, password, tmpfile)
-                if ppp_wait(p, tmpfile):
-                    data_device = file_configure_iface(tmpfile)
-                    success = True
-            elif ip_method == 1:
-                # static
-                static_start(data_device, modem)
-                success = True
-            elif ip_method == 2:
-                # dhcp
-                pass
-        except Exception as e:
-            print("Error setting up IP: %s" % e)
-
-        if success:
-            try_ping(data_device)
-            print("Waiting for 30s...")
-            time.sleep(30)
-
-        print("Disconnecting...")
-        try:
-            if ip_method == 0:
-                ppp_stop(p)
-                try:
-                    os.remove(tmpfile)
-                except:
-                    pass
-            elif ip_method == 1:
-                # static
-                down_iface(data_device)
-            elif ip_method == 2:
-                # dhcp
-                down_iface(data_device)
-
-            modem.Disconnect()
-        except Exception as e:
-            print("Error tearing down IP: %s" % e)
-
-    time.sleep(5)
-
-    modem.Enable(False)
-

=== removed file 'scripts/network_bandwidth_test'
--- scripts/network_bandwidth_test	2012-07-11 18:40:51 +0000
+++ scripts/network_bandwidth_test	1970-01-01 00:00:00 +0000
@@ -1,671 +0,0 @@
-#!/usr/bin/env python3
-
-import os
-import re
-import sys
-import random
-import logging
-import subprocess
-
-from datetime import datetime, timedelta
-from time import sleep
-
-from logging import StreamHandler, FileHandler, Formatter
-from optparse import OptionParser
-
-from checkbox.lib.conversion import string_to_type
-
-
-class CommandException(Exception):
-
-    pass
-
-
-class CommandOutput(object):
-
-    def __init__(self, **attributes):
-        self._attributes = attributes
-
-    def __getattr__(self, name):
-        if name in self._attributes:
-            return self._attributes.get(name)
-
-        return None
-
-
-class Command(object):
-
-    # Name of the command to run
-    name = None
-
-    # Number of command line arguments
-    argument_count = 0
-
-    # Option processing
-    option_strings = {}
-    option_defaults = {}
-
-    # Ouput processing
-    output_factory = CommandOutput
-    output_patterns = {}
-
-    # Convenient output patterns
-    non_space = r"[^ ]+"
-
-    def __init__(self, *arguments, **options):
-        if len(arguments) != self.argument_count:
-            raise TypeError("Invalid number of arguments: %d" % len(arguments))
-
-        self._arguments = arguments
-
-        self._options = self.option_defaults.copy()
-        for name, string in options.items():
-            if name not in self.option_strings:
-                raise TypeError("Unknown option: %s" % name)
-            self._options[name] = string
-
-    def get_command(self):
-        command = [self.name]
-        for name, string in self._options.items():
-            # Match option from string
-            if isinstance(string, bool):
-                option = self.option_strings[name]
-            else:
-                option = self.option_strings[name] % string
-
-            command.append(option)
-
-        command.extend(self._arguments)
-
-        return " ".join(command)
-
-    def parse_lines(self, lines):
-        attributes = {}
-        for line in lines:
-            # Match patterns from lines
-            for name, pattern in self.output_patterns.items():
-                match = re.search(pattern, line)
-                if match:
-                    attributes[name] = string_to_type(match.group(1))
-
-        return self.output_factory(**attributes)
-
-    def parse_output(self, output):
-        lines = output.split("\n")
-        # Strip leading and trailing spaces
-        lines = [l.strip() for l in lines]
-        # Skip blank lines
-        lines = [l for l in lines if l]
-
-        return self.parse_lines(lines)
-
-    def run(self):
-        command = self.get_command()
-        logging.debug("Running command: %s" % command)
-        process = subprocess.Popen(command, shell=True,
-            stdout=subprocess.PIPE,
-            stderr=subprocess.PIPE)
-        error = process.stderr.read()
-        if error:
-            raise CommandException(error.decode("utf-8"))
-
-        output = process.stdout.read()
-        return self.parse_output(output.decode("utf-8"))
-
-
-class NetworkConfigOutput(CommandOutput):
-
-    @property
-    def speed(self):
-        if self.name == "lo":
-            return 10000
-
-        try:
-            wireless = WirelessConfig(self.name).run()
-            speed = wireless.bit_rate
-        except CommandException:
-            wired = WiredConfig(self.name).run()
-            speed = wired.speed
-
-        return speed / 1024 / 1024
-
-
-class NetworkConfig(Command):
-
-    name = "ifconfig"
-
-    argument_count = 1
-
-    ipv4 = r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"
-    ipv6 = r"[\w:]+/\d+"
-    mac_address = r"\w\w:\w\w:\w\w:\w\w:\w\w:\w\w"
-
-    output_factory = NetworkConfigOutput
-    output_patterns = {
-        "name": r"(%s).*Link encap" % Command.non_space,
-        "broadcast": r"Bcast:(%s)" % ipv4,
-        "collisions": "collisions:(\d+)",
-        "hwaddr": r"HWaddr (%s)" % mac_address,
-        "inet_addr": r"inet addr:(%s)" % ipv4,
-        "link_encap": r"Link encap:(%s)" % Command.non_space,
-        "netmask": r"Mask:(%s)" % ipv4,
-        "metric": r"Metric:(\d+)",
-        "mtu": r"MTU:(\d+)",
-        "rx_bytes": "RX bytes:(\d+)",
-        "rx_dropped": "RX packets:.* dropped:(\d+)",
-        "rx_errors": "RX packets:.* errors:(\d+)",
-        "rx_frame": "RX packets:.* frame:(\d+)",
-        "rx_overruns": "RX packets:.* overruns:(\d+)",
-        "rx_packets": "RX packets:(\d+)",
-        "tx_bytes": "TX bytes:(\d+)",
-        "tx_carrier": "TX packets:.* carrier:(\d+)",
-        "tx_dropped": "TX packets:.* dropped:(\d+)",
-        "tx_errors": "TX packets:.* errors:(\d+)",
-        "tx_overruns": "TX packets:.* overruns:(\d+)",
-        "tx_packets": "TX packets:(\d+)",
-        "txqueuelen": "txqueuelen:(\d+)"}
-
-
-class NetworkConfigs(Command):
-
-    name = "ifconfig -a"
-
-    def parse_output(self, output):
-        outputs = []
-        for paragraph in output.split("\n\n"):
-            if not paragraph:
-                continue
-
-            lines = paragraph.split("\n")
-            name = re.split(r"\s+", lines[0])[0]
-            config = NetworkConfig(name).parse_lines(lines)
-            outputs.append(config)
-
-        return outputs
-
-
-class WiredConfig(Command):
-
-    name = "ethtool"
-
-    argument_count = 1
-
-    output_patterns = {
-        "advertised_auto_negotiation": r"Advertised auto-negotiation:\s+(.*)",
-        "advertised_link_modes": r"Advertised link modes:\s+(.*)",
-        "auto_negotiation": r"Auto-negotiation:\s+(.*)",
-        "current_message_level": r"Current message level:\s+(.*)",
-        "duplex": r"Duplex:\s+(.*)",
-        "link_detected": r"Link detected:\s+(.*)",
-        "phyad": r"PHYAD:\s+(.*)",
-        "port": r"Port:\s+(.*)",
-        "speed": r"Speed:\s+(.*)/s",
-        "supported_auto_negotiation": r"Supports auto-negotiation:\s+(.*)",
-        "supported_link_modes": r"Supported link modes:\s+(.*)",
-        "supported_ports": r"Supported ports:\s+(.*)",
-        "supports_wake_on": r"Supports Wake-on:\s+(.*)",
-        "transceiver": r"Transceiver:\s+(.*)",
-        "wake_on": r"Wake-on:\s+(.*)"}
-
-    def parse_lines(self, lines):
-        new_lines = []
-        # Skip header line
-        for line in lines[1:]:
-            if not re.search(r": ", line):
-                new_lines[-1] += " " + line
-            else:
-                new_lines.append(line)
-
-        return super(WiredConfig, self).parse_lines(new_lines)
-
-
-class WirelessConfig(Command):
-
-    name = "iwconfig"
-
-    argument_count = 1
-
-    fraction = r"\d+(/\d+)?"
-    numeric = r"[\d\.]+"
-    numeric_with_unit = r"%s( %s)?" % (numeric, Command.non_space)
-
-    output_patterns = {
-        "access_point": r"Access Point: (.*)",
-        "bit_rate": r"Bit Rate[=:](%s)/s" % numeric_with_unit,
-        "channel": r"Channel=(%s)" % Command.non_space,
-        "essid": r"ESSID:\"?([^\"]+)\"?",
-        "fragment_thr": r"Fragment thr:(\w+)",
-        "frequency": r"Frequency:(%s)" % numeric_with_unit,
-        "invalid_misc": r"Invalid misc:(\d+)",
-        "link_quality": r"Link Quality[=:](%s)" % fraction,
-        "missed_beacon": r"Missed beacon:(\d+)",
-        "mode": r"Mode:(%s)" % Command.non_space,
-        "noise_level": r"Noise level[=:](%s)" % numeric_with_unit,
-        "power_management": r"Power Management:(.*)",
-        "retry_limit": r"Retry limit:(\w+)",
-        "rts_thr": r"RTS thr:(\w+)",
-        "rx_invalid_crypt": r"Rx invalid crypt:(\d+)",
-        "rx_invalid_frag": r"Rx invalid frag:(\d+)",
-        "rx_invalid_nwid": r"Rx invalid nwid:(\d+)",
-        "sensitivity": r"Sensitivity=(%s)" % fraction,
-        "signal_level": r"Signal level[=:](%s)" % numeric_with_unit,
-        "tx_excessive_retries": r"Tx excessive retries:(\d+)",
-        "tx_power": r"Tx-Power=(%s)" % numeric_with_unit}
-
-
-class Ping(Command):
-
-    name = "ping"
-
-    argument_count = 1
-
-    option_strings = {
-        "count": "-c %d",
-        "flood": "-f",
-        "interface": "-I %s",
-        "quiet": "-q",
-        "size": "-s %d",
-        "ttl": "-t %d"}
-
-    option_defaults = {
-        "count": 1,
-        "quiet": True}
-
-    ms = r"\d+\.\d+"
-    rtt = (ms, ms, ms, ms)
-
-    output_patterns = {
-        "packet_loss": r"(\d+)% packet loss,",
-        "packets_received": r"(\d+) received,",
-        "packets_transmitted": r"(\d+) packets transmitted,",
-        "rtt_avg": r"rtt min/avg/max/mdev = %s/(%s)/%s/%s ms" % rtt,
-        "rtt_max": r"rtt min/avg/max/mdev = %s/%s/(%s)/%s ms" % rtt,
-        "rtt_mdev": r"rtt min/avg/max/mdev = %s/%s/%s/(%s) ms" % rtt,
-        "rtt_min": r"rtt min/avg/max/mdev = (%s)/%s/%s/%s ms" % rtt,
-        "time": r"time (\d+)ms"}
-
-    def parse_lines(self, lines):
-        # Skip ping lines
-        return super(Ping, self).parse_lines(lines[-2:])
-
-
-class PingLarge(Ping):
-
-    # Some wired environments can handle the maximum ping packet
-    # size, (65507+28)=65535 bytes. With a count of 191 packets, 65535
-    # bytes/packet, 8 bits/byte, the sum payload is 100137480 bits ~
-    # 100Mb. This is preferred and will be tried first.
-    packet_size = 65507
-    packet_count = 191
-
-    option_defaults = {
-        "count": packet_count,
-        "flood": True,
-        "quiet": True,
-        "size": packet_size,
-        "ttl": 1}
-
-
-class PingSmall(PingLarge):
-
-    # If the large packet test was too lossy, we fall back to a packet
-    # equal to the default MTU size of 1500, (1472+28)=1500 bytes.
-    # With a count of 8334 packets, 1500 bytes/packet, 8 bits/byte, the
-    # sum payload is 100008000 bits ~ 100Mb.
-    packet_size = 1472
-    packet_count = 8334
-
-    option_defaults = PingLarge.option_defaults.copy()
-    option_defaults.update({
-        "count": packet_count,
-        "size": packet_size})
-
-
-class PingHost(Command):
-
-    output_patterns = {
-        "host": r"(?:Host|Nmap scan report for) (%s)" % NetworkConfig.ipv4,
-        "mac_address": r"MAC Address: (%s)" % NetworkConfig.mac_address}
-
-
-class PingScan(Command):
-
-    name = "nmap -n -sP"
-
-    argument_count = 1
-
-    def parse_lines(self, lines):
-        hosts = []
-        host_lines = []
-        # Skip header lines
-        for line in lines[1:]:
-            host_lines.append(line)
-            if line.startswith("MAC Address"):
-                host = PingHost().parse_lines(host_lines)
-                hosts.append(host)
-                host_lines = []
-
-        return hosts
-
-
-class Ip(object):
-
-    def __init__(self, address):
-        self.address = address
-        self.binary = self._address_to_binary(address)
-
-    def __str__(self):
-        return self.address
-
-    def _address_to_binary(self, address):
-        binary = 0
-        for position, part in enumerate(address.split(".")):
-            if position >= 4:
-                raise ValueError("Address contains more than four parts.")
-            try:
-                if not part:
-                    part = 0
-                else:
-                    part = int(part)
-                if not 0 <= part < 256:
-                    raise ValueError
-            except ValueError:
-                raise ValueError("Address part out of range.")
-            binary <<= 8
-            binary += part
-        return binary
-
-    def count_1_bits(self):
-        ret = 0
-        num = self.binary
-        while num > 0:
-            num = num >> 1
-            ret += 1
-        return ret
-
-    def count_0_bits(self):
-        num = int(self.binary)
-        if num < 0:
-            raise ValueError("Only positive Numbers please: %s" % (num))
-        ret = 0
-        while num > 0:
-            if num & 1 == 1:
-                break
-            num = num >> 1
-            ret += 1
-        return ret
-
-
-class IpRange(object):
-
-    def __init__(self, address, netmask):
-        self.address = Ip(address)
-        self.netmask = Ip(netmask)
-        self.prefix = self._netmask_to_prefix(self.netmask)
-
-    def __str__(self):
-        return "%s/%s" % (self.address, self.prefix)
-
-    def _check_netmask(self, masklen):
-        num = int(self.netmask.binary)
-        bits = masklen
-
-        # remove zero bits at the end
-        while (num & 1) == 0:
-            num = num >> 1
-            bits -= 1
-            if bits == 0:
-                break
-        # now check if the rest consists only of ones
-        while bits > 0:
-            if (num & 1) == 0:
-                raise ValueError("Netmask %s can't be expressed as an prefix."
-                                 % (hex(self.netmask.binary)))
-            num = num >> 1
-            bits -= 1
-
-    def _netmask_to_prefix(self, netmask):
-        netlen = netmask.count_0_bits()
-        masklen = netmask.count_1_bits()
-        self._check_netmask(masklen)
-        return masklen - netlen
-
-    def contains(self, address):
-        address = Ip(address)
-        if self.address.binary & self.netmask.binary \
-           == address.binary & self.netmask.binary:
-            return True
-
-        return False
-
-    def scan(self, max=None):
-        scan = PingScan(str(self)).run()
-        targets = [s.host for s in scan]
-        random.shuffle(targets)
-
-        if max is not None:
-            targets = targets[:max]
-
-        return targets
-
-
-class NetworkManagerException(Exception):
-
-    pass
-
-
-class NetworkManager(object):
-
-    NM_SERVICE = "org.freedesktop.NetworkManager"
-    NM_PATH = "/org/freedesktop/NetworkManager"
-    NM_INTERFACE = NM_SERVICE
-
-    NM_PATH_DEVICES = "/org/freedesktop/NetworkManager/Devices"
-    NM_INTERFACE_DEVICES = "org.freedesktop.NetworkManager.Devices"
-
-    NMI_SERVICE = "org.freedesktop.NetworkManagerInfo"
-    NMI_PATH = "/org/freedesktop/NetworkManagerInfo"
-    NMI_INTERFACE = NMI_SERVICE
-
-    HAL_SERVICE = "org.freedesktop.Hal"
-    HAL_PATH = "/org/freedesktop/Hal/Manager"
-    HAL_INTERFACE = "org.freedesktop.Hal.Manager"
-    HAL_INTERFACE_DEVICE = "org.freedesktop.Hal.Device"
-
-    #http://projects.gnome.org/NetworkManager/developers/
-    #NetworkManager D-Bus API Specifications, look for the
-    #NM_STATE enumeration to see which statuses indicate connection
-    #established and put them in this list. "3" works for NM 0.7
-    #and 0.8, while "60" and "70" work for NM 0.9.
-    STATES_CONNECTED = [3, 60, 70]
-
-    def __init__(self):
-        try:
-            import dbus
-        except ImportError:
-            raise NetworkManagerException("Python module not found: dbus")
-
-        try:
-            self._bus = dbus.SystemBus()
-            self.nm_object = self._bus.get_object(self.NM_SERVICE,
-                                                  self.NM_PATH)
-            self.nm_service = dbus.Interface(self.nm_object, self.NM_INTERFACE)
-        except dbus.exceptions.DBusException:
-            raise NetworkManagerException("Failed to connect to dbus service")
-
-    def is_connected(self):
-        state = self.nm_service.state()
-        return state in self.STATES_CONNECTED
-
-
-class Application(object):
-
-    def __init__(self, targets, interfaces, scan):
-        self.targets = targets
-        self.interfaces = interfaces
-        self.scan = scan
-
-    def test_interface(self, interface, targets):
-        logging.info("Testing %s at %s-Mbps", interface.name, interface.speed)
-        for target in targets:
-            ping = PingLarge(target, interface=interface.name)
-            result = ping.run()
-            if result.packet_loss:
-                ping = PingSmall(target, interface=interface.name)
-                result = ping.run()
-                if result.packet_loss:
-                    logging.warning("SKIP: Non-zero packet loss (%s%%) "
-                                  "for [%s] [%s]->[%s]",
-                                  result.packet_loss, interface.name,
-                                  interface.inet_addr, target)
-                    continue
-
-            mbps = (8 * (ping.packet_size + 28) * ping.packet_count
-                    / result.time / 1000)
-            percent = (100 * 8 * (ping.packet_size + 28) * ping.packet_count
-                       / result.time / 1000 / interface.speed)
-            if percent >= 10:
-                logging.info("PASS: Effective rate: %3.4f Mbps, "
-                             "%3.2f%% of theoretical max (%5.2f Mbps)",
-                             mbps, percent, interface.speed)
-                return True
-            else:
-                logging.warning("Unacceptable network effective rate found for [%s]" % interface.name)
-                logging.warning("Effective rate %3.4f Mbps, %3.2f%% of theoretical max (%5.2f Mbps)" %
-                                (mbps, percent, interface.speed))
-        return False
-
-    def run(self):
-        logging.debug("Acquiring network Interfaces")
-        if self.interfaces:
-            interfaces = [NetworkConfig(i).run() for i in self.interfaces]
-        else:
-            interfaces = NetworkConfigs().run()
-            interfaces = [i for i in interfaces if i.inet_addr]
-
-        for interface in interfaces:
-            if not interface.inet_addr:
-                logging.debug("No network address for [%s]", interface.name)
-                continue
-
-            targets = []
-            ip_range = IpRange(interface.inet_addr, interface.netmask)
-            if self.targets:
-                for target in self.targets:
-                    if ip_range.contains(target):
-                        targets.append(target)
-            elif interface.name != "lo":
-                targets = ip_range.scan(self.scan)
-                logging.info("The following targets were found for %s:" % interface.name)
-                for target in targets:
-                    logging.info("\t%s" % target)
-
-            if not targets:
-                logging.debug("No targets found for [%s]", interface.name)
-                continue
-
-            if not self.test_interface(interface, targets):
-                return False
-
-        return True
-
-
-class ApplicationManager(object):
-
-    application_factory = Application
-
-    default_log_level = "critical"
-    default_scan = 1
-    default_timeout = 60
-
-    def get_parser(self, args):
-        usage = "Usage: %prog [TARGETS]"
-
-        parser = OptionParser(usage=usage)
-        parser.add_option("-i", "--interface",
-                          dest="interfaces",
-                          action="append",
-                          type="string",
-                          default=[],
-                          help="Interface to test.")
-        parser.add_option("-s", "--scan",
-                          default=self.default_scan,
-                          type="int",
-                          help="Number of targets to scan when not provided.")
-        parser.add_option("-t", "--timeout",
-                          default=self.default_timeout,
-                          type="int",
-                          help="Time to wait for network manager to connect.")
-        parser.add_option("-l", "--log",
-                          metavar="FILE",
-                          help="The file to write the log to.")
-        parser.add_option("--log-level",
-                          default=self.default_log_level,
-                          help=("One of debug, info, warning, "
-                                "error or critical."))
-
-        return parser
-
-    def check_uid(self):
-        return os.getuid() == 0
-
-    def check_network(self, timeout):
-        try:
-            nm = NetworkManager()
-        except NetworkManagerException:
-            return True
-
-        start = datetime.now()
-        while True:
-            if nm.is_connected():
-                return True
-            if datetime.now() - start > timedelta(seconds=timeout):
-                return False
-            sleep(5)
-
-    def create_application(self, args=sys.argv[1:]):
-        parser = self.get_parser(args)
-        (options, args) = parser.parse_args(args)
-
-        log_level = logging.getLevelName(options.log_level.upper())
-        log_handlers = []
-        if options.log:
-            log_filename = options.log
-            log_handlers.append(FileHandler(log_filename))
-        else:
-            log_handlers.append(StreamHandler())
-
-        # Logging setup
-        format = ("%(asctime)s %(levelname)-8s %(message)s")
-        date_format = '%Y-%m-%d %H:%M:%S'
-        if log_handlers:
-            for handler in log_handlers:
-                handler.setFormatter(Formatter(format, date_format))
-                logging.getLogger().addHandler(handler)
-            if log_level:
-                logging.getLogger().setLevel(log_level)
-        elif not logging.getLogger().handlers:
-            logging.disable(logging.CRITICAL)
-
-        if not self.check_uid():
-            parser.error("Must be run as root.")
-
-        if not self.check_network(options.timeout):
-            parser.error("Network devices must be configured and connected to a LAN segment before testing")
-
-        targets = args
-        return self.application_factory(targets,
-                                        options.interfaces, options.scan)
-
-
-def main():
-    application_manager = ApplicationManager()
-    application = application_manager.create_application()
-    if not application.run():
-        return 1
-
-    return 0
-
-
-if __name__ == "__main__":
-    sys.exit(main())

=== removed file 'scripts/network_printer_test'
--- scripts/network_printer_test	2011-06-28 10:11:51 +0000
+++ scripts/network_printer_test	1970-01-01 00:00:00 +0000
@@ -1,57 +0,0 @@
-#!/bin/bash
-
-usage() {
-    cat <<EOU
-
-${0} - add a network printer and send a test page
-
- Usage: ${0} [ -p <printer> ] [ -s <server> ]
-
-    -p <printer> -- specify a printer to use, by name
-    -s <server>  -- specify a network server to use
-
- Note: this script expects printers over the IPP protocol only.
-
-EOU
-}
-
-while [ $# -gt 0 ]
-do
-    case "$1" in
-        -p)
-            if echo ${2} | grep -q -c '^-'; then
-                usage
-                exit 1
-            fi
-            printer=${2}
-            shift
-            ;;
-        -s)
-            if echo ${2} | grep -q -c '^-'; then
-                usage
-                exit 1
-            fi
-            server=${2}
-            shift
-            ;;
-        --usage)
-            usage
-            exit 1
-            ;;
-    esac
-    shift
-done
-
-if [ -z $server ]; then
-    echo "Nothing to do with no server defined. (See $0 --usage)"
-    exit 0
-fi
-
-printer=${printer:-PDF}
-
-lpadmin -E -v ipp://${server}/printers/${printer}
-cupsenable ${printer}
-cupsaccept ${printer}
-
-lsb_release -a | lp -t "lsb_release" -d ${printer}
-

=== removed file 'scripts/network_reconnect_resume_test'
--- scripts/network_reconnect_resume_test	2013-01-17 16:52:39 +0000
+++ scripts/network_reconnect_resume_test	1970-01-01 00:00:00 +0000
@@ -1,102 +0,0 @@
-#!/usr/bin/env python3
-
-# Copyright (C) 2012 Canonical, Ltd.
-
-import re
-import subprocess
-import argparse
-import sys
-
-
-def get_time_difference(device):
-    """
-    Returns the difference in seconds between the last resume from suspend (S3)
-    and the time it took to reconnect to Wifi.  If there is a problem finding
-    the information, None is returned.
-    """
-    resume_time = get_resume_time()
-    if resume_time is None:
-        print("Unable to obtain wakeup/resume time from dmesg."
-              "Please be sure the system has been suspended", file=sys.stderr)
-        return None
-    if device == "wifi":
-        reconnect_times = list(get_wifi_reconnect_times())
-    elif device == "wired":
-        reconnect_times = list(get_wired_reconnect_times())
-
-    if not reconnect_times:
-        print("Unable to obtain %s connection time after a S3. Please be sure"
-              " that the system has been suspended" % device, file=sys.stderr)
-        return None
-
-    # since some wifi & wired tests can disconnect and reconnect us multiple
-    # times after a suspend, we need to find the reconnect that occurs
-    # immediately after the resume from S3
-    for reconnect_time in reconnect_times:
-        if reconnect_time >= resume_time:
-            return round((reconnect_time - resume_time), 2)
-    return None
-
-
-def get_wifi_reconnect_times():
-    """
-    Returns a list of all the timestamps for wifi reconnects.
-    """
-    data = subprocess.check_output(['dmesg'], universal_newlines=True)
-    syntax = re.compile("\[(.*)\] wlan.* associated")
-    results = re.findall(syntax, data)
-    return map(float, results)
-
-def get_wired_reconnect_times():
-    """
-    Returns a list of all the timestamps for wired reconnects.
-    """
-    data = subprocess.check_output(['dmesg'], universal_newlines=True)
-    syntax = re.compile("\[(.*)\].*eth.* Link is [uU]p")
-    results = re.findall(syntax, data)
-    return map(float, results)
-
-
-def get_resume_time():
-    """
-    Returns the last (most recent) timestamp for an ACPI resume from sleep (S3)
-    If no resume is found, None is returned.
-    """
-    data = subprocess.check_output(['dmesg'], universal_newlines=True)
-    syntax = re.compile("\[(.*)\].ACPI: Waking up from system sleep state S3")
-    results = re.findall(syntax, data)
-    if not results:
-        return None
-    else:
-        return float(results[-1])
-
-
-def main():
-    parser = argparse.ArgumentParser()
-    parser.add_argument('-t', '--timeout',
-                        type=int,
-                        help="Specified max time allowed for Wifi/Wired to"
-                             " reconnect in seconds",
-                        required=True)
-    parser.add_argument('-d', '--device',
-                        help="Specify the device to test either,  eth or wlan",
-                        required=True,
-                        choices=['wifi', 'wired'])
-    args = parser.parse_args()
-
-    timedif = get_time_difference(args.device)
-    
-    if not timedif:
-        return 0
-
-    print("Your %s resumed in %s seconds after the last suspend" % (
-        args.device, timedif))
-    if timedif > args.timeout:
-        print("FAIL: the network failed to reconnect within the allotted time")
-        return 1
-    else:
-        print("PASS: the network connected within the allotted time")
-        return 0
-
-if __name__ == "__main__":
-    sys.exit(main())

=== removed file 'scripts/network_restart'
--- scripts/network_restart	2012-10-12 20:16:20 +0000
+++ scripts/network_restart	1970-01-01 00:00:00 +0000
@@ -1,346 +0,0 @@
-#!/usr/bin/env python3
-"""
-Reboot networking, wait for a while and check if it's possible to send
-some pings
-"""
-import sys
-import os
-import time
-import threading
-import logging
-import logging.handlers
-
-from subprocess import check_output, check_call, CalledProcessError, STDOUT
-from argparse import ArgumentParser
-
-try:
-    from gi.repository import Gtk, GObject, GLib
-    GLib.threads_init()
-    GObject.threads_init()
-    gtk_found = True
-except (ImportError, RuntimeError):
-    gtk_found = False
-
-
-class PingError(Exception):
-    def __init__(self, address, reason):
-        self.address = address
-        self.reason = reason
-
-
-def main():
-    args = parse_args()
-
-    # Verify that script is run as root
-    if os.getuid():
-        sys.stderr.write(
-            'This script needs superuser permissions to run correctly\n')
-        return 1
-
-    configure_logging(args.log_level, args.output)
-
-    # Select interface based on graphich capabilities available
-    if 'DISPLAY' in os.environ and gtk_found:
-        factory = GtkApplication
-    else:
-        factory = CliApplication
-
-    app = factory(args.address, args.times)
-    return app.run()
-
-
-class Application:
-    """
-    Network restart application
-    """
-    def __init__(self, address, times):
-        self.address = address
-        self.times = times
-        self.return_code = 0
-
-    def run(self):
-        """
-        Restart networking as many times as requested
-        and use ping to verify
-        """
-        networking = Networking(self.address)
-        logging.info('Initial connectivity check')
-        success = ping(self.address)
-        if not success:
-            raise PingError(self.address, 'Some interface is down')
-
-        for i in range(self.times):
-            if self.return_code:
-                break
-            if self.progress_cb:
-                fraction = float(i) / self.times
-                self.progress_cb(fraction)
-            logging.info('Iteration {0}/{1}...'.format(i + 1, self.times))
-            networking.restart()
-        else:
-            if self.progress_cb:
-                self.progress_cb(1.0)
-            logging.info('Test successful')
-
-        return self.return_code
-
-
-class CliApplication(Application):
-    progress_cb = None
-
-
-class GtkApplication(Application):
-    def __init__(self, address, times):
-        Application.__init__(self, address, times)
-
-        dialog = Gtk.Dialog(title='Network restart',
-            buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL))
-        dialog.set_default_size(300, 100)
-
-        alignment = Gtk.Alignment()
-        alignment.set(0.5, 0.5, 1.0, 0.1)
-        alignment.set_padding(10, 10, 10, 10)
-        progress_bar = Gtk.ProgressBar()
-        progress_bar.set_show_text(True)
-        alignment.add(progress_bar)
-
-        content_area = dialog.get_content_area()
-        content_area.pack_start(alignment, expand=True, fill=True, padding=0)
-
-        dialog.connect('response', self.response_cb)
-        dialog.show_all()
-
-        # Add new logger handler to write info logs to progress bar
-        logger = logging.getLogger()
-        stream = ProgressBarWriter(progress_bar)
-        formatter = logging.Formatter('%(message)s')
-        log_handler = logging.StreamHandler(stream)
-        log_handler.setLevel(logging.INFO)
-        log_handler.setFormatter(formatter)
-        logger.addHandler(log_handler)
-
-        self.return_code = 0
-        self.dialog = dialog
-        self.progress_bar = progress_bar
-        self.progress_log_handler = log_handler
-
-    def response_cb(self, dialog, response_id):
-        """
-        Cancel test case execution
-        when cancel or close button are closed
-        """
-        self.return_code = response_id
-        logging.info('Test cancelled')
-        Gtk.main_quit()
-
-    def progress_cb(self, fraction):
-        """
-        Update progress bar
-        """
-        GLib.idle_add(self.progress_bar.set_fraction, fraction)
-
-    def thread_target(self):
-        """
-        Run test case in a separate thread
-        """
-        try:
-            Application.run(self)
-        except PingError as exception:
-            logging.error('Failed to ping {0!r}\n{1}'
-                          .format(exception.address, exception.reason))
-            self.return_code = -1
-        except CalledProcessError:
-            self.return_code = -1
-        finally:
-            Gtk.main_quit()
-
-    def run(self):
-        """
-        Launch test case and gtk mainloop
-        """
-        thread = threading.Thread(target=self.thread_target)
-        thread.daemon = True
-        thread.start()
-        Gtk.main()
-        return self.return_code
-
-
-class ProgressBarWriter:
-    """
-    Write logs to a progress bar
-    """
-    def __init__(self, progressbar):
-        self.progressbar = progressbar
-
-    def write(self, message):
-        if message == '\n':
-            return
-        GLib.idle_add(self.progressbar.set_text, message)
-
-
-def ping(address):
-    """
-    Send ping to a given address
-    """
-    logging.info('Pinging {0!r}...'.format(address))
-    try:
-        check_call('ping -c 1 -w 5 {0}'.format(address),
-            stdout=open(os.devnull, 'w'), stderr=STDOUT, shell=True)
-    except CalledProcessError:
-        return False
-
-    return True
-
-
-class Networking:
-    """
-    Networking abstraction to start/stop all interfaces
-    """
-    def __init__(self, address):
-        self.address = address
-        self.interfaces = self._get_interfaces()
-
-    def _get_interfaces(self):
-        """
-        Get all network interfaces
-        """
-        output = check_output(['/sbin/ifconfig', '-s', '-a'])
-        lines = output.splitlines()[1:]
-        interfaces = ([interface for interface in
-            [line.split()[0] for line in lines] if interface != 'lo'])
-        return interfaces
-
-    def restart(self):
-        """
-        Restart networking
-        """
-        self._stop()
-        self._start()
-
-    def _start(self):
-        """
-        Start networking
-        """
-        logging.info('Bringing all interfaces up...')
-        for interface in self.interfaces:
-            try:
-                check_output(['/sbin/ifconfig', interface, 'up'])
-            except CalledProcessError:
-                logging.error('Unable to bring up interface {0!r}'
-                              .format(interface))
-                raise
-
-        logging.info('Starting network manager...')
-        try:
-            check_output(['/sbin/start', 'network-manager'])
-        except CalledProcessError:
-            logging.error('Unable to start network manager')
-            raise
-
-        # Verify that network interface is up
-        for timeout in [2, 4, 8, 16, 32, 64]:
-            logging.debug('Waiting ({0} seconds)...'.format(timeout))
-            time.sleep(timeout)
-            success = ping(self.address)
-            if success:
-                break
-        else:
-            raise PingError(self.address,
-                            'Some interface is still down')
-
-    def _stop(self):
-        """
-        Stop network manager
-        """
-        logging.info('Stopping network manager...')
-        try:
-            check_output(['/sbin/stop', 'network-manager'])
-        except CalledProcessError:
-            logging.error('Unable to stop network manager')
-            raise
-
-        logging.info('Bringing all interfaces down...')
-        for interface in self.interfaces:
-            try:
-                check_output(['/sbin/ifconfig', interface, 'down'])
-            except CalledProcessError:
-                logging.error('Unable to bring down interface {0!r}'
-                              .format(interface))
-                raise
-
-        # Verify that network interface is down
-        for timeout in [2, 4, 8]:
-            logging.debug('Waiting ({0} seconds)...'.format(timeout))
-            time.sleep(timeout)
-            success = ping(self.address)
-            if not success:
-                break
-        else:
-            raise PingError(self.address,
-                            'Some interface is still up')
-
-
-def parse_args():
-    """
-    Parse command line options
-    """
-    parser = ArgumentParser('Reboot networking interface '
-        'and verify that is up again afterwards')
-    parser.add_argument('-a', '--address', default='ubuntu.com',
-        help=('Address to ping to verify that network connection is up '
-              "('%(default)s' by default)"))
-    parser.add_argument('-o', '--output',
-                        default='/var/log',
-                        help='The path to the log directory. \
-                              Default is /var/log')
-    parser.add_argument('-t', '--times',
-        type=int, default=1,
-        help=('Number of times that the network interface has to be restarted '
-              '(%(default)s by default)'))
-    log_levels = ['notset', 'debug', 'info', 'warning', 'error', 'critical']
-    parser.add_argument('--log-level', dest='log_level_str', default='notset',
-        choices=log_levels,
-        help=('Log level. '
-              'One of {0} or {1} (%(default)s by default)'
-              .format(', '.join(log_levels[:-1]), log_levels[-1])))
-    args = parser.parse_args()
-    args.log_level = getattr(logging, args.log_level_str.upper())
-    return args
-
-
-def configure_logging(log_level, output):
-    """
-    Configure logging
-    """
-    logger = logging.getLogger()
-    logger.setLevel(logging.DEBUG)
-
-    # Log to sys.stderr using log level passed through command line
-    if log_level != logging.NOTSET:
-        log_handler = logging.StreamHandler()
-        formatter = logging.Formatter('%(levelname)-8s %(message)s')
-        log_handler.setFormatter(formatter)
-        log_handler.setLevel(log_level)
-        logger.addHandler(log_handler)
-
-    # Log to rotating file using DEBUG log level
-    log_filename = os.path.join(output,
-                                '{0}.log'.format(os.path.basename(__file__)))
-    rollover = os.path.exists(log_filename)
-    log_handler = logging.handlers.RotatingFileHandler(log_filename, mode='a+',
-                                                       backupCount=3)
-    formatter = logging.Formatter('%(asctime)s %(levelname)-8s %(message)s')
-    log_handler.setFormatter(formatter)
-    log_handler.setLevel(logging.DEBUG)
-    logger.addHandler(log_handler)
-    if rollover:
-        log_handler.doRollover()
-
-
-if __name__ == '__main__':
-    try:
-        sys.exit(main())
-    except PingError as exception:
-        logging.error('Failed to ping {0!r}\n{1}'
-                      .format(exception.address, exception.reason))
-        sys.exit(1)

=== removed file 'scripts/network_wait'
--- scripts/network_wait	2012-01-31 22:10:33 +0000
+++ scripts/network_wait	1970-01-01 00:00:00 +0000
@@ -1,20 +0,0 @@
-#!/bin/bash
-
-set -e
-
-x=1
-while true; do
-    state=$(/usr/bin/nmcli -t -f STATE nm)
-    if [ "$state" = "connected" ]; then
-        echo $state
-        exit 0
-    fi
-
-    x=$(($x + 1))
-    if [ $x -gt 12 ]; then
-        echo $state
-        exit 1
-    fi
-
-    sleep 5
-done

=== removed file 'scripts/obex_send'
--- scripts/obex_send	2012-06-20 08:01:17 +0000
+++ scripts/obex_send	1970-01-01 00:00:00 +0000
@@ -1,84 +0,0 @@
-#!/usr/bin/env python3
-
-import os
-import sys
-import time
-import dbus
-import dbus.service
-import dbus.mainloop.glib
-
-from gi.repository import GObject
-
-class Agent(dbus.service.Object):
-    def __init__(self, conn=None, obj_path=None):
-        dbus.service.Object.__init__(self, conn, obj_path)
-
-    @dbus.service.method("org.openobex.Agent",
-                         in_signature="o", out_signature="s")
-    def Request(self, path):
-        print("Transfer Request")
-        self.transfer = dbus.Interface(bus.get_object("org.openobex.client",
-                                                      path),
-                                       "org.openobex.Transfer")
-        properties = self.transfer.GetProperties()
-        for key in list(properties.keys()):
-            print("  %s = %s" % (key, properties[key]))
-        self.start = True
-        return ""
-
-    @dbus.service.method("org.openobex.Agent",
-                         in_signature="ot", out_signature="")
-    def Progress(self, path, transferred):
-        if (self.start):
-            print("Transfer Started")
-            properties = self.transfer.GetProperties()
-            self.transfer_size = properties['Size']
-            self.start_time = time.time()
-            self.start = False
-        else:
-            speed = transferred / abs((time.time() - self.start_time) * 1000)
-            progress = ("(" + str(transferred) + "/" + str(self.transfer_size)
-                        + " bytes) @ " + str(int(speed)) + " kB/s")
-            out = "\rTransfer progress " + progress
-            sys.stdout.write(out)
-            sys.stdout.flush()
-        return
-
-    @dbus.service.method("org.openobex.Agent",
-                         in_signature="o", out_signature="")
-    def Complete(self, path):
-        print("\nTransfer finished")
-        return
-
-    @dbus.service.method("org.openobex.Agent",
-                         in_signature="os", out_signature="")
-    def Error(self, path, error):
-        print("\nTransfer finished with an error: %s" % (error))
-        return
-
-    @dbus.service.method("org.openobex.Agent",
-                         in_signature="", out_signature="")
-    def Release(self):
-        mainloop.quit()
-        return
-
-if __name__ == '__main__':
-    dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
-
-    bus = dbus.SessionBus()
-    client = dbus.Interface(bus.get_object("org.openobex.client", "/"),
-                            "org.openobex.Client")
-
-    if (len(sys.argv) < 3):
-        print("Usage: %s <device> <file> [file*]" % (sys.argv[0]))
-        sys.exit(1)
-
-    path = "/test/agent"
-    agent = Agent(bus, path)
-
-    mainloop = GObject.MainLoop()
-    files = [os.path.realpath(f) for f in sys.argv[2:]]
-
-    client.SendFiles({"Destination": sys.argv[1]}, files, path)
-
-    mainloop.run()

=== removed file 'scripts/oem_config_test'
--- scripts/oem_config_test	2012-08-27 20:04:37 +0000
+++ scripts/oem_config_test	1970-01-01 00:00:00 +0000
@@ -1,172 +0,0 @@
-#!/usr/bin/python
-
-import sys
-import time
-import os
-import pwd
-import subprocess
-import shutil
-import argparse
-
-from stat import ST_MODE
-from xpresser import Xpresser
-from xpresser import ImageNotFound
-
-
-def user_exists(user):
-    ''' Make sure that the given user exists on the system '''
-    try:
-        user_info = pwd.getpwnam(user)
-        print("User %s found with UID %s" % (user, user_info.pw_uid))
-        return True
-    except KeyError:
-        print("User %s not found or removed" % user)
-        return False
-
-
-def home_dir_exists(user):
-    ''' Checks for a directory in /home/user where user is given '''
-    home_dir = pwd.getpwnam(user).pw_dir
-    try:
-        if os.path.isdir(home_dir):
-            print("Home directory for %s found" % user)
-            assert(_check_dir_permissions(home_dir) == '755')
-            return True
-        else:
-            sys.stderr.write("No home directory for %s found" % user)
-            return False
-    except AssertionError:
-        sys.stderr.write("Permissions not set properly to 755")
-        return False
-
-
-def _check_dir_permissions(dir):
-    ''' Checks the permissions of the given directory '''
-    mode = oct(os.stat(dir)[ST_MODE])[-3:]
-    return mode
-
-
-def cleanup_user(user):
-    ''' Will delete the given user, and delete the user's home directory '''
-    success = True
-    print("Deleting user %s" % user)
-    try:
-        output = subprocess.Popen(['deluser', '--remove-home', user],
-                                 stdout=subprocess.PIPE,
-                                 stderr=subprocess.PIPE)
-        time.sleep(1)
-        output.poll()
-        if output.returncode == 0 and not user_exists(user):
-            print("User %s has been removed" % user)
-        else:
-            error_output = output.stderr.read()
-            sys.stderr.write("Deleting user %s has failed with error: %s"
-                 % (user, error_output))
-            success = False
-    except Exception as e:
-        print("Failure during cleanup: %s" % e)
-        success = False
-    return success
-
-
-def run_oem_config(user, passw, images_dir):
-    ''' Call and run through oem-config using xpresser '''
-    oem_config_de = subprocess.check_output(['oem-config', '-q'])
-    if 'gtk_ui' not in oem_config_de:
-        print("OEM-config is using %s, only gtk is supported" % oem_config_de)
-    else:
-        subprocess.Popen(['oem-config'])
-        time.sleep(5)
-        xp.find('welcome')
-        try:
-            xp.find('english_checked')
-            print("English  selected, clicking continue")
-        except ImageNotFound:
-            xp.click('english_unchecked')
-            print("English already selected, clicking continue")
-        finally:
-            xp.click('continue_button')
-        try:
-            xp.wait('wireless')
-            print("Wireless screen found, skipping")
-            xp.click('continue_button')
-        except ImageNotFound:
-            print("Wireless screen not found, no WLAN setup")
-        xp.wait('where_are_you')
-        print("Timezone screen found. Leaving default, clicking continue")
-        xp.click('continue_button')
-        xp.wait('keyboard_layout')
-        print("Keyboard screen found, leaving default. Clicking continue")
-        xp.click('continue_button')
-        xp.wait('who_are_you')
-        print(("User creation screen found.  Adding user %s with password %s"
-                % (user, passw)))
-        print("Editing 'your name' field")
-        time.sleep(1)
-        xp.type(user)
-        time.sleep(1)
-        print("Editing password field")
-        xp.click('password')
-        xp.type(passw)
-        time.sleep(.5)
-        print("Retyping password")
-        xp.click('password2')
-        xp.type(passw)
-        print('Done editing, clicking continue')
-        xp.click('continue_button')
-        print('OEM config user setup completed')
-        try:
-            xp.find('choose_your_picture')
-            print("Picture screen found, clicking continue")
-            xp.click('continue_button')
-        except:
-            print("No picture screen found")
-
-
-def is_oem_config_done(timeout):
-    ''' Loops through every 15 seconds to see if oem-config is done '''
-    is_done = False
-    how_long = 0
-    while (not is_done):
-        try:
-            xp.find('not_done', 5)
-            print("OEM config still running")
-            how_long += 5
-            if how_long > timeout:
-                sys.stderr.write('OEM config timeout exceeded.')
-                sys.exit(1)
-            time.sleep(5)
-        except ImageNotFound:
-            if how_long == 0:
-                sys.stderr.write('OEM config not found to be running')
-                sys.exit(1)
-            else:
-                print("OEM config completed!  Took %i seconds" % how_long)
-                is_done = True
-    return is_done
-
-
-if __name__ == "__main__":
-    p = argparse.ArgumentParser(description="Automatically tests oem-config")
-    p.add_argument('-u', '--user', dest='user', required=True,
-                  help='User to create')
-    p.add_argument('-p', '--password', dest='passw',
-                  required=True, help='Password to create')
-    p.add_argument('-d', '--image-dir', dest='images_dir', required=True,
-                  help='Directory where the oem-config Xpresser images live')
-    p.add_argument('-t', '--timeout', dest='timeout', type=int, default=120,
-                  help='Timeout before oem-config is considered failed in '
-                  'seconds. Default is 120')
-    args = p.parse_args()
-    xp = Xpresser()
-    xp.load_images(args.images_dir)
-    run_oem_config(args.user, args.passw, args.images_dir)
-    if not is_oem_config_done(args.timeout):
-        sys.exit(1)
-    if not user_exists(args.user):
-        sys.exit(1)
-    if not home_dir_exists(args.user):
-        sys.exit(1)
-    time.sleep(1)
-    if not cleanup_user(args.user):
-        sys.exit(1)

=== removed file 'scripts/package_resource'
--- scripts/package_resource	2012-07-31 06:03:07 +0000
+++ scripts/package_resource	1970-01-01 00:00:00 +0000
@@ -1,129 +0,0 @@
-#!/usr/bin/python3
-#
-# This file is part of Checkbox.
-#
-# Copyright 2009 Canonical Ltd.
-#
-# Checkbox is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Checkbox is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Checkbox.  If not, see <http://www.gnu.org/licenses/>.
-#
-import os
-import sys
-
-from io import StringIO
-from optparse import OptionParser
-from subprocess import Popen, PIPE
-
-
-# Command to retrieve packages.
-COMMAND = "COLUMNS=200 dpkg -l"
-
-
-def get_packages(file):
-    desired_to_value = {
-        "u": "Unknown",
-        "i": "Install",
-        "r": "Remove",
-        "p": "Purge",
-        "h": "Hold"}
-
-    status_to_value = {
-        "n": "Not Installed",
-        "i": "Installed",
-        "c": "Cfg-files",
-        "u": "Unpacked",
-        "u": "Failed-cfg",
-        "h": "Half-inst"}
-
-    error_to_value = {
-        "":  None,
-        "h": "Hold",
-        "r": "Reinst-required",
-        "x": "both-problems"}
-
-    columns = ["desired", "status", "error", "name", "version", "description"]
-    mandatory_columns = columns[:]
-    mandatory_columns.remove("error")  # this is optional
-    aliases = {
-        "linux-image-" + os.uname()[2]: "linux"}
-
-    # Skip header lines
-    while True:
-        line = file.readline()
-        if line.startswith("+++"):
-            break
-
-    # Get length from separator
-    lengths = [0, 1, 2]
-    lengths.extend([len(i) + 1 for i in line.split("-")])
-    for i in range(4, len(lengths)):
-        lengths[i] += lengths[i - 1]
-
-    # Get remaining lines
-    for line in file.readlines():
-        package = {}
-        for i, column in enumerate(columns):
-            value = line[lengths[i]:lengths[i + 1]].strip()
-
-            # Convert value
-            if column == "desired":
-                value = desired_to_value.get(value)
-            elif column == "status":
-                value = status_to_value.get(value)
-            elif column == "error":
-                value = error_to_value.get(value)
-
-            # Set value
-            if value:
-                package[column] = value
-
-        #Skip records not containing all mandatory columns
-        if not set(mandatory_columns).issubset(list(package.keys())):
-            continue
-
-        name = package["name"]
-        if name in aliases:
-            yield dict(package)
-            package["name"] = aliases[name]
-
-        if name not in aliases.values():
-            yield package
-
-
-def main(args):
-    usage = "Usage: %prog [FILE...]"
-    parser = OptionParser(usage=usage)
-    parser.add_option("-i", "--input",
-        action="store_true",
-        help="Read packages from stdin")
-    (options, args) = parser.parse_args(args)
-
-    if options.input:
-        file = sys.stdin
-    else:
-        output = Popen(COMMAND, stdout=PIPE, shell=True).communicate()[0]
-        file = StringIO(output.decode("utf-8"))
-
-    packages = get_packages(file)
-    for package in packages:
-        for key, value in package.items():
-            print("%s: %s" % (key, value))
-
-        # Empty line
-        print()
-
-    return 0
-
-
-if __name__ == "__main__":
-    sys.exit(main(sys.argv[1:]))

=== removed file 'scripts/piglit_test'
--- scripts/piglit_test	2012-12-12 08:59:51 +0000
+++ scripts/piglit_test	1970-01-01 00:00:00 +0000
@@ -1,98 +0,0 @@
-#!/usr/bin/python3
-
-import os
-import sys
-
-from argparse import ArgumentParser, FileType
-from subprocess import check_output, STDOUT
-
-
-class PiglitTests:
-
-    def __init__(self, tests, name):
-        self._tests = tests
-        self._name = name
-        self._results = {}
-
-    def run(self):
-        piglit_output = ''
-        
-        log_path = os.path.join(os.environ.get('CHECKBOX_DATA', '.'),
-                                    'piglit-results', self._name)
-
-        run_command = ["piglit-run.py"]
-
-        for test in self._tests:
-            run_command.extend(["-t", test])
-
-        run_command.extend(['/usr/share/piglit/tests/all.tests', log_path])
-
-        piglit_output = check_output(run_command,
-                                     universal_newlines=True,
-                                     stderr=STDOUT)
-        # TODO: Capture stderr instead?
-        for line in piglit_output.split('\n'):
-            if ' :: ' in line:
-                self._results[line.split(' :: ')[-1].strip()] = \
-                line.split(' :: ')[-2].strip()
-
-    def get_tests_by_status(self, status):
-        """
-        Return a list of the tests with the given status in the last piglit run
-        """
-        tests = []
-        for test in self._results:
-            if self._results[test] == status:
-                tests.append(test)
-
-        return tests
-
-
-def main():
-    parser = ArgumentParser("A wrapper script for the Piglit graphics test "
-                               "framework which runs the tests and parses the "
-                               "results.")
-    parser.add_argument("--test", "-t",
-                        required=True,
-                        action='append',
-                        help="The expression used to get the tests to run.")
-    parser.add_argument("--name", "-n",
-                        required=True,
-                        help="""A friendly name for this group of tests
-                                to use in reporting.""")
-    parser.add_argument("--verbose", "-v",
-                        action='store_true',
-                        help='Have more verbose output')
-    args = parser.parse_args()
-
-    piglit = PiglitTests(args.test, args.name)
-    piglit.run()
-
-    passed_tests = piglit.get_tests_by_status('pass')
-    print("%d tests passed" % len(passed_tests))
-
-    if args.verbose:
-        print("\n".join(["- %s" % test for test in passed_tests]))
-
-    failed_tests = piglit.get_tests_by_status('fail')
-    if failed_tests:
-        print("%d tests failed" % len(failed_tests))
-        print("\n".join(["- %s" % test for test in failed_tests]))
-
-    crashed_tests = piglit.get_tests_by_status('crash')
-    if crashed_tests:
-        print("%d tests crashed" % len(crashed_tests))
-        print("\n".join(["- %s" % test for test in crashed_tests]))
-
-    skipped_tests = piglit.get_tests_by_status('skip')
-    if skipped_tests:
-        print("%d tests were skipped" % len(skipped_tests))
-        print("\n".join(["- %s" % test for test in skipped_tests]))
-
-    if len(failed_tests) > 0 or len(crashed_tests) > 0:
-        return 1
-    else:
-        return 0
-
-if __name__ == "__main__":
-    sys.exit(main())

=== removed file 'scripts/pm_log_check'
--- scripts/pm_log_check	2012-06-21 18:16:21 +0000
+++ scripts/pm_log_check	1970-01-01 00:00:00 +0000
@@ -1,267 +0,0 @@
-#!/usr/bin/env python3
-import os
-import sys
-import re
-import difflib
-import logging
-from argparse import ArgumentParser
-
-# Script return codes
-SUCCESS = 0
-NOT_MATCH = 1
-NOT_FINISHED = 2
-NOT_FOUND = 3
-
-
-def main():
-    args = parse_args()
-
-    if not os.path.isfile(args.input_log_filename):
-        sys.stderr.write('Log file {0!r} not found\n'
-                         .format(args.input_log_filename))
-        sys.exit(NOT_FOUND)
-
-    LoggingConfiguration.set(args.log_level,
-                             args.output_log_filename)
-    parser = Parser(args.input_log_filename)
-    results = parser.parse()
-
-    if not compare_results(results):
-        sys.exit(NOT_MATCH)
-
-    sys.exit(SUCCESS)
-
-
-class Parser(object):
-    """
-    Reboot test log file parser
-    """
-    is_logging_line = (re.compile('^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3}')
-                       .search)
-    is_getting_info_line = (re.compile('Gathering hardware information...$')
-                            .search)
-    is_executing_line = (re.compile("Executing: '(?P<command>.*)'...$")
-                         .search)
-    is_output_line = re.compile('Output:$').search
-    is_field_line = (re.compile('^- (?P<field>returncode|stdout|stderr):$')
-                     .match)
-    is_test_complete_line = re.compile('test complete$').search
-
-    def __init__(self, filename):
-        self.filename = filename
-
-    def parse(self):
-        """
-        Parse log file and return results
-        """
-        with open(self.filename) as f:
-            results = self._parse_file(LineIterator(f))
-        return results
-
-    def _parse_file(self, iterator):
-        """
-        Parse all lines in iterator and return results
-        """
-        results = []
-        result = {}
-
-        for line in iterator:
-            if self.is_getting_info_line(line):
-                if result:
-                    # Add last result to list of results
-                    results.append(result)
-
-                # Initialize for a new iteration results
-                result = {}
-
-            match = self.is_executing_line(line)
-            if match:
-                command = match.group('command')
-                command_output = self._parse_command_output(iterator)
-
-                if command_output is not None:
-                    result[command] = command_output
-        else:
-            if result:
-                # Add last result to list of results
-                results.append(result)
-
-        if not self.is_test_complete_line(line):
-            sys.stderr.write("Test didn't finish properly according to logs\n")
-            sys.exit(NOT_FINISHED)
-
-        return results
-
-    def _parse_command_output(self, iterator):
-        """
-        Parse one command output
-        """
-        command_output = None
-
-        # Skip all lines until command output is found
-        for line in iterator:
-            if self.is_output_line(line):
-                command_output = {}
-                break
-            if (self.is_executing_line(line)
-                or self.is_getting_info_line(line)):
-                # Skip commands with no output
-                iterator.unnext(line)
-                return None
-
-        # Parse command output message
-        for line in iterator:
-            match = self.is_field_line(line)
-            if match:
-                field = match.group('field')
-                value = self._parse_command_output_field(iterator)
-                command_output[field] = value
-            # Exit when all command output fields
-            # have been gathered
-            else:
-                iterator.unnext(line)
-                break
-
-        return command_output
-
-    def _parse_command_output_field(self, iterator):
-        """
-        Parse one command output field
-        """
-        # Accummulate as many lines as needed
-        # for the field value
-        value = []
-        for line in iterator:
-            if (self.is_logging_line(line)
-                or self.is_field_line(line)):
-                iterator.unnext(line)
-                break
-
-            value.append(line)
-
-        value = ''.join(value)
-        return value
-
-
-class LineIterator:
-    """
-    Iterator wrapper to make it possible
-    to push back lines that shouldn't have been consumed
-    """
-
-    def __init__(self, iterator):
-        self.iterator = iterator
-        self.buffer = []
-
-    def __iter__(self):
-        return self
-
-    def __next__(self):
-        if self.buffer:
-            return self.buffer.pop()
-
-        return next(self.iterator)
-
-    def unnext(self, line):
-        self.buffer.append(line)
-
-
-class LoggingConfiguration(object):
-    @classmethod
-    def set(cls, log_level, log_filename):
-        """
-        Configure a rotating file logger
-        """
-        logger = logging.getLogger()
-        logger.setLevel(logging.DEBUG)
-
-        # Log to sys.stderr using log level passed through command line
-        if log_level != logging.NOTSET:
-            log_handler = logging.StreamHandler()
-            formatter = logging.Formatter('%(levelname)-8s %(message)s')
-            log_handler.setFormatter(formatter)
-            log_handler.setLevel(log_level)
-            logger.addHandler(log_handler)
-
-        # Log to rotating file using DEBUG log level
-        log_handler = logging.FileHandler(log_filename, mode='w')
-        formatter = logging.Formatter('%(asctime)s %(levelname)-8s '
-                                      '%(message)s')
-        log_handler.setFormatter(formatter)
-        log_handler.setLevel(logging.DEBUG)
-        logger.addHandler(log_handler)
-
-
-def compare_results(results):
-    """
-    Compare results using first one as a baseline
-    """
-    baseline = results[0]
-
-    success = True
-    for index, result in enumerate(results[1:]):
-        for command in baseline.keys():
-            baseline_output = baseline[command]
-            result_output = result[command]
-
-            error_messages = []
-            fields = (set(baseline_output.keys())
-                      | set(result_output.keys()))
-            for field in fields:
-                baseline_field = baseline_output.get(field, '')
-                result_field = result_output.get(field, '')
-
-                if baseline_field != result_field:
-                    differ = difflib.Differ()
-
-                    message = ["** {field!r} field doesn't match:"
-                               .format(field=field)]
-                    comparison = differ.compare(baseline_field.splitlines(),
-                                                result_field.splitlines())
-                    message.extend(list(comparison))
-                    error_messages.append('\n'.join(message))
-
-            if not error_messages:
-                logging.debug('[Iteration {0}] {1}...\t[OK]'
-                              .format(index + 1, command))
-            else:
-                success = False
-                if command.startswith('fwts'):
-                    logging.error('[Iteration {0}] {1}...\t[FAIL]'
-                                  .format(index + 1, command))
-                else:
-                    logging.error('[Iteration {0}] {1}...\t[FAIL]\n'
-                                  .format(index + 1, command))
-                    for message in error_messages:
-                        logging.error(message)
-
-    return success
-
-
-def parse_args():
-    """
-    Parse command-line arguments
-    """
-    parser = ArgumentParser(description=('Check power management '
-                                         'test case results'))
-    parser.add_argument('input_log_filename', metavar='log_filename',
-                        help=('Path to the input log file '
-                              'on which to perform the check'))
-    parser.add_argument('output_log_filename', metavar='log_filename',
-                        help=('Path to the output log file '
-                              'for the results of the check'))
-    log_levels = ['notset', 'debug', 'info', 'warning', 'error', 'critical']
-    parser.add_argument('--log-level', dest='log_level', default='info',
-                        choices=log_levels,
-                        help=('Log level. '
-                              'One of {0} or {1} (%(default)s by default)'
-                              .format(', '.join(log_levels[:-1]),
-                                      log_levels[-1])))
-    args = parser.parse_args()
-    args.log_level = getattr(logging, args.log_level.upper())
-
-    return args
-
-
-if __name__ == '__main__':
-    main()

=== removed file 'scripts/pm_test'
--- scripts/pm_test	2012-12-03 08:36:20 +0000
+++ scripts/pm_test	1970-01-01 00:00:00 +0000
@@ -1,799 +0,0 @@
-#!/usr/bin/env python3
-import sys
-import os
-import shutil
-import re
-import logging
-import logging.handlers
-import subprocess
-
-from datetime import datetime, timedelta
-from time import time, localtime
-from calendar import timegm
-from argparse import ArgumentParser, SUPPRESS
-from gi.repository import Gtk, GObject
-
-def main():
-    """
-    Run power management operation as many times as needed
-    """
-    args, extra_args = MyArgumentParser().parse()
-
-    # Verify that script is run as root
-    if os.getuid():
-        sys.stderr.write('This script needs superuser '
-                         'permissions to run correctly\n')
-        sys.exit(1)
-
-    LoggingConfiguration.set(args.log_level, args.log_filename, args.append)
-    logging.debug('Arguments: {0!r}'.format(args))
-    logging.debug('Extra Arguments: {0!r}'.format(extra_args))
-
-    try:
-        operation = PowerManagementOperation(args, extra_args)
-        operation.setup()
-        operation.run()
-    except (TestCancelled, TestFailed) as exception:
-        operation.teardown()
-        if isinstance(exception, TestFailed):
-            logging.error(exception.args[0])
-        message = exception.MESSAGE.format(args.pm_operation.capitalize())
-        if args.silent:
-            logging.info(message)
-        else:
-            title = '{0} test'.format(args.pm_operation.capitalize())
-            MessageDialog(title, message, Gtk.MessageType.ERROR).run()
-
-        return exception.RETURN_CODE
-
-    return 0
-
-
-class PowerManagementOperation(object):
-    SLEEP_TIME = 5
-
-    def __init__(self, args, extra_args):
-        self.args = args
-        self.extra_args = extra_args
-
-    def setup(self):
-        """
-        Enable configuration file
-        """
-        # Enable autologin and sudo on first cycle
-        if self.args.total == self.args.repetitions:
-            AutoLoginConfigurator().enable()
-            SudoersConfigurator().enable()
-
-        # Schedule this script to be automatically executed
-        # on startup to continue testing
-        autostart_file = AutoStartFile(self.args)
-        autostart_file.write()
-
-    def run(self):
-        """
-        Run a power management iteration
-        """
-        logging.info('{0} operations remaining: {1}'
-                     .format(self.args.pm_operation, self.args.repetitions))
-
-        self.check_last_cycle_duration()
-        if self.args.repetitions > 0:
-            self.run_pm_command()
-        else:
-            self.summary()
-
-    def check_last_cycle_duration(self):
-        """
-        Make sure that last cycle duration was reasonable,
-        that is, not too short, not too long
-        """
-        min_pm_time = timedelta(seconds=self.args.min_pm_time)
-        max_pm_time = timedelta(seconds=self.args.max_pm_time)
-        if self.args.pm_timestamp:
-            pm_timestamp = datetime.fromtimestamp(self.args.pm_timestamp)
-            now = datetime.now()
-            pm_time = now - pm_timestamp
-            if pm_time < min_pm_time:
-                raise TestFailed('{0} time less than expected: {1} < {2}'
-                                 .format(self.args.pm_operation.capitalize(),
-                                      pm_time, min_pm_time))
-            if pm_time > max_pm_time:
-                raise TestFailed('{0} time greater than expected: {1} > {2}'
-                                 .format(self.args.pm_operation.capitalize(),
-                                         pm_time, max_pm_time))
-
-            logging.info('{0} time: {1}'
-                         .format(self.args.pm_operation.capitalize(), pm_time))
-
-    def run_pm_command(self):
-        """
-        Run power managment command and check result if needed
-        """
-        # Display information to user
-        # and make it possible to cancel the test
-        CountdownDialog(self.args.pm_operation,
-                        self.args.pm_delay,
-                        self.args.hardware_delay,
-                        self.args.total - self.args.repetitions,
-                        self.args.total).run()
-
-        # A small sleep time is added to reboot and poweroff
-        # so that script has time to return a value
-        # (useful when running it as an automated test)
-        command_str = ('sleep {0}; {1}'
-                       .format(self.SLEEP_TIME, self.args.pm_operation))
-        if self.extra_args:
-            command_str += ' {0}'.format(' '.join(self.extra_args))
-
-        if self.args.pm_operation != 'reboot':
-            WakeUpAlarm.set(seconds=self.args.wakeup)
-
-        logging.info('Executing new {0!r} operation...'
-                     .format(self.args.pm_operation))
-        logging.debug('Executing: {0!r}...'.format(command_str))
-        subprocess.Popen(command_str, shell=True)
-
-    def summary(self):
-        """
-        Gather hardware information for the last time,
-        log execution time and exit
-        """
-        # Just gather hardware information one more time and exit
-        CountdownDialog(self.args.pm_operation,
-                        self.args.pm_delay,
-                        self.args.hardware_delay,
-                        self.args.total - self.args.repetitions,
-                        self.args.total).run()
-
-        self.teardown()
-
-        # Log some time information
-        start = datetime.fromtimestamp(self.args.start)
-        end = datetime.now()
-        if self.args.pm_operation == 'reboot':
-            sleep_time = timedelta(seconds=self.SLEEP_TIME)
-        else:
-            sleep_time = timedelta(seconds=self.args.wakeup)
-
-        wait_time = timedelta(seconds=(self.args.pm_delay
-                                       + (self.args.hardware_delay)
-                                          * self.args.total))
-        average = (end - start - wait_time) / self.args.total - sleep_time
-        time_message = ('Total elapsed time: {total}\n'
-                        'Average recovery time: {average}'
-                        .format(total=end - start,
-                                average=average))
-        logging.info(time_message)
-
-        message = ('{0} test complete'
-                   .format(self.args.pm_operation.capitalize()))
-        if self.args.silent:
-            logging.info(message)
-        else:
-            title = '{0} test'.format(self.args.pm_operation.capitalize())
-            MessageDialog(title, message).run()
-
-    def teardown(self):
-        """
-        Restore configuration
-        """
-        # Don't execute this script again on next reboot
-        autostart_file = AutoStartFile(self.args)
-        autostart_file.remove()
-
-        # Restore previous configuration
-        SudoersConfigurator().disable()
-        AutoLoginConfigurator().disable()
-
-
-class TestCancelled(Exception):
-    RETURN_CODE = 1
-    MESSAGE = '{0} test cancelled by user'
-
-
-class TestFailed(Exception):
-    RETURN_CODE = 2
-    MESSAGE = '{0} test failed'
-
-
-class WakeUpAlarm(object):
-    ALARM_FILENAME = '/sys/class/rtc/rtc0/wakealarm'
-    RTC_FILENAME = '/proc/driver/rtc'
-
-    @classmethod
-    def set(cls, minutes=0, seconds=0):
-        """
-        Calculate wakeup time and write it to BIOS
-        """
-        now = int(time())
-        timeout = minutes * 60 + seconds
-        wakeup_time_utc = now + timeout
-        wakeup_time_local = timegm(localtime()) + timeout
-
-        subprocess.check_call('echo 0 > %s' % cls.ALARM_FILENAME, shell=True)
-        subprocess.check_call('echo %d > %s'
-                              % (wakeup_time_utc, cls.ALARM_FILENAME),
-                              shell=True)
-
-        with open(cls.ALARM_FILENAME) as alarm_file:
-            wakeup_time_stored_str = alarm_file.read()
-
-            if not re.match('\d+', wakeup_time_stored_str):
-                subprocess.check_call('echo "+%d" > %s'
-                                      % (timeout, cls.ALARM_FILENAME),
-                                      shell=True)
-                with open(cls.ALARM_FILENAME) as alarm_file2:
-                    wakeup_time_stored_str = alarm_file2.read()
-                if not re.match('\d+', wakeup_time_stored_str):
-                    logging.error('Invalid wakeup time format: {0!r}'
-                                  .format(wakeup_time_stored_str))
-                    sys.exit(1)
-
-            wakeup_time_stored = int(wakeup_time_stored_str)
-            try:
-                logging.debug('Wakeup timestamp: {0} ({1})'
-                              .format(wakeup_time_stored,
-                                      datetime.fromtimestamp(
-                                          wakeup_time_stored).strftime('%c')))
-            except ValueError as e:
-                logging.error(e)
-                sys.exit(1)
-
-            if ((abs(wakeup_time_utc - wakeup_time_stored) > 1) and
-                (abs(wakeup_time_local - wakeup_time_stored) > 1)):
-                logging.error('Wakeup time not stored correctly')
-                sys.exit(1)
-
-        with open(cls.RTC_FILENAME) as rtc_file:
-            separator_regex = re.compile('\s+:\s+')
-            rtc_data = dict([separator_regex.split(line.rstrip())
-                             for line in rtc_file])
-            logging.debug('RTC data:\n{0}'
-                          .format('\n'.join(['- {0}: {1}'.format(*pair)
-                                             for pair in rtc_data.items()])))
-
-            # Verify wakeup time has been set properly
-            # by looking into the alarm_IRQ and alrm_date field
-            if rtc_data['alarm_IRQ'] != 'yes':
-                logging.error('alarm_IRQ not set properly: {0}'
-                              .format(rtc_data['alarm_IRQ']))
-                sys.exit(1)
-
-            if '*' in rtc_data['alrm_date']:
-                logging.error('alrm_date not set properly: {0}'
-                              .format(rtc_data['alrm_date']))
-                sys.exit(1)
-
-
-class Command(object):
-    """
-    Simple subprocess.Popen wrapper to run shell commands
-    and log their output
-    """
-    def __init__(self, command_str, verbose=True):
-        self.command_str = command_str
-        self.verbose = verbose
-
-        self.process = None
-        self.stdout = None
-        self.stderr = None
-        self.time = None
-
-    def run(self):
-        """
-        Execute shell command and return output and status
-        """
-        logging.debug('Executing: {0!r}...'.format(self.command_str))
-
-        self.process = subprocess.Popen(self.command_str,
-                                        shell=True,
-                                        stdout=subprocess.PIPE,
-                                        stderr=subprocess.PIPE)
-        start = datetime.now()
-        result = self.process.communicate()
-        end = datetime.now()
-        self.time = end - start
-
-        if self.verbose:
-            stdout, stderr = result
-            message = ['Output:\n'
-                       '- returncode:\n{0}'.format(self.process.returncode)]
-            if stdout:
-                if type(stdout) is bytes:
-                    stdout = stdout.decode('utf-8')
-                message.append('- stdout:\n{0}'.format(stdout))
-            if stderr:
-                if type(stderr) is bytes:
-                    stderr = stderr.decode('utf-8')
-                message.append('- stderr:\n{0}'.format(stderr))
-            logging.debug('\n'.join(message))
-
-            self.stdout = stdout
-            self.stderr = stderr
-
-        return self
-
-
-class CountdownDialog(Gtk.Dialog):
-    """
-    Dialog that shows the amount of progress in the reboot test
-    and lets the user cancel it if needed
-    """
-    def __init__(self, pm_operation, pm_delay, hardware_delay,
-                 iterations, iterations_count):
-        self.pm_operation = pm_operation
-        title = '{0} test'.format(pm_operation.capitalize())
-
-        buttons = (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,)
-        super(CountdownDialog, self).__init__(title=title,
-                                              buttons=buttons)
-        self.set_default_response(Gtk.ResponseType.CANCEL)
-        self.set_resizable(False)
-        self.set_position(Gtk.WindowPosition.CENTER)
-
-        progress_bar = Gtk.ProgressBar()
-        progress_bar.set_fraction(iterations / float(iterations_count))
-        progress_bar.set_text('{0}/{1}'
-                              .format(iterations, iterations_count))
-        progress_bar.set_show_text(True)
-        self.vbox.pack_start(progress_bar, True, True, 0)
-
-        operation_event = {'template': ('Next {0} in {{time}} seconds...'
-                                        .format(self.pm_operation)),
-                           'timeout': pm_delay}
-        hardware_info_event = \
-            {'template': 'Gathering hardware information in {time} seconds...',
-             'timeout': hardware_delay,
-             'callback': self.on_hardware_info_timeout_cb}
-
-        if iterations == 0:
-            # In first iteration, gather hardware information directly
-            # and perform pm-operation
-            self.on_hardware_info_timeout_cb()
-            self.events = [operation_event]
-        elif iterations < iterations_count:
-            # In last iteration, wait before gathering hardware information
-            # and perform pm-operation
-            self.events = [operation_event,
-                           hardware_info_event]
-        else:
-            # In last iteration, wait before gathering hardware information
-            # and finish the test
-            self.events = [hardware_info_event]
-
-        self.label = Gtk.Label()
-        self.vbox.pack_start(self.label, True, True, 0)
-        self.show_all()
-
-    def run(self):
-        """
-        Set label text and run dialog
-        """
-        self.schedule_next_event()
-        response = super(CountdownDialog, self).run()
-        self.destroy()
-
-        if response != Gtk.ResponseType.ACCEPT:
-            raise TestCancelled()
-
-    def schedule_next_event(self):
-        """
-        Schedule next timed event
-        """
-        if self.events:
-            self.event = self.events.pop()
-            self.timeout_counter = self.event.get('timeout', 0)
-            self.label.set_text(self.event['template']
-                                .format(time=self.timeout_counter))
-            GObject.timeout_add_seconds(1, self.on_timeout_cb)
-        else:
-            # Return Accept response
-            # if there are no other events scheduled
-            self.response(Gtk.ResponseType.ACCEPT)
-
-    def on_timeout_cb(self):
-        """
-        Set label properly and use callback method if needed
-        """
-        if self.timeout_counter > 0:
-            self.label.set_text(self.event['template']
-                                .format(time=self.timeout_counter))
-            self.timeout_counter -= 1
-            return True
-
-        # Call calback if defined
-        callback = self.event.get('callback')
-        if callback:
-            callback()
-
-        # Schedule next event if needed
-        self.schedule_next_event()
-
-        return False
-
-    def on_hardware_info_timeout_cb(self):
-        """
-        Gather hardware information and print it to logs
-        """
-        logging.info('Gathering hardware information...')
-        logging.debug('Networking:\n'
-                      '{network}\n'
-                      '{ethernet}\n'
-                      '{ifconfig}\n'
-                      '{iwconfig}'
-                      .format(network=(Command('lspci | grep Network')
-                                       .run().stdout),
-                              ethernet=(Command('lspci | grep Ethernet')
-                                        .run().stdout),
-                              ifconfig=(Command("ifconfig -a | grep -A1 '^\w'")
-                                        .run().stdout),
-                              iwconfig=(Command("iwconfig | grep -A1 '^\w'")
-                                        .run().stdout)))
-        logging.debug('Bluetooth Device:\n'
-                      '{hciconfig}'
-                      .format(hciconfig=(Command("hciconfig -a "
-                                                 "| grep -A2 '^\w'")
-                                         .run().stdout)))
-        logging.debug('Video Card:\n'
-                      '{lspci}'
-                      .format(lspci=Command('lspci | grep VGA').run().stdout))
-        logging.debug('Touchpad and Keyboard:\n'
-                      '{xinput}'
-                      .format(xinput=Command('xinput list --name-only').run().stdout))
-        logging.debug('Pulse Audio Sink:\n'
-                      '{pactl_sink}'
-                      .format(pactl_sink=(Command('pactl list | grep Sink')
-                                          .run().stdout)))
-        logging.debug('Pulse Audio Source:\n'
-                      '{pactl_source}'
-                      .format(pactl_source=(Command('pactl list | grep Source')
-                                            .run().stdout)))
-
-        # Check kernel logs using firmware test suite
-        command = Command('fwts -r stdout klog dmesg_common oops').run()
-        if command.process.returncode != 0:
-            # Don't abort the test loop,
-            # errors can be retrieved by pm_log_check
-            logging.error('Problem found in logs by fwts')
-
-class MessageDialog(object):
-    """
-    Simple wrapper aroung Gtk.MessageDialog
-    """
-    def __init__(self, title, message, type=Gtk.MessageType.INFO):
-        self.title = title
-        self.message = message
-        self.type = type
-
-    def run(self):
-        dialog = Gtk.MessageDialog(buttons=Gtk.ButtonsType.OK,
-                                   message_format=self.message,
-                                   type=self.type)
-        logging.info(self.message)
-        dialog.set_title(self.title)
-        dialog.run()
-        dialog.destroy()
-
-
-class AutoLoginConfigurator(object):
-    """
-    Enable/disable autologin configuration
-    to make sure that reboot test will work properly
-    """
-    CONFIG_FILENAME = '/etc/lightdm/lightdm.conf'
-    TEMPLATE = """
-[SeatDefaults]
-greeter-session=unity-greeter
-user-session=ubuntu
-autologin-user={username}
-autologin-user-timeout=0
-"""
-
-    def enable(self):
-        """
-        Make sure user will autologin in next reboot
-        """
-        logging.debug('Enabling autologin for this user...')
-        if os.path.exists(self.CONFIG_FILENAME):
-            for backup_filename in self.generate_backup_filename():
-                if not os.path.exists(backup_filename):
-                    shutil.copyfile(self.CONFIG_FILENAME, backup_filename)
-                    shutil.copystat(self.CONFIG_FILENAME, backup_filename)
-                    break
-
-        with open(self.CONFIG_FILENAME, 'w') as f:
-            f.write(self.TEMPLATE.format(username=os.getenv('SUDO_USER')))
-
-    def disable(self):
-        """
-        Remove latest configuration file
-        and use the same configuration that was in place
-        before running the test
-        """
-        logging.debug('Restoring autologin configuration...')
-        backup_filename = None
-        for filename in self.generate_backup_filename():
-            if not os.path.exists(filename):
-                break
-            backup_filename = filename
-
-        if backup_filename:
-            shutil.copy(backup_filename, self.CONFIG_FILENAME)
-            os.remove(backup_filename)
-        else:
-            os.remove(self.CONFIG_FILENAME)
-
-    def generate_backup_filename(self):
-        backup_filename = self.CONFIG_FILENAME + '.bak'
-        yield backup_filename
-
-        index = 0
-        while True:
-            index += 1
-            backup_filename = (self.CONFIG_FILENAME
-                               + '.bak.{0}'.format(index))
-            yield backup_filename
-
-
-class SudoersConfigurator(object):
-    """
-    Enable/disable reboot test to be executed as root
-    to make sure that reboot test works properly
-    """
-    MARK = '# Automatically added by pm.py'
-    SUDOERS = '/etc/sudoers'
-
-    def enable(self):
-        """
-        Make sure that user will be allowed to execute reboot test as root
-        """
-        logging.debug('Enabling user to execute test as root...')
-        command = ("sed -i -e '$a{mark}\\n"
-                   "{user} ALL=NOPASSWD: /usr/bin/python' "
-                   "{filename}".format(mark=self.MARK,
-                                       user=os.getenv('SUDO_USER'),
-                                       script=os.path.realpath(__file__),
-                                       filename=self.SUDOERS))
-
-        Command(command, verbose=False).run()
-
-    def disable(self):
-        """
-        Revert sudoers configuration changes
-        """
-        logging.debug('Restoring sudoers configuration...')
-        command = (("sed -i -e '/{mark}/,+1d' "
-                    "{filename}")
-                   .format(mark=self.MARK,
-                           filename=self.SUDOERS))
-        Command(command, verbose=False).run()
-
-
-class AutoStartFile(object):
-    """
-    Generate autostart file contents and write it to proper location
-    """
-    TEMPLATE = """
-[Desktop Entry]
-Name={pm_operation} test
-Comment=Verify {pm_operation} works properly
-Exec=sudo /usr/bin/python {script} -r {repetitions} -w {wakeup} --hardware-delay {hardware_delay} --pm-delay {pm_delay} --min-pm-time {min_pm_time} --max-pm-time {max_pm_time} --append --total {total} --start {start} --pm-timestamp {pm_timestamp} {silent} --log-level={log_level} --log-dir={log_dir} {pm_operation}
-Type=Application
-X-GNOME-Autostart-enabled=true
-Hidden=false
-"""
-
-    def __init__(self, args):
-        self.args = args
-
-        # Generate desktop filename
-        # based on environment variables
-        username = os.getenv('SUDO_USER')
-        default_config_directory = os.path.expanduser('~{0}/.config'
-                                                      .format(username))
-        config_directory = os.getenv('XDG_CONFIG_HOME',
-                                     default_config_directory)
-        autostart_directory = os.path.join(config_directory, 'autostart')
-        if not os.path.exists(autostart_directory):
-            os.makedirs(autostart_directory)
-
-        basename = '{0}.desktop'.format(os.path.basename(__file__))
-        self.desktop_filename = os.path.join(autostart_directory,
-                                             basename)
-
-    def write(self):
-        """
-        Write autostart file to execute the script on startup
-        """
-        logging.debug('Writing desktop file ({0!r})...'
-                      .format(self.desktop_filename))
-
-        contents = (self.TEMPLATE
-                    .format(script=os.path.realpath(__file__),
-                            repetitions=self.args.repetitions - 1,
-                            wakeup=self.args.wakeup,
-                            hardware_delay=self.args.hardware_delay,
-                            pm_delay=self.args.pm_delay,
-                            min_pm_time=self.args.min_pm_time,
-                            max_pm_time=self.args.max_pm_time,
-                            total=self.args.total,
-                            start=self.args.start,
-                            pm_timestamp=int(time()),
-                            silent='--silent' if self.args.silent else '',
-                            log_level=self.args.log_level_str,
-                            log_dir=self.args.log_dir,
-                            pm_operation=self.args.pm_operation))
-        logging.debug(contents)
-
-        with open(self.desktop_filename, 'w') as f:
-            f.write(contents)
-
-    def remove(self):
-        """
-        Remove autostart file to avoid executing the script on startup
-        """
-        if os.path.exists(self.desktop_filename):
-            logging.debug('Removing desktop file ({0!r})...'
-                          .format(self.desktop_filename))
-            os.remove(self.desktop_filename)
-
-
-class LoggingConfiguration(object):
-    @classmethod
-    def set(cls, log_level, log_filename, append):
-        """
-        Configure a rotating file logger
-        """
-        logger = logging.getLogger()
-        logger.setLevel(logging.DEBUG)
-
-        # Log to sys.stderr using log level passed through command line
-        if log_level != logging.NOTSET:
-            log_handler = logging.StreamHandler()
-            formatter = logging.Formatter('%(levelname)-8s %(message)s')
-            log_handler.setFormatter(formatter)
-            log_handler.setLevel(log_level)
-            logger.addHandler(log_handler)
-
-        # Log to rotating file using DEBUG log level
-        log_handler = logging.handlers.RotatingFileHandler(log_filename,
-                                                           mode='a+',
-                                                           backupCount=3)
-        formatter = logging.Formatter('%(asctime)s %(levelname)-8s '
-                                      '%(message)s')
-        log_handler.setFormatter(formatter)
-        log_handler.setLevel(logging.DEBUG)
-        logger.addHandler(log_handler)
-
-        if not append:
-            # Create a new log file on every new
-            # (i.e. not scheduled) invocation
-            log_handler.doRollover()
-
-
-class MyArgumentParser(object):
-    """
-    Command-line argument parser
-    """
-    def __init__(self):
-        """
-        Create parser object
-        """
-        pm_operations = ('poweroff', 'reboot')
-        description = 'Run power management operation as many times as needed'
-        epilog = ('Unknown arguments will be passed '
-                  'to the underlying command: poweroff or reboot.')
-        parser = ArgumentParser(description=description, epilog=epilog)
-        parser.add_argument('-r', '--repetitions', type=int, default=1,
-                            help=('Number of times that the power management '
-                                  'operation has to be repeated '
-                                  '(%(default)s by default)'))
-        parser.add_argument('-w', '--wakeup', type=int, default=60,
-                            help=('Timeout in seconds for the wakeup alarm '
-                                  '(%(default)s by default). '
-                                  "Note: wakeup alarm won't be scheduled "
-                                  'for reboot.'))
-        parser.add_argument('--min-pm-time', dest='min_pm_time',
-                            type=int, default=0,
-                            help=('Minimum time in seconds that '
-                                  'it should take the power management '
-                                  'operation each cycle (0 for reboot and '
-                                  'wakeup time minus two seconds '
-                                  'for the other power management operations '
-                                  'by default)'))
-        parser.add_argument('--max-pm-time', dest='max_pm_time',
-                            type=int, default=300,
-                            help=('Maximum time in seconds '
-                                  'that it should take '
-                                  'the power management operation each cycle '
-                                  '(%(default)s by default)'))
-        parser.add_argument('--pm-delay', dest='pm_delay',
-                            type=int, default=5,
-                            help=('Delay in seconds '
-                                  'after hardware information '
-                                  'has been gathered and before executing '
-                                  'the power management operation '
-                                  '(%(default)s by default)'))
-        parser.add_argument('--hardware-delay', dest='hardware_delay',
-                            type=int, default=30,
-                            help=('Delay in seconds before gathering hardware '
-                                  'information (%(default)s by default)'))
-        parser.add_argument('--silent', action='store_true',
-                            help=("Don't display any dialog "
-                                  'when test is complete '
-                                  'to let the script be used '
-                                  'in automated tests'))
-        log_levels = ['notset', 'debug', 'info',
-                      'warning', 'error', 'critical']
-        parser.add_argument('--log-level', dest='log_level_str',
-                            default='info', choices=log_levels,
-                            help=('Log level. '
-                                  'One of {0} or {1} (%(default)s by default)'
-                                  .format(', '.join(log_levels[:-1]),
-                                          log_levels[-1])))
-        parser.add_argument('--log-dir', dest='log_dir', default='/var/log',
-                            help=('Path to the directory to store log files'))
-        parser.add_argument('pm_operation', choices=pm_operations,
-                            help=('Power management operation to be performed '
-                                  '(one of {0} or {1!r})'
-                                  .format(', '.join(map(repr,
-                                                        pm_operations[:-1])),
-                                          pm_operations[-1])))
-
-        # Test timestamps
-        parser.add_argument('--start', type=int, default=0, help=SUPPRESS)
-        parser.add_argument('--pm-timestamp', dest='pm_timestamp',
-                            type=int, default=0, help=SUPPRESS)
-
-        # Append to log on subsequent startups
-        parser.add_argument('--append', action='store_true',
-                            default=False, help=SUPPRESS)
-
-        # Total number of iterations initially passed through the command line
-        parser.add_argument('--total', type=int, default=0, help=SUPPRESS)
-        self.parser = parser
-
-    def parse(self):
-        """
-        Parse command-line arguments
-        """
-        args, extra_args = self.parser.parse_known_args()
-        args.log_level = getattr(logging, args.log_level_str.upper())
-
-        # Total number of repetitions
-        # is the number of repetitions passed through the command line
-        # the first time the script is executed
-        if not args.total:
-            args.total = args.repetitions
-
-        # Test start time automatically set on first iteration
-        if not args.start:
-            args.start = int(time())
-
-        # Wakeup time set to 0 for 'reboot'
-        # since wakeup alarm won't be scheduled
-        if args.pm_operation == 'reboot':
-            args.wakeup = 0
-            args.min_pm_time = 0
-
-        # Minimum time for each power management operation
-        # is set to the wakeup time
-        if not args.min_pm_time:
-            min_pm_time = args.wakeup - 2
-            if min_pm_time < 0:
-                min_pm_time = 0
-            args.min_pm_time = min_pm_time
-
-        # Log filename shows clearly the type of test (pm_operation)
-        # and the times it was repeated (repetitions)
-        args.log_filename = os.path.join(args.log_dir,
-                                         ('{0}.{1}.{2}.log'
-                                          .format(os.path.basename(__file__),
-                                                  args.pm_operation,
-                                                  args.total)))
-        return args, extra_args
-
-
-if __name__ == '__main__':
-    sys.exit(main())

=== removed file 'scripts/process_wait'
--- scripts/process_wait	2012-07-12 18:49:59 +0000
+++ scripts/process_wait	1970-01-01 00:00:00 +0000
@@ -1,73 +0,0 @@
-#!/usr/bin/env python3
-
-import os
-import sys
-import time
-
-from optparse import OptionParser
-from subprocess import Popen, PIPE
-
-
-COMMAND_FORMAT = "pgrep -f %(options)s %(process)s"
-
-
-def process_pids(process, *options):
-    options_string = " ".join(options)
-    command = COMMAND_FORMAT % {"options": options_string, "process": process}
-
-    # Exclude this process and the pgrep process
-    subprocess = Popen(
-        command, stdout=PIPE, shell=True, universal_newlines=True)
-    exclude_pids = [os.getpid(), os.getppid(), subprocess.pid]
-
-    pids_string = subprocess.communicate()[0]
-    pids = [int(pid) for pid in pids_string.split()]
-
-    result = set(pids).difference(exclude_pids)
-    return list(result)
-
-
-def process_count(*args):
-    return len(process_pids(*args))
-
-
-def main(args):
-    default_sleep = 1
-
-    usage = "Usage: %prog PROCESS [PROCESS...]"
-    parser = OptionParser(usage=usage)
-    parser.add_option("-s", "--sleep",
-        type="int",
-        default=default_sleep,
-        help="Number of seconds to sleep between checks.")
-    parser.add_option("-t", "--timeout",
-        type="int",
-        help="Number of seconds to timeout from sleeping.")
-    parser.add_option("-u", "--uid",
-        help="Effective user name or id of the running processes")
-    (options, processes) = parser.parse_args(args)
-
-    process_args = []
-    if options.uid is not None:
-        process_args.extend(["-u", options.uid])
-
-    while True:
-        for process in processes:
-            if process_count(process, *process_args):
-                break
-        else:
-            break
-
-        if options.timeout is not None:
-            if options.timeout <= 0:
-                return 1
-            else:
-                options.timeout -= options.sleep
-
-        time.sleep(options.sleep)
-
-    return 0
-
-
-if __name__ == "__main__":
-    sys.exit(main(sys.argv[1:]))

=== removed file 'scripts/pts_run'
--- scripts/pts_run	2013-01-31 20:06:33 +0000
+++ scripts/pts_run	1970-01-01 00:00:00 +0000
@@ -1,34 +0,0 @@
-#!/bin/bash
-
-# Exit on any error
-set -o errexit
-
-# Accept Terms & Conditions, disable anonymous reporting
-echo -e "Y\nn\nn" | phoronix-test-suite > /dev/null
-
-# Disable batch result saving and all test options selection
-echo -e "n\nn" | phoronix-test-suite batch-setup > /dev/null 
-
-# Run each test only one time
-export FORCE_TIMES_TO_RUN=1
-
-# Run only the following resolution
-export OVERRIDE_VIDEO_MODES=800x600
-
-set +o errexit
-rv=0
-output=$(phoronix-test-suite batch-benchmark $@ 2>&1)
-#The output does NOT report success. It may contain, if it fails:
-# The test did not produce a result
-# The test failed to run properly
-# Failed to Fetch
-
-if (echo "$output" | grep -q -i "Failed to fetch" ); then 
-	rv=1
-fi
-if ( echo "$output" | grep -q -i 'This test failed to run properly'); then 
-	rv=1
-fi
-echo "$output"
-exit $rv
-

=== removed file 'scripts/rendercheck_test'
--- scripts/rendercheck_test	2013-05-03 10:46:46 +0000
+++ scripts/rendercheck_test	1970-01-01 00:00:00 +0000
@@ -1,263 +0,0 @@
-#!/usr/bin/python3
-# -*- coding: utf-8 -*-
-#
-# rendercheck_test
-#
-# This file is part of Checkbox.
-#
-# Copyright 2012 Canonical Ltd.
-#
-# Authors: Alberto Milone <alberto.milone@xxxxxxxxxxxxx>
-#
-# Checkbox is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Checkbox is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Checkbox.  If not, see <http://www.gnu.org/licenses/>.
-
-from subprocess import Popen, PIPE
-from argparse import ArgumentParser
-
-import logging
-import os
-import re
-import tempfile
-import errno
-
-
-class RenderCheck(object):
-    """A simple class to run the rendercheck suites"""
-
-    def __init__(self, temp_dir=None):
-        self._temp_dir = temp_dir
-
-    def _print_test_info(self, suites='all', iteration=1, show_errors=False):
-        '''Print the output of the test suite'''
-
-        main_command = 'rendercheck'
-        passed = 0
-        total = 0
-
-        if self._temp_dir:
-            # Use the specified path
-            temp_file = tempfile.NamedTemporaryFile(dir=self._temp_dir,
-                                                    delete=False)
-        else:
-            # Use /tmp
-            temp_file = tempfile.NamedTemporaryFile(delete=False)
-
-        if suites == all:
-            full_command = [main_command, '-f', 'a8r8g8b8']
-        else:
-            full_command = [main_command, '-t', suites, '-f', 'a8r8g8b8']
-
-        try:
-            # Let's dump the output into file as it can be very large
-            # and we don't want to store it in memory
-            process = Popen(full_command, stdout=temp_file,
-                            universal_newlines=True)
-        except OSError as exc:
-            if exc.errno == errno.ENOENT:
-                logging.error('Error: please make sure that rendercheck '
-                              'is installed.')
-                exit(1)
-            else:
-                raise
-
-        exit_code = process.wait()
-
-        temp_file.close()
-
-        # Read values from the file
-        errors = re.compile('.*test error.*')
-        results = re.compile('(.+) tests passed of (.+) total.*')
-
-        first_error = True
-        with open(temp_file.name) as temp_handle:
-            for line in temp_handle:
-                match_output = results.match(line)
-                match_errors = errors.match(line)
-                if match_output:
-                    passed = int(match_output.group(1).strip())
-                    total = int(match_output.group(2).strip())
-                    logging.info('Results:')
-                    logging.info('    %d tests passed out of %d.'
-                                  % (passed, total))
-                if show_errors and match_errors:
-                    error = match_errors.group(0).strip()
-                    if first_error:
-                        logging.debug('Rendercheck %s suite errors '
-                                      'from iteration %d:'
-                                       % (suites, iteration))
-                        first_error = False
-                    logging.debug('    %s' % error)
-
-        # Remove the file
-        os.unlink(temp_file.name)
-
-        return (exit_code, passed, total)
-
-    def run_test(self, suites=[], iterations=1, show_errors=False):
-        exit_status = 0
-        for suite in suites:
-            for it in range(iterations):
-                logging.info('Iteration %d of Rendercheck %s suite...'
-                              % (it + 1, suite))
-                (status, passed, total) = \
-                self._print_test_info(suites=suite,
-                                      iteration=it + 1,
-                                      show_errors=show_errors)
-                if status != 0:
-                    # Make sure to catch a non-zero exit status
-                    logging.info('Iteration %d of Rendercheck %s suite '
-                                  'exited with status %d.'
-                                  % (it + 1, suite, status))
-                    exit_status = status
-                it += 1
-
-                # exit with 1 if passed < total
-                if passed < total:
-                    if exit_status == 0:
-                        exit_status = 1
-        return exit_status
-
-    def get_suites_list(self):
-        '''Return a list of the available test suites'''
-        try:
-            process = Popen(['rendercheck', '--help'], stdout=PIPE,
-                            stderr=PIPE, universal_newlines=True)
-        except OSError as exc:
-            if exc.errno == errno.ENOENT:
-                logging.error('Error: please make sure that rendercheck '
-                              'is installed.')
-                exit(1)
-            else:
-                raise
-
-        proc = process.communicate()[1].split('\n')
-        found = False
-        tests_pattern = re.compile('.*Available tests: *(.+).*')
-        temp_line = ''
-        tests = []
-        for line in proc:
-            if found:
-                temp_line += line
-            match = tests_pattern.match(line)
-            if match:
-                first_line = match.group(1).strip().lower()
-                found = True
-                temp_line += first_line
-        for elem in temp_line.split(','):
-            test = elem.strip()
-            if elem:
-                tests.append(test)
-        return tests
-
-
-def main():
-    usage = 'Usage: %prog [OPTIONS]'
-    all_tests = RenderCheck().get_suites_list()
-
-    parser = ArgumentParser(usage)
-    parser.add_argument('-i', '--iterations',
-                        type=int,
-                        default=1,
-                        help='The number of times to run the test. \
-                              Default is 1')
-    parser.add_argument('-t', '--test',
-                        default='all',
-                        help='The name of the test suit to run. \
-                              Available tests: \
-                              %s. \
-                              Default is all' % (', '.join(all_tests)))
-    parser.add_argument('-b', '--blacklist',
-                        action='append',
-                        help='The name of a test which should not be run.')
-    parser.add_argument('-d', '--debug',
-                        action='store_true',
-                        help='Choose this to add verbose output \
-                              for debug purposes')
-    parser.add_argument('-o', '--output',
-                        default='',
-                        help='The path to the log which will be dumped. \
-                              Default is stdout')
-    parser.add_argument('-tp', '--temp',
-                        default='',
-                        help='The path where to store temporary files. \
-                              Default is /tmp')
-    args = parser.parse_args()
-
-    # Set up logging to console
-    format = '%(message)s'
-
-    console_handler = logging.StreamHandler()
-    console_handler.setFormatter(logging.Formatter(format))
-
-    # Set up the overall logger
-    logger = logging.getLogger()
-    # This is necessary to ensure debug messages are passed through the logger
-    # to the handler
-    logger.setLevel(logging.DEBUG)
-
-    # This is what happens when -d and/or -o are passed:
-    # -o ->     stdout (info)                - log (info)
-    # -d ->     only stdout (info and debug) - no log
-    # -d -o ->  stdout (info)                - log (info and debug)
-
-    # Write to a log
-    if args.output:
-        # Write INFO to stdout
-        console_handler.setLevel(logging.INFO)
-        logger.addHandler(console_handler)
-        # Specify a log file
-        logfile = args.output
-        logfile_handler = logging.FileHandler(logfile)
-        if args.debug:
-            # Write INFO and DEBUG to a log
-            logfile_handler.setLevel(logging.DEBUG)
-        else:
-            # Write INFO to a log
-            logfile_handler.setLevel(logging.INFO)
-
-        logfile_handler.setFormatter(logging.Formatter(format))
-        logger.addHandler(logfile_handler)
-        log_path = os.path.abspath(logfile)
-        logging.info("The log can be found at %s" % log_path)
-
-    # Write only to stdout
-    else:
-        if args.debug:
-            # Write INFO and DEBUG to stdout
-            console_handler.setLevel(logging.DEBUG)
-            logger.addHandler(console_handler)
-        else:
-            # Write INFO to stdout
-            console_handler.setLevel(logging.INFO)
-            logger.addHandler(console_handler)
-
-    exit_status = 0
-
-    if args.test == 'all':
-        tests = all_tests
-    else:
-        tests = args.test.split(',')
-
-    for test in args.blacklist:
-        if test in tests:
-            tests.remove(test)
-
-    rendercheck = RenderCheck(args.temp)
-    exit_status = rendercheck.run_test(tests, args.iterations,
-                                       args.debug)
-
-    exit(exit_status)
-
-if __name__ == '__main__':
-    main()

=== removed file 'scripts/resolution_test'
--- scripts/resolution_test	2012-10-18 09:46:56 +0000
+++ scripts/resolution_test	1970-01-01 00:00:00 +0000
@@ -1,49 +0,0 @@
-#!/usr/bin/env python3
-
-import sys
-
-from argparse import ArgumentParser
-
-from gi.repository import Gdk
-
-
-def check_resolution():
-    screen = Gdk.Screen.get_default()
-    n = screen.get_n_monitors()
-    for i in range(n):
-        geom = screen.get_monitor_geometry(i)
-        print('Monitor %d:' % (i + 1))
-        print('  %d x %d' % (geom.width, geom.height))
-
-
-def compare_resolution(min_h, min_v):
-    # Evaluate just the primary display
-    screen = Gdk.Screen.get_default()
-    geom = screen.get_monitor_geometry(screen.get_primary_monitor())
-    print("Minimum acceptable display resolution: %d x %d" % (min_h, min_v))
-    print("Detected display resolution: %d x %d" % (geom.width, geom.height))
-    return geom.width >= min_h and geom.height >= min_v
-
-
-def main():
-    parser = ArgumentParser()
-    parser.add_argument("--horizontal",
-        type=int,
-        default=0,
-        help="Minimum acceptable horizontal resolution.")
-    parser.add_argument("--vertical",
-        type=int,
-        default=0,
-        help="Minimum acceptable vertical resolution.")
-    args = parser.parse_args()
-
-    if (args.horizontal > 0) and (args.vertical > 0):
-        return not compare_resolution(args.horizontal, args.vertical)
-    else:
-        check_resolution()
-
-    return 0
-
-
-if __name__ == "__main__":
-    sys.exit(main())

=== removed file 'scripts/rotation_test'
--- scripts/rotation_test	2013-05-07 13:59:04 +0000
+++ scripts/rotation_test	1970-01-01 00:00:00 +0000
@@ -1,73 +0,0 @@
-#!/usr/bin/python3
-# -*- coding: utf-8 -*-
-#
-#  rotation_test
-#
-# This file is part of Checkbox.
-#
-# Copyright 2012 Canonical Ltd.
-#
-# Authors: Alberto Milone <alberto.milone@xxxxxxxxxxxxx>
-#
-# Checkbox is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Checkbox is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Checkbox.  If not, see <http://www.gnu.org/licenses/>.
-
-import time
-import sys
-
-from checkbox.contrib import xrandr
-
-
-def rotate_screen(rotation):
-    # Refresh the screen. Required by NVIDIA
-    screen = xrandr.get_current_screen()
-    screen.set_rotation(rotation)
-    return screen.apply_config()
-
-def main():
-    screen = xrandr.get_current_screen()
-    rotations = {'normal': xrandr.RR_ROTATE_0,
-                 'right': xrandr.RR_ROTATE_90,
-                 'inverted': xrandr.RR_ROTATE_180,
-                 'left': xrandr.RR_ROTATE_270}
-    rots_statuses = {}
-
-    for rot in rotations:
-        try:
-            status = rotate_screen(rotations[rot])
-        except(xrandr.RRError, xrandr.UnsupportedRRError) as error:
-            status = 1
-        else:
-            error = 'N/A'
-        # Collect the status and the error message
-        rots_statuses[rot] = (status, error)
-        time.sleep(4)
-
-    # Try to set the screen back to normal
-    try:
-        rotate_screen(xrandr.RR_ROTATE_0)
-    except(xrandr.RRError, xrandr.UnsupportedRRError) as error:
-        print(error)
-
-    result = 0
-    for elem in rots_statuses:
-        status = rots_statuses.get(elem)[0]
-        error = rots_statuses.get(elem)[1]
-        if status != 0:
-            print('Error: rotation "%s" failed with status %d: %s.' %
-                  (elem, status, error), file=sys.stderr)
-            result = 1
-    return result
-
-if __name__ == '__main__':
-    exit(main())

=== removed file 'scripts/samba_test'
--- scripts/samba_test	2012-05-22 18:01:21 +0000
+++ scripts/samba_test	1970-01-01 00:00:00 +0000
@@ -1,38 +0,0 @@
-#!/bin/bash
-#
-#  Confirm Samba service is running
-#  Requires: samba winbind
-#
-
-#Verify Samba processes are running
-smbd=`pgrep smbd`
-if [ -z "$smbd" ]; then
-  echo "FAIL: smbd is not running."
-  exit 1
-fi
-
-nmbd=`pgrep nmbd`
-if [ -z "$nmbd" ]; then
-  echo "FAIL: nmbd is not running."
-  exit 1
-fi
-
-winbindd=`pgrep winbindd`
-if [ -z "$winbindd" ]; then
-  echo "FAIL: winbindd is not running."
-  exit 1
-fi
-
-sid=`net getlocalsid | grep "S-1-5"` #req. root
-if [ -z "$sid" ]; then
-  echo "FAIL: Default samba workgroup is not set."
-  exit 1
-fi
-
-users=`net usersidlist | grep "UBUNTU"`
-if [ -z "$sid" ]; then
-  echo "FAIL: samba userId is not set."
-  exit 1
-fi
-
-exit 0

=== removed file 'scripts/sleep_test'
--- scripts/sleep_test	2013-07-05 16:43:48 +0000
+++ scripts/sleep_test	1970-01-01 00:00:00 +0000
@@ -1,393 +0,0 @@
-#!/usr/bin/python
-'''
-Program to automate system entering and resuming from sleep states
-
-Copyright (C) 2010,2011 Canonical Ltd.
-
-Author:
-    Jeff Lane <jeffrey.lane@xxxxxxxxxxxxx>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License version 2,
-as published by the Free Software Foundation.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-'''
-
-import os
-import sys
-import logging
-import re
-from subprocess import call
-from optparse import OptionParser, OptionGroup
-from syslog import *
-
-
-class ListDictHandler(logging.StreamHandler):
-    '''
-    Extends logging.StreamHandler to handle list, tuple and dict objects
-    internally, rather than through external code, mainly used for debugging
-    purposes.
-
-    '''
-    def emit(self, record):
-        if isinstance(record.msg, (list, tuple,)):
-            for msg in record.msg:
-                logger = logging.getLogger(record.name)
-                new_record = logger.makeRecord(record.name, record.levelno,
-                    record.pathname, record.lineno, msg, record.args,
-                    record.exc_info, record.funcName)
-                logging.StreamHandler.emit(self, new_record)
-        elif isinstance(record.msg, dict):
-            for key, val in record.msg.iteritems():
-                logger = logging.getLogger(record.name)
-                new_msg = '%s: %s' % (key, val)
-                new_record = logger.makeRecord(record.name, record.levelno,
-                    record.pathname, record.lineno, new_msg, record.args,
-                    record.exc_info, record.funcName)
-                logging.StreamHandler.emit(self, new_record)
-        else:
-            logging.StreamHandler.emit(self, record)
-
-
-class SuspendTest():
-    '''
-    Creates an object to handle the actions necessary for suspend/resume
-    testing.
-
-    '''
-    def __init__(self):
-        self.wake_time = 0
-        self.current_time = 0
-        self.last_time = 0
-
-    def CanWeSleep(self, mode):
-        '''
-        Test to see if S3 state is available to us.  /proc/acpi/* is old
-        and will be deprecated, using /sys/power to maintain usefulness for
-        future kernels.
-
-        '''
-        states_fh = open('/sys/power/state',

Follow ups