diff --git a/bin/run-bluez-tests b/bin/run-bluez-tests
index fa2d908..dee47c0 100755
--- a/bin/run-bluez-tests
+++ b/bin/run-bluez-tests
@@ -1,5 +1,5 @@
 #!/bin/sh
 export PATH="$PATH:$SNAP/usr/sbin"
 exec python3 $(which plainbox) \
-	run -i '2016.com.canonical.bluez::bluez.*' \
+	run -i '2017.com.canonical.se::bluez.*' \
 	"$@"
diff --git a/bin/run-modem-manager-tests b/bin/run-modem-manager-tests
index 02fea4b..3233da5 100755
--- a/bin/run-modem-manager-tests
+++ b/bin/run-modem-manager-tests
@@ -1,5 +1,5 @@
 #!/bin/sh
 export PATH="$PATH:$SNAP/usr/sbin"
 exec python3 $(which plainbox) \
-	run -i '2016.com.canonical.modem-manager::modem_manager.*' \
+	run -i '2017.com.canonical.se::modem_manager.*' \
 	"$@"
diff --git a/bin/run-network-manager-tests b/bin/run-network-manager-tests
index 7f90af1..8d48253 100755
--- a/bin/run-network-manager-tests
+++ b/bin/run-network-manager-tests
@@ -1,5 +1,5 @@
 #!/bin/sh
 export PATH="$PATH:$SNAP/usr/sbin"
 exec python3 $(which plainbox) \
-	run -i '2016.com.canonical.network-manager::network_manager.*' \
+	run -i '2017.com.canonical.se::network_manager.*' \
 	"$@"
diff --git a/bin/run-pulseaudio-tests b/bin/run-pulseaudio-tests
index 4e0b088..395e8eb 100755
--- a/bin/run-pulseaudio-tests
+++ b/bin/run-pulseaudio-tests
@@ -1,5 +1,5 @@
 #!/bin/sh
 export PATH="$PATH:$SNAP/usr/sbin"
 exec python3 $(which plainbox) \
-	run -i '2016.com.canonical.pulseaudio::pulseaudio.*' \
+	run -i '2017.com.canonical.se::pulseaudio.*' \
 	"$@"
diff --git a/bin/run-tpm-tests b/bin/run-tpm-tests
index ea48ca1..5c08021 100755
--- a/bin/run-tpm-tests
+++ b/bin/run-tpm-tests
@@ -1,5 +1,5 @@
 #!/bin/sh
 export PATH="$PATH:$SNAP/usr/sbin"
 exec python3 $(which plainbox) \
-	run -i '2016.com.canonical.tpm::tpm.*' \
+	run -i '2017.com.canonical.se::tpm.*' \
 	"$@"
diff --git a/bin/run-udisks2-tests b/bin/run-udisks2-tests
index 5d5c73e..73fac7a 100755
--- a/bin/run-udisks2-tests
+++ b/bin/run-udisks2-tests
@@ -1,5 +1,5 @@
 #!/bin/sh
 export PATH="$PATH:$SNAP/usr/sbin"
 exec python3 $(which plainbox) \
-	run -i '2017.com.canonical.udisks2::udisks2.*' \
+	run -i '2017.com.canonical.se::udisks2.*' \
 	"$@"
diff --git a/bin/run-wifi-ap-tests b/bin/run-wifi-ap-tests
index 0d7dce0..f69ac83 100755
--- a/bin/run-wifi-ap-tests
+++ b/bin/run-wifi-ap-tests
@@ -1,5 +1,5 @@
 #!/bin/sh
 export PATH="$PATH:$SNAP/usr/sbin"
 exec python3 $(which plainbox) \
-	run -i '2016.com.canonical.wifi-ap::wifi_ap.*' \
+	run -i '2017.com.canonical.se::wifi_ap.*' \
 	"$@"
diff --git a/bin/run-wireless-tools-tests b/bin/run-wireless-tools-tests
index 69f5769..491c041 100755
--- a/bin/run-wireless-tools-tests
+++ b/bin/run-wireless-tools-tests
@@ -1,5 +1,5 @@
 #!/bin/sh
 export PATH="$PATH:$SNAP/usr/sbin"
 exec python3 $(which plainbox) \
-	run -i '2016.com.canonical.wireless-tools::wireless-tools.*' \
+	run -i '2017.com.canonical.se::wireless-tools.*' \
 	"$@"
diff --git a/bluez/manage.py b/bluez/manage.py
deleted file mode 100755
index 78b0dbd..0000000
--- a/bluez/manage.py
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env python3
-from plainbox.provider_manager import setup, N_
-
-setup(
-    name='plainbox-provider-bluez',
-    namespace='2016.com.canonical.bluez',
-    version="1.0",
-    description=N_("Plainbox provider for the BlueZ snap"),
-    gettext_domain="2016_com_canonical_bluez",
-)
diff --git a/bluez/units/desktop.pxu b/bluez/units/desktop.pxu
deleted file mode 100644
index 0075fa5..0000000
--- a/bluez/units/desktop.pxu
+++ /dev/null
@@ -1,142 +0,0 @@
-# Copyright (C) 2017 Canonical, Ltd.
-# All rights reserved.
-#
-# Written by:
-#   Matteo Croce <matteo.croce@canonical.com>
-
-id: bluez/setup/enabled_on_boot_desktop
-category_id: bluez
-_description: Ensure that Bluetooth is enabled on boot
-plugin: manual
-_steps:
-  1. Power on the PC
-  2. If Bluetooth isn't enabled on first boot, enable it and reboot
-_verification:
-  1. Go to System Settings->Bluetooth
-  2. Check that Bluetooth kill-switch is "on"
-  3. Look at Bluetooth indicator: verify it is active and Bluetooth kill switch is "on"
-  4. Verify that Bluetooth is still enabled
-
-id: bluez/setup/discoverable_by_default_desktop
-category_id: bluez
-_description: Ensure that device is discoverable by default
-plugin: manual
-_steps:
-  1. Power on the PC
-  2. Goto System Settings->Bluetooth
-_verification:
-  In Ubuntu Touch devices the 'discoverable' option should be enabled by default,
-  in desktop devices it should not
-
-id: bluez/setup/bt_name_correct_desktop
-category_id: bluez
-_description: Ensure that the Bluetooth device name is correct
-plugin: manual
-_steps:
-  1. Power on the PC
-_verification:
-  1. Go to System Settings->Bluetooth
-  2. Verify that the Bluetooth device name is correct:
-     is set to the Ubuntu Touch device name, eg. could be BQ Aquaris E4.5 on Ubuntu Touch,
-     or to the hostname for desktop
-
-id: bluez/connection/device_cycle
-category_id: bluez
-_description: Verify that devices will reconnect after power cycle
-plugin: manual
-_steps:
-  1. Go to Unity Control Center
-  2. Click Search for devices
-  3. Put the gadget in pairing mode
-  4. Select the gadget from the list and click pair
-  5. Power off the device
-  6. Power on the device
-_verification:
-  1. Verify that the paired device will reconnect automatically,
-  eg. it appears bold in the list
-
-id: bluez/connection/device_disconnect
-category_id: bluez
-_description: Verify that the connected device can be disconnected
-depends: bluez/connection/device_cycle
-plugin: manual
-_steps:
-  1. Pair a device with a computer
-  2. Remove the pairing
-  3. Pair the device a second time
-_verification:
-  1. Verify that the device can connect again
-
-id: bluez/connection/pc_reboot
-category_id: bluez
-_description: Verify that devices will reconnect after reboot
-depends: bluez/connection/device_cycle
-plugin: manual
-_steps:
-  1. Pair a device with the computer
-  2. Reboot the computer
-_verification:
-  1. Verify that the paired device will reconnect after rebooting it
-
-id: bluez/connection/device_discard
-category_id: bluez
-_description: Verify that the paired device can be forgotten
-depends: bluez/connection/device_cycle
-plugin: manual
-_steps:
-  1. Pair a device with the computer
-  2. Remove the pairing
-_verification:
-  1. Verify that the paired device no longer appears in the devices list,
-  eg. it's NOT listed in bold in Unity Control Center
-
-id: bluez/connection/no_connect_discarded
-category_id: bluez
-_description: Verify that a discarded device don't connect
-depends: bluez/connection/device_cycle
-plugin: manual
-_steps:
-  1. Pair a device with the computer
-  2. Remove the pairing
-_verification:
-  1. Verify that the paired device no longer connects
-
-id: bluez/connection/device_readd
-category_id: bluez
-_description: Verify that a discarded device can be paired again
-depends: bluez/connection/device_cycle
-plugin: manual
-_steps:
-  1. Pair a device with the computer
-  2. Remove the pairing
-  4. Pair the device again
-_verification:
-  1. Ensure that the device can connect
-
-id: bluez/discoverable/pc_not_discoverable
-category_id: bluez
-_description: Verify that the PC can disable discovery
-plugin: manual
-_steps:
-  1. Toggle the PC Bluetooth visibility off
-_verification:
-  1. Ensure that the PC can't be discovered from any other device
-
-id: bluez/discoverable/pc_discoverable
-category_id: bluez
-_description: Verify that the PC can enable discovery
-plugin: manual
-_steps:
-  1. Toggle the visibility on
-  2. Do a Bluetooth scan from another device, eg. a smartphone
-_verification:
-  1. Ensure that the PC can be discovered from the other device
-
-id: bluez/setup/ensure_interface_connection_setup_desktop
-category_id: bluez
-_description: Ensure that the bluez interface is connected
-plugin: manual
-_verification:
-   Open a text editor and make sure you can type text from the HID keyboard
-   into the text box. If testing a mouse, ensure that the cursor moves when
-   moving your HID mouse.
diff --git a/bluez/units/general.pxu b/bluez/units/general.pxu
deleted file mode 100644
index 18b8b52..0000000
--- a/bluez/units/general.pxu
+++ /dev/null
@@ -1,302 +0,0 @@
-# Copyright (C) 2017 Canonical, Ltd.
-# All rights reserved.
-#
-# Written by:
-#   Jim Hodapp <jim.hodapp@canonical.com>
-#   Matteo Croce <matteo.croce@canonical.com>
-
-unit: category
-id: bluez
-_name: BlueZ
-
-id: bluez/setup/enabled_on_boot
-category_id: bluez
-_description: Ensure that Bluetooth is enabled on boot
-plugin: manual
-_steps:
-  1. Power on the Device Under Test
-  2. If Bluetooth isn't enabled on first boot, enable it and reboot
-  3. Use bluetoothctl to check if there is an active adapter
-  .
-    $ bluetoothctl 
-_verification:
-  1. Check that there is a Controller in the output, eg.
-    [NEW] Controller 00:10:20:30:40:50 pi [default]
-
-id: bluez/scan/start_inquiry
-category_id: bluez
-_description: Verify that found gadgets are reported during an ongoing device discovery
-plugin: manual
-_steps:
-  1. Turn Bluetooth on on a gadget and make it discoverable
-  2. Use bluetoothctl to start a device scan:
-  .
-   $ bluetoothctl
-   [bluetooth]# scan on
-   [bluetooth]# devices
-  .
-_verification:
-  You should see the gadget listed after the local adapter:
-  Device XX:XX:XX:XX:XX:XX My Device
-  [NEW] Device 04:52:C7:0D:0C:03 QC 35s
-
-id: bluez/scan/stop_inquiry
-category_id: bluez
-_description: Verify that gadgets are not found with scan disabled
-plugin: manual
-_steps:
-  1. Use bluetoothctl to start stop the device scan
-  .
-   $ bluetoothctl
-   [bluetooth]# scan off
-  .
-  2. Turn bluetooth on on a gadget and make it discoverable
-  3. Use bluetoothctl to get the devices list
-  .
-   $ bluetoothctl
-   [bluetooth]# devices
-  .
-_verification:
-  You should only see the local adapter in the list
-  Device XX:XX:XX:XX:XX:XX My Device
-
-id: bluez/pairing/can_be_enabled
-category_id: bluez
-_description: Verify that the device pairing works
-plugin: manual
-_steps:
-  1. Use bluetoothctl to enable pairing
-  .
-   $ bluetoothctl
-   [bluetooth]# pairable on
-  .
-  2. Pair the Device Under Test from a gadget
-_verification:
-  1. You should be able to do the pairing
-
-id: bluez/pairing/can_be_disabled
-category_id: bluez
-_description: Verify that the pairing can be disabled
-plugin: manual
-_steps:
-  1. Use bluetoothctl to disable pairing
-  .
-   $ bluetoothctl
-   [bluetooth]# pairable off
-  .
-  2. Pair the Device Under Test from a gadget
-_verification:
-  1. You shouldn't be able to do the pairing
-
-id: bluez/setup/discoverable_by_default
-category_id: bluez
-_description: Ensure that Device Under Test is discoverable by default
-plugin: manual
-_steps:
-  1. Type:
-  .
-    $ bluetoothctl
-    [bluetooth]# show
-  2. Scan for devices from a smartphone
-_verification:
-  1. Verify that the Device Under Test is discoverable by default, eg.
-  .
-    $ bluetoothctl
-    [bluetooth]# show
-  .
-  contains the "Discoverable: yes" line
-  2. Check that the Device Under Test can be discovered on the smartphone
-
-id: bluez/setup/bt_name_correct
-category_id: bluez
-_description: Ensure that the Bluetooth Device Under Test name is correct
-plugin: manual
-_steps:
-  1. Type:
-  .
-    $ bluetoothctl
-    [bluetooth]# show
-_verification:
-  1. Verify that the Bluetooth Device Under Test name is correct: equals to the Ubuntu Touch
-  device name, eg. could be BQ Aquaris E4.5 on Ubuntu Touch,
-  or to the hostname for desktop
-  .
-    Name: Ubuntu
-
-id: bluez/setup/bt_name_correct_from_gadget
-category_id: bluez
-_description: Ensure that the Bluetooth Device Under Test name advertise correctly
-plugin: manual
-_steps:
-  1. Scan for devices from a smartphone
-_verification:
-  1. Verify that the Bluetooth Device Under Test name is correct as seen from an external device
-
-id: bluez/connection/gadget_reconnect_after_power_cycle
-category_id: bluez
-_description: Verify that gadgets will reconnect after power cycle
-plugin: manual
-_steps:
-  1. Connect a gadget with the Device Under Test:
-  .
-    $ bluetoothctl
-    bluetooth]# scan on
-    Discovery started
-    [NEW] Device 01:02:03:04:05:06 device
-    [bluetooth]# pair 01:02:03:04:05:06
-    Pairing successful
-    [bluetooth]# trust 01:02:03:04:05:06
-    Trusted
-    [bluetooth]# connect 01:02:03:04:05:06
-  .
-  2. Power off the gadget
-  3. Power on the gadget
-_verification:
-  1. Verify that the paired gadget will reconnect automatically
-  .
-    $ bluetoothctl
-    bluetooth]# info 01:02:03:04:05:06
-  .
-    and check for "Connected: Yes"
-
-id: bluez/connection/reconnect_after_dut_reboot
-category_id: bluez
-_description: Verify that gadgets will reconnect after reboot
-plugin: manual
-depends: bluez/connection/gadget_reconnect_after_power_cycle
-_steps:
-  1. Pair a gadget with the Device Under Test
-  2. Reboot the Device Under Test
-_verification:
-  1. Verify that the paired gadget will reconnect after reboot
-
-id: bluez/connection/gadget_disconnect
-category_id: bluez
-_description: Verify that the connected gadget can be disconnected
-plugin: manual
-depends: bluez/connection/gadget_reconnect_after_power_cycle
-_steps:
-  1. Connect a gadget with the Device Under Test
-  2. Disconnect it with:
-  .
-    $ bluetoothctl
-    [bluetooth]# disconnect 01:02:03:04:05:06
-  .
-_verification:
-  1. Verify that the gadget is disconnected
-  .
-    $ bluetoothctl
-    bluetooth]# info 01:02:03:04:05:06
-  .
-    and check for "Connected: no"
-
-id: bluez/connection/gadget_can_be_forgotten
-category_id: bluez
-_description: Verify that the paired gadget can be forgotten
-plugin: manual
-depends: bluez/connection/gadget_reconnect_after_power_cycle
-_steps:
-  1. Pair a gadget with the Device Under Test
-  2. Remove the pairing
-  .
-    $ bluetoothctl
-    [bluetooth]# remove 01:02:03:04:05:06
-_verification:
-  1. Verify that the paired gadget no longer appears in the gadgets list
-  .
-    $ bluetoothctl
-    bluetooth]# info 01:02:03:04:05:06
-  .
-    and check for "Paired: no"
-
-id: bluez/connection/gadget_paired_again
-category_id: bluez
-_description: Verify that forgotten gadgets can be paired again
-plugin: manual
-depends: bluez/connection/gadget_can_be_forgotten
-_steps:
-  1. Pair a gadget with the Device Under Test
-  2. Remove the pairing
-  4. Pair the gadget a second time
-_verification:
-  1. Ensure that the gadget be paired again:
-  .
-    $ bluetoothctl
-    bluetooth]# info 01:02:03:04:05:06
-  .
-    and check for "Paired: yes"
-
-id: bluez/discoverable/dut_not_discoverable
-category_id: bluez
-_description: Verify that the Device Under Test can disable discovery
-plugin: manual
-_steps:
-  1. Toggle the Device Under Test Bluetooth visibility off:
-  .
-    $ bluetoothctl
-    bluetooth]# discoverable off
-  .
-_verification:
-  1. Ensure that the Device Under Test can't be discovered from any other gadget
-
-id: bluez/discoverable/dut_discoverable
-category_id: bluez
-_description: Verify that the Device Under Test can enable discovery
-plugin: manual
-_steps:
-  1. Toggle the Device Under Test Bluetooth visibility on
-  .
-    $ bluetoothctl
-    bluetooth]# discoverable on
-  .
-_verification:
-  1. Ensure that the Device Under Test can be discovered from other gadgets
-
-id: bluez/audio/a2dp_ubuntu_classic
-category_id: bluez
-plugin: manual
-depends: bluez/connection/pair_and_connect
-_summary: Stream audio to Bluetooth headset
-_purpose:
- Verify that you can stream music to a Bluetooth headset via A2DP on Ubuntu
- Classic. Note: Skip this test if not running Ubuntu Classic
-_steps:
-  1. Follow the previous tests to list, pair and connect your headset
-     Navigate to the Sound panel in System Settings, select your headset device
-     in the Output tab, and make sure that Mode is set to A2DP
-     Then press the Test Sound button and test each speaker
-_verification:
-  Verify that you can hear the test sound "Front left", "Front right" in each
-  speaker respectively.
-
-id: bluez/audio/a2dp_disconnect
-category_id: bluez
-plugin: manual
-depends: bluez/audio/a2dp_ubuntu_classic
-_summary: Disconnect Bluetooth headset
-_purpose:
- Verify that you can disconnect Bluetooth headset while streaming and audio
- playback switches back to the Device Under Test's primary speaker
-_steps:
-  1. Follow the previous tests to start streaming audio to the headset via
-     A2DP. Then execute the following command to disconnect the headset from
-     active A2DP streaming:
-  .
-    [<dut_name>]# disconnect <gadget_address>
-_verification:
-  Verify that you see output similar to the following:
-    Attempting to disconnect from 04:52:C7:0D:0C:03
-    [CHG] Device 04:52:C7:0D:0C:03 ServicesResolved: no
-    Successful disconnected
-    [CHG] Device 04:52:C7:0D:0C:03 Connected: no
-    [CHG] Device 04:52:C7:0D:0C:03 ManufacturerData Key: 0x0110
-    [CHG] Device 04:52:C7:0D:0C:03 ManufacturerData Value: 0x40
-    [CHG] Device 04:52:C7:0D:0C:03 ManufacturerData Value: 0x0c
-    [CHG] Device 04:52:C7:0D:0C:03 ManufacturerData Value: 0x02
-    [CHG] Device 04:52:C7:0D:0C:03 ManufacturerData Value: 0x41
-    [CHG] Device 04:52:C7:0D:0C:03 ManufacturerData Value: 0x00
-    [CHG] Device 04:52:C7:0D:0C:03 ManufacturerData Value: 0x61
-    [CHG] Device 04:52:C7:0D:0C:03 ManufacturerData Value: 0x71
-    [CHG] Device 04:52:C7:0D:0C:03 ManufacturerData Value: 0xcd
-    [CHG] Device 04:52:C7:0D:0C:03 ManufacturerData Value: 0x92
-    [CHG] Device 04:52:C7:0D:0C:03 ManufacturerData Value: 0x6c
diff --git a/bluez/units/hid.pxu b/bluez/units/hid.pxu
deleted file mode 100644
index 394e361..0000000
--- a/bluez/units/hid.pxu
+++ /dev/null
@@ -1,83 +0,0 @@
-# Copyright (C) 2017 Canonical, Ltd.
-# All rights reserved.
-#
-# Written by:
-#   Matteo Croce <matteo.croce@canonical.com>
-
-id: bluez/hid/pair_and_connect_hid
-category_id: bluez
-plugin: manual
-depends: bluez/setup/ensure_interface_connection_setup
-_summary: A Bluetooth HID gadget (e.g. keyboard, mouse) is connected and paired
-_purpose:
- Check if your Bluetooth HID gadget of choice (e.g. keyboard, mouse) can be
- paired to the host system.
-_steps:
-  1. Execute the following command to pair and connect your HID gadget to the
-     host system:
-  .
-    [bluetooth]# scan on
-    [bluetooth]# scan off
-    [bluetooth]# pair 01:02:03:04:05:06
-    [bluetooth]# connect 01:02:03:04:05:06
-  .
-_verification:
-  Open a text editor and make sure you can type text from the HID keyboard
-  into the text box. If testing a mouse, ensure that the cursor moves when
-  moving your HID mouse
-
-id: bluez/hid/bt_mouse_works
-category_id: bluez
-_description: Verify that Bluetooth mice do work
-plugin: manual
-depends: bluez/hid/pair_and_connect_hid
-_steps:
-  1. Scan for a BT mouse and connect it to the DUT
-_verification:
-  1. Verify that the paired mouse can move the pointer
-  2. Verify that the device is automatically connected at boot
-  3. Verify that the device is automatically connected after resume from sleep
-
-id: bluez/hid/bt_keyboard_works
-category_id: bluez
-_description: Verify that Bluetooth keyboards do work
-plugin: manual
-_steps:
-  1. Scan for a BT keyboard and connect it to the DUT, eg.
-  .
-    $ bluetoothctl
-    [bluetooth]# scan on
-    [bluetooth]# scan off
-    [bluetooth]# pair 01:02:03:04:05:06
-    Pairing successful
-    [bluetooth]# trust 01:02:03:04:05:06
-    [bluetooth]# connect 01:02:03:04:05:06
-    Trusted
-_verification:
-  1. Verify that the paired keyboard can write in a text editor
-  2. Verify that the device is automatically connected at boot
-  3. Verify that the device is automatically connected after resume from sleep
-  4. Press a key on the keyboard and power it off. Verify that the keystrokes are not transferred endlessly
-
-id: bluez/hid/ble_mouse_works
-category_id: bluez
-_description: Verify that BLE mices do work
-plugin: manual
-_steps:
-  1. Pair a BLE mouse with the DUT.
-_verification:
-  1. Verify that the paired mouse can move the pointer
-  2. Verify that the device is automatically connected at boot
-  3. Verify that the device is automatically connected after resume from sleep
-
-id: bluez/hid/ble_keyboard_works
-category_id: bluez
-_description: Verify that BLE keyboards do work
-plugin: manual
-_steps:
-  1. Pair a BLE keyboard with the DUT.
-_verification:
-  1. Verify that the paired keyboard can write in a text editor
-  2. Verify that the device is automatically connected at boot
-  3. Verify that the device is automatically connected after resume from sleep
-  4. Press a key on the keyboard and power it off. Verify that the keystrokes are not transferred endlessly
diff --git a/bluez/units/setup.pxu b/bluez/units/setup.pxu
deleted file mode 100644
index 3060426..0000000
--- a/bluez/units/setup.pxu
+++ /dev/null
@@ -1,140 +0,0 @@
-# Copyright (C) 2017 Canonical, Ltd.
-# All rights reserved.
-#
-# Written by:
-#   Matteo Croce <matteo.croce@canonical.com>
-
-id: bluez/setup/ensure_interface_connection_setup
-category_id: bluez
-_description: Ensure that the bluez interface is connected
-plugin: manual
-_steps:
-  1. Connect required bluez slot/plug
-  .
-    $ sudo snap connect bluez:client bluez:service
-  .
-_verification:
-  Verify that you see the following when running snap interfaces bluez:
-  bluez:service  bluez:client
-
-id: bluez/snap/ensure_nonroot_cannot_use
-category_id: bluez
-plugin: manual
-depends: bluez/setup/ensure_interface_connection_setup
-_summary: bluetoothctl and obexctl cannot be run as non-root user
-_purpose:
-  Verify that the bluetoothctl and obexctl commands cannot be run as non-root
-_steps:
-  1. Start the bluetoothctl and obexctl commands as non-root user
-  .
-    $ bluetoothctl
-    $ obexctl
-  .
-_verification:
-  You should see outout similar to the following:
-  .
-  $ bluetoothctl
-  This script must be run as root
-  $ obexctl
-  This script must be run as root
-
-id: bluez/scan/get_all
-category_id: bluez
-plugin: manual
-depends: bluez/setup/ensure_interface_connection_setup
-_summary: All Bluetooth gadgets in range are listed
-_purpose:
- Check if all powered on gadgets that are within range as listed.
-_steps:
-  1. Execute the following command to retrieve the list of all Bluetooth gadgets:
-  .
-    $ /snap/bin/bluez.bluetoothctl
-    [bluetooth]# scan on
-  .
-_verification:
-  Your expected Bluetooth gadget(s) is/are shown in the output list such as:
-    [NEW] Device 04:52:C7:0D:0C:03 QC 35s
-
-id: bluez/connection/pair_and_connect
-category_id: bluez
-plugin: manual
-depends: bluez/setup/ensure_interface_connection_setup
-_summary: A Bluetooth gadget of choice is paired and connected
-_purpose:
- Check if your Bluetooth gadget of choice can be paired to the host system.
-_steps:
-  1. Execute the following command to pair and connect your gadget to the host
-     system using the address listed in the previous scan test:
-  .
-    [bluetooth]# pair <gadget_address>
-    [bluetooth]# connect <gadget_address>
-  .
-_verification:
-  You should see output similar to the following:
-  Attempting to pair with 04:52:C7:0D:0C:03
-    [CHG] Device 04:52:C7:0D:0C:03 Connected: yes
-    [CHG] Device 04:52:C7:0D:0C:03 Modalias: bluetooth:v009Ep400Cd0106
-    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 00000000-deca-fade-deca-deafdecacaff
-    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 00001101-0000-1000-8000-00805f9b34fb
-    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 00001108-0000-1000-8000-00805f9b34fb
-    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 0000110b-0000-1000-8000-00805f9b34fb
-    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
-    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
-    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 0000111e-0000-1000-8000-00805f9b34fb
-    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 00001200-0000-1000-8000-00805f9b34fb
-    [CHG] Device 04:52:C7:0D:0C:03 ServicesResolved: yes
-    [CHG] Device 04:52:C7:0D:0C:03 Paired: yes
-    Pairing successful
-    [CHG] Device 04:52:C7:0D:0C:03 ServicesResolved: no
-    [CHG] Device 04:52:C7:0D:0C:03 Connected: no
-    Attempting to connect to 04:52:C7:0D:0C:03
-    [CHG] Device 04:52:C7:0D:0C:03 Connected: yes
-    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 00000000-deca-fade-deca-deafdecacaff
-    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 00001101-0000-1000-8000-00805f9b34fb
-    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 00001108-0000-1000-8000-00805f9b34fb
-    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 0000110b-0000-1000-8000-00805f9b34fb
-    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
-    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
-    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 0000111e-0000-1000-8000-00805f9b34fb
-    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 0000112f-0000-1000-8000-00805f9b34fb
-    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 00001200-0000-1000-8000-00805f9b34fb
-    Connection successful
-    [CHG] Device 04:52:C7:0D:0C:03 ServicesResolved: yes
-
-id: bluez/snap/ensure_btmon_can_be started
-category_id: bluez
-plugin: manual
-depends: bluez/setup/ensure_interface_connection_setup
-_summary: btmon tools function
-_purpose:
-  Check that the btmon tool shipped as a part of the bluez snap can be used.
-_steps:
-  1. Start the btmon command
-  .
-    $ sudo btmon
-  .
-_verification:
-  You should see outout similar to the following:
-  .
-  $ sudo btmon
-  Bluetooth monitor ver 5.37
-  = New Index: 00:1A:7D:DA:71:08 (BR/EDR,USB,hci0)             [hci0] 0.626494
-
-id: bluez/snap/ensure_hcidump_can_be started
-category_id: bluez
-plugin: manual
-depends: bluez/setup/ensure_interface_connection_setup
-_summary: btmon tools works
-_purpose:
-  Check that the hcidump tool shipped as a part of the bluez snap can be used.
-_steps:
-  1. Start the hcidump command
-  .
-    $ sudo hcidump
-  .
-_verification:
-  You should see outout similar to the following:
-  .
-  $ sudo hcidump
-  HCI sniffer - Bluetooth packet analyzer ver 5.37
-  device: hci0 snap_len: 1500 filter: 0xffffffff
diff --git a/captive-redirect/manage.py b/captive-redirect/manage.py
deleted file mode 100755
index 56ea1c8..0000000
--- a/captive-redirect/manage.py
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env python3
-from plainbox.provider_manager import setup, N_
-
-setup(
-    name='plainbox-provider-captive-redirect',
-    namespace='2017.com.canonical.captive-redirect',
-    version="1.0",
-    description=N_("Plainbox provider for the Captive Redirect snap"),
-    gettext_domain="2017_com_canonical_captive_redirect",
-)
diff --git a/captive-redirect/units/captive-redirect.pxu b/captive-redirect/units/captive-redirect.pxu
deleted file mode 100644
index d45f0e6..0000000
--- a/captive-redirect/units/captive-redirect.pxu
+++ /dev/null
@@ -1,102 +0,0 @@
-# Copyright (C) 2017 Canonical Ltd.
-# All rights reserved.
-#
-# Written by:
-#   Matteo Croce <matteo.croce@canonical.com>
-
-unit: category
-id: captive_redirect
-_name: Captive portal redirect
-
-id: captive_redirect/setup/ensure_interface_connection_setup
-category_id: captive_redirect
-_description: Ensure that the captive-redirect interfaces are connected
-plugin: manual
-_steps:
-  1. Install the captive-redirect snap via
-    .
-      $ snap install captive-redirect
-    .
-_verification:
-  Verify that you see the following when running snap interfaces:
-  :firewall-control         captive-redirect
-
-id: captive_redirect/setup/default_disabled
-category_id: captive_redirect
-_description: Ensure that captive-redirect is disabled by default
-plugin: manual
-_steps:
-  1. Get the configuration with:
-  .
-    $ captive-redirect.config status
-  .
-  2. Ensure that there isn't any REDIRECT iptables chain:
-  .
-    $ sudo iptables-save |grep captive
-  .
-_verification:
-  1. Check that the redirect is disabled:
-  .
-    active: false
-  .
-  2. You shouldn't see any iptables rule
-
-id: captive_redirect/setup/iptables_rules_all_interfaces
-category_id: captive_redirect
-_description: Ensure that enabling captive-redirect sets up the correct iptables rules
-plugin: manual
-_steps:
- 1. Enable captive-redirect with:
- .
-   $ sudo snap set captive-redirect active=true port=9876
- .
- 2. Get the iptables rules with:
- .
-   $ sudo iptables-save |grep captive
- .
-_verification:
-  1. You should see iptables rules like:
-  .
-    :captive - [0:0]
-    -A PREROUTING -j captive
-    -A captive -p tcp -m multiport --dports 80,443 -j REDIRECT --to-ports 9876
-  .
-
-id: captive_redirect/setup/iptables_rules_one_interface
-category_id: captive_redirect
-_description: Ensure that enabling captive-redirect sets up iptables rules for a single interface
-plugin: manual
-_steps:
- 1. Enable captive-redirect with:
- .
-   $ sudo snap set captive-redirect active=true port=9999 interfaces=tun4
- .
- 2. Get the iptables rules with:
- .
-   $ sudo iptables-save |grep captive
- .
-_verification:
-  1. You should see iptables rules like:
-  .
-    :captive - [0:0]
-    -A PREROUTING -j captive
-    -A captive -i tun4 -p tcp -m multiport --dports 80,443 -j REDIRECT --to-ports 9999
-  .
-
-id: captive_redirect/functionality/redirect_works
-category_id: captive_redirect
-_description: Ensure that enabling captive-redirect really redirects the traffic
-plugin: manual
-_steps:
-  1. Install a sample web server with:
-  .
-    $ sudo snap install xkcd-webserver
-  .
-  2. Connect another device to the DUT (Device Under Test) and setup the DUT as default gateway
-  3. Enable the redirect with:
-  .
-    $ sudo snap set captive-redirect active=true port=80 interfaces=
-  .
-  4. Try to access an HTTP (avoid HTTPS, it will give a certificate error) web page from the device
-_verification:
-  1. You should see a blank page pointing to XKCD instead of the typed address
diff --git a/com.canonical.se:engineering-tests/manage.py b/com.canonical.se:engineering-tests/manage.py
new file mode 100755
index 0000000..6a27365
--- /dev/null
+++ b/com.canonical.se:engineering-tests/manage.py
@@ -0,0 +1,21 @@
+#!/usr/bin/env python3
+from plainbox.provider_manager import setup, N_
+
+# You can inject other stuff here but please don't go overboard.
+#
+# In particular, if you need comprehensive compilation support to get
+# your bin/ populated then please try to discuss that with us in the
+# upstream project IRC channel #checkbox on irc.freenode.net.
+
+# NOTE: one thing that you could do here, that makes a lot of sense,
+# is to compute version somehow. This may vary depending on the
+# context of your provider. Future version of PlainBox will offer git,
+# bzr and mercurial integration using the versiontools library
+# (optional)
+
+setup(
+    name='2017.com.canonical.se:engineering-tests',
+    version="1.0",
+    description=N_("The com.canonical.se:engineering-tests provider"),
+    gettext_domain="com_canonical_se_engineering-tests",
+)
diff --git a/com.canonical.se:engineering-tests/units/alsa/base.pxu b/com.canonical.se:engineering-tests/units/alsa/base.pxu
new file mode 100644
index 0000000..077a012
--- /dev/null
+++ b/com.canonical.se:engineering-tests/units/alsa/base.pxu
@@ -0,0 +1,47 @@
+# Copyright (c) 2017 Canonical Ltd.
+# All rights resevered.
+#
+# Written by:
+#   Simon Fels <simon.fels@canonical.com>
+
+unit: category
+id: alsa_utils
+_name: Alsa utilities
+
+id: alsa_utils/setup/automatic_plug_connection
+category_id: alsa_utils
+_description:
+  Ensure that all interfaces needed by the alsa-utils snap are
+  automatically connected.
+plugin: shell
+command:
+  snap interfaces | grep -Pzq ":home +alsa-utils"
+  snap interfaces | grep -Pzq ":alsa +alsa-utils"
+estimated_duration: 1s
+flags: preserve-locale
+
+id: alsa_utils/setup/automatic_aliases
+category_id: alsa_utils
+_description:
+  Ensure that all aliases provided by the snap are automatically setup.
+plugin: shell
+command:
+  test -x /snap/bin/speaker-test
+  test -x /snap/bin/aseqnet
+  test -x /snap/bin/alsatplg
+  test -x /snap/bin/arecordmidi
+  test -x /snap/bin/amidi
+  test -x /snap/bin/alsaloop
+  test -x /snap/bin/aconnect
+  test -x /snap/bin/iecset
+  test -x /snap/bin/alsabat
+  test -x /snap/bin/aseqdump
+  test -x /snap/bin/aplaymidi
+  test -x /snap/bin/alsactl
+  test -x /snap/bin/amixer
+  test -x /snap/bin/aplay
+  test -x /snap/bin/alsaucm
+  test -x /snap/bin/alsamixer
+  test -x /snap/bin/arecord
+estimated_duration: 1s
+flags: preserve-locale
diff --git a/com.canonical.se:engineering-tests/units/alsa/device.pxu b/com.canonical.se:engineering-tests/units/alsa/device.pxu
new file mode 100644
index 0000000..a3f7b34
--- /dev/null
+++ b/com.canonical.se:engineering-tests/units/alsa/device.pxu
@@ -0,0 +1,15 @@
+# FIXME: Convert this test back to an automated one. See LP #1665652
+id: alsa_utils/device/can_list_available_cards
+category_id: alsa_utils
+_description:
+  Validate that available ALSA sound cards can be listed with the
+  utilities the snap ships.
+plugin: manual
+_steps:
+ Execute the following command:
+ .
+ $ /snap/bin/aplay -L
+ .
+_verification:
+ Verify that the command prints out a list of available ALSA
+ devices.
diff --git a/com.canonical.se:engineering-tests/units/alsa/playback.pxu b/com.canonical.se:engineering-tests/units/alsa/playback.pxu
new file mode 100644
index 0000000..d1a8083
--- /dev/null
+++ b/com.canonical.se:engineering-tests/units/alsa/playback.pxu
@@ -0,0 +1 @@
+# FIXME: Convert this test back to an automated one. See LP #1665652
diff --git a/com.canonical.se:engineering-tests/units/bluez/desktop.pxu b/com.canonical.se:engineering-tests/units/bluez/desktop.pxu
new file mode 100644
index 0000000..0075fa5
--- /dev/null
+++ b/com.canonical.se:engineering-tests/units/bluez/desktop.pxu
@@ -0,0 +1,142 @@
+# Copyright (C) 2017 Canonical, Ltd.
+# All rights reserved.
+#
+# Written by:
+#   Matteo Croce <matteo.croce@canonical.com>
+
+id: bluez/setup/enabled_on_boot_desktop
+category_id: bluez
+_description: Ensure that Bluetooth is enabled on boot
+plugin: manual
+_steps:
+  1. Power on the PC
+  2. If Bluetooth isn't enabled on first boot, enable it and reboot
+_verification:
+  1. Go to System Settings->Bluetooth
+  2. Check that Bluetooth kill-switch is "on"
+  3. Look at Bluetooth indicator: verify it is active and Bluetooth kill switch is "on"
+  4. Verify that Bluetooth is still enabled
+
+id: bluez/setup/discoverable_by_default_desktop
+category_id: bluez
+_description: Ensure that device is discoverable by default
+plugin: manual
+_steps:
+  1. Power on the PC
+  2. Goto System Settings->Bluetooth
+_verification:
+  In Ubuntu Touch devices the 'discoverable' option should be enabled by default,
+  in desktop devices it should not
+
+id: bluez/setup/bt_name_correct_desktop
+category_id: bluez
+_description: Ensure that the Bluetooth device name is correct
+plugin: manual
+_steps:
+  1. Power on the PC
+_verification:
+  1. Go to System Settings->Bluetooth
+  2. Verify that the Bluetooth device name is correct:
+     is set to the Ubuntu Touch device name, eg. could be BQ Aquaris E4.5 on Ubuntu Touch,
+     or to the hostname for desktop
+
+id: bluez/connection/device_cycle
+category_id: bluez
+_description: Verify that devices will reconnect after power cycle
+plugin: manual
+_steps:
+  1. Go to Unity Control Center
+  2. Click Search for devices
+  3. Put the gadget in pairing mode
+  4. Select the gadget from the list and click pair
+  5. Power off the device
+  6. Power on the device
+_verification:
+  1. Verify that the paired device will reconnect automatically,
+  eg. it appears bold in the list
+
+id: bluez/connection/device_disconnect
+category_id: bluez
+_description: Verify that the connected device can be disconnected
+depends: bluez/connection/device_cycle
+plugin: manual
+_steps:
+  1. Pair a device with a computer
+  2. Remove the pairing
+  3. Pair the device a second time
+_verification:
+  1. Verify that the device can connect again
+
+id: bluez/connection/pc_reboot
+category_id: bluez
+_description: Verify that devices will reconnect after reboot
+depends: bluez/connection/device_cycle
+plugin: manual
+_steps:
+  1. Pair a device with the computer
+  2. Reboot the computer
+_verification:
+  1. Verify that the paired device will reconnect after rebooting it
+
+id: bluez/connection/device_discard
+category_id: bluez
+_description: Verify that the paired device can be forgotten
+depends: bluez/connection/device_cycle
+plugin: manual
+_steps:
+  1. Pair a device with the computer
+  2. Remove the pairing
+_verification:
+  1. Verify that the paired device no longer appears in the devices list,
+  eg. it's NOT listed in bold in Unity Control Center
+
+id: bluez/connection/no_connect_discarded
+category_id: bluez
+_description: Verify that a discarded device don't connect
+depends: bluez/connection/device_cycle
+plugin: manual
+_steps:
+  1. Pair a device with the computer
+  2. Remove the pairing
+_verification:
+  1. Verify that the paired device no longer connects
+
+id: bluez/connection/device_readd
+category_id: bluez
+_description: Verify that a discarded device can be paired again
+depends: bluez/connection/device_cycle
+plugin: manual
+_steps:
+  1. Pair a device with the computer
+  2. Remove the pairing
+  4. Pair the device again
+_verification:
+  1. Ensure that the device can connect
+
+id: bluez/discoverable/pc_not_discoverable
+category_id: bluez
+_description: Verify that the PC can disable discovery
+plugin: manual
+_steps:
+  1. Toggle the PC Bluetooth visibility off
+_verification:
+  1. Ensure that the PC can't be discovered from any other device
+
+id: bluez/discoverable/pc_discoverable
+category_id: bluez
+_description: Verify that the PC can enable discovery
+plugin: manual
+_steps:
+  1. Toggle the visibility on
+  2. Do a Bluetooth scan from another device, eg. a smartphone
+_verification:
+  1. Ensure that the PC can be discovered from the other device
+
+id: bluez/setup/ensure_interface_connection_setup_desktop
+category_id: bluez
+_description: Ensure that the bluez interface is connected
+plugin: manual
+_verification:
+   Open a text editor and make sure you can type text from the HID keyboard
+   into the text box. If testing a mouse, ensure that the cursor moves when
+   moving your HID mouse.
diff --git a/com.canonical.se:engineering-tests/units/bluez/general.pxu b/com.canonical.se:engineering-tests/units/bluez/general.pxu
new file mode 100644
index 0000000..18b8b52
--- /dev/null
+++ b/com.canonical.se:engineering-tests/units/bluez/general.pxu
@@ -0,0 +1,302 @@
+# Copyright (C) 2017 Canonical, Ltd.
+# All rights reserved.
+#
+# Written by:
+#   Jim Hodapp <jim.hodapp@canonical.com>
+#   Matteo Croce <matteo.croce@canonical.com>
+
+unit: category
+id: bluez
+_name: BlueZ
+
+id: bluez/setup/enabled_on_boot
+category_id: bluez
+_description: Ensure that Bluetooth is enabled on boot
+plugin: manual
+_steps:
+  1. Power on the Device Under Test
+  2. If Bluetooth isn't enabled on first boot, enable it and reboot
+  3. Use bluetoothctl to check if there is an active adapter
+  .
+    $ bluetoothctl 
+_verification:
+  1. Check that there is a Controller in the output, eg.
+    [NEW] Controller 00:10:20:30:40:50 pi [default]
+
+id: bluez/scan/start_inquiry
+category_id: bluez
+_description: Verify that found gadgets are reported during an ongoing device discovery
+plugin: manual
+_steps:
+  1. Turn Bluetooth on on a gadget and make it discoverable
+  2. Use bluetoothctl to start a device scan:
+  .
+   $ bluetoothctl
+   [bluetooth]# scan on
+   [bluetooth]# devices
+  .
+_verification:
+  You should see the gadget listed after the local adapter:
+  Device XX:XX:XX:XX:XX:XX My Device
+  [NEW] Device 04:52:C7:0D:0C:03 QC 35s
+
+id: bluez/scan/stop_inquiry
+category_id: bluez
+_description: Verify that gadgets are not found with scan disabled
+plugin: manual
+_steps:
+  1. Use bluetoothctl to start stop the device scan
+  .
+   $ bluetoothctl
+   [bluetooth]# scan off
+  .
+  2. Turn bluetooth on on a gadget and make it discoverable
+  3. Use bluetoothctl to get the devices list
+  .
+   $ bluetoothctl
+   [bluetooth]# devices
+  .
+_verification:
+  You should only see the local adapter in the list
+  Device XX:XX:XX:XX:XX:XX My Device
+
+id: bluez/pairing/can_be_enabled
+category_id: bluez
+_description: Verify that the device pairing works
+plugin: manual
+_steps:
+  1. Use bluetoothctl to enable pairing
+  .
+   $ bluetoothctl
+   [bluetooth]# pairable on
+  .
+  2. Pair the Device Under Test from a gadget
+_verification:
+  1. You should be able to do the pairing
+
+id: bluez/pairing/can_be_disabled
+category_id: bluez
+_description: Verify that the pairing can be disabled
+plugin: manual
+_steps:
+  1. Use bluetoothctl to disable pairing
+  .
+   $ bluetoothctl
+   [bluetooth]# pairable off
+  .
+  2. Pair the Device Under Test from a gadget
+_verification:
+  1. You shouldn't be able to do the pairing
+
+id: bluez/setup/discoverable_by_default
+category_id: bluez
+_description: Ensure that Device Under Test is discoverable by default
+plugin: manual
+_steps:
+  1. Type:
+  .
+    $ bluetoothctl
+    [bluetooth]# show
+  2. Scan for devices from a smartphone
+_verification:
+  1. Verify that the Device Under Test is discoverable by default, eg.
+  .
+    $ bluetoothctl
+    [bluetooth]# show
+  .
+  contains the "Discoverable: yes" line
+  2. Check that the Device Under Test can be discovered on the smartphone
+
+id: bluez/setup/bt_name_correct
+category_id: bluez
+_description: Ensure that the Bluetooth Device Under Test name is correct
+plugin: manual
+_steps:
+  1. Type:
+  .
+    $ bluetoothctl
+    [bluetooth]# show
+_verification:
+  1. Verify that the Bluetooth Device Under Test name is correct: equals to the Ubuntu Touch
+  device name, eg. could be BQ Aquaris E4.5 on Ubuntu Touch,
+  or to the hostname for desktop
+  .
+    Name: Ubuntu
+
+id: bluez/setup/bt_name_correct_from_gadget
+category_id: bluez
+_description: Ensure that the Bluetooth Device Under Test name advertise correctly
+plugin: manual
+_steps:
+  1. Scan for devices from a smartphone
+_verification:
+  1. Verify that the Bluetooth Device Under Test name is correct as seen from an external device
+
+id: bluez/connection/gadget_reconnect_after_power_cycle
+category_id: bluez
+_description: Verify that gadgets will reconnect after power cycle
+plugin: manual
+_steps:
+  1. Connect a gadget with the Device Under Test:
+  .
+    $ bluetoothctl
+    bluetooth]# scan on
+    Discovery started
+    [NEW] Device 01:02:03:04:05:06 device
+    [bluetooth]# pair 01:02:03:04:05:06
+    Pairing successful
+    [bluetooth]# trust 01:02:03:04:05:06
+    Trusted
+    [bluetooth]# connect 01:02:03:04:05:06
+  .
+  2. Power off the gadget
+  3. Power on the gadget
+_verification:
+  1. Verify that the paired gadget will reconnect automatically
+  .
+    $ bluetoothctl
+    bluetooth]# info 01:02:03:04:05:06
+  .
+    and check for "Connected: Yes"
+
+id: bluez/connection/reconnect_after_dut_reboot
+category_id: bluez
+_description: Verify that gadgets will reconnect after reboot
+plugin: manual
+depends: bluez/connection/gadget_reconnect_after_power_cycle
+_steps:
+  1. Pair a gadget with the Device Under Test
+  2. Reboot the Device Under Test
+_verification:
+  1. Verify that the paired gadget will reconnect after reboot
+
+id: bluez/connection/gadget_disconnect
+category_id: bluez
+_description: Verify that the connected gadget can be disconnected
+plugin: manual
+depends: bluez/connection/gadget_reconnect_after_power_cycle
+_steps:
+  1. Connect a gadget with the Device Under Test
+  2. Disconnect it with:
+  .
+    $ bluetoothctl
+    [bluetooth]# disconnect 01:02:03:04:05:06
+  .
+_verification:
+  1. Verify that the gadget is disconnected
+  .
+    $ bluetoothctl
+    bluetooth]# info 01:02:03:04:05:06
+  .
+    and check for "Connected: no"
+
+id: bluez/connection/gadget_can_be_forgotten
+category_id: bluez
+_description: Verify that the paired gadget can be forgotten
+plugin: manual
+depends: bluez/connection/gadget_reconnect_after_power_cycle
+_steps:
+  1. Pair a gadget with the Device Under Test
+  2. Remove the pairing
+  .
+    $ bluetoothctl
+    [bluetooth]# remove 01:02:03:04:05:06
+_verification:
+  1. Verify that the paired gadget no longer appears in the gadgets list
+  .
+    $ bluetoothctl
+    bluetooth]# info 01:02:03:04:05:06
+  .
+    and check for "Paired: no"
+
+id: bluez/connection/gadget_paired_again
+category_id: bluez
+_description: Verify that forgotten gadgets can be paired again
+plugin: manual
+depends: bluez/connection/gadget_can_be_forgotten
+_steps:
+  1. Pair a gadget with the Device Under Test
+  2. Remove the pairing
+  4. Pair the gadget a second time
+_verification:
+  1. Ensure that the gadget be paired again:
+  .
+    $ bluetoothctl
+    bluetooth]# info 01:02:03:04:05:06
+  .
+    and check for "Paired: yes"
+
+id: bluez/discoverable/dut_not_discoverable
+category_id: bluez
+_description: Verify that the Device Under Test can disable discovery
+plugin: manual
+_steps:
+  1. Toggle the Device Under Test Bluetooth visibility off:
+  .
+    $ bluetoothctl
+    bluetooth]# discoverable off
+  .
+_verification:
+  1. Ensure that the Device Under Test can't be discovered from any other gadget
+
+id: bluez/discoverable/dut_discoverable
+category_id: bluez
+_description: Verify that the Device Under Test can enable discovery
+plugin: manual
+_steps:
+  1. Toggle the Device Under Test Bluetooth visibility on
+  .
+    $ bluetoothctl
+    bluetooth]# discoverable on
+  .
+_verification:
+  1. Ensure that the Device Under Test can be discovered from other gadgets
+
+id: bluez/audio/a2dp_ubuntu_classic
+category_id: bluez
+plugin: manual
+depends: bluez/connection/pair_and_connect
+_summary: Stream audio to Bluetooth headset
+_purpose:
+ Verify that you can stream music to a Bluetooth headset via A2DP on Ubuntu
+ Classic. Note: Skip this test if not running Ubuntu Classic
+_steps:
+  1. Follow the previous tests to list, pair and connect your headset
+     Navigate to the Sound panel in System Settings, select your headset device
+     in the Output tab, and make sure that Mode is set to A2DP
+     Then press the Test Sound button and test each speaker
+_verification:
+  Verify that you can hear the test sound "Front left", "Front right" in each
+  speaker respectively.
+
+id: bluez/audio/a2dp_disconnect
+category_id: bluez
+plugin: manual
+depends: bluez/audio/a2dp_ubuntu_classic
+_summary: Disconnect Bluetooth headset
+_purpose:
+ Verify that you can disconnect Bluetooth headset while streaming and audio
+ playback switches back to the Device Under Test's primary speaker
+_steps:
+  1. Follow the previous tests to start streaming audio to the headset via
+     A2DP. Then execute the following command to disconnect the headset from
+     active A2DP streaming:
+  .
+    [<dut_name>]# disconnect <gadget_address>
+_verification:
+  Verify that you see output similar to the following:
+    Attempting to disconnect from 04:52:C7:0D:0C:03
+    [CHG] Device 04:52:C7:0D:0C:03 ServicesResolved: no
+    Successful disconnected
+    [CHG] Device 04:52:C7:0D:0C:03 Connected: no
+    [CHG] Device 04:52:C7:0D:0C:03 ManufacturerData Key: 0x0110
+    [CHG] Device 04:52:C7:0D:0C:03 ManufacturerData Value: 0x40
+    [CHG] Device 04:52:C7:0D:0C:03 ManufacturerData Value: 0x0c
+    [CHG] Device 04:52:C7:0D:0C:03 ManufacturerData Value: 0x02
+    [CHG] Device 04:52:C7:0D:0C:03 ManufacturerData Value: 0x41
+    [CHG] Device 04:52:C7:0D:0C:03 ManufacturerData Value: 0x00
+    [CHG] Device 04:52:C7:0D:0C:03 ManufacturerData Value: 0x61
+    [CHG] Device 04:52:C7:0D:0C:03 ManufacturerData Value: 0x71
+    [CHG] Device 04:52:C7:0D:0C:03 ManufacturerData Value: 0xcd
+    [CHG] Device 04:52:C7:0D:0C:03 ManufacturerData Value: 0x92
+    [CHG] Device 04:52:C7:0D:0C:03 ManufacturerData Value: 0x6c
diff --git a/com.canonical.se:engineering-tests/units/bluez/hid.pxu b/com.canonical.se:engineering-tests/units/bluez/hid.pxu
new file mode 100644
index 0000000..394e361
--- /dev/null
+++ b/com.canonical.se:engineering-tests/units/bluez/hid.pxu
@@ -0,0 +1,83 @@
+# Copyright (C) 2017 Canonical, Ltd.
+# All rights reserved.
+#
+# Written by:
+#   Matteo Croce <matteo.croce@canonical.com>
+
+id: bluez/hid/pair_and_connect_hid
+category_id: bluez
+plugin: manual
+depends: bluez/setup/ensure_interface_connection_setup
+_summary: A Bluetooth HID gadget (e.g. keyboard, mouse) is connected and paired
+_purpose:
+ Check if your Bluetooth HID gadget of choice (e.g. keyboard, mouse) can be
+ paired to the host system.
+_steps:
+  1. Execute the following command to pair and connect your HID gadget to the
+     host system:
+  .
+    [bluetooth]# scan on
+    [bluetooth]# scan off
+    [bluetooth]# pair 01:02:03:04:05:06
+    [bluetooth]# connect 01:02:03:04:05:06
+  .
+_verification:
+  Open a text editor and make sure you can type text from the HID keyboard
+  into the text box. If testing a mouse, ensure that the cursor moves when
+  moving your HID mouse
+
+id: bluez/hid/bt_mouse_works
+category_id: bluez
+_description: Verify that Bluetooth mice do work
+plugin: manual
+depends: bluez/hid/pair_and_connect_hid
+_steps:
+  1. Scan for a BT mouse and connect it to the DUT
+_verification:
+  1. Verify that the paired mouse can move the pointer
+  2. Verify that the device is automatically connected at boot
+  3. Verify that the device is automatically connected after resume from sleep
+
+id: bluez/hid/bt_keyboard_works
+category_id: bluez
+_description: Verify that Bluetooth keyboards do work
+plugin: manual
+_steps:
+  1. Scan for a BT keyboard and connect it to the DUT, eg.
+  .
+    $ bluetoothctl
+    [bluetooth]# scan on
+    [bluetooth]# scan off
+    [bluetooth]# pair 01:02:03:04:05:06
+    Pairing successful
+    [bluetooth]# trust 01:02:03:04:05:06
+    [bluetooth]# connect 01:02:03:04:05:06
+    Trusted
+_verification:
+  1. Verify that the paired keyboard can write in a text editor
+  2. Verify that the device is automatically connected at boot
+  3. Verify that the device is automatically connected after resume from sleep
+  4. Press a key on the keyboard and power it off. Verify that the keystrokes are not transferred endlessly
+
+id: bluez/hid/ble_mouse_works
+category_id: bluez
+_description: Verify that BLE mices do work
+plugin: manual
+_steps:
+  1. Pair a BLE mouse with the DUT.
+_verification:
+  1. Verify that the paired mouse can move the pointer
+  2. Verify that the device is automatically connected at boot
+  3. Verify that the device is automatically connected after resume from sleep
+
+id: bluez/hid/ble_keyboard_works
+category_id: bluez
+_description: Verify that BLE keyboards do work
+plugin: manual
+_steps:
+  1. Pair a BLE keyboard with the DUT.
+_verification:
+  1. Verify that the paired keyboard can write in a text editor
+  2. Verify that the device is automatically connected at boot
+  3. Verify that the device is automatically connected after resume from sleep
+  4. Press a key on the keyboard and power it off. Verify that the keystrokes are not transferred endlessly
diff --git a/com.canonical.se:engineering-tests/units/bluez/setup.pxu b/com.canonical.se:engineering-tests/units/bluez/setup.pxu
new file mode 100644
index 0000000..3060426
--- /dev/null
+++ b/com.canonical.se:engineering-tests/units/bluez/setup.pxu
@@ -0,0 +1,140 @@
+# Copyright (C) 2017 Canonical, Ltd.
+# All rights reserved.
+#
+# Written by:
+#   Matteo Croce <matteo.croce@canonical.com>
+
+id: bluez/setup/ensure_interface_connection_setup
+category_id: bluez
+_description: Ensure that the bluez interface is connected
+plugin: manual
+_steps:
+  1. Connect required bluez slot/plug
+  .
+    $ sudo snap connect bluez:client bluez:service
+  .
+_verification:
+  Verify that you see the following when running snap interfaces bluez:
+  bluez:service  bluez:client
+
+id: bluez/snap/ensure_nonroot_cannot_use
+category_id: bluez
+plugin: manual
+depends: bluez/setup/ensure_interface_connection_setup
+_summary: bluetoothctl and obexctl cannot be run as non-root user
+_purpose:
+  Verify that the bluetoothctl and obexctl commands cannot be run as non-root
+_steps:
+  1. Start the bluetoothctl and obexctl commands as non-root user
+  .
+    $ bluetoothctl
+    $ obexctl
+  .
+_verification:
+  You should see outout similar to the following:
+  .
+  $ bluetoothctl
+  This script must be run as root
+  $ obexctl
+  This script must be run as root
+
+id: bluez/scan/get_all
+category_id: bluez
+plugin: manual
+depends: bluez/setup/ensure_interface_connection_setup
+_summary: All Bluetooth gadgets in range are listed
+_purpose:
+ Check if all powered on gadgets that are within range as listed.
+_steps:
+  1. Execute the following command to retrieve the list of all Bluetooth gadgets:
+  .
+    $ /snap/bin/bluez.bluetoothctl
+    [bluetooth]# scan on
+  .
+_verification:
+  Your expected Bluetooth gadget(s) is/are shown in the output list such as:
+    [NEW] Device 04:52:C7:0D:0C:03 QC 35s
+
+id: bluez/connection/pair_and_connect
+category_id: bluez
+plugin: manual
+depends: bluez/setup/ensure_interface_connection_setup
+_summary: A Bluetooth gadget of choice is paired and connected
+_purpose:
+ Check if your Bluetooth gadget of choice can be paired to the host system.
+_steps:
+  1. Execute the following command to pair and connect your gadget to the host
+     system using the address listed in the previous scan test:
+  .
+    [bluetooth]# pair <gadget_address>
+    [bluetooth]# connect <gadget_address>
+  .
+_verification:
+  You should see output similar to the following:
+  Attempting to pair with 04:52:C7:0D:0C:03
+    [CHG] Device 04:52:C7:0D:0C:03 Connected: yes
+    [CHG] Device 04:52:C7:0D:0C:03 Modalias: bluetooth:v009Ep400Cd0106
+    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 00000000-deca-fade-deca-deafdecacaff
+    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 00001101-0000-1000-8000-00805f9b34fb
+    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 00001108-0000-1000-8000-00805f9b34fb
+    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 0000110b-0000-1000-8000-00805f9b34fb
+    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
+    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
+    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 0000111e-0000-1000-8000-00805f9b34fb
+    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 00001200-0000-1000-8000-00805f9b34fb
+    [CHG] Device 04:52:C7:0D:0C:03 ServicesResolved: yes
+    [CHG] Device 04:52:C7:0D:0C:03 Paired: yes
+    Pairing successful
+    [CHG] Device 04:52:C7:0D:0C:03 ServicesResolved: no
+    [CHG] Device 04:52:C7:0D:0C:03 Connected: no
+    Attempting to connect to 04:52:C7:0D:0C:03
+    [CHG] Device 04:52:C7:0D:0C:03 Connected: yes
+    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 00000000-deca-fade-deca-deafdecacaff
+    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 00001101-0000-1000-8000-00805f9b34fb
+    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 00001108-0000-1000-8000-00805f9b34fb
+    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 0000110b-0000-1000-8000-00805f9b34fb
+    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
+    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
+    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 0000111e-0000-1000-8000-00805f9b34fb
+    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 0000112f-0000-1000-8000-00805f9b34fb
+    [CHG] Device 04:52:C7:0D:0C:03 UUIDs: 00001200-0000-1000-8000-00805f9b34fb
+    Connection successful
+    [CHG] Device 04:52:C7:0D:0C:03 ServicesResolved: yes
+
+id: bluez/snap/ensure_btmon_can_be started
+category_id: bluez
+plugin: manual
+depends: bluez/setup/ensure_interface_connection_setup
+_summary: btmon tools function
+_purpose:
+  Check that the btmon tool shipped as a part of the bluez snap can be used.
+_steps:
+  1. Start the btmon command
+  .
+    $ sudo btmon
+  .
+_verification:
+  You should see outout similar to the following:
+  .
+  $ sudo btmon
+  Bluetooth monitor ver 5.37
+  = New Index: 00:1A:7D:DA:71:08 (BR/EDR,USB,hci0)             [hci0] 0.626494
+
+id: bluez/snap/ensure_hcidump_can_be started
+category_id: bluez
+plugin: manual
+depends: bluez/setup/ensure_interface_connection_setup
+_summary: btmon tools works
+_purpose:
+  Check that the hcidump tool shipped as a part of the bluez snap can be used.
+_steps:
+  1. Start the hcidump command
+  .
+    $ sudo hcidump
+  .
+_verification:
+  You should see outout similar to the following:
+  .
+  $ sudo hcidump
+  HCI sniffer - Bluetooth packet analyzer ver 5.37
+  device: hci0 snap_len: 1500 filter: 0xffffffff
diff --git a/com.canonical.se:engineering-tests/units/captive-redirect/captive-redirect.pxu b/com.canonical.se:engineering-tests/units/captive-redirect/captive-redirect.pxu
new file mode 100644
index 0000000..d45f0e6
--- /dev/null
+++ b/com.canonical.se:engineering-tests/units/captive-redirect/captive-redirect.pxu
@@ -0,0 +1,102 @@
+# Copyright (C) 2017 Canonical Ltd.
+# All rights reserved.
+#
+# Written by:
+#   Matteo Croce <matteo.croce@canonical.com>
+
+unit: category
+id: captive_redirect
+_name: Captive portal redirect
+
+id: captive_redirect/setup/ensure_interface_connection_setup
+category_id: captive_redirect
+_description: Ensure that the captive-redirect interfaces are connected
+plugin: manual
+_steps:
+  1. Install the captive-redirect snap via
+    .
+      $ snap install captive-redirect
+    .
+_verification:
+  Verify that you see the following when running snap interfaces:
+  :firewall-control         captive-redirect
+
+id: captive_redirect/setup/default_disabled
+category_id: captive_redirect
+_description: Ensure that captive-redirect is disabled by default
+plugin: manual
+_steps:
+  1. Get the configuration with:
+  .
+    $ captive-redirect.config status
+  .
+  2. Ensure that there isn't any REDIRECT iptables chain:
+  .
+    $ sudo iptables-save |grep captive
+  .
+_verification:
+  1. Check that the redirect is disabled:
+  .
+    active: false
+  .
+  2. You shouldn't see any iptables rule
+
+id: captive_redirect/setup/iptables_rules_all_interfaces
+category_id: captive_redirect
+_description: Ensure that enabling captive-redirect sets up the correct iptables rules
+plugin: manual
+_steps:
+ 1. Enable captive-redirect with:
+ .
+   $ sudo snap set captive-redirect active=true port=9876
+ .
+ 2. Get the iptables rules with:
+ .
+   $ sudo iptables-save |grep captive
+ .
+_verification:
+  1. You should see iptables rules like:
+  .
+    :captive - [0:0]
+    -A PREROUTING -j captive
+    -A captive -p tcp -m multiport --dports 80,443 -j REDIRECT --to-ports 9876
+  .
+
+id: captive_redirect/setup/iptables_rules_one_interface
+category_id: captive_redirect
+_description: Ensure that enabling captive-redirect sets up iptables rules for a single interface
+plugin: manual
+_steps:
+ 1. Enable captive-redirect with:
+ .
+   $ sudo snap set captive-redirect active=true port=9999 interfaces=tun4
+ .
+ 2. Get the iptables rules with:
+ .
+   $ sudo iptables-save |grep captive
+ .
+_verification:
+  1. You should see iptables rules like:
+  .
+    :captive - [0:0]
+    -A PREROUTING -j captive
+    -A captive -i tun4 -p tcp -m multiport --dports 80,443 -j REDIRECT --to-ports 9999
+  .
+
+id: captive_redirect/functionality/redirect_works
+category_id: captive_redirect
+_description: Ensure that enabling captive-redirect really redirects the traffic
+plugin: manual
+_steps:
+  1. Install a sample web server with:
+  .
+    $ sudo snap install xkcd-webserver
+  .
+  2. Connect another device to the DUT (Device Under Test) and setup the DUT as default gateway
+  3. Enable the redirect with:
+  .
+    $ sudo snap set captive-redirect active=true port=80 interfaces=
+  .
+  4. Try to access an HTTP (avoid HTTPS, it will give a certificate error) web page from the device
+_verification:
+  1. You should see a blank page pointing to XKCD instead of the typed address
diff --git a/com.canonical.se:engineering-tests/units/media-hub/media-hub-snap.pxu b/com.canonical.se:engineering-tests/units/media-hub/media-hub-snap.pxu
new file mode 100644
index 0000000..24ad2bc
--- /dev/null
+++ b/com.canonical.se:engineering-tests/units/media-hub/media-hub-snap.pxu
@@ -0,0 +1,73 @@
+# Copyright (C) 2017 Canonical Ltd.
+# All rights reserved.
+#
+# Written by:
+#   Alfonso Sánchez-Beato <alfonso.sanchez-beato@canonical.com>
+
+id: media_hub/snap_classic/play_wav
+category_id: media_hub
+plugin: manual
+_summary: Confined media-hub can play wav files
+_purpose:
+ Check if media-hub properly plays wav files when confined. The scenario is
+ Unity8 on Classic.
+_steps:
+  1. Install snaps and perform needed interface connections
+  .
+    $ snap install media-hub
+    $ snap install --devmode mediaplayer-app
+    $ sudo snap connect mediaplayer-app:mpris media-hub:mpris
+  .
+  2. Start media-hub-server (needed until LP #1613420 is solved)
+  .
+    $ media-hub.media-hub-service
+  .
+  3. Download sample file
+  .
+    $ wget -P ~/Music/ http://freewavesamples.com/files/Kawai-K5000W-Buchla-C1.wav
+  .
+  4. Launch mediaplayer-app
+  .
+    $ /snap/bin/mediaplayer-app ~/Music/Kawai-K5000W-Buchla-C1.wav
+  .
+  5. Let the song play until the end
+  6. Restart playback after the song finishes
+  7. Pause, then press play again a few times
+  8. While the song is playing, move the slider back and forth in time
+  9. Pause the song, then move the slider again
+_verification:
+  Verify that in all cases the audio is played as expected.
+
+id: media_hub/snap_classic/play_mp3
+category_id: media_hub
+plugin: manual
+_summary: Confined media-hub can play an mp3
+_purpose:
+ Check if media-hub properly plays an mp3 when confined. The scenario is Unity8
+ on Classic.
+_steps:
+  1. Install snaps and perform needed interface connections
+  .
+    $ snap install media-hub
+    $ snap install --devmode mediaplayer-app
+    $ sudo snap connect mediaplayer-app:mpris media-hub:mpris
+  .
+  2. Start media-hub-server (needed until LP #1613420 is solved)
+  .
+    $ media-hub.media-hub-service
+  .
+  3. Download sample file
+  .
+    $ wget -P ~/Music/ http://www.stephaniequinn.com/Music/Canon.mp3
+  .
+  4. Launch mediaplayer-app
+  .
+    $ /snap/bin/mediaplayer-app ~/Music/Canon.mp3
+  .
+  5. Let the song play until the end
+  6. Restart playback after the song finishes
+  7. Pause, then press play again a few times
+  8. While the song is playing, move the slider back and forth in time
+  9. Pause the song, then move the slider again
+_verification:
+  Verify that in all cases the audio is played as expected.
diff --git a/com.canonical.se:engineering-tests/units/media-hub/media-hub.pxu b/com.canonical.se:engineering-tests/units/media-hub/media-hub.pxu
new file mode 100644
index 0000000..bdeec69
--- /dev/null
+++ b/com.canonical.se:engineering-tests/units/media-hub/media-hub.pxu
@@ -0,0 +1,65 @@
+# Copyright 2017 Canonical Ltd.
+# All rights reserved.
+#
+# Written by:
+#   Alfonso Sánchez-Beato <alfonso.sanchez-beato@canonical.com>
+
+unit: category
+id: media_hub
+_name: media-hub
+
+id: media_hub/video/play_h264
+category_id: media_hub
+plugin: manual
+_summary: H.264 videos play as expected
+_purpose:
+ Check if media-hub plays properly H.264 videos
+_steps:
+  1. Download H.264 video
+  .
+    $ wget https://download.blender.org/durian/trailer/sintel_trailer-720p.mp4
+  .
+  2. Start media-hub-server
+  .
+    $ MIR_SOCKET=/run/user/$UID/mir_socket media-hub-server --desktop_file_hint=unity8
+  .
+  3. Start to play the video
+  .
+    $ MIR_SOCKET=/run/user/$UID/mir_socket QT_QPA_PLATFORM=ubuntumirclient DISPLAY=:0 /usr/bin/mediaplayer-app --desktop_file_hint=unity8 sintel_trailer-720p.mp4
+  .
+  4. Let the video play until the end
+  5. Re-start after the video finishes
+  6. Pause, then press play again a few times
+  7. While the video is playing, move the slider back and forth in time
+  8. Pause the video, then move the slider again
+  9. Re-size, maximize, then minimize the window several times
+_verification:
+  Verify that in all cases the video is played as expected.
+
+id: media_hub/video/play_mpeg4
+category_id: media_hub
+plugin: manual
+_summary: MPEG4 videos play as expected
+_purpose:
+ Check if media-hub plays properly MPEG4 videos
+_steps:
+  1. Download H.264 video
+  .
+    $ wget https://download.blender.org/durian/trailer/Sintel_Trailer.480p.DivX_Home_Theater.divx
+  .
+  2. Start media-hub-server
+  .
+    $ MIR_SOCKET=/run/user/$UID/mir_socket media-hub-server --desktop_file_hint=unity8
+  .
+  3. Start to play the video
+  .
+    $ MIR_SOCKET=/run/user/$UID/mir_socket QT_QPA_PLATFORM=ubuntumirclient DISPLAY=:0 /usr/bin/mediaplayer-app --desktop_file_hint=unity8 Sintel_Trailer.480p.DivX_Home_Theater.divx
+  .
+  4. Let the video play until the end
+  5. Re-start after the video finishes
+  6. Pause, then press play again a few times
+  7. While the video is playing, move the slider back and forth in time
+  8. Pause the video, then move the slider again
+  9. Re-size, maximize, then minimize the window several times
+_verification:
+  Verify that in all cases the video is played as expected.
diff --git a/com.canonical.se:engineering-tests/units/modem-manager/modem-manager.pxu b/com.canonical.se:engineering-tests/units/modem-manager/modem-manager.pxu
new file mode 100644
index 0000000..3912ac2
--- /dev/null
+++ b/com.canonical.se:engineering-tests/units/modem-manager/modem-manager.pxu
@@ -0,0 +1,103 @@
+# Copyright 2016 Canonical Ltd.
+# All rights reserved.
+#
+# Written by:
+#   Jim Hodapp <jim.hodapp@canonical.com>
+#   Alfonso Sanchez-Beato <alfonso.sanchez-beato@canonical.com>
+
+unit: category
+id: modem_manager
+_name: Modem Manager
+
+id: modem_manager/setup/ensure_interface_connection_setup
+category_id: modem_manager
+_description: Ensure that the modem-manager interface is connected
+plugin: manual
+_steps:
+  1. Install network-manager if not already installed
+     .
+     $ sudo snap install network-manager
+     .
+  2. Connect required modem-manager/network-manager slots/plugs
+     .
+     $ sudo snap connect modem-manager:mmcli modem-manager:service
+     $ sudo snap connect network-manager:nmcli network-manager:service
+     $ sudo snap connect network-manager:modem-manager modem-manager:service
+     $ sudo snap connect network-manager:ppp ubuntu-core:ppp
+     .
+_verification:
+  Verify that you see the following when running snap interfaces:
+  modem-manager:service    modem-manager:mmcli,network-manager:modem-manager
+  network-manager:service  network-manager:nmcli
+  :ppp                     network-manager
+
+id: modem_manager/modems/get_all
+category_id: modem_manager
+plugin: manual
+depends: modem_manager/setup/ensure_interface_connection_setup
+_summary: All active modem configuration items are listed
+_purpose:
+ Check if the modem shows up as being recognized by modem-manager.
+_steps:
+  1. Execute the following command to retrieve the list of all detected modems:
+     .
+     $ sudo mmcli -L
+_verification:
+  Your expected modem is shown in the output list.
+
+id: modem_manager/modems/get_info
+category_id: modem_manager
+plugin: manual
+depends: modem_manager/setup/ensure_interface_connection_setup
+_summary: All modem information listed
+_purpose:
+ Check if the modem details can be listed.
+_steps:
+  1. Execute the following command to retrieve the list of all detected modems.
+     Note, the modem number is listed from the previous test:
+     .
+     $ sudo mmcli -m <modem_number>
+_verification:
+  Your desired modem detail is listed.
+
+id: modem_manager/modems/connect
+category_id: modem_manager
+plugin: manual
+depends: modem_manager/setup/ensure_interface_connection_setup
+_summary: Connect to a listed modem
+_purpose:
+ Connect to a listed modem and verify connection status
+_steps:
+  1. Execute the following commands to connect to a particular modem. First run
+     "sudo nmcli d" to find out what you need to put in <interface> (look for
+     TYPE=gsm, the interface will be the name in the DEVICE column). It will
+     probably be something that starts with "tty" or "cdc". Also, replace
+     <op_apn> by looking up the APN string for your cell provider at
+     http://www.apn-settings.com (e.g. "fast.t-mobile.com" for T-Mobile 4G).
+     Finally, "gsmconn" is an arbitrary connection name and can be set to
+     anything that makes sense for the connection type.
+     .
+     $ sudo nmcli c add type gsm ifname <interface> con-name gsmconn apn <op_apn>
+     $ sudo nmcli r wwan on
+     .
+  2. Check that the connection is up with "sudo nmcli d". It should show that
+     state is "connected". This can take some time depending on network
+     conditions and on the modem type.
+     .
+  3. Check which is the network interface for the cellular connection. For this,
+     fist run
+     .
+     $ sudo nmcli d show <interface>
+     .
+     (here <interface> is the one from point 1), check the IP4.ADDRESS field,
+     then run
+     .
+     $ ip address
+     .
+     and there you can find the network interface that owns that address.
+     .
+  4. Add a route to 8.8.8.8 with
+     .
+     $ sudo ip route add 8.8.8.8 dev <network-interface>
+_verification:
+  Verify that you have a modem connection by pinging 8.8.8.8.
diff --git a/com.canonical.se:engineering-tests/units/network-manager/network-manager.pxu b/com.canonical.se:engineering-tests/units/network-manager/network-manager.pxu
new file mode 100644
index 0000000..27d9b8b
--- /dev/null
+++ b/com.canonical.se:engineering-tests/units/network-manager/network-manager.pxu
@@ -0,0 +1,325 @@
+# Copyright 2016 Canonical Ltd.
+# All rights reserved.
+#
+# Written by:
+#   Lorn Potter <lorn.potter@canonical.com>
+#   Simon Fels <simon.fels@canonical.com>
+
+unit: category
+id: network_manager
+_name: Network Manager
+
+id: network_manager/misc/check_for_crashes
+category_id: network_manager
+plugin: manual
+_summary: Verify that NetworkManager hasn't crashed in previous runs.
+_steps:
+ 1. Power on a Desktop system, this tests does not apply elsewhere.
+ 2. List content of /var/crash for crash dumps:
+ .
+   ls -l /var/crash
+ .
+_verification:
+ 1. Check that /var/crash is empty.
+
+id: network_manager/ethernet/enable_support
+category_id: network_manager
+plugin: manual
+_summary: Ethernet support for NetworkManager needs to be manually enabled
+_purpose:
+ By default ethernet support is disabled in the network-manager snap. In order
+ to be able to get it managed through NetworkManager a few manual steps need to
+ be performed.
+_steps:
+ 1. Create /etc/netplan/00-default-nm-renderer.yaml with the following content:
+ .
+   network:
+     renderer: NetworkManager
+ .
+ 2. Drop any other files from /etc/netplan and reboot the device.
+_verification:
+ NOTE: The device may get another IP address assigned as before. Use a network
+ scanner or a monitor+keyboard to check which IP address it got assigned.
+ .
+ Once the device is rebooted you should be able to connect to it by using the
+ network connection offered on the ethernet port. When logged into the device
+ verify NetworkManager automatically connected the ethernet port:
+ .
+ $ network-manager.nmcli d
+ DEVICE       TYPE      STATE        CONNECTION
+ eth0         ethernet  connected    eth0
+ [...]
+ .
+ The state of all ethernet devices with a plugged cable and a working network
+ behind should be 'connected'.
+
+id: network_manager/ethernet/all_ports_detected
+depends: network_manager/ethernet/enable_support
+category_id: network_manager
+plugin: manual
+_summary: NetworkManager should detect all available ethernet ports
+_purpose:
+ NetworkManager should detect all available ethernet ports by default
+ on a system and list them as usable devices.
+_steps:
+ 1. List all available ethernet ports
+    $ ifconfig -a | grep -E '$eth'
+    $ ifconfig -a | grep -E '$en'
+ 2. List all ethernet ports NetworkManager knows about
+    $ network-manager.nmcli d
+_verification:
+ Both steps should show the same list of ethernet network interfaces.
+
+id: network_manager/ethernet/auto_connected
+depends: network_manager/ethernet/enable_support
+category_id: network_manager
+plugin: manual
+_summary: NetworkManager should auto-connect any ethernet port with a link
+_purpose:
+ When a cable is plugged into an ethernet port NetworkManager should try
+ to automatically connect the port.
+ .
+ NOTE: This test assumes that the cable you plug into the port is connected
+ to a network which offers a DHCP server.
+_steps:
+ 1. Ensure that there is no connection for the port you want to use for
+    testing. Using a serial console to perform this test is recommended.
+ 2. Drop any existing connections listed by
+    $ network-manager.nmcli c show
+    which are meant for the ethernet port of the device with
+    $ network-manager.nmcli c delete <UUID>
+ 3. Plug the cable into the ethernet port.
+_verification:
+ The ethernet port should be automatically connected by NetworkManager. This
+ can be verified with
+ $ network-manager.nmcli d | grep <ethernet device name>
+ eth0        ethernet  connected  <connection name>
+ Please note that the <connection name> can be different as its
+ automatically selected by NetworkManager. It can be "Wired Connection 1"
+ for example.
+
+id: network_manager/ethernet/auto_connect_existing_connection
+depends: network_manager/ethernet/enable_support
+category_id: network_manager
+plugin: manual
+_summary: Cable plug/unplug should give an existing connection
+_purpose:
+ When a cable is unplugged and plugged again the ethernet port should
+ be automatically reconnected.
+_steps:
+ 1. Check if the ethernet port is currently connected
+    $ network-manager.nmcli d
+ 2. Unplug the cable from the ethernet port and check the connection
+    $ network-manager.nmcli d
+ 3. Plug the cable again and check the connection status.
+_verification:
+ Before the cable is unplugged the ethernet port should be marked
+ as connected. Once the cable is removed the connection status
+ should switch to unconnected. When plugged back in, it should be marked
+ again as connected.
+
+id: network_manager/ethernet/unmanaged
+category_id: network_manager
+plugin: manual
+depends: network_manager/ethernet/auto_connected
+_summary: Check if ethernet device is unmanaged.
+_purpose:
+ Check if the ethernet device is not managed by Network Manager.
+ .
+ NOTE: This only applies to devices where ethernet is not managed by
+ NetworkManager. Check if /etc/netplan/00-default-nm-renderer.yaml
+ exists. If it does not, then NetworkManager doesn't touch any
+ ethernet connection. If it exists, skip this test.
+_steps:
+  1. Execute the following command to retrieve the list of all detected connections.
+  Note, the AP number is listed from the previous test:
+  .
+    $ /snap/bin/network-manager.nmcli d | grep en
+_verification:
+   The network device is listed as 'unmanaged', as an example:
+    enxb827ebf6b919  ethernet  unmanaged     --
+
+id: network_manager/connections/get_all
+category_id: network_manager
+plugin: manual
+depends: network_manager/ethernet/auto_connected
+_summary: All active AP configuration items are listed
+_purpose:
+ Check if the AP shows up as being recognized by Network Manager.
+_steps:
+  1. Execute the following command to retrieve the list of all detected connections:
+  .
+    $ /snap/bin/network-manager.nmcli d wifi list
+_verification:
+  Your expected AP is shown in the output list for example:
+  pool1          Infra  6     54 Mbit/s  75      ***   WPA2
+
+id: network_manager/connections/agent
+category_id: network_manager
+plugin: manual
+depends: network_manager/ethernet/auto_connected
+_summary: Register for secret agent
+_purpose:
+ Register for Network Manager's secret agent and verify status
+_steps:
+  1. Execute the following command to register secret agent:
+  .
+    $ /snap/bin/network-manager.nmcli a
+_verification:
+  Output should be similiar to this:
+  nmcli successfully registered as a Network Manager's secret agent.
+  nmcli successfully registered as a polkit agent.
+
+id: network_manager/connections/connect
+category_id: network_manager
+plugin: manual
+depends: network_manager/ethernet/auto_connected
+_summary: Connect to a listed AP
+_purpose:
+ Connect to a listed AP and verify connection status
+_steps:
+  1. Execute the following commands to connect to a particular AP.
+  .
+    $ /snap/bin/network-manager.nmcli dev wifi con "yourssid" password "yourpassword"
+    Note, replace yourssid with the ssid if the AP you will connect to, and replace yourpassword
+    with the actual password/passphrase.
+_verification:
+  Verify that you have a AP connection by issuing this command:
+  $ ifconfig | grep -A 2 wl
+  .
+  verifying that the interface has an IP address with output similiar to this:
+  wlp5s0    Link encap:Ethernet  HWaddr 70:77:81:33:92:6b
+            inet addr:10.0.0.108  Bcast:10.0.0.255  Mask:255.255.255.0
+            inet6 addr: 2001:8003:6501:2000:c1b3:3359:d2a3:f2d1/64 Scope:Global
+
+id: network_manager/connections/get_info
+category_id: network_manager
+plugin: manual
+depends: network_manager/ethernet/auto_connected
+_summary: All AP information listed
+_purpose:
+ Check if the AP details can be listed.
+_steps:
+  1. Execute the following command to retrieve the list of all detected connections.
+  Note, the AP ssid is listed from the previous test:
+  .
+    $ /snap/bin/network-manager.nmcli -p -f general,ip4,ip6 c show <AP_SSID>
+_verification:
+  Your desired AP detail is listed and has ip4/ip6 address.
+    ===============================================================================
+        Activate connection details (1554e3b2-76e6-4adc-b986-215b7393f8d9)
+    ===============================================================================
+    GENERAL.NAME:                           pool1
+    GENERAL.UUID:                           1554e3b2-76e6-4adc-b986-215b7393f8d9
+    GENERAL.DEVICES:                        wlp5s0
+    GENERAL.STATE:                          activated
+    GENERAL.DEFAULT:                        no
+    GENERAL.DEFAULT6:                       no
+    GENERAL.VPN:                            no
+    GENERAL.ZONE:                           --
+    GENERAL.DBUS-PATH:                      /org/freedesktop/NetworkManager/ActiveConnection/2
+    GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/Settings/3
+    GENERAL.SPEC-OBJECT:                    /org/freedesktop/NetworkManager/AccessPoint/0
+    GENERAL.MASTER-PATH:                    --
+    -------------------------------------------------------------------------------
+    IP4.ADDRESS[1]:                         10.0.0.108/24
+    IP4.GATEWAY:                            10.0.0.138
+    IP4.DNS[1]:                             10.0.0.138
+    IP4.DOMAIN[1]:                          gateway
+    -------------------------------------------------------------------------------
+    IP6.ADDRESS[1]:                         2001:8003:6501:2000:c1b3:3359:d2a3:f2d1/64
+    IP6.ADDRESS[2]:                         2001:8003:6501:2000:7277:81ff:fe33:926b/64
+    IP6.ADDRESS[3]:                         fe80::7277:81ff:fe33:926b/64
+    IP6.GATEWAY:                            fe80::e2b9:e5ff:fe5a:91b0
+    IP6.DNS[1]:                             2001:8003:6501:2000::1
+    IP6.DOMAIN[1]:                          gateway
+    -------------------------------------------------------------------------------
+
+id: network_manager/ethernet/device_supports_wol
+depends: network_manager/ethernet/enable_support
+category_id: network_manager
+plugin: manual
+_summary: Verify that the device under test has support for Wake-on-LAN
+_purpose:
+  Verify that the device you're running the tests on supports Wake-on-LAN. For
+  example, devices like the Raspberry PI (1-3) do not support Wake-on-LAN.
+_steps:
+    Verify that your device supports Wake-on-LAN. You can look into the specs
+    for your device, ask the vendor or search through the internet.
+    .
+    For example the Raspberry PI can't suspend to RAM which is discussed and
+    outlined in https://github.com/raspberrypi/linux/issues/1281 which also
+    makes Wake-on-LAN impossible.
+_verification:
+    If device does not support Wake-on-LAN please SKIP this test case and all
+    depending test cases will be skipped too. If Wake-on-LAN is supported mark
+    test as PASSED.
+
+id: network_manager/ethernet/uses_global_wol
+depends: network_manager/ethernet/device_supports_wol
+category_id: network_manager
+plugin: manual
+_summary: Ethernet connections are using global wake-on-lan setting
+_purpose:
+  Check if an ethernet connection created by NetworkManager automatically uses the
+  global default for wake-on-lan.
+  .
+  NOTE: This requires a system which is configured to not use netplan to
+  generate connections for NetworkManager. On such a system an ethernet
+  connection will always have wake-on-lan disabled as netplan does this
+  by default if not explicitly stated in the netplan configuration.
+_steps:
+  1. Find connection UUID for the ethernet port
+    $ network-manager.nmcli c show | grep eth0
+  2. Verify the connection uses the global wake-on-lan setting
+    $ network-manager.nmcli -m multiline -f 802-3-ethernet.wake-on-lan c show <UUID>
+_verification:
+  The output should look like this:
+  .
+  802-3-ethernet.wake-on-lan:             1 (default)
+
+id: network_manager/ethernet/has_wol_enabled_by_default
+depends: network_manager/ethernet/device_supports_wol
+category_id: network_manager
+plugin: manual
+_summary: Ethernet port has wake-on-lan enabled by default
+_purpose:
+  Check if the actual ethernet device has wake-on-lan correctly enabled when
+  its connection is maintained by NetworkManager.
+_steps:
+  1. Install the se-test-tools snap
+    $ snap install --devmode --edge se-test-tools
+  2. Check the ethernet port for the wake-on-lan setting (eth0 in this case)
+    $ sudo se-test-tools.ethtool eth0
+_verification:
+  The output should be similar to this:
+  Settings for eth0:
+   [...]
+   Supports Wake-on: pumbg
+   Wake-on: g
+   [...]
+  .
+  The relevant line is the "Wake-on:" one. It should have the value "g"
+  set which marks the port as waking up on the magic packet.
+
+id: network_manager/ethernet/wakes_up_with_wol
+depends: network_manager/ethernet/device_supports_wol
+category_id: network_manager
+plugin: manual
+_summary: Wake on LAN configured by NetworkManager can wake up the device
+_purpose:
+ Check that another system can wake up from S5 the SUT using the connected ethernet port.
+_steps:
+ 1. Ensure there is an ethernet cable attached to one of the ports and it's configured via
+    NetworkManager. Check with
+    $ network-manager.nmcli d | grep eth0
+ 2. Note the MAC address of the the eth0 port
+    $ ifconfig eth0
+ 3. Power off the system by running
+    $ sudo poweroff
+ 4. From another computer on the same network run the following command:
+    $ wakeonlan {mac}
+    If wakeonlan tool is not installed run:
+    $ sudo apt install wakeonlan
+_verification:
+  Did the SUT wake up from S5?
diff --git a/com.canonical.se:engineering-tests/units/network-manager/power_management.pxu b/com.canonical.se:engineering-tests/units/network-manager/power_management.pxu
new file mode 100644
index 0000000..8ae9b78
--- /dev/null
+++ b/com.canonical.se:engineering-tests/units/network-manager/power_management.pxu
@@ -0,0 +1,31 @@
+# Copyright 2016 Canonical Ltd.
+# All rights reserved.
+#
+# Written by:
+#   Simon Fels <simon.fels@canonical.com>
+
+id: network_manager/power_management/connections_come_back_after_resume
+category_id: network_manager
+plugin: manual
+_summary: Connections managed by NetworkManager should come back when device wakes up
+_purpose:
+ When a device goes to sleep NetworkManager disconnects all connections but
+ will reconnect them back when the device reawakens.
+_steps:
+ 1. Verify the device is connectd to a WiFi or ethernet network. You can use
+ .
+    $ network-manager.nmcli d
+ .
+    to check if a wireless network interface is connected or not.
+ 2. Suspend the device by calling
+ .
+    $ systemctl suspend
+ .
+ 3. Wake up the device again by pressing its power button
+_verification:
+ When the device comes back from suspend after pressing the power button
+ verify with
+ .
+ $ network-manager.nmcli d
+ .
+ that the previously connected WiFi/ethernet network is again connected.
diff --git a/com.canonical.se:engineering-tests/units/network-manager/snap.pxu b/com.canonical.se:engineering-tests/units/network-manager/snap.pxu
new file mode 100644
index 0000000..419901a
--- /dev/null
+++ b/com.canonical.se:engineering-tests/units/network-manager/snap.pxu
@@ -0,0 +1,101 @@
+# Copyright 2017 Canonical Ltd.
+# All rights reserved.
+#
+# Written by:
+#   Matteo Croce <matteo.croce@canonical.com>
+
+id: network_manager/snap/check_interfaces
+category_id: network_manager
+plugin: manual
+_summary: Verify that snap interfaces are correctly connected
+_steps:
+ 1. Install the snap from the store:
+ .
+   $ snap install network-manager
+ .
+_verification:
+ 1. Verify that the 'network-manager' snap has all required plug connected:
+ .
+   $ snap interfaces |grep network-manager
+   :network-setup-observe   network-manager
+   :ppp                     network-manager
+   modem-manager:service    modem-manager:mmcli,network-manager:modem-manager
+   network-manager:service  network-manager:nmcli
+ .
+
+id: network_manager/wifi/periodic_scanning
+category_id: network_manager
+depends: network_manager/snap/check_interfaces
+plugin: manual
+_summary: Verify that periodic Wi-Fi scanning occurs
+_steps:
+ 1. Run wpa_cli to ensure that periodic scanning is occurring:
+ .
+   $ sudo wpa_cli
+   wpa_cli v2.4
+   .
+   Selected interface 'wlp3s0'
+   .
+   Interactive mode
+   .
+ .
+ 2. Get the scan results with:
+ .
+   > scan_results
+ .
+_verification:
+ 1. You should see some output like this at least once every 120 seconds
+ in the wpa_cli output
+ .
+   <3>CTRL-EVENT-SCAN-STARTED
+   <3>CTRL-EVENT-SCAN-RESULTS
+ .
+ 2. You should see the list of reachable Access Points, eg.
+ .
+   bssid / frequency / signal level / flags / ssid
+   12:34:56:78:89:ab       2437    -85     [WPA2-PSK-CCMP+TKIP][ESS]       Home-AP
+
+
+id: network_manager/wifi/no_dbus_duplicate_signals
+category_id: network_manager
+depends: network_manager/snap/check_interfaces
+plugin: manual
+_summary: Ensure that dbus signals aren't duplicated
+_steps:
+ 1. Run dbus-monitor:
+ .
+   dbus-monitor --system --profile type=signal,interface=org.freedesktop.DBus.Properties
+ .
+_verification:
+ 1. Ensure that when scanning occurs, there aren't duplicate PropertiesChanged
+ signals sent for each AccessPoint object path.
+ There should be a single DBus PropertiesChanged signal for each /AccessPoint/X):
+ .
+   sig  1489573828  1805  :1.13  <none>  /org/freedesktop/NetworkManager/AccessPoint/0  org.freedesktop.DBus.Properties PropertiesChanged
+   sig  1489573828  1806  :1.13  <none>  /org/freedesktop/NetworkManager/AccessPoint/1  org.freedesktop.DBus.Properties PropertiesChanged
+   sig  1489573828  1807  :1.13  <none>  /org/freedesktop/NetworkManager/AccessPoint/2  org.freedesktop.DBus.Properties PropertiesChanged
+   sig  1489573828  1808  :1.13  <none>  /org/freedesktop/NetworkManager/AccessPoint/3  org.freedesktop.DBus.Properties PropertiesChanged
+   sig  1489573828  1809  :1.13  <none>  /org/freedesktop/NetworkManager/AccessPoint/4  org.freedesktop.DBus.Properties PropertiesChanged
+
+
+id: network_manager/wifi/ap_expires
+category_id: network_manager
+depends: network_manager/snap/check_interfaces
+plugin: manual
+_summary: Ensure that AccessPoint entries are volatile
+_steps:
+ 1. Bring up an AP (eg. from a smartphone)
+ 2. Start wpa_cli and do a wireless scan:
+ .
+   $ wpa_cli
+   > scan
+ .
+ wait 10 seconds, and get the scan results.
+ .
+   > scan_results
+ .
+ 3. Shutdown the AP on the smartphone
+ 4. Wait 120 seconds
+ 5. Retry the wireless scan
+_verification:
+ 1. In the second scan the smartphone AP should not be present
diff --git a/com.canonical.se:engineering-tests/units/network-manager/wireless.pxu b/com.canonical.se:engineering-tests/units/network-manager/wireless.pxu
new file mode 100644
index 0000000..52a84d2
--- /dev/null
+++ b/com.canonical.se:engineering-tests/units/network-manager/wireless.pxu
@@ -0,0 +1,54 @@
+# Copyright 2016 Canonical Ltd.
+# All rights reserved.
+#
+# Written by:
+#   Simon Fels <simon.fels@canonical.com>
+
+id: network_manager/wireless/powersave_off_by_default
+category_id: network_manager
+plugin: manual
+_summary: NetworkManager should disable powersave by default
+_purpose:
+ The powersave configuration option should cause the mode on the
+ actual hardware device to be turned off by default.
+_steps:
+ Install wireless-tools snap and check that powersave is turned off
+ on the actual hardware wireless device.
+  $ snap install wireless-tools
+_verification:
+ The iw utility should return the following for the selected wireless device
+  $ sudo wireless-tools.iw dev wlan0 get power_save
+  Power save: off
+
+id: network_manager/wireless/powersave_config_default_off
+category_id: network_manager
+plugin: manual
+_summary:
+ The configuration option should be set to disable by default
+_purpose:
+ On installation the snap sets the option to a default value
+ which should always be the same.
+_steps:
+ Retrieve the configuration value via
+  $ snap get network-manager wifi.powersave
+_verification:
+  The returned value should be "disable".
+
+id: network_manager/wireless/powersave_can_be_enabled
+category_id: network_manager
+plugin: manual
+_summary:
+ Enabling powersave with the configuration option of the snap should turn it on.
+_purpose:
+ The network-manager snap uses a configure hook to control how
+ the WiFi powersave option is set. It should be possible to enable
+ the option on the actual hardware wireless device with it.
+_steps:
+ 1. Enable powersave via the configure hook
+  $ snap set network-manager wifi.powersave=enable
+_verification:
+ Powersave should now be turned on for all wireless devices. This
+ can be verified with
+  $ snap install wireless-tools
+  $ sudo wireless-tools.iw dev wlan0 get power_save
+  Power save: on
diff --git a/com.canonical.se:engineering-tests/units/pulseaudio/pulseaudio.pxu b/com.canonical.se:engineering-tests/units/pulseaudio/pulseaudio.pxu
new file mode 100644
index 0000000..43af155
--- /dev/null
+++ b/com.canonical.se:engineering-tests/units/pulseaudio/pulseaudio.pxu
@@ -0,0 +1,106 @@
+# Copyright 2016 Canonical Ltd.
+# All rights reserved.
+#
+# Written by:
+#   Konrad Zapalowicz <konrad.zapalowicz@canonical.com>
+
+unit: category
+id: pulseaudio
+_name: PulseAudio
+
+id: pulseaudio/setup/ensure_interface_connection_setup
+category_id: pulseaudio
+_description: Ensure that the pulseaudio interface is auto-connected
+plugin: manual
+_steps:
+  1. List the interfaces
+  .
+    $ snap interfaces
+  .
+_verification:
+  Verify that you see the following:
+  pulseaudio:service    pulseaudio:client
+  :network              pulseaudio
+
+id: pulseaudio/pactl/ensure-commands-can-be-run-by-root
+category_id: pulseaudio
+_description: Ensure that the pulseaudio commands can be run only by root
+plugin: manual
+depends: pulseaudio/setup/ensure_interface_connection_setup
+_steps:
+  1. Try to run pactl
+  .
+    $ pulseaudio.pactl
+  .
+  2. Try to run paplay
+  .
+    $ pulseaudio.paplay
+  .
+  3. Try to run parec
+  .
+    $ pulseaudio.parec
+  .
+_verification:
+  Verify that each step ends with the following message:
+    This script must be run as root
+
+id: pulseaudio/pactl/ensure-modules-are-listed
+category_id: pulseaudio
+_description: Ensure that the correct modules are loaded
+plugin: manual
+depends: pulseaudio/setup/ensure_interface_connection_setup 
+_steps:
+  1. List the loaded modules
+  .
+    $ sudo pulseaudio.pactl list short
+  .
+_verification:
+  Verify that you see output similar to following:
+    0       module-device-restore
+    1       module-stream-restore
+    2       module-card-restore
+    3       module-augment-properties
+    4       module-switch-on-port-available
+    5       module-udev-detect
+    ...
+    80      protocol-native.c       pactl
+    0       alsa_card.pci-0000_00_1b.0      module-alsa-card.c
+  .
+  Verify that amongs the other the following modules are listed:
+    module-device-restore
+    module-stream-restore
+    module-card-restore
+    module-switch-on-port-available
+    module-rescue-streams
+    module-always-sink
+
+id: pulseaudio/parecord/ensure-audio-can-be-recorded
+category_id: pulseaudio
+_description: Ensure that it is possible to record audio
+plugin: manual
+depends: pulseaudio/setup/ensure_interface_connection_setup 
+_steps:
+  1. Record an audio .wav file
+  .
+    $ sudo pulseaudio.parec ~/record.wav
+  .
+_verification:
+  Verify that the record.wav file has been created and it's size is
+  greater than zero. Verify that the recorded file can be played and
+  it is possible to hear the audio.
+
+id: pulseaudio/paplay/ensure-audio-can-be-played
+category_id: pulseaudio
+_description: Ensure that it is possible to play auio files
+plugin: manual
+depends: pulseaudio/setup/ensure_interface_connection_setup 
+_steps:
+  1. Play an audio .wav file
+  .
+    $ sudo pulseaudio.paplay ~/file.wav
+  .
+_verification:
+  Verify that the audio is hearable through the speakers. In case the
+  speakers are not available verify that the sink status has changed
+  from SUSPEND to RUNNING [use the sudo pulseaudio.pactl list sinks
+  command for that]
diff --git a/com.canonical.se:engineering-tests/units/snapweb/snapweb.pxu b/com.canonical.se:engineering-tests/units/snapweb/snapweb.pxu
new file mode 100644
index 0000000..8f9e070
--- /dev/null
+++ b/com.canonical.se:engineering-tests/units/snapweb/snapweb.pxu
@@ -0,0 +1,182 @@
+# Copyright 2017 Canonical Ltd.
+# All rights reserved.
+#
+# Written by:
+#   Roberto Mier Escandon <roberto.escandon@canonical.com>
+
+unit: category
+id: snapweb
+_name: SnapWeb
+
+id: snapweb/setup/ensure_interface_connection_setup
+category_id: snapweb
+_description: Ensure that the snapweb interfaces are auto-connected
+plugin: manual
+_steps:
+  1. List the interfaces
+  .
+    $ snap interfaces snapweb
+  .
+_verification:
+  Verify that you see the following:
+  Slot					Plug
+  :network              snapweb
+  :network-bind			snapweb
+  :snapd-control		snapweb
+  :timeserver-control	snapweb
+
+id: snapweb/setup/ensure-http-service-is-up
+category_id: snapweb
+_description: Ensure that the http interface is up and running
+plugin: manual
+depends: snapweb/setup/ensure_interface_connection_setup
+_steps:
+  1. Open a browser in same device and type in address bar:
+  .
+    http://localhost:4200
+  .
+_verification:
+  Verify that url is accessible and a warning is shown about web access is
+  not secure/private (depending on the browser)
+
+id: snapweb/setup/ensure-https-service-is-up
+category_id: snapweb
+_description: Ensure that the snapweb web interface is up and running
+plugin: manual
+depends: snapweb/setup/ensure-http-service-is-up
+_steps:
+  1. Open a browser in same device and type in address bar:
+  .
+    http://localhost:4200
+  .
+  2. After warning alert showing that web access is not secure/private,
+  proceed to access localhost. In some browsers it is needed to confirm
+  a security exception.
+_verification:
+  Verify that url is accessible and browser shows a page with title
+  'Access Control', requesting a Snapweb Access Token to continue.
+  Verify that url address is now https://localhost:4201/access-control
+
+id: snapweb/setup/ensure-web-service-is-accessible-from-lan
+category_id: snapweb
+_description: Ensure that the snapweb web interface is accessible from lan
+plugin: manual
+depends: snapweb/setup/ensure-https-service-is-up
+_steps:
+  1. Open a browser in other device connected to same LAN than the one
+  hosting snapweb and type in address bar:
+  .
+    http://[hostname]:4200
+  .
+  2. After warning alert showing that web access is not secure/private,
+  proceed to access localhost. In some browsers it is needed to confirm
+  a security exception.
+_verification:
+  Verify that url is accessible and browser shows a page with title
+  'Access Control', requesting a Snapweb Access Token to continue.
+  Verify that url address is now https://[hostname]:4201/access-control
+
+id: snapweb/setup/ensure-token-access
+category_id: snapweb
+_description: Ensure ui allows access when entered a valid token generated from cli
+plugin: manual
+depends: snapweb/setup/ensure-https-service-is-up
+_steps:
+  1. Reboot the device. This step is only needed to be done just after
+  first installation. If snap was previously installed and this is
+  an update, you can go to step 2.
+  2. Open a terminal in the device and type:
+  .
+    $ sudo snapweb.generate-token
+  .
+  3. Copy result token to clipboard
+  4. Access browser and type:
+  .
+  	https://localhost:4201
+  .
+  5. Paste clipboard token into Snapweb Access Token textbox
+_verification:
+  Verify that access is allowed and installed apps list is shown
+
+id: snapweb/snaps/installed-snaps
+category_id: snapweb
+_description: Verify installed snaps list
+plugin: manual
+depends: snapweb/setup/ensure-token-access
+_steps:
+  1. Access browser and type:
+  .
+  	https://localhost:4201
+  .
+  2. In a device terminal type:
+  .
+    $ snap list
+  .
+_verification:
+  Verify that the list of 'Apps installed' in browser is the same
+  as the list shown in terminal, except snapweb itself that should
+  be only shown in terminal list
+
+id: snapweb/snaps/installable-snaps
+category_id: snapweb
+_description: Verify that snaps can be installed and filtered
+plugin: manual
+depends: snapweb/setup/ensure-token-access
+_steps:
+  1. Access browser and type:
+  .
+  	https://localhost:4201
+  .
+  2. Click on last entry on Apps installed section named 'Get more apps'
+  or click on 'Store' upper tab
+  3. Click on the links over snaps to filter them
+  4. Search for certain snap name in upper search box
+_verification:
+  Verify that at the beginning there is a list of snaps that can be installed,
+  everyone with its icon, version, author and a button with label 'Install'.
+  Verify that the list can be filtered by pressing links over
+  Verify you get results when searching for a snap that it's in the list of
+  installables
+
+id: snapweb/snaps/install-snap
+category_id: snapweb
+_description: Ensure that a snap can be installed using web ui
+plugin: manual
+depends: snapweb/setup/ensure-token-access
+_steps:
+  1. Access browser and type:
+  .
+  	https://localhost:4201
+  .
+  2. Click on 'Install' button of any available snap
+  3. Wait for snap to be installed and open a terminal
+  4. Type in terminal:
+  .
+  	$ snap list
+  .
+_verification:
+  Verify that the snap requested to be installed is there in the terminal resultant list
+  Verify that button in step 2 changes its label to 'Installing' while installing
+  Verify that button of the instaled snap has now 'Remove' in its label
+
+id: snapweb/snaps/remove-snap
+category_id: snapweb
+_description: Ensure that a snap can be removed using web ui
+plugin: manual
+depends: snapweb/snaps/install-snap
+_steps:
+  1. Access browser and type:
+  .
+  	https://localhost:4201
+  .
+  2. Click on 'Remove' button of installed snap
+  3. Wait for snap to be removed and open a terminal
+  4. Type in terminal:
+  .
+  	$ snap list
+  .
+_verification:
+  Verify that the snap requested to be removed is not in the terminal resultant list
+  Verify that button in step 2 changes its label to 'Removing' while installing
+  Verify that button of the removed snap has now 'Install' in its label
+
diff --git a/com.canonical.se:engineering-tests/units/test-plan.pxu b/com.canonical.se:engineering-tests/units/test-plan.pxu
new file mode 100644
index 0000000..a7f31d1
--- /dev/null
+++ b/com.canonical.se:engineering-tests/units/test-plan.pxu
@@ -0,0 +1,9 @@
+id: engineering-tests
+unit: test plan
+_name: System Enablement Engineering Tests
+_description:
+ Set of tests to verify functionality of the snaps produced by the
+ System Enablement team at Canonical.
+estimated_duration: 2h
+include:
+ 2017.com.canonical.se::.*
diff --git a/com.canonical.se:engineering-tests/units/tpm/tpm.pxu b/com.canonical.se:engineering-tests/units/tpm/tpm.pxu
new file mode 100644
index 0000000..b00bd89
--- /dev/null
+++ b/com.canonical.se:engineering-tests/units/tpm/tpm.pxu
@@ -0,0 +1,135 @@
+# Copyright 2016 Canonical Ltd.
+# All rights reserved.
+#
+# Written by:
+#   Scott Sweeny <scott.sweeny@canonical.com>
+
+unit: category
+id: tpm1.2
+_name: TPM 1.2
+
+id: tpm1.2/setup/ensure_interface_connection_setup
+category_id: tpm1.2
+_description: Ensure that the tpm1.2 interfaces are connected
+plugin: manual
+_steps:
+  1. Connect required tpm1.2 slots/plugs
+  .
+     $ sudo snap connect tpm:network :network
+     $ sudo snap connect tpm:network-bind :network-bind
+     $ sudo snap connect tpm:tpm :tpm
+  .
+_verification:
+  Verify that you see the following when running snap interfaces:
+  :network                 tpm
+  :network-bind            tpm
+  :tpm                     tpm
+
+id: tpm1.2/setup/get_version
+category_id: tpm1.2
+plugin: manual
+depends: tpm1.2/setup/ensure_interface_connection_setup
+_summary: Can get version information from the TPM chip
+_purpose:
+  Check that basic communication with the TPM chip is working and that version
+  information can be retrieved with the expected command.
+_steps:
+  1. Execute the following command to show the TPM version:
+  .
+     $ /snap/bin/tpm.version
+_verification:
+  Output is similar to below with all fields showing data:
+  .
+  TPM 1.2 Version Info:
+    Chip Version:        1.2.5.81
+    Spec Level:          2
+    Errata Revision:     3
+    TPM Vendor ID:       WEC
+    Vendor Specific data: 0000
+    TPM Version:         01010000
+    Manufacturer Info:   57454300
+
+id: tpm1.2/setup/self_test
+category_id: tpm1.2
+plugin: manual
+depends: tpm1.2/setup/ensure_interface_connection_setup
+_summary: TPM self test runs successfully
+_purpose:
+  Check that the TPM self test runs successfully and returns no errors.
+_steps:
+  1. Execute the following command to run the TPM self test:
+  .
+    $ /snap/bin/tpm.selftest
+_verification:
+  Output is similar to below (actual values are not important) and no
+  error messages are shown:
+  .
+  TPM Test Results:
+        ff010205 51ffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
+        ffffffff ffffffff ffffffff ffff0000 00000000 00000000 00000000 00000000
+        00000000 00000000 00000000 00000000 00000000 00000000 00000000 0000
+
+
+id: tpm1.2/configuration/take_ownership
+category_id: tpm1.2
+plugin: manual
+depends: tpm1.2/setup/ensure_interface_connection_setup
+_summary: Taking ownership of the device is possible
+_purpose:
+  Check that you are able to take ownership of the device using TPM commands.
+_steps:
+  1.Execute the following command to take ownership of the TPM chip: 
+  .
+     $ /snap/bin/tpm.takeownership
+  .
+_verification:
+  Verify that you are prompted for both the owner key and the SRK (storage
+  root key) and that no errors are returned.
+  . 
+  NOTE: This command will only work if it has not been run before. You can
+  reset the TPM with:
+  .
+    $ /snap/bin/tpm.clear
+  .
+  Which will invalidate all existing keys and passwords and disable the chip.
+  Once this is done you must re-enable the TPM from the device's BIOS before
+  it can be used.
+
+id: tpm1.2/crypto/show_public_key
+category_id: tpm1.2
+plugin: manual
+depends: tpm1.2/setup/ensure_interface_connection_setup
+_summary: Showing the public endorsement key succeeds
+_purpose:
+   Check to make sure that the endorsement key pair exists and the public key
+   can be queried.
+_steps:
+  1. Execute the following command to see the public key:
+  .
+     $ /snap/bin/tpm.getpubek
+  .
+  You may see an error similar to:
+  .
+    Tspi_TPM_GetPubEndorsementKey failed: 0x00000008 - layer=tpm, code=0008 (8), The TPM target command has been disabled
+  .
+  This can be safely ignored as long as the public key data is displayed.
+_verification:
+  Verify that the public key data is shown, for example:
+  .
+  Public Endorsement Key:
+  Version:   01010000
+  Usage:     0x0002 (Unknown)
+  Flags:     0x00000000 (!VOLATILE, !MIGRATABLE, !REDIRECTION)
+  AuthUsage: 0x00 (Never)
+  Algorithm:         0x00000020 (Unknown)
+  Encryption Scheme: 0x00000012 (Unknown)
+  Signature Scheme:  0x00000010 (Unknown)
+  Public Key:
+        8b59fad6 83514128 d56e2aa0 5eef7cff ad23c90d 0dd9b1e2 31ef093d 72d947d8
+        e02fbe3a 3c235ff0 9c487973 40a28c9b 8b83aaaf dc1254ad 31a95410 811742e5
+        92c16823 6f663413 f7067d3a 9af09ccc 12944a13 51d32980 59a98740 4008ab0c
+        07b7d93b 9393691c 8ae7d84c 5fd4fcef 147934f1 09326225 d5d1b652 ab3e12ee
+        fbd1cfba b18abedc de2215cb 97006b92 839fd9a4 3158bc8f 028fe516 550905b3
+        e3eef1e1 9f8dd3ab 331cbe62 d32ce937 0c11ad41 1d2e50f3 c69c7cde cd0bf564
+        4b7b16f8 0885dc66 d4411aba a824c1f1 ea8aa743 5c62fad7 e9540b85 5c0dc7af
+        3c1615ae 56af18e4 770aa107 06ef274b 202e2e3e d4c280d8 5ca9e886 9d889e31
diff --git a/com.canonical.se:engineering-tests/units/udisks2/udisks2.pxu b/com.canonical.se:engineering-tests/units/udisks2/udisks2.pxu
new file mode 100644
index 0000000..7667aa5
--- /dev/null
+++ b/com.canonical.se:engineering-tests/units/udisks2/udisks2.pxu
@@ -0,0 +1,319 @@
+# Copyright 2017 Canonical Ltd.
+# All rights reserved.
+#
+# Written by:
+# Scott Sweeny <scott.sweeny@canonical.com>
+
+unit: category
+id: udisks2
+_name: UDisks2
+
+id: udisks2/setup/ensure_interface_connection_setup
+category_id: udisks2
+_description: Ensure that the udisks2 interfaces are connected
+plugin: manual
+_steps:
+  1. Run the following:
+     $ sudo snap interfaces udisks2
+     .
+_verification:
+  Verify that you see the following:
+  Slot             Plug
+  :mount-observe   udisks2
+  :network-bind    udisks2
+  udisks2:service  udisks2:client
+  -                udisks2:hardware-observe
+
+id: udisks2/client/can_communicate_with_udisksd
+category_id: udisks2
+plugin: manual
+depends: udisks2/setup/ensure_interface_connection_setup
+_summary: udisksctl can communicate with udisksd
+_purpose:
+   Makes sure udisksctl can communicate with udisksd
+_steps:
+  1. Run a simple udisksctl command
+     .
+     $ sudo udisks2.udisksctl status
+     .
+_verification:
+  Verify that the command returns a list of connected storage devices and no
+  errors.
+
+id: udisks2/service/can_receive_hotplug_events
+category_id: udisks2
+plugin:manual
+depends: udisks2/client/can_communicate_with_udisksd
+_summary: udisks can see when a drive is plugged in
+_purpose:
+  Makes sure that udisks gets the hotplug event when a USB drive is
+  plugged in
+_steps:
+  1. Start the udisks client and have it watch for new events
+     .
+     $ sudo udisks2.udisksctl monitor
+     .
+  2. Plug in a USB storage device and wait for activity from the client
+     .
+  3. Unplug the USB storage device and wait for activity from the client
+     .
+_verification:
+  Verify that udisks shows information about the USB device when it's plugged
+  in, and that it recognizes when the device is removed.
+  .
+  The information shown when the device is plugged in will be everything
+  udisks knows about the device and its partitions, expressed as DBus objects.
+  You will likely see something like:
+  .
+  21:37:20.621: Added /org/freedesktop/UDisks2/drives/Kingston_DataTraveler_2_2e0_0607151625382
+  org.freedesktop.UDisks2.Drive:
+    CanPowerOff:                true
+    Configuration:              {}
+    ConnectionBus:              usb
+    Ejectable:                  true
+    Id:                         Kingston-DataTraveler-2.0-0607151625382
+    Media:                      thumb
+    MediaAvailable:             true
+    MediaChangeDetected:        true
+  .
+  and so on for the drive itself, each block device, and each filesystem
+
+id: udisks2/service/can_mount_unmount
+category_id: udisks2
+plugin: manual
+depends: udisks2/client/can_communicate_with_udisksd
+_summary: udisks can mount and unmount a storage device
+_purpose:
+  Makes sure that udisks can mount and unmount a storage device, and that
+  the mount points are visible outside of the snap
+_steps:
+  1. Plug in a USB storage device
+  2. Run the following:
+     .
+     $ sudo udisks2.udisksctl status
+     .
+     and note the name under the "DEVICE" column for the drive you just
+     plugged in. It should be "sdb" or similar
+  3. Mount the filesystem on the device:
+     .
+     $ sudo udisks2.udisksctl mount -b /dev/<device>1
+     .
+     Where <device> is the value from the status call above. This should mount
+     the first filesystem on the device and return the path
+  4. Examine the mount point:
+     .
+     $ sudo -s # You must be root to see the mount point
+     $ ls /mountpoint/path/returned/above
+     .
+     Make sure the contents of that directory match what you expect to see on
+     the drive.
+     .
+     Leave the root shell
+     $ exit
+  5. Unmount the filesystem:
+     .
+     $ sudo udisks2.udisksctl unmount -b /dev/<device>1
+_verification:
+  Verify that mounts and unmounts are performed successfully, and that the
+  contents of the drive can be seen from your shell (i.e. outside of the snap's
+  own namespace)
+
+id: udisks2/automount/default_off
+category_id: udisks2
+plugin: manual
+depends: udisks2/setup/ensure_interface_connection_setup
+_summary: The automount option defaults to off
+_purpose:
+  Makes sure that the automount option defaults to disabled
+_steps:
+  1. Install the udisks2 snap fresh (i.e. not an upgrade)
+  2. Run the following:
+     .
+     $ sudo snap get udisks2 automount.enable
+_verification:
+  Verify that the returned value is "false"
+
+id: udisks2/automount/disabling_works
+category_id: udisks2
+plugin: manual
+depends: udisks2/automount/default_off
+_summary: Disabling automount actually disables automount
+_purpose:
+  Makes sure that when automount.enabled is set to "false" automounts are
+  prevented
+_steps:
+  1. Make sure that automount is disabled. Run:
+     .
+     $ sudo snap set udisks2 automount.enable=false
+  2. Plug in a USB storage device
+_verification:
+  Verify that no filesystem on the USB device was mounted. /media/root/ should
+  be empty
+
+id: udisks2/automount/automount_works
+category_id: udisks2
+plugin: manual
+depends: udisks2/automount/default_off
+_summary: When enabled, automounting works
+_purpose:
+  Makes sure that automounting a USB drive works when the option is enabled
+_steps:
+  1. Make sure that automount is enabled. Run:
+     .
+     $ sudo snap set udisks2 automount.enable=true
+  2. Plug in a USB storage drive
+_verification:
+  Verify that the filesystem on the USB device was mounted to
+  /media/root/<filesystem label>, for example /media/root/7C69-3855
+
+id: udisks2/automount/automount_does_not_mount_system_devices
+category_id: udisks2
+plugin: manual
+depends: udisks2/automount/automount_works
+_summary: When enabled, automount does not mount system devices
+_purpose:
+  Makes sure that automount is only restricted to pluggable devices, not system
+_steps:
+  1. Make sure that automount is enabled. Run:
+     .
+     $ sudo snap set udisks2 automount.enable=true
+  3. Reboot the device and wait for it to power on again
+  4. Run the following:
+     .
+     $ sudo udisks2.udisksctl status
+     .
+     and check the names under the "DEVICE" column. It should just contain
+     thumb drives [if any is plugged-in] and the filesystem. For example,
+     in case of RaspberryPi it would contain just: mmcblk0.
+     Make sure that system devices, such as an ESP partition, are
+     not displayed here.
+  5. Examine the mount point:
+     .
+     $ sudo -s # You must be root to see the mount point
+     $ ls /media/root
+     .
+     Make sure the contents of that directory match what you expect to see on
+     the drive.
+     .
+     Leave the root shell
+     $ exit
+_verification:
+  Verify that none of the system devices were mounted and their filesystems
+  are not available /media/root/<filesystem label>
+
+id: udisks2/automount/automount_does_mount_usb_devices_plugged_before_boot
+category_id: udisks2
+plugin: manual
+depends: udisks2/automount/automount_works
+_summary: When enabled, automount mount USB devices plugged before boot
+_purpose:
+  Makes sure that system can mount devices plugged in before boot
+_steps:
+  1. Make sure that automount is enabled. Run:
+     .
+     $ sudo snap set udisks2 automount.enable=true
+  2. Switch the device off, insert USB flash drive and boot the device again
+  3. Run the following:
+     .
+     $ sudo udisks2.udisksctl status
+     .
+     and check the names under the "DEVICE" column. It should contain the device
+     that has been plugged before booting.
+  4. Examine the mount point:
+     .
+     $ sudo -s # You must be root to see the mount point
+     $ ls /media/root
+     .
+     Make sure the contents of that directory match what you expect to see on
+     the drive.
+     .
+     Leave the root shell
+     $ exit
+_verification:
+  Verify that the cold-plugged device is mounted on boot
+
+id: udisks2/automount/automount_works_after_manual_unmount
+category_id: udisks2
+plugin: manual
+depends: udisks2/automount/automount_works
+_summary: When enabled, automount still works after unmount has been called manually
+_purpose:
+  Make sure that the system can auto mount devices after the unmount has been called
+_steps:
+  1. Make sure that automount is enabled. Run:
+     .
+     $ sudo snap set udisks2 automount.enable=true
+  2. Insert USB flash drive
+  3. Examine the mount point:
+     .
+     $ sudo ls /media/root
+     .
+     Make sure the USB drive that just have been plugged in is listed there.
+  4. Run the following:
+     .
+     $ sudo udisks2.udisksctl status
+     .
+     and check the names under the "DEVICE" column. It should contain the device
+     that has been plugged before booting.
+  5. Unmount manually:
+     .
+     $ sudo udisks2.udisksctl unmount -b /dev/<device>1
+  6. Insert another USB flash drive
+  7. Examine the mount point:
+     .
+     $ sudo ls /media/root
+     .
+     Make sure the USB drive that just have been plugged in is listed there.
+_verification:
+  Verify that the USB drive that has been plugged in after the first one has
+  been unmounted manually is mounted.
+
+id: udisks2/debug/default_off
+category_id: udisks2
+plugin: manual
+depends: udisks2/setup/ensure_interface_connection_setup
+_summary: The debug option defaults to off
+_purpose:
+  Makes sure that the debug option defaults to disabled
+_steps:
+  1. Install the udisks2 snap fresh (i.e. not an upgrade)
+  2. Run the following:
+     .
+     $ sudo snap get udisks2 debug.enable
+_verification:
+  Verify that the returned value is "false"
+
+id: udisks2/debug/disabling_works
+category_id: udisks2
+plugin: manual
+depends: udisks2/debug/default_off
+_summary: Disabling debug actually disables debug logging
+_purpose:
+  Makes sure that when debug.enabled is set to "false" no loggs are written
+_steps:
+  1. Make sure that debug is disabled. Run:
+     .
+     $ sudo snap set udisks2 debug.enable=false
+  2. Plug in a USB storage device
+_verification:
+  Verify that no debug information coming from files such as jobs.go,
+  dispatcher.go, udisks2.go is written to the journal.
+
+id: udisks2/automount/debug_works
+category_id: udisks2
+plugin: manual
+depends: udisks2/debug/default_off
+_summary: When debug is enabled logs are available
+_purpose:
+  Makes sure that when debug option is enabled the logs are available
+_steps:
+  1. Make sure that debug is enabled. Run:
+     .
+     $ sudo snap set udisks2 debug.enable=true
+  2. Restart ciborium service for the above change to take effect
+     .
+     $ sudo systemctl restart snap.udisks2.ciborium.service
+  3. Plug in a USB storage drive
+_verification:
+  Verify that debug information coming from udisks2 snap (files such as
+  jobs.go, dispatcher.go, udisks2.go) is written to the journal.
diff --git a/com.canonical.se:engineering-tests/units/upower/00_general.pxu b/com.canonical.se:engineering-tests/units/upower/00_general.pxu
new file mode 100644
index 0000000..3ab4d2d
--- /dev/null
+++ b/com.canonical.se:engineering-tests/units/upower/00_general.pxu
@@ -0,0 +1,52 @@
+# Copyright 2016 Canonical Ltd.
+# All rights reserved.
+#
+# Written by:
+#   Simon Fels <simon.fels@canonical.com>
+
+unit: category
+id: upower
+_name: UPower
+
+id: upower/general/can_be_installed
+category_id: upower
+_description: Ensure that the upower snap can be installed
+plugin: manual
+_steps:
+  Install upower snap from the appropiate channel via the following command
+  .
+   $ snap install --candidate upower
+  .
+  NOTE: Depending on which channel you want to test you need to select the
+  right one. The command above uses the candidate channel as that is the
+  most used one.
+_verification:
+  The installation of the snap should finish with no errors.
+
+id: upower/general/service_started
+category_id: upower
+_description: Ensure that the upowerd service is up and running
+plugin: manual
+_steps:
+  Check service status with the following command
+   $ systemctl status snap.upower.service.service
+_verification:
+  Output should look like this:
+  snap.upower.upowerd.service - Service for snap application upower.upowerd
+     Loaded: loaded (/etc/systemd/system/snap.upower.upowerd.service; enabled; vendor preset: enabled)
+     Active: active (running) since Thu 2016-12-15 16:13:37 UTC; 54ms ago
+  Main PID: 4265 (upowerd)
+    CGroup: /system.slice/snap.upower.upowerd.service
+             4265 /snap/upower/x1/usr/libexec/upowerd
+
+id: upower/general/client_can_talk_to_service
+category_id: upower
+_description: Verify that the upower client can talk to the service
+plugin: manual
+_steps:
+  Enumerate available devices available on the system:
+   $ upower -e
+_verification:
+  Output should look like this and at least one device should be present:
+  /org/freedesktop/UPower/devices/battery_BAT0
+  /org/freedesktop/UPower/devices/DisplayDevice
diff --git a/com.canonical.se:engineering-tests/units/upower/10_battery_powered.pxu b/com.canonical.se:engineering-tests/units/upower/10_battery_powered.pxu
new file mode 100644
index 0000000..d5fe6b1
--- /dev/null
+++ b/com.canonical.se:engineering-tests/units/upower/10_battery_powered.pxu
@@ -0,0 +1,129 @@
+# Copyright 2016 Canonical Ltd.
+# All rights reserved.
+#
+# Written by:
+#   Simon Fels <simon.fels@canonical.com>
+
+id: upower/battery_powered/battery_detected
+category_id: upower
+_description: Verify upower is able to detect the battery of the system
+plugin: manual
+_steps:
+  Query upowerd for available power devices on the system
+   $ upower -d
+_verification:
+  The output should be similar to the following and should list the
+  battery of your system:
+  .
+  Device: /org/freedesktop/UPower/devices/line_power_AC
+    native-path:          AC
+    power supply:         yes
+    updated:              Do 15 Dez 2016 15:06:55 CET (7163 seconds ago)
+    has history:          no
+    has statistics:       no
+    line-power
+      warning-level:       none
+      online:              yes
+      icon-name:          'ac-adapter-symbolic'
+  .
+  Device: /org/freedesktop/UPower/devices/battery_BAT0
+    native-path:          BAT0
+    vendor:               SANYO
+    model:                45N1779
+    serial:               115
+    power supply:         yes
+    updated:              Do 15 Dez 2016 17:05:18 CET (60 seconds ago)
+    has history:          yes
+    has statistics:       yes
+    battery
+      present:             yes
+      rechargeable:        yes
+      state:               fully-charged
+      warning-level:       none
+      energy:              97,05 Wh
+      energy-empty:        0 Wh
+      energy-full:         97,13 Wh
+      energy-full-design:  99,47 Wh
+      energy-rate:         7,983 W
+      voltage:             12,374 V
+      percentage:          99%
+      capacity:            97,6475%
+      technology:          lithium-ion
+      icon-name:          'battery-full-charged-symbolic'
+  .
+  Device: /org/freedesktop/UPower/devices/DisplayDevice
+    power supply:         yes
+    updated:              Do 15 Dez 2016 16:41:14 CET (1504 seconds ago)
+    has history:          no
+    has statistics:       no
+    battery
+      present:             yes
+      state:               fully-charged
+      warning-level:       none
+      energy:              97,05 Wh
+      energy-full:         97,13 Wh
+      energy-rate:         7,983 W
+      percentage:          99%
+      icon-name:          'battery-full-charged-symbolic'
+  .
+  Daemon:
+    daemon-version:  0.99.4
+    on-battery:      no
+    lid-is-closed:   no
+    lid-is-present:  yes
+    critical-action: PowerOff
+
+id: upower/battery_powered/battery_discharging
+category_id: upower
+_description: Verify upower reports discharging battery
+plugin: manual
+_steps:
+  1. Unplug the power cable from your battery powered device
+  2. Listen to reported changes from upower
+   $ upower -m
+_verification:
+  Leave the monitor running for some time. It should report the device changes
+  for the battery device:
+  .
+  [17:22:55.277]device changed:     /org/freedesktop/UPowerr/devices/battery_BAT0
+  [17:22:55.277]device changed:     /org/freedesktop/UPower/devices/battery_BAT0
+  .
+  Verify with the following command that the actual battery capacity is changing
+  .
+  $ upower -i /org/freedesktop/UPower/devices/battery_BAT0 | capacity
+      capacity:            97,6475%
+  .
+  and that the state of the battery device is changed to 'discharging'
+  .
+  $ upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep state
+      state:               discharging
+
+id: upower/battery_powered/low_battery_causes_poweroff
+category_id: upower
+_description: Verify upower reports discharging battery
+plugin: manual
+_steps:
+  A battery with a low capacity should cause the device to power off. This
+  involves as a first step to wait until the battery of the device under test
+  is close to being empty. The default trigger of the poweroff action is by
+  default at <= 2%
+  .
+  Depending on how full your device battery is you have to wait some time
+  until it is discharged enough.
+  .
+  Watch the system via
+  .
+  $ sudo journalctl --no-pager -f
+_verification:
+  Once the defined threshold of the battery capacity is reached the system
+  should power off itself. You can spot this by looking at the output
+  of the journalctl command which should print something like:
+  .
+  Dec 15 16:37:02 localhost.localdomain systemd-logind[1022]: System is powering down
+  [...]
+  Dec 15 16:37:02 localhost.localdomain systemd[1]: Starting Power-Off...
+  Dec 15 16:37:02 localhost.localdomain systemd[1]: Starting Update UTMP about System Runlevel Changes...
+  Dec 15 16:37:02 localhost.localdomain systemd[1]: Started Power-Off.
+  Dec 15 16:37:02 localhost.localdomain systemd[1]: Started Update UTMP about System Runlevel Changes.
+  Dec 15 16:37:02 localhost.localdomain systemd[1]: Reached target Power-Off.
+  Dec 15 16:37:02 localhost.localdomain systemd-logind[1022]: Operation 'shutdown' finished.
diff --git a/com.canonical.se:engineering-tests/units/upower/20_ac_powered.pxu b/com.canonical.se:engineering-tests/units/upower/20_ac_powered.pxu
new file mode 100644
index 0000000..169f0e3
--- /dev/null
+++ b/com.canonical.se:engineering-tests/units/upower/20_ac_powered.pxu
@@ -0,0 +1,49 @@
+# Copyright 2016 Canonical Ltd.
+# All rights reserved.
+#
+# Written by:
+#   Simon Fels <simon.fels@canonical.com>
+
+id: upower/ac_powered/source_detected
+category_id: upower
+_description: Verify upower is able to detect the AC power source
+plugin: manual
+_steps:
+ Query upowerd for available power devices on the system
+ .
+  $ upower -e
+_verification:
+ The AC power source should be listed in the result, e.g.:
+ .
+  /org/freedesktop/UPower/devices/line_power_AC
+
+id: upower/ac_powered/status_plugged
+category_id: upower
+_description: Verify upower report AC source as plugged
+plugin: manual
+_steps:
+ Plug in the AC adapter to your device and query upower with
+ .
+  $ upower -i /org/freedesktop/UPower/devices/line_power_AC | grep online
+ for the online status of the source.
+_verification:
+ The output should be
+ .
+     online:              yes
+ .
+ If the source is not plugged upower will report a "no" instead of "yes".
+
+id: upower/ac_powered/status_unplugged
+category_id: upower
+_description: Verify upower report AC source as unplugged
+plugin: manual
+_steps:
+ Unplug the AC adapter from your device and query upower with
+  $ upower -i /org/freedesktop/UPower/devices/line_power_AC | grep online
+ for the online status of the source.
+_verification:
+ The output should be
+ .
+     online:              no
+ .
+ If the source is plugged upower will report a "yes" instead of "no".
diff --git a/com.canonical.se:engineering-tests/units/wifi-ap/wifi-ap.pxu b/com.canonical.se:engineering-tests/units/wifi-ap/wifi-ap.pxu
new file mode 100644
index 0000000..2f61369
--- /dev/null
+++ b/com.canonical.se:engineering-tests/units/wifi-ap/wifi-ap.pxu
@@ -0,0 +1,213 @@
+# Copyright 2016 Canonical Ltd.
+# All rights reserved.
+#
+# Written by:
+#   Jim Hodapp <jim.hodapp@canonical.com>
+#   Simon Fels <simon.fels@canonical.com>
+#   Alfonso Sanchez-Beato <alfonso.sanchez-beato@canonical.com>
+
+unit: category
+id: wifi_ap
+_name: WiFi Access Point
+
+id: wifi_ap/setup/ensure_interface_connection_setup
+category_id: wifi_ap
+_description: Ensure that the wifi_ap interfaces are connected
+plugin: manual
+_steps:
+  0. If the wifi-ap snap is already installed remove it via
+     .
+     $ snap remove wifi-ap
+     .
+  1. Network Manager setup
+     .
+     For snaps on Classic:
+     NetworkManager is part of the base Ubuntu Desktop system
+     and does not need to be installed again.
+     .
+     For an Ubuntu Core system you have to install
+     the NetworkManager snap from the Ubuntu store.
+     $ snap install network-manager
+     .
+  2. Install now the wifi-ap snap via
+     .
+     $ snap install wifi-ap
+     .
+_verification:
+  Verify that you see the following when running snap interfaces:
+  :firewall-control        wifi-ap
+  :network-control         wifi-ap
+  :network                 wifi-ap
+  :network-bind            wifi-ap
+  .
+  For snaps on Classic:
+  :network-manager         wifi-ap
+  .
+  For full-snap based system:
+  network-manager:service  wifi-ap:network-manager
+
+id: wifi_ap/configuration/get_all
+category_id: wifi_ap
+plugin: manual
+depends: wifi_ap/setup/ensure_interface_connection_setup
+_summary: All WiFi AP configuration items are listed
+_purpose:
+  Check if the configuration of the WiFi AP can be listed
+  with the expected command.
+_steps:
+  1. Execute the following command to retrieve all configuration items:
+  .
+     $ /snap/bin/wifi-ap.config get
+_verification:
+  All available configuration items are listed as output.
+
+id: wifi_ap/configuration/set_any
+category_id: wifi_ap
+plugin: manual
+depends: wifi_ap/setup/ensure_interface_connection_setup
+_summary: Setting any configuration key is possible
+_purpose:
+  Check if any configuration key can be set via the
+  configuration system of the snap.
+_steps:
+  1. Retrieve the current value of a specific configuration item
+     e.g. 'wifi.interface'.
+  .
+     $ /snap/bin/wifi-ap.config get wifi.interface
+  .
+  2. Set a new value for the same configuration item
+  .
+     $ sudo /snap/bin/wifi-ap.config set wifi.interface=wlan1
+  .
+  3. Retrieve the current value of the same configuration item
+     for comparison.
+  .
+     $ /snap/bin/wifi-ap.config get wifi.interface
+_verification:
+  Verify that the new value for the configuration is not the same
+  as before the 'set' operation and is now the the value specified
+  in step 2.
+
+id: wifi_ap/connect/enable_ap
+category_id: wifi_ap
+plugin: manual
+depends: wifi_ap/setup/ensure_interface_connection_setup
+_summary: Enabling the AP succeeds
+_purpose:
+   Check to make sure the AP can be enabled. 
+_steps:
+  0. If the AP is already enabled as on some devices where the
+     automated wizard was able to find a good configuration
+     automatically you can skip the following steps. You can
+     verify if the AP is active by calling
+  .
+     $ /snap/bin/wifi-ap.status
+     ap.active: true
+  .
+  1. Look up and set the wifi interface to the proper name
+     e.g. from default wlan0 to enp0s3
+  .
+     $ ifconfig
+     $ /snap/bin/wifi-ap.config set wifi.interface=<interface_name>
+  .
+  2. Enable the AP with the default configuration for other key values
+  .
+     $ sudo /snap/bin/wifi-ap.config set disabled=false
+  .
+  3. Verify that the AP is enabled by looking at the key/value pair
+  .
+     $ /snap/bin/wifi-ap.config get disabled
+_verification:
+  Verify that the new value for the disabled is set to false. Also verify that a
+  different machine such as a phone or a laptop can connect to the AP using
+  SSID of "Ubuntu" and no security type.
+
+id: wifi_ap/configuration/control_socket
+category_id: wifi_ap
+plugin: manual
+depends: wifi_ap/setup/ensure_interface_connection_setup
+_summary: Check content interface
+_purpose:
+   Check if the content interface is accessible and
+   it exports a socket for a consumer snap.
+_steps:
+  1. Install the wifiap-consumer snap
+  .
+     $ sudo snap install wifiap-consumer
+  .
+  2. Connect the wifi-ap and wifiap-consumer content interface
+  .
+     $ sudo snap connect wifiap-consumer:control wifi-ap:control
+  .
+  3. Get the configuration with the unix HTTP client
+  .
+     $ sudo wifiap-consumer.unixhttpc /v1/configuration
+  .
+_verification:
+  Verify that the configuration is a valid JSON with reasonable data, like:
+  {
+    "result": {
+      "debug": false,
+      "disabled": false,
+      "wifi.interface": "wlan0",
+      "wifi.security": "open",
+      "wifi.ssid": "Ubuntu"
+    },
+    "status": "OK",
+    "status-code": 200,
+    "type": "sync"
+  }
+
+id: wifi_ap/configuration/default_ssid
+category_id: wifi_ap
+plugin: manual
+_summary: WiFi AP default SSID is set from gadget snap
+_purpose:
+  Check if the configuration of the WiFi AP SSID is set to the value
+  coming from the gadget snap, when present.
+_steps:
+  1. Install a gadget snap which contains in gadget.yaml:
+  .
+     defaults:
+       # Below snap ID matches the one assigned for wifi-ap in the Ubuntu Store
+       2rGgvyaY0CCzlWuKAPwFtCWrgwkM8lqS:
+         default.wifi.ssid: GadgetSnap
+  .
+  2. Reboot
+  3. Remove wifi-ap if present:
+  .
+     $ snap remove wifi-ap
+  .
+  4. Install wifi-ap (this must be done from the store, otherwise the gadget
+     will not set the defaults for the snap). Assuming we are testing candidate:
+  .
+     $ snap install --candidate wifi-ap
+  .
+  5. Get the SSID value:
+  .
+      $ /snap/bin/wifi-ap.config get wifi.ssid
+  .
+_verification:
+  Check that wifi.ssid=GadgetSnap
+
+id: wifi_ap/configuration/country_code
+category_id: wifi_ap
+plugin: manual
+depends: wifi_ap/connect/enable_ap
+_summary: WiFi AP sends the country code IE in beacon frames
+_purpose:
+  Check if the WiFi AP sends the configured country code in beacon frames
+_steps:
+  1. Set the ISO/IEC 3166-1 code of the country you are in at the moment,
+     for instance
+  .
+     $ sudo wifi-ap.config set wifi.country-code=ES
+  .
+  2. Use a device with wifi to capture the beacon frames. You have to
+     turn on monitor mode for the wifi card to achieve this. See, for
+     instance https://sandilands.info/sgordon/capturing-wifi-in-monitor-mode-with-iw.
+  3. Capture the packets with tcpdump or wireshark
+  4. Check that the beacon frames from the SSID from the device where
+     you are testing wifi-ap contain the country code information element.
+_verification:
+  Check that IE contains the configure country code.
diff --git a/com.canonical.se:engineering-tests/units/wifi-connect/wifi.connect.pxu b/com.canonical.se:engineering-tests/units/wifi-connect/wifi.connect.pxu
new file mode 100644
index 0000000..78fce85
--- /dev/null
+++ b/com.canonical.se:engineering-tests/units/wifi-connect/wifi.connect.pxu
@@ -0,0 +1,202 @@
+# Copyright 2017 Canonical Ltd.
+# All rights reserved.
+#
+# Written by:
+#   Roberto Mier Escandon <roberto.escandon@canonical.com>
+
+unit: category
+id: wifi-connect
+_name: WiFi Connect
+
+id: wifi-connect/setup/ensure_interface_connection_setup
+category_id: wifi-connect
+_description: Ensure that the wifi-connect interfaces are connected
+plugin: manual
+_steps:
+  0. If the wifi-connect snap is already installed remove it via
+     .
+     $ snap remove wifi-connect
+     .
+  1. Network Manager setup
+     .
+     For snaps on Classic:
+     NetworkManager is part of the base Ubuntu Desktop system
+     and does not need to be installed again.
+     .
+     For an Ubuntu Core system you have to install
+     the NetworkManager snap from the Ubuntu store.
+     $ snap install network-manager
+     .
+  2. Wifi AP setup
+     .
+     You have to install Wifi AP snap.
+     $ snap install wifi-ap
+     .
+  3. Install now the wifi-connect snap via
+     .
+     $ snap install wifi-connect
+     .
+  4. Connect wifi-connect interfaces
+     .
+     $ snap connect wifi-connect:control wifi-ap:control
+     $ snap connect wifi-connect:network core:network
+     $ snap connect wifi-connect:network-bind core:network-bind
+     .
+     For snaps on Classic you have to connect:
+     $ snap connect wifi-connect:network-manager core:network-manager
+     .
+     For an Ubuntu Core system you have to connect:
+     $ snap connect wifi-connect:network-manager network-manager:service 
+     .
+_verification:
+  Verify that you see the following when running snap interfaces:
+  :firewall-control        wifi-ap
+  :network-control         wifi-ap
+  :network                 wifi-ap,wifi-connect
+  :network-bind            wifi-ap,wifi-connect
+  wifi-ap:control          wifi-connect
+  .
+  For snaps on Classic:
+  :network-manager         wifi-ap,wifi-connect
+  .
+  For full-snap based system:
+  network-manager:service  wifi-ap:network-manager,wifi-connect:network-manager
+
+id: wifi-connect/configuration/network_manager_does_not_control_network_before_reboot
+category_id: wifi-connect
+plugin: manual
+depends: wifi-connect/setup/ensure_interface_connection_setup
+_summary: NetworkManager does not control all networking before rebooting
+_purpose:
+  Check if netplan is configured for NetworkManager to control networking
+_steps:
+  0. Backup existing /etc/netplan/00-snapd-config.yaml file
+     .
+     $ mv /etc/netplan/00-snapd-config.yaml ~/
+     .
+  1. Create a new netplan config file named /etc/netplan/00-default-nm-renderer.yaml
+     .
+     $ echo -e "network:\n    renderer: NetworkManager" > /etc/netplan/00-default-nm-renderer.yaml
+     .
+  2. See current managed devices by NetworkManager:
+     .
+     $ nmcli d
+     .
+_verification:
+  Verify that wireless device (wlan0 by default) STATE column value does not equals to 'connected' or 'disconnected' 
+
+id: wifi-connect/configuration/network_manager_controls_network_after_reboot
+category_id: wifi-connect
+plugin: manual
+depends: wifi-connect/configuration/network_manager_does_not_control_network_before_reboot
+_summary: NetworkManager controls network after configure netplan file and reboot
+_steps:
+  0. Reboot the device
+     .
+     $ sudo reboot
+     .
+  1. When the device finished booting, check nm status with the following command:
+     .
+     $ nmcli d
+     .
+_verification:
+  Verify that wireless device (wlan0 by default) STATE column value does NOT equals to 'unmanaged'.
+  If it is connected to external Wi-Fi, it should be displayed in green with 'connected' state, and 
+  if it is not connected to external Wi-Fi, it should be shown in red iwth 'disconnected' state
+
+id: wifi-connect/configuration/content_interface_is_plugged_after_reboot
+category_id: wifi-connect
+plugin: manual
+depends: wifi-connect/configuration/network_manager_controls_network_after_reboot
+_summary: Check that wifi-ap control interface is connected and working
+_steps:
+  0. Enter in snap runtime environment
+     .
+     $ snap run --shell wifi-connect.wifi-connect
+     .
+  1. List $SNAP_COMMON content
+     .
+     $ ls /var/snap/wifi-connect/common
+     .
+_verification:
+  Check that exists /var/snap/wifi-connect/common/control
+
+id: wifi-connect/configuration/set_AP_ssid_and_passphrase
+category_id: wifi-connect
+plugin: manual
+depends: wifi-connect/configuration/content_interface_is_plugged_after_reboot
+_summary: Verify it is possible changing wifi-ap access point ssid and passphrase params
+_steps:
+  0. Set wifi-ap AP ssid
+     .
+     $ wifi-connect ssid MYSSID
+     .
+  1. Set wifi-ap AP passphrase
+     .
+     $ wifi-connect passphrase MYPASSPHRASE
+     .
+  2. Display config
+     .
+     $ wifi-connect show-ap
+     .
+_verification:
+  Verify into returning values exist:
+    wifi.ssid: MYSSID
+    wifi.security-passphrase: MYPASSPHRASE
+
+id: wifi-connect/configuration/set_portal_password
+category_id: wifi-connect
+plugin: manual
+depends: wifi-connect/configuration/content_interface_is_plugged_after_reboot
+_summary: Verify portal password change
+_steps:
+  0. Set portal password
+     .
+     $ wifi-connect set-portal-password WHATEVER
+     .
+_verification:
+  Verify result of set-portal-password operation is a hash of 60 chars starting with '$2a$08$' string
+
+id: wifi-connect/connect/local_AP_is_up
+category_id: wifi-connect
+plugin: manual
+depends: wifi-connect/configuration/network_manager_controls_network_after_reboot
+_summary: Verify management portal is up, running and has got some ssids
+_steps:
+  0. From another device different from the one where wifi-connect is deployed:
+     .
+     Search available Wi-Fi access points
+     .
+_verification:
+  Check that an SSID is available named MYSSID (or the one set when configured). Verify you can
+  connect to that access point by introducing MYPASSPHRASE password
+
+id: wifi-connect/connect/can_connect_to_external_wifi
+category_id: wifi-connect
+plugin: manual
+depends: wifi-connect/connect/local_AP_is_up
+_summary: Management portal shows available access points and can connect to them
+_steps:
+  0. From another device different from the one where wifi-connect is deployed, once connected to local AP
+     .
+     Open browser and access http://10.0.60.1:8080
+     .
+_verification:
+  Verify a list of available external networks are shown. Verify you can access any of them by setting
+  the related passphrase and clicking connect button.
+  You should ssh device where wifi-connect is and see if 'nmcli d' command shows device is connected to 
+  selected external Wi-Fi
+
+id: wifi-connect/connect/can_get_back_to_management_mode
+category_id: wifi-connect
+plugin: manual
+depends: wifi-connect/connect/can_connect_to_external_wifi
+_summary: It is possible to bring back local AP and management portal
+_steps:
+  0. From another device different from the one where wifi-connect is deployed, once connected to external Wi-Fi
+     .
+     Open browser and access http://<device_ip>:8080 (or http://<device_hostname>.local:8080 in case browser device supports avahi)
+     .
+_verification:
+  Check that a web is shown with a button to return back to management mode. Press button and after passed around a minute
+  verify same steps as the ones in id=wifi-connect/connect/can_connect_to_external_wifi
diff --git a/com.canonical.se:engineering-tests/units/wireless-tools/wireless-tools.pxu b/com.canonical.se:engineering-tests/units/wireless-tools/wireless-tools.pxu
new file mode 100644
index 0000000..39c070e
--- /dev/null
+++ b/com.canonical.se:engineering-tests/units/wireless-tools/wireless-tools.pxu
@@ -0,0 +1,100 @@
+# Copyright 2016 Canonical Ltd.
+# All rights reserved.
+#
+# Written by:
+#   Konrad Zapalowicz <konrad.zapalowicz@canonical.com>
+
+unit: category
+id:wireless-tools
+_name: Wireless Tools
+
+id: wireless-tools/setup/ensure_interface_connection_setup
+category_id: wireless-tools
+_description: Ensure that wireless_tools interfaces are connected
+plugin: manual
+_steps:
+  1. Connect required wireless-tools slots/plugs 
+  .
+    $ sudo snap connect wireless-tools:network-control :network-control
+  .
+_verification:
+  Verify that you see the following when running snap interfaces:
+    :network                wireless-tools
+    :network-bind           wireless-tools
+    :network-control        wireless-tools
+
+id: wireless-tools/rfkill/list
+category_id:wireless-tools
+plugin: manual
+depends: wireless-tools/setup/ensure_interface_connection_setup
+_summary: The RF kill switches are listed
+_purpose: Check if all RF kill switches that are available on the HW are listed.
+_steps:
+  1. Execute the following command to retrieve the list of all RF kill switches:
+  .
+    $ /snap/bin/wireless-tools.rfkill list
+  .
+_verification:
+  Your expected RF kill switche(s) is/are shown in the output such as:
+    <id>: <name>: <description>
+        Soft blocked: <yes|no>
+        Hard blocked: <yes|no>
+  .
+  For example:
+    1: phy0: Wireless LAN
+        Soft blocked: no
+        Hard blocked: no
+    2: hci0: Bluetooth
+        Soft blocked: yes
+        Hard blocked: no
+
+id: wireless-tools/rfkill/change_state
+category_id:wireless-tools
+plugin: manual
+depends: wireless-tools/rfkill/list
+_summary: It is possible to change the state of RF kill
+_purpose: Check if it is possible to change a state of the RF kill switch
+_steps:
+  1. Execute the following commands first to list the available RF kill switches
+  .
+    $ /snap/bin/wireles-tools.rfkill list
+  .
+  2. Change the state of the selected RF kill switch using the id obtained in
+     the previous step. Note that the action: block or unblock shall be selected
+     based on the initial state of the RF kill switch: blocked yes or no.
+  .
+    $ /snap/bin/wireless-tools.rfkill [un]block <id>
+  .
+_verification:
+  There shall be no output on the standard output however there shall be a
+  change of state visible when listing the RF kill switches.
+  .
+    $ /snap/bin/wireless_tools.rfkill list
+  .
+
+id: wireless_tools/rfkill/capture_event
+category_id: wireless-tools
+plugin: manual
+depends: wireless-tools/rfkill/list
+_summary: It is possible to see the events related to RF kill switch(es)
+_purpose: Check if it is possible to capture the event notifications
+_steps:
+  1. Execute the following command to enter the capture-events mode
+  .
+    $ /snap/bin/wireless_tools.rfkill event
+  .
+  2. Change the state of the RF kill switch using a hardware button if
+     available.
+_verification:
+  The command executed in the step 1 shall block and display the current state
+  of the RF kill switches in a following form:
+    <timestamp>: idx <id> type <type id> op <op id> soft <0|1> hard <0|1>
+  Pressing the hardware RF kill switch should be printed in the following
+  form as in the above. For example:
+    1478774281.491635: idx 0 type 2 op 0 soft 0 hard 0
+    1478774281.491762: idx 1 type 1 op 0 soft 0 hard 0
+    1478774281.491776: idx 2 type 2 op 0 soft 1 hard 0
+    1478774301.905695: idx 2 type 2 op 2 soft 0 hard 0
+    1478774307.837112: idx 0 type 2 op 2 soft 1 hard 0
+    1478774310.817935: idx 2 type 2 op 2 soft 1 hard 0
+    1478774310.818989: idx 2 type 2 op 1 soft 1 hard 0
diff --git a/com.canonical.se:engineering-tests/units/wpa-supplicant/00_general.pxu b/com.canonical.se:engineering-tests/units/wpa-supplicant/00_general.pxu
new file mode 100644
index 0000000..11d61b4
--- /dev/null
+++ b/com.canonical.se:engineering-tests/units/wpa-supplicant/00_general.pxu
@@ -0,0 +1,99 @@
+# Copyright 2017 Canonical Ltd.
+# All rights reserved.
+#
+# Written by:
+#   Simon Fels <simon.fels@canonical.com>
+
+unit: category
+id: wpa_supplicant
+_name: wpa-supplicant
+
+id: wpa_supplicant/general/can_be_installed
+category_id: wpa_supplicant
+_description: Ensure that the wpa-supplicant snap can be installed
+plugin: manual
+_steps:
+  Install wpa-supplicant snap from the appropiate channel via the following command
+  .
+   $ snap install [--<channel>] wpa-supplicant
+  .
+  NOTE: Depending on which channel you want to test you need to select the right one.
+_verification:
+  The installation of the snap should finish with no errors.
+
+id: wpa_supplicant/general/slots_and_plugs_connected
+category_id: wpa_supplicant
+depends: wpa_supplicant/general/can_be_installed
+plugin: manual
+_summary: Verify that all plugs and slots of the snap are connected automatically.
+_steps:
+ 1. Install the snap from the store:
+ .
+   $ snap wpa-supplicant
+ .
+_verification:
+ 1. Verify that the 'wpa-supplicant' snap has all required plugs and slots connected
+    and you see a similar output like the example below. If any further plugs
+    from other snaps are shown for the same slot this can be safely ignored.
+ .
+   $ snap interfaces wpa-supplicant
+   Slot                           Plug
+   :network                       wpa-supplicant
+   :network-control               wpa-supplicant
+   wpa-supplicant:legacy-service  -
+   wpa-supplicant:service         network-manager:wpa,wpa-supplicant:wpa
+
+id: wpa_supplicant/general/service_failed_to_start_without_reboot
+category_id: wpa_supplicant
+depends: wpa_supplicant/general/can_be_installed
+_description:
+  Verify that the wpa-supplicant can't be started after installation of the snap
+  without a system reboot.
+plugin: manual
+_steps:
+  Check service status with the following command
+  $ systemctl status snap.wpa-supplicant.wpa.service
+_verification:
+  Output should look like this:
+  .
+  * snap.wpa-supplicant.wpa.service - Service for snap application wpa-supplicant.wpa
+     Loaded: loaded (/etc/systemd/system/snap.wpa-supplicant.wpa.service; enabled; vendor preset: enabled)
+     Active: inactive (dead) (Result: exit-code) since Mon 2017-03-20 10:45:00 UTC; 5s ago
+     Process: 2645 ExecStart=/usr/bin/snap run wpa-supplicant.wpa (code=exited, status=255)
+     Main PID: 2645 (code=exited, status=255)
+
+id: wpa_supplicant/general/service_starts_after_reboot
+category_id: wpa_supplicant
+depends: wpa_supplicant/general/service_failed_to_start_without_reboot
+_description: Ensure that the wpa-supplicant service is up and running
+plugin: manual
+_steps:
+ 1. Reboot the device
+ .
+  $ sudo reboot
+ .
+ 2. When the device finished booting, check service status with the following command:
+ .
+  $ systemctl status snap.wpa-supplicant.wpa.service
+_verification:
+  Output should look like this:
+  .
+  * snap.wpa-supplicant.wpa.service - Service for snap application wpa-supplicant.wpa
+     Loaded: loaded (/etc/systemd/system/snap.wpa-supplicant.wpa.service; enabled; vendor preset: enabled)
+     Active: active (running) since Mon 2017-03-20 08:50:29 UTC; 1h 50min ago
+     Main PID: 1587 (wpa_supplicant)
+
+id: wpa_supplicant/general/system_has_a_single_wpa_running
+category_id: wpa_supplicant
+depends: wpa_supplicant/general/service_starts_after_reboot
+_description: Ensure that only a single wpa-supplicant instance runs on the system.
+plugin: manual
+_steps:
+  Check which wpa-supplicant processes are running via
+  .
+  $ pgrep wpa_supplicant
+_verification:
+  The output should list only a single process id, e.g.:
+  .
+  $ pgrep wpa_supplicant
+  2134
diff --git a/com.canonical.se:engineering-tests/units/wpa-supplicant/10_network_manager.pxu b/com.canonical.se:engineering-tests/units/wpa-supplicant/10_network_manager.pxu
new file mode 100644
index 0000000..3b33e4c
--- /dev/null
+++ b/com.canonical.se:engineering-tests/units/wpa-supplicant/10_network_manager.pxu
@@ -0,0 +1,74 @@
+# Copyright 2017 Canonical Ltd.
+# All rights reserved.
+#
+# Written by:
+#   Simon Fels <simon.fels@canonical.com>
+
+id: wpa_supplicant/network_manager/wpa_plug_connected
+category_id: wpa_supplicant
+depends: wpa_supplicant/general/system_has_a_single_wpa_running
+_description:
+  Ensure that the necessary wpa plug of the network-manager snap is connected.
+plugin: manual
+_steps:
+  1. Install the NetworkManager snap from the store
+  .
+  $ snap install network-manager
+  .
+  2. List plug/slot connections for the wpa-supplicant snap
+  .
+  $ snap interfaces wpa-supplicant
+_verification:
+  Output should look like:
+  .
+  Slot                           Plug
+  [...]
+  wpa-supplicant:service         network-manager:wpa
+
+id: wpa_supplicant/network_manager/finds_wifi_networks
+category_id: wpa_supplicant
+depends: wpa_supplicant/network_manager/wpa_plug_connected
+_description:
+  Verify WiFi networks can be found by using the wpa-supplicant and
+  network-manager snaps.
+plugin: manual
+_steps:
+  1. Trigger a scan for WiFi networks
+  .
+  $ nmcli d wifi rescan
+  .
+  2. List found WiFi networks
+  .
+  $ nmcli d wifi
+_verification:
+  The output should look similar to the following and should list available
+  WiFi networks in your environment:
+  .
+  *  SSID  MODE   CHAN  RATE       SIGNAL  BARS  SECURITY
+  *  test1 Infra  6     54 Mbit/s  85      ****  WPA1 WPA2
+     test2 Infra  6     54 Mbit/s  45      **    WPA1 WPA2
+
+id: wpa_supplicant/network_manager/connect_secure_wifi_network
+category_id: wpa_supplicant
+depends: wpa_supplicant/network_manager/finds_wifi_networks
+_description:
+  Verify connecting one of the previously found WiFi networks is possible.
+  network-manager snaps.
+plugin: manual
+_steps:
+  Connect one of the previously found WiFi networks via:
+  .
+  $ nmcli d wifi connect <SSID> password <password>
+  .
+  Replace <SSID> and <password> with the right values for your selected WiFi
+  network.
+_verification:
+  The nmcli command call should return with no error. Verify why running
+  .
+  $ echo $?
+  0
+  .
+  Also verify that the WiFi network is connected:
+  .
+  $ nmcli d | grep wifi
+  wlan0     wifi      connected    test1
diff --git a/media-hub/manage.py b/media-hub/manage.py
deleted file mode 100755
index 81b22c3..0000000
--- a/media-hub/manage.py
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env python3
-from plainbox.provider_manager import setup, N_
-
-setup(
-    name='plainbox-provider-media-hub',
-    namespace='2017.com.canonical.media-hub',
-    version="1.0",
-    description=N_("Plainbox provider for the media-hub snap"),
-    gettext_domain="2017_com_canonical_media_hub",
-)
diff --git a/media-hub/units/media-hub-snap.pxu b/media-hub/units/media-hub-snap.pxu
deleted file mode 100644
index 24ad2bc..0000000
--- a/media-hub/units/media-hub-snap.pxu
+++ /dev/null
@@ -1,73 +0,0 @@
-# Copyright (C) 2017 Canonical Ltd.
-# All rights reserved.
-#
-# Written by:
-#   Alfonso Sánchez-Beato <alfonso.sanchez-beato@canonical.com>
-
-id: media_hub/snap_classic/play_wav
-category_id: media_hub
-plugin: manual
-_summary: Confined media-hub can play wav files
-_purpose:
- Check if media-hub properly plays wav files when confined. The scenario is
- Unity8 on Classic.
-_steps:
-  1. Install snaps and perform needed interface connections
-  .
-    $ snap install media-hub
-    $ snap install --devmode mediaplayer-app
-    $ sudo snap connect mediaplayer-app:mpris media-hub:mpris
-  .
-  2. Start media-hub-server (needed until LP #1613420 is solved)
-  .
-    $ media-hub.media-hub-service
-  .
-  3. Download sample file
-  .
-    $ wget -P ~/Music/ http://freewavesamples.com/files/Kawai-K5000W-Buchla-C1.wav
-  .
-  4. Launch mediaplayer-app
-  .
-    $ /snap/bin/mediaplayer-app ~/Music/Kawai-K5000W-Buchla-C1.wav
-  .
-  5. Let the song play until the end
-  6. Restart playback after the song finishes
-  7. Pause, then press play again a few times
-  8. While the song is playing, move the slider back and forth in time
-  9. Pause the song, then move the slider again
-_verification:
-  Verify that in all cases the audio is played as expected.
-
-id: media_hub/snap_classic/play_mp3
-category_id: media_hub
-plugin: manual
-_summary: Confined media-hub can play an mp3
-_purpose:
- Check if media-hub properly plays an mp3 when confined. The scenario is Unity8
- on Classic.
-_steps:
-  1. Install snaps and perform needed interface connections
-  .
-    $ snap install media-hub
-    $ snap install --devmode mediaplayer-app
-    $ sudo snap connect mediaplayer-app:mpris media-hub:mpris
-  .
-  2. Start media-hub-server (needed until LP #1613420 is solved)
-  .
-    $ media-hub.media-hub-service
-  .
-  3. Download sample file
-  .
-    $ wget -P ~/Music/ http://www.stephaniequinn.com/Music/Canon.mp3
-  .
-  4. Launch mediaplayer-app
-  .
-    $ /snap/bin/mediaplayer-app ~/Music/Canon.mp3
-  .
-  5. Let the song play until the end
-  6. Restart playback after the song finishes
-  7. Pause, then press play again a few times
-  8. While the song is playing, move the slider back and forth in time
-  9. Pause the song, then move the slider again
-_verification:
-  Verify that in all cases the audio is played as expected.
diff --git a/media-hub/units/media-hub.pxu b/media-hub/units/media-hub.pxu
deleted file mode 100644
index bdeec69..0000000
--- a/media-hub/units/media-hub.pxu
+++ /dev/null
@@ -1,65 +0,0 @@
-# Copyright 2017 Canonical Ltd.
-# All rights reserved.
-#
-# Written by:
-#   Alfonso Sánchez-Beato <alfonso.sanchez-beato@canonical.com>
-
-unit: category
-id: media_hub
-_name: media-hub
-
-id: media_hub/video/play_h264
-category_id: media_hub
-plugin: manual
-_summary: H.264 videos play as expected
-_purpose:
- Check if media-hub plays properly H.264 videos
-_steps:
-  1. Download H.264 video
-  .
-    $ wget https://download.blender.org/durian/trailer/sintel_trailer-720p.mp4
-  .
-  2. Start media-hub-server
-  .
-    $ MIR_SOCKET=/run/user/$UID/mir_socket media-hub-server --desktop_file_hint=unity8
-  .
-  3. Start to play the video
-  .
-    $ MIR_SOCKET=/run/user/$UID/mir_socket QT_QPA_PLATFORM=ubuntumirclient DISPLAY=:0 /usr/bin/mediaplayer-app --desktop_file_hint=unity8 sintel_trailer-720p.mp4
-  .
-  4. Let the video play until the end
-  5. Re-start after the video finishes
-  6. Pause, then press play again a few times
-  7. While the video is playing, move the slider back and forth in time
-  8. Pause the video, then move the slider again
-  9. Re-size, maximize, then minimize the window several times
-_verification:
-  Verify that in all cases the video is played as expected.
-
-id: media_hub/video/play_mpeg4
-category_id: media_hub
-plugin: manual
-_summary: MPEG4 videos play as expected
-_purpose:
- Check if media-hub plays properly MPEG4 videos
-_steps:
-  1. Download H.264 video
-  .
-    $ wget https://download.blender.org/durian/trailer/Sintel_Trailer.480p.DivX_Home_Theater.divx
-  .
-  2. Start media-hub-server
-  .
-    $ MIR_SOCKET=/run/user/$UID/mir_socket media-hub-server --desktop_file_hint=unity8
-  .
-  3. Start to play the video
-  .
-    $ MIR_SOCKET=/run/user/$UID/mir_socket QT_QPA_PLATFORM=ubuntumirclient DISPLAY=:0 /usr/bin/mediaplayer-app --desktop_file_hint=unity8 Sintel_Trailer.480p.DivX_Home_Theater.divx
-  .
-  4. Let the video play until the end
-  5. Re-start after the video finishes
-  6. Pause, then press play again a few times
-  7. While the video is playing, move the slider back and forth in time
-  8. Pause the video, then move the slider again
-  9. Re-size, maximize, then minimize the window several times
-_verification:
-  Verify that in all cases the video is played as expected.
diff --git a/modem-manager/manage.py b/modem-manager/manage.py
deleted file mode 100755
index 8570bb9..0000000
--- a/modem-manager/manage.py
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env python3
-from plainbox.provider_manager import setup, N_
-
-setup(
-    name='plainbox-provider-modem-manager',
-    namespace='2016.com.canonical.modem-manager',
-    version="1.0",
-    description=N_("Plainbox provider for the ModemManager snap"),
-    gettext_domain="2016_com_canonical_modem_manager",
-)
diff --git a/modem-manager/units/modem-manager.pxu b/modem-manager/units/modem-manager.pxu
deleted file mode 100644
index 3912ac2..0000000
--- a/modem-manager/units/modem-manager.pxu
+++ /dev/null
@@ -1,103 +0,0 @@
-# Copyright 2016 Canonical Ltd.
-# All rights reserved.
-#
-# Written by:
-#   Jim Hodapp <jim.hodapp@canonical.com>
-#   Alfonso Sanchez-Beato <alfonso.sanchez-beato@canonical.com>
-
-unit: category
-id: modem_manager
-_name: Modem Manager
-
-id: modem_manager/setup/ensure_interface_connection_setup
-category_id: modem_manager
-_description: Ensure that the modem-manager interface is connected
-plugin: manual
-_steps:
-  1. Install network-manager if not already installed
-     .
-     $ sudo snap install network-manager
-     .
-  2. Connect required modem-manager/network-manager slots/plugs
-     .
-     $ sudo snap connect modem-manager:mmcli modem-manager:service
-     $ sudo snap connect network-manager:nmcli network-manager:service
-     $ sudo snap connect network-manager:modem-manager modem-manager:service
-     $ sudo snap connect network-manager:ppp ubuntu-core:ppp
-     .
-_verification:
-  Verify that you see the following when running snap interfaces:
-  modem-manager:service    modem-manager:mmcli,network-manager:modem-manager
-  network-manager:service  network-manager:nmcli
-  :ppp                     network-manager
-
-id: modem_manager/modems/get_all
-category_id: modem_manager
-plugin: manual
-depends: modem_manager/setup/ensure_interface_connection_setup
-_summary: All active modem configuration items are listed
-_purpose:
- Check if the modem shows up as being recognized by modem-manager.
-_steps:
-  1. Execute the following command to retrieve the list of all detected modems:
-     .
-     $ sudo mmcli -L
-_verification:
-  Your expected modem is shown in the output list.
-
-id: modem_manager/modems/get_info
-category_id: modem_manager
-plugin: manual
-depends: modem_manager/setup/ensure_interface_connection_setup
-_summary: All modem information listed
-_purpose:
- Check if the modem details can be listed.
-_steps:
-  1. Execute the following command to retrieve the list of all detected modems.
-     Note, the modem number is listed from the previous test:
-     .
-     $ sudo mmcli -m <modem_number>
-_verification:
-  Your desired modem detail is listed.
-
-id: modem_manager/modems/connect
-category_id: modem_manager
-plugin: manual
-depends: modem_manager/setup/ensure_interface_connection_setup
-_summary: Connect to a listed modem
-_purpose:
- Connect to a listed modem and verify connection status
-_steps:
-  1. Execute the following commands to connect to a particular modem. First run
-     "sudo nmcli d" to find out what you need to put in <interface> (look for
-     TYPE=gsm, the interface will be the name in the DEVICE column). It will
-     probably be something that starts with "tty" or "cdc". Also, replace
-     <op_apn> by looking up the APN string for your cell provider at
-     http://www.apn-settings.com (e.g. "fast.t-mobile.com" for T-Mobile 4G).
-     Finally, "gsmconn" is an arbitrary connection name and can be set to
-     anything that makes sense for the connection type.
-     .
-     $ sudo nmcli c add type gsm ifname <interface> con-name gsmconn apn <op_apn>
-     $ sudo nmcli r wwan on
-     .
-  2. Check that the connection is up with "sudo nmcli d". It should show that
-     state is "connected". This can take some time depending on network
-     conditions and on the modem type.
-     .
-  3. Check which is the network interface for the cellular connection. For this,
-     fist run
-     .
-     $ sudo nmcli d show <interface>
-     .
-     (here <interface> is the one from point 1), check the IP4.ADDRESS field,
-     then run
-     .
-     $ ip address
-     .
-     and there you can find the network interface that owns that address.
-     .
-  4. Add a route to 8.8.8.8 with
-     .
-     $ sudo ip route add 8.8.8.8 dev <network-interface>
-_verification:
-  Verify that you have a modem connection by pinging 8.8.8.8.
diff --git a/network-manager/manage.py b/network-manager/manage.py
deleted file mode 100755
index 86969f2..0000000
--- a/network-manager/manage.py
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env python3
-from plainbox.provider_manager import setup, N_
-
-setup(
-    name='plainbox-provider-network-manager',
-    namespace='2016.com.canonical.network-manager',
-    version="1.0",
-    description=N_("Plainbox provider for the NetworkManager snap"),
-    gettext_domain="2016_com_canonical_network_manager",
-)
diff --git a/network-manager/units/network-manager.pxu b/network-manager/units/network-manager.pxu
deleted file mode 100644
index 27d9b8b..0000000
--- a/network-manager/units/network-manager.pxu
+++ /dev/null
@@ -1,325 +0,0 @@
-# Copyright 2016 Canonical Ltd.
-# All rights reserved.
-#
-# Written by:
-#   Lorn Potter <lorn.potter@canonical.com>
-#   Simon Fels <simon.fels@canonical.com>
-
-unit: category
-id: network_manager
-_name: Network Manager
-
-id: network_manager/misc/check_for_crashes
-category_id: network_manager
-plugin: manual
-_summary: Verify that NetworkManager hasn't crashed in previous runs.
-_steps:
- 1. Power on a Desktop system, this tests does not apply elsewhere.
- 2. List content of /var/crash for crash dumps:
- .
-   ls -l /var/crash
- .
-_verification:
- 1. Check that /var/crash is empty.
-
-id: network_manager/ethernet/enable_support
-category_id: network_manager
-plugin: manual
-_summary: Ethernet support for NetworkManager needs to be manually enabled
-_purpose:
- By default ethernet support is disabled in the network-manager snap. In order
- to be able to get it managed through NetworkManager a few manual steps need to
- be performed.
-_steps:
- 1. Create /etc/netplan/00-default-nm-renderer.yaml with the following content:
- .
-   network:
-     renderer: NetworkManager
- .
- 2. Drop any other files from /etc/netplan and reboot the device.
-_verification:
- NOTE: The device may get another IP address assigned as before. Use a network
- scanner or a monitor+keyboard to check which IP address it got assigned.
- .
- Once the device is rebooted you should be able to connect to it by using the
- network connection offered on the ethernet port. When logged into the device
- verify NetworkManager automatically connected the ethernet port:
- .
- $ network-manager.nmcli d
- DEVICE       TYPE      STATE        CONNECTION
- eth0         ethernet  connected    eth0
- [...]
- .
- The state of all ethernet devices with a plugged cable and a working network
- behind should be 'connected'.
-
-id: network_manager/ethernet/all_ports_detected
-depends: network_manager/ethernet/enable_support
-category_id: network_manager
-plugin: manual
-_summary: NetworkManager should detect all available ethernet ports
-_purpose:
- NetworkManager should detect all available ethernet ports by default
- on a system and list them as usable devices.
-_steps:
- 1. List all available ethernet ports
-    $ ifconfig -a | grep -E '$eth'
-    $ ifconfig -a | grep -E '$en'
- 2. List all ethernet ports NetworkManager knows about
-    $ network-manager.nmcli d
-_verification:
- Both steps should show the same list of ethernet network interfaces.
-
-id: network_manager/ethernet/auto_connected
-depends: network_manager/ethernet/enable_support
-category_id: network_manager
-plugin: manual
-_summary: NetworkManager should auto-connect any ethernet port with a link
-_purpose:
- When a cable is plugged into an ethernet port NetworkManager should try
- to automatically connect the port.
- .
- NOTE: This test assumes that the cable you plug into the port is connected
- to a network which offers a DHCP server.
-_steps:
- 1. Ensure that there is no connection for the port you want to use for
-    testing. Using a serial console to perform this test is recommended.
- 2. Drop any existing connections listed by
-    $ network-manager.nmcli c show
-    which are meant for the ethernet port of the device with
-    $ network-manager.nmcli c delete <UUID>
- 3. Plug the cable into the ethernet port.
-_verification:
- The ethernet port should be automatically connected by NetworkManager. This
- can be verified with
- $ network-manager.nmcli d | grep <ethernet device name>
- eth0        ethernet  connected  <connection name>
- Please note that the <connection name> can be different as its
- automatically selected by NetworkManager. It can be "Wired Connection 1"
- for example.
-
-id: network_manager/ethernet/auto_connect_existing_connection
-depends: network_manager/ethernet/enable_support
-category_id: network_manager
-plugin: manual
-_summary: Cable plug/unplug should give an existing connection
-_purpose:
- When a cable is unplugged and plugged again the ethernet port should
- be automatically reconnected.
-_steps:
- 1. Check if the ethernet port is currently connected
-    $ network-manager.nmcli d
- 2. Unplug the cable from the ethernet port and check the connection
-    $ network-manager.nmcli d
- 3. Plug the cable again and check the connection status.
-_verification:
- Before the cable is unplugged the ethernet port should be marked
- as connected. Once the cable is removed the connection status
- should switch to unconnected. When plugged back in, it should be marked
- again as connected.
-
-id: network_manager/ethernet/unmanaged
-category_id: network_manager
-plugin: manual
-depends: network_manager/ethernet/auto_connected
-_summary: Check if ethernet device is unmanaged.
-_purpose:
- Check if the ethernet device is not managed by Network Manager.
- .
- NOTE: This only applies to devices where ethernet is not managed by
- NetworkManager. Check if /etc/netplan/00-default-nm-renderer.yaml
- exists. If it does not, then NetworkManager doesn't touch any
- ethernet connection. If it exists, skip this test.
-_steps:
-  1. Execute the following command to retrieve the list of all detected connections.
-  Note, the AP number is listed from the previous test:
-  .
-    $ /snap/bin/network-manager.nmcli d | grep en
-_verification:
-   The network device is listed as 'unmanaged', as an example:
-    enxb827ebf6b919  ethernet  unmanaged     --
-
-id: network_manager/connections/get_all
-category_id: network_manager
-plugin: manual
-depends: network_manager/ethernet/auto_connected
-_summary: All active AP configuration items are listed
-_purpose:
- Check if the AP shows up as being recognized by Network Manager.
-_steps:
-  1. Execute the following command to retrieve the list of all detected connections:
-  .
-    $ /snap/bin/network-manager.nmcli d wifi list
-_verification:
-  Your expected AP is shown in the output list for example:
-  pool1          Infra  6     54 Mbit/s  75      ***   WPA2
-
-id: network_manager/connections/agent
-category_id: network_manager
-plugin: manual
-depends: network_manager/ethernet/auto_connected
-_summary: Register for secret agent
-_purpose:
- Register for Network Manager's secret agent and verify status
-_steps:
-  1. Execute the following command to register secret agent:
-  .
-    $ /snap/bin/network-manager.nmcli a
-_verification:
-  Output should be similiar to this:
-  nmcli successfully registered as a Network Manager's secret agent.
-  nmcli successfully registered as a polkit agent.
-
-id: network_manager/connections/connect
-category_id: network_manager
-plugin: manual
-depends: network_manager/ethernet/auto_connected
-_summary: Connect to a listed AP
-_purpose:
- Connect to a listed AP and verify connection status
-_steps:
-  1. Execute the following commands to connect to a particular AP.
-  .
-    $ /snap/bin/network-manager.nmcli dev wifi con "yourssid" password "yourpassword"
-    Note, replace yourssid with the ssid if the AP you will connect to, and replace yourpassword
-    with the actual password/passphrase.
-_verification:
-  Verify that you have a AP connection by issuing this command:
-  $ ifconfig | grep -A 2 wl
-  .
-  verifying that the interface has an IP address with output similiar to this:
-  wlp5s0    Link encap:Ethernet  HWaddr 70:77:81:33:92:6b
-            inet addr:10.0.0.108  Bcast:10.0.0.255  Mask:255.255.255.0
-            inet6 addr: 2001:8003:6501:2000:c1b3:3359:d2a3:f2d1/64 Scope:Global
-
-id: network_manager/connections/get_info
-category_id: network_manager
-plugin: manual
-depends: network_manager/ethernet/auto_connected
-_summary: All AP information listed
-_purpose:
- Check if the AP details can be listed.
-_steps:
-  1. Execute the following command to retrieve the list of all detected connections.
-  Note, the AP ssid is listed from the previous test:
-  .
-    $ /snap/bin/network-manager.nmcli -p -f general,ip4,ip6 c show <AP_SSID>
-_verification:
-  Your desired AP detail is listed and has ip4/ip6 address.
-    ===============================================================================
-        Activate connection details (1554e3b2-76e6-4adc-b986-215b7393f8d9)
-    ===============================================================================
-    GENERAL.NAME:                           pool1
-    GENERAL.UUID:                           1554e3b2-76e6-4adc-b986-215b7393f8d9
-    GENERAL.DEVICES:                        wlp5s0
-    GENERAL.STATE:                          activated
-    GENERAL.DEFAULT:                        no
-    GENERAL.DEFAULT6:                       no
-    GENERAL.VPN:                            no
-    GENERAL.ZONE:                           --
-    GENERAL.DBUS-PATH:                      /org/freedesktop/NetworkManager/ActiveConnection/2
-    GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/Settings/3
-    GENERAL.SPEC-OBJECT:                    /org/freedesktop/NetworkManager/AccessPoint/0
-    GENERAL.MASTER-PATH:                    --
-    -------------------------------------------------------------------------------
-    IP4.ADDRESS[1]:                         10.0.0.108/24
-    IP4.GATEWAY:                            10.0.0.138
-    IP4.DNS[1]:                             10.0.0.138
-    IP4.DOMAIN[1]:                          gateway
-    -------------------------------------------------------------------------------
-    IP6.ADDRESS[1]:                         2001:8003:6501:2000:c1b3:3359:d2a3:f2d1/64
-    IP6.ADDRESS[2]:                         2001:8003:6501:2000:7277:81ff:fe33:926b/64
-    IP6.ADDRESS[3]:                         fe80::7277:81ff:fe33:926b/64
-    IP6.GATEWAY:                            fe80::e2b9:e5ff:fe5a:91b0
-    IP6.DNS[1]:                             2001:8003:6501:2000::1
-    IP6.DOMAIN[1]:                          gateway
-    -------------------------------------------------------------------------------
-
-id: network_manager/ethernet/device_supports_wol
-depends: network_manager/ethernet/enable_support
-category_id: network_manager
-plugin: manual
-_summary: Verify that the device under test has support for Wake-on-LAN
-_purpose:
-  Verify that the device you're running the tests on supports Wake-on-LAN. For
-  example, devices like the Raspberry PI (1-3) do not support Wake-on-LAN.
-_steps:
-    Verify that your device supports Wake-on-LAN. You can look into the specs
-    for your device, ask the vendor or search through the internet.
-    .
-    For example the Raspberry PI can't suspend to RAM which is discussed and
-    outlined in https://github.com/raspberrypi/linux/issues/1281 which also
-    makes Wake-on-LAN impossible.
-_verification:
-    If device does not support Wake-on-LAN please SKIP this test case and all
-    depending test cases will be skipped too. If Wake-on-LAN is supported mark
-    test as PASSED.
-
-id: network_manager/ethernet/uses_global_wol
-depends: network_manager/ethernet/device_supports_wol
-category_id: network_manager
-plugin: manual
-_summary: Ethernet connections are using global wake-on-lan setting
-_purpose:
-  Check if an ethernet connection created by NetworkManager automatically uses the
-  global default for wake-on-lan.
-  .
-  NOTE: This requires a system which is configured to not use netplan to
-  generate connections for NetworkManager. On such a system an ethernet
-  connection will always have wake-on-lan disabled as netplan does this
-  by default if not explicitly stated in the netplan configuration.
-_steps:
-  1. Find connection UUID for the ethernet port
-    $ network-manager.nmcli c show | grep eth0
-  2. Verify the connection uses the global wake-on-lan setting
-    $ network-manager.nmcli -m multiline -f 802-3-ethernet.wake-on-lan c show <UUID>
-_verification:
-  The output should look like this:
-  .
-  802-3-ethernet.wake-on-lan:             1 (default)
-
-id: network_manager/ethernet/has_wol_enabled_by_default
-depends: network_manager/ethernet/device_supports_wol
-category_id: network_manager
-plugin: manual
-_summary: Ethernet port has wake-on-lan enabled by default
-_purpose:
-  Check if the actual ethernet device has wake-on-lan correctly enabled when
-  its connection is maintained by NetworkManager.
-_steps:
-  1. Install the se-test-tools snap
-    $ snap install --devmode --edge se-test-tools
-  2. Check the ethernet port for the wake-on-lan setting (eth0 in this case)
-    $ sudo se-test-tools.ethtool eth0
-_verification:
-  The output should be similar to this:
-  Settings for eth0:
-   [...]
-   Supports Wake-on: pumbg
-   Wake-on: g
-   [...]
-  .
-  The relevant line is the "Wake-on:" one. It should have the value "g"
-  set which marks the port as waking up on the magic packet.
-
-id: network_manager/ethernet/wakes_up_with_wol
-depends: network_manager/ethernet/device_supports_wol
-category_id: network_manager
-plugin: manual
-_summary: Wake on LAN configured by NetworkManager can wake up the device
-_purpose:
- Check that another system can wake up from S5 the SUT using the connected ethernet port.
-_steps:
- 1. Ensure there is an ethernet cable attached to one of the ports and it's configured via
-    NetworkManager. Check with
-    $ network-manager.nmcli d | grep eth0
- 2. Note the MAC address of the the eth0 port
-    $ ifconfig eth0
- 3. Power off the system by running
-    $ sudo poweroff
- 4. From another computer on the same network run the following command:
-    $ wakeonlan {mac}
-    If wakeonlan tool is not installed run:
-    $ sudo apt install wakeonlan
-_verification:
-  Did the SUT wake up from S5?
diff --git a/network-manager/units/power_management.pxu b/network-manager/units/power_management.pxu
deleted file mode 100644
index 8ae9b78..0000000
--- a/network-manager/units/power_management.pxu
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright 2016 Canonical Ltd.
-# All rights reserved.
-#
-# Written by:
-#   Simon Fels <simon.fels@canonical.com>
-
-id: network_manager/power_management/connections_come_back_after_resume
-category_id: network_manager
-plugin: manual
-_summary: Connections managed by NetworkManager should come back when device wakes up
-_purpose:
- When a device goes to sleep NetworkManager disconnects all connections but
- will reconnect them back when the device reawakens.
-_steps:
- 1. Verify the device is connectd to a WiFi or ethernet network. You can use
- .
-    $ network-manager.nmcli d
- .
-    to check if a wireless network interface is connected or not.
- 2. Suspend the device by calling
- .
-    $ systemctl suspend
- .
- 3. Wake up the device again by pressing its power button
-_verification:
- When the device comes back from suspend after pressing the power button
- verify with
- .
- $ network-manager.nmcli d
- .
- that the previously connected WiFi/ethernet network is again connected.
diff --git a/network-manager/units/snap.pxu b/network-manager/units/snap.pxu
deleted file mode 100644
index 419901a..0000000
--- a/network-manager/units/snap.pxu
+++ /dev/null
@@ -1,101 +0,0 @@
-# Copyright 2017 Canonical Ltd.
-# All rights reserved.
-#
-# Written by:
-#   Matteo Croce <matteo.croce@canonical.com>
-
-id: network_manager/snap/check_interfaces
-category_id: network_manager
-plugin: manual
-_summary: Verify that snap interfaces are correctly connected
-_steps:
- 1. Install the snap from the store:
- .
-   $ snap install network-manager
- .
-_verification:
- 1. Verify that the 'network-manager' snap has all required plug connected:
- .
-   $ snap interfaces |grep network-manager
-   :network-setup-observe   network-manager
-   :ppp                     network-manager
-   modem-manager:service    modem-manager:mmcli,network-manager:modem-manager
-   network-manager:service  network-manager:nmcli
- .
-
-id: network_manager/wifi/periodic_scanning
-category_id: network_manager
-depends: network_manager/snap/check_interfaces
-plugin: manual
-_summary: Verify that periodic Wi-Fi scanning occurs
-_steps:
- 1. Run wpa_cli to ensure that periodic scanning is occurring:
- .
-   $ sudo wpa_cli
-   wpa_cli v2.4
-   .
-   Selected interface 'wlp3s0'
-   .
-   Interactive mode
-   .
- .
- 2. Get the scan results with:
- .
-   > scan_results
- .
-_verification:
- 1. You should see some output like this at least once every 120 seconds
- in the wpa_cli output
- .
-   <3>CTRL-EVENT-SCAN-STARTED
-   <3>CTRL-EVENT-SCAN-RESULTS
- .
- 2. You should see the list of reachable Access Points, eg.
- .
-   bssid / frequency / signal level / flags / ssid
-   12:34:56:78:89:ab       2437    -85     [WPA2-PSK-CCMP+TKIP][ESS]       Home-AP
-
-
-id: network_manager/wifi/no_dbus_duplicate_signals
-category_id: network_manager
-depends: network_manager/snap/check_interfaces
-plugin: manual
-_summary: Ensure that dbus signals aren't duplicated
-_steps:
- 1. Run dbus-monitor:
- .
-   dbus-monitor --system --profile type=signal,interface=org.freedesktop.DBus.Properties
- .
-_verification:
- 1. Ensure that when scanning occurs, there aren't duplicate PropertiesChanged
- signals sent for each AccessPoint object path.
- There should be a single DBus PropertiesChanged signal for each /AccessPoint/X):
- .
-   sig  1489573828  1805  :1.13  <none>  /org/freedesktop/NetworkManager/AccessPoint/0  org.freedesktop.DBus.Properties PropertiesChanged
-   sig  1489573828  1806  :1.13  <none>  /org/freedesktop/NetworkManager/AccessPoint/1  org.freedesktop.DBus.Properties PropertiesChanged
-   sig  1489573828  1807  :1.13  <none>  /org/freedesktop/NetworkManager/AccessPoint/2  org.freedesktop.DBus.Properties PropertiesChanged
-   sig  1489573828  1808  :1.13  <none>  /org/freedesktop/NetworkManager/AccessPoint/3  org.freedesktop.DBus.Properties PropertiesChanged
-   sig  1489573828  1809  :1.13  <none>  /org/freedesktop/NetworkManager/AccessPoint/4  org.freedesktop.DBus.Properties PropertiesChanged
-
-
-id: network_manager/wifi/ap_expires
-category_id: network_manager
-depends: network_manager/snap/check_interfaces
-plugin: manual
-_summary: Ensure that AccessPoint entries are volatile
-_steps:
- 1. Bring up an AP (eg. from a smartphone)
- 2. Start wpa_cli and do a wireless scan:
- .
-   $ wpa_cli
-   > scan
- .
- wait 10 seconds, and get the scan results.
- .
-   > scan_results
- .
- 3. Shutdown the AP on the smartphone
- 4. Wait 120 seconds
- 5. Retry the wireless scan
-_verification:
- 1. In the second scan the smartphone AP should not be present
diff --git a/network-manager/units/wireless.pxu b/network-manager/units/wireless.pxu
deleted file mode 100644
index 52a84d2..0000000
--- a/network-manager/units/wireless.pxu
+++ /dev/null
@@ -1,54 +0,0 @@
-# Copyright 2016 Canonical Ltd.
-# All rights reserved.
-#
-# Written by:
-#   Simon Fels <simon.fels@canonical.com>
-
-id: network_manager/wireless/powersave_off_by_default
-category_id: network_manager
-plugin: manual
-_summary: NetworkManager should disable powersave by default
-_purpose:
- The powersave configuration option should cause the mode on the
- actual hardware device to be turned off by default.
-_steps:
- Install wireless-tools snap and check that powersave is turned off
- on the actual hardware wireless device.
-  $ snap install wireless-tools
-_verification:
- The iw utility should return the following for the selected wireless device
-  $ sudo wireless-tools.iw dev wlan0 get power_save
-  Power save: off
-
-id: network_manager/wireless/powersave_config_default_off
-category_id: network_manager
-plugin: manual
-_summary:
- The configuration option should be set to disable by default
-_purpose:
- On installation the snap sets the option to a default value
- which should always be the same.
-_steps:
- Retrieve the configuration value via
-  $ snap get network-manager wifi.powersave
-_verification:
-  The returned value should be "disable".
-
-id: network_manager/wireless/powersave_can_be_enabled
-category_id: network_manager
-plugin: manual
-_summary:
- Enabling powersave with the configuration option of the snap should turn it on.
-_purpose:
- The network-manager snap uses a configure hook to control how
- the WiFi powersave option is set. It should be possible to enable
- the option on the actual hardware wireless device with it.
-_steps:
- 1. Enable powersave via the configure hook
-  $ snap set network-manager wifi.powersave=enable
-_verification:
- Powersave should now be turned on for all wireless devices. This
- can be verified with
-  $ snap install wireless-tools
-  $ sudo wireless-tools.iw dev wlan0 get power_save
-  Power save: on
diff --git a/pulseaudio/manage.py b/pulseaudio/manage.py
deleted file mode 100755
index 5e7f5ce..0000000
--- a/pulseaudio/manage.py
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env python3
-from plainbox.provider_manager import setup, N_
-
-setup(
-    name='plainbox-provider-pulseaudio',
-    namespace='2016.com.canonical.pulseaudio',
-    version="1.0",
-    description=N_("Plainbox provider for the PulseAudio snap"),
-    gettext_domain="2016_com_canonical_pulseaudio",
-)
diff --git a/pulseaudio/units/pulseaudio.pxu b/pulseaudio/units/pulseaudio.pxu
deleted file mode 100644
index 43af155..0000000
--- a/pulseaudio/units/pulseaudio.pxu
+++ /dev/null
@@ -1,106 +0,0 @@
-# Copyright 2016 Canonical Ltd.
-# All rights reserved.
-#
-# Written by:
-#   Konrad Zapalowicz <konrad.zapalowicz@canonical.com>
-
-unit: category
-id: pulseaudio
-_name: PulseAudio
-
-id: pulseaudio/setup/ensure_interface_connection_setup
-category_id: pulseaudio
-_description: Ensure that the pulseaudio interface is auto-connected
-plugin: manual
-_steps:
-  1. List the interfaces
-  .
-    $ snap interfaces
-  .
-_verification:
-  Verify that you see the following:
-  pulseaudio:service    pulseaudio:client
-  :network              pulseaudio
-
-id: pulseaudio/pactl/ensure-commands-can-be-run-by-root
-category_id: pulseaudio
-_description: Ensure that the pulseaudio commands can be run only by root
-plugin: manual
-depends: pulseaudio/setup/ensure_interface_connection_setup
-_steps:
-  1. Try to run pactl
-  .
-    $ pulseaudio.pactl
-  .
-  2. Try to run paplay
-  .
-    $ pulseaudio.paplay
-  .
-  3. Try to run parec
-  .
-    $ pulseaudio.parec
-  .
-_verification:
-  Verify that each step ends with the following message:
-    This script must be run as root
-
-id: pulseaudio/pactl/ensure-modules-are-listed
-category_id: pulseaudio
-_description: Ensure that the correct modules are loaded
-plugin: manual
-depends: pulseaudio/setup/ensure_interface_connection_setup 
-_steps:
-  1. List the loaded modules
-  .
-    $ sudo pulseaudio.pactl list short
-  .
-_verification:
-  Verify that you see output similar to following:
-    0       module-device-restore
-    1       module-stream-restore
-    2       module-card-restore
-    3       module-augment-properties
-    4       module-switch-on-port-available
-    5       module-udev-detect
-    ...
-    80      protocol-native.c       pactl
-    0       alsa_card.pci-0000_00_1b.0      module-alsa-card.c
-  .
-  Verify that amongs the other the following modules are listed:
-    module-device-restore
-    module-stream-restore
-    module-card-restore
-    module-switch-on-port-available
-    module-rescue-streams
-    module-always-sink
-
-id: pulseaudio/parecord/ensure-audio-can-be-recorded
-category_id: pulseaudio
-_description: Ensure that it is possible to record audio
-plugin: manual
-depends: pulseaudio/setup/ensure_interface_connection_setup 
-_steps:
-  1. Record an audio .wav file
-  .
-    $ sudo pulseaudio.parec ~/record.wav
-  .
-_verification:
-  Verify that the record.wav file has been created and it's size is
-  greater than zero. Verify that the recorded file can be played and
-  it is possible to hear the audio.
-
-id: pulseaudio/paplay/ensure-audio-can-be-played
-category_id: pulseaudio
-_description: Ensure that it is possible to play auio files
-plugin: manual
-depends: pulseaudio/setup/ensure_interface_connection_setup 
-_steps:
-  1. Play an audio .wav file
-  .
-    $ sudo pulseaudio.paplay ~/file.wav
-  .
-_verification:
-  Verify that the audio is hearable through the speakers. In case the
-  speakers are not available verify that the sink status has changed
-  from SUSPEND to RUNNING [use the sudo pulseaudio.pactl list sinks
-  command for that]
diff --git a/snapcraft.yaml b/snapcraft.yaml
index e5139e1..7b13d68 100644
--- a/snapcraft.yaml
+++ b/snapcraft.yaml
@@ -26,25 +26,25 @@ apps:
   wifi-ap:
     command: bin/run-wifi-ap-tests
   wifi-connect:
-    command: bin/plainbox-wrapper run -i '2017.com.canonical.wifi-connect::wifi-connect.*'
+    command: bin/plainbox-wrapper run -i '2017.com.canonical.se::wifi-connect.*'
   wireless-tools:
     command: bin/run-wireless-tools-tests
   pulseaudio:
     command: bin/run-pulseaudio-tests
   snapweb:
-    command: bin/plainbox-wrapper run -i '2017.com.canonical.snapweb::snapweb.*'
+    command: bin/plainbox-wrapper run -i '2017.com.canonical.se::snapweb.*'
   upower:
-    command: bin/plainbox-wrapper run -i '2016.com.canonical.upower::upower.*'
+    command: bin/plainbox-wrapper run -i '2017.com.canonical.se::upower.*'
   udisks2:
     command: bin/run-udisks2-tests
   alsa-utils:
-    command: bin/plainbox-wrapper run -i '2017.com.canonical.alsa-utils::alsa_utils.*'
+    command: bin/plainbox-wrapper run -i '2017.com.canonical.se::alsa_utils.*'
   media-hub:
-    command: bin/plainbox-wrapper run -i '2017.com.canonical.media-hub::media_hub.*'
+    command: bin/plainbox-wrapper run -i '2017.com.canonical.se::media_hub.*'
   captive-redirect:
-    command: bin/plainbox-wrapper run -i '2017.com.canonical.captive-redirect::captive_redirect.*'
+    command: bin/plainbox-wrapper run -i '2017.com.canonical.se::captive_redirect.*'
   wpa-supplicant:
-    command: bin/plainbox-wrapper run -i '2017.com.canonical.wpa-supplicant::wpa_supplicant.*'
+    command: bin/plainbox-wrapper run -i '2017.com.canonical.se::wpa_supplicant.*'
 
 parts:
   common:
@@ -63,67 +63,9 @@ parts:
       - libxslt1-dev
       - zlib1g-dev
       - build-essential
-  bluez:
-    plugin: plainbox-provider
-    source: ./bluez
-    after: [plainbox-local]
-  modem-manager:
-    plugin: plainbox-provider
-    source: ./modem-manager
-    after: [plainbox-local]
-  network-manager:
-    plugin: plainbox-provider
-    source: ./network-manager
-    after: [plainbox-local]
-  pulseaudio:
-    plugin: plainbox-provider
-    source: ./pulseaudio
-    after: [plainbox-local]
-  tpm:
-    plugin: plainbox-provider
-    source: ./tpm
-    after: [plainbox-local]
-  wifi-ap:
-    plugin: plainbox-provider
-    source: ./wifi-ap
-    after: [plainbox-local]
-  wifi-connect:
-    plugin: plainbox-provider
-    source: ./wifi-connect
-    after: [plainbox-local]
-  wireless-tools:
-    plugin: plainbox-provider
-    source: ./wireless-tools
-    after: [plainbox-local]
-  snapweb:
-    plugin: plainbox-provider
-    source: ./snapweb
-    after: [plainbox-local]
-  upower:
-    plugin: plainbox-provider
-    source: ./upower
-    after: [plainbox-local]
-  udisks2:
-    plugin: plainbox-provider
-    source: ./udisks2
-    after: [plainbox-local]
-  alsa-utils:
-    plugin: plainbox-provider
-    source: git://git.launchpad.net/~snappy-hwe-team/snappy-hwe-snaps/+git/alsa-utils
-    source-branch: master
-    source-subdir: tests/manual
-    after: [plainbox-local]
-  media-hub:
-    plugin: plainbox-provider
-    source: ./media-hub
-    after: [plainbox-local]
-  captive-redirect:
-    plugin: plainbox-provider
-    source: ./captive-redirect
-    after: [plainbox-local]
-  wpa-supplicant:
+  engineering-provider:
     plugin: plainbox-provider
-    source: ./wpa-supplicant
+    source: ./com.canonical.se:engineering-tests
     after: [plainbox-local]
   launchers:
     plugin: dump
diff --git a/snapweb/manage.py b/snapweb/manage.py
deleted file mode 100644
index c554a18..0000000
--- a/snapweb/manage.py
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env python3
-from plainbox.provider_manager import setup, N_
-
-setup(
-    name='plainbox-provider-snapweb',
-    namespace='2017.com.canonical.snapweb',
-    version="1.0",
-    description=N_("Plainbox provider for the snapweb snap"),
-    gettext_domain="2017_com_canonical_snapweb",
-)
diff --git a/snapweb/units/snapweb.pxu b/snapweb/units/snapweb.pxu
deleted file mode 100644
index 8f9e070..0000000
--- a/snapweb/units/snapweb.pxu
+++ /dev/null
@@ -1,182 +0,0 @@
-# Copyright 2017 Canonical Ltd.
-# All rights reserved.
-#
-# Written by:
-#   Roberto Mier Escandon <roberto.escandon@canonical.com>
-
-unit: category
-id: snapweb
-_name: SnapWeb
-
-id: snapweb/setup/ensure_interface_connection_setup
-category_id: snapweb
-_description: Ensure that the snapweb interfaces are auto-connected
-plugin: manual
-_steps:
-  1. List the interfaces
-  .
-    $ snap interfaces snapweb
-  .
-_verification:
-  Verify that you see the following:
-  Slot					Plug
-  :network              snapweb
-  :network-bind			snapweb
-  :snapd-control		snapweb
-  :timeserver-control	snapweb
-
-id: snapweb/setup/ensure-http-service-is-up
-category_id: snapweb
-_description: Ensure that the http interface is up and running
-plugin: manual
-depends: snapweb/setup/ensure_interface_connection_setup
-_steps:
-  1. Open a browser in same device and type in address bar:
-  .
-    http://localhost:4200
-  .
-_verification:
-  Verify that url is accessible and a warning is shown about web access is
-  not secure/private (depending on the browser)
-
-id: snapweb/setup/ensure-https-service-is-up
-category_id: snapweb
-_description: Ensure that the snapweb web interface is up and running
-plugin: manual
-depends: snapweb/setup/ensure-http-service-is-up
-_steps:
-  1. Open a browser in same device and type in address bar:
-  .
-    http://localhost:4200
-  .
-  2. After warning alert showing that web access is not secure/private,
-  proceed to access localhost. In some browsers it is needed to confirm
-  a security exception.
-_verification:
-  Verify that url is accessible and browser shows a page with title
-  'Access Control', requesting a Snapweb Access Token to continue.
-  Verify that url address is now https://localhost:4201/access-control
-
-id: snapweb/setup/ensure-web-service-is-accessible-from-lan
-category_id: snapweb
-_description: Ensure that the snapweb web interface is accessible from lan
-plugin: manual
-depends: snapweb/setup/ensure-https-service-is-up
-_steps:
-  1. Open a browser in other device connected to same LAN than the one
-  hosting snapweb and type in address bar:
-  .
-    http://[hostname]:4200
-  .
-  2. After warning alert showing that web access is not secure/private,
-  proceed to access localhost. In some browsers it is needed to confirm
-  a security exception.
-_verification:
-  Verify that url is accessible and browser shows a page with title
-  'Access Control', requesting a Snapweb Access Token to continue.
-  Verify that url address is now https://[hostname]:4201/access-control
-
-id: snapweb/setup/ensure-token-access
-category_id: snapweb
-_description: Ensure ui allows access when entered a valid token generated from cli
-plugin: manual
-depends: snapweb/setup/ensure-https-service-is-up
-_steps:
-  1. Reboot the device. This step is only needed to be done just after
-  first installation. If snap was previously installed and this is
-  an update, you can go to step 2.
-  2. Open a terminal in the device and type:
-  .
-    $ sudo snapweb.generate-token
-  .
-  3. Copy result token to clipboard
-  4. Access browser and type:
-  .
-  	https://localhost:4201
-  .
-  5. Paste clipboard token into Snapweb Access Token textbox
-_verification:
-  Verify that access is allowed and installed apps list is shown
-
-id: snapweb/snaps/installed-snaps
-category_id: snapweb
-_description: Verify installed snaps list
-plugin: manual
-depends: snapweb/setup/ensure-token-access
-_steps:
-  1. Access browser and type:
-  .
-  	https://localhost:4201
-  .
-  2. In a device terminal type:
-  .
-    $ snap list
-  .
-_verification:
-  Verify that the list of 'Apps installed' in browser is the same
-  as the list shown in terminal, except snapweb itself that should
-  be only shown in terminal list
-
-id: snapweb/snaps/installable-snaps
-category_id: snapweb
-_description: Verify that snaps can be installed and filtered
-plugin: manual
-depends: snapweb/setup/ensure-token-access
-_steps:
-  1. Access browser and type:
-  .
-  	https://localhost:4201
-  .
-  2. Click on last entry on Apps installed section named 'Get more apps'
-  or click on 'Store' upper tab
-  3. Click on the links over snaps to filter them
-  4. Search for certain snap name in upper search box
-_verification:
-  Verify that at the beginning there is a list of snaps that can be installed,
-  everyone with its icon, version, author and a button with label 'Install'.
-  Verify that the list can be filtered by pressing links over
-  Verify you get results when searching for a snap that it's in the list of
-  installables
-
-id: snapweb/snaps/install-snap
-category_id: snapweb
-_description: Ensure that a snap can be installed using web ui
-plugin: manual
-depends: snapweb/setup/ensure-token-access
-_steps:
-  1. Access browser and type:
-  .
-  	https://localhost:4201
-  .
-  2. Click on 'Install' button of any available snap
-  3. Wait for snap to be installed and open a terminal
-  4. Type in terminal:
-  .
-  	$ snap list
-  .
-_verification:
-  Verify that the snap requested to be installed is there in the terminal resultant list
-  Verify that button in step 2 changes its label to 'Installing' while installing
-  Verify that button of the instaled snap has now 'Remove' in its label
-
-id: snapweb/snaps/remove-snap
-category_id: snapweb
-_description: Ensure that a snap can be removed using web ui
-plugin: manual
-depends: snapweb/snaps/install-snap
-_steps:
-  1. Access browser and type:
-  .
-  	https://localhost:4201
-  .
-  2. Click on 'Remove' button of installed snap
-  3. Wait for snap to be removed and open a terminal
-  4. Type in terminal:
-  .
-  	$ snap list
-  .
-_verification:
-  Verify that the snap requested to be removed is not in the terminal resultant list
-  Verify that button in step 2 changes its label to 'Removing' while installing
-  Verify that button of the removed snap has now 'Install' in its label
-
diff --git a/tpm/manage.py b/tpm/manage.py
deleted file mode 100755
index 7135842..0000000
--- a/tpm/manage.py
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env python3
-from plainbox.provider_manager import setup, N_
-
-setup(
-    name='plainbox-provider-tpm',
-    namespace='2016.com.canonical.tpm',
-    version="1.0",
-    description=N_("Plainbox provider for the TPM snap"),
-    gettext_domain="2016_com_canonical_tpm",
-)
diff --git a/tpm/units/tpm.pxu b/tpm/units/tpm.pxu
deleted file mode 100644
index b00bd89..0000000
--- a/tpm/units/tpm.pxu
+++ /dev/null
@@ -1,135 +0,0 @@
-# Copyright 2016 Canonical Ltd.
-# All rights reserved.
-#
-# Written by:
-#   Scott Sweeny <scott.sweeny@canonical.com>
-
-unit: category
-id: tpm1.2
-_name: TPM 1.2
-
-id: tpm1.2/setup/ensure_interface_connection_setup
-category_id: tpm1.2
-_description: Ensure that the tpm1.2 interfaces are connected
-plugin: manual
-_steps:
-  1. Connect required tpm1.2 slots/plugs
-  .
-     $ sudo snap connect tpm:network :network
-     $ sudo snap connect tpm:network-bind :network-bind
-     $ sudo snap connect tpm:tpm :tpm
-  .
-_verification:
-  Verify that you see the following when running snap interfaces:
-  :network                 tpm
-  :network-bind            tpm
-  :tpm                     tpm
-
-id: tpm1.2/setup/get_version
-category_id: tpm1.2
-plugin: manual
-depends: tpm1.2/setup/ensure_interface_connection_setup
-_summary: Can get version information from the TPM chip
-_purpose:
-  Check that basic communication with the TPM chip is working and that version
-  information can be retrieved with the expected command.
-_steps:
-  1. Execute the following command to show the TPM version:
-  .
-     $ /snap/bin/tpm.version
-_verification:
-  Output is similar to below with all fields showing data:
-  .
-  TPM 1.2 Version Info:
-    Chip Version:        1.2.5.81
-    Spec Level:          2
-    Errata Revision:     3
-    TPM Vendor ID:       WEC
-    Vendor Specific data: 0000
-    TPM Version:         01010000
-    Manufacturer Info:   57454300
-
-id: tpm1.2/setup/self_test
-category_id: tpm1.2
-plugin: manual
-depends: tpm1.2/setup/ensure_interface_connection_setup
-_summary: TPM self test runs successfully
-_purpose:
-  Check that the TPM self test runs successfully and returns no errors.
-_steps:
-  1. Execute the following command to run the TPM self test:
-  .
-    $ /snap/bin/tpm.selftest
-_verification:
-  Output is similar to below (actual values are not important) and no
-  error messages are shown:
-  .
-  TPM Test Results:
-        ff010205 51ffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
-        ffffffff ffffffff ffffffff ffff0000 00000000 00000000 00000000 00000000
-        00000000 00000000 00000000 00000000 00000000 00000000 00000000 0000
-
-
-id: tpm1.2/configuration/take_ownership
-category_id: tpm1.2
-plugin: manual
-depends: tpm1.2/setup/ensure_interface_connection_setup
-_summary: Taking ownership of the device is possible
-_purpose:
-  Check that you are able to take ownership of the device using TPM commands.
-_steps:
-  1.Execute the following command to take ownership of the TPM chip: 
-  .
-     $ /snap/bin/tpm.takeownership
-  .
-_verification:
-  Verify that you are prompted for both the owner key and the SRK (storage
-  root key) and that no errors are returned.
-  . 
-  NOTE: This command will only work if it has not been run before. You can
-  reset the TPM with:
-  .
-    $ /snap/bin/tpm.clear
-  .
-  Which will invalidate all existing keys and passwords and disable the chip.
-  Once this is done you must re-enable the TPM from the device's BIOS before
-  it can be used.
-
-id: tpm1.2/crypto/show_public_key
-category_id: tpm1.2
-plugin: manual
-depends: tpm1.2/setup/ensure_interface_connection_setup
-_summary: Showing the public endorsement key succeeds
-_purpose:
-   Check to make sure that the endorsement key pair exists and the public key
-   can be queried.
-_steps:
-  1. Execute the following command to see the public key:
-  .
-     $ /snap/bin/tpm.getpubek
-  .
-  You may see an error similar to:
-  .
-    Tspi_TPM_GetPubEndorsementKey failed: 0x00000008 - layer=tpm, code=0008 (8), The TPM target command has been disabled
-  .
-  This can be safely ignored as long as the public key data is displayed.
-_verification:
-  Verify that the public key data is shown, for example:
-  .
-  Public Endorsement Key:
-  Version:   01010000
-  Usage:     0x0002 (Unknown)
-  Flags:     0x00000000 (!VOLATILE, !MIGRATABLE, !REDIRECTION)
-  AuthUsage: 0x00 (Never)
-  Algorithm:         0x00000020 (Unknown)
-  Encryption Scheme: 0x00000012 (Unknown)
-  Signature Scheme:  0x00000010 (Unknown)
-  Public Key:
-        8b59fad6 83514128 d56e2aa0 5eef7cff ad23c90d 0dd9b1e2 31ef093d 72d947d8
-        e02fbe3a 3c235ff0 9c487973 40a28c9b 8b83aaaf dc1254ad 31a95410 811742e5
-        92c16823 6f663413 f7067d3a 9af09ccc 12944a13 51d32980 59a98740 4008ab0c
-        07b7d93b 9393691c 8ae7d84c 5fd4fcef 147934f1 09326225 d5d1b652 ab3e12ee
-        fbd1cfba b18abedc de2215cb 97006b92 839fd9a4 3158bc8f 028fe516 550905b3
-        e3eef1e1 9f8dd3ab 331cbe62 d32ce937 0c11ad41 1d2e50f3 c69c7cde cd0bf564
-        4b7b16f8 0885dc66 d4411aba a824c1f1 ea8aa743 5c62fad7 e9540b85 5c0dc7af
-        3c1615ae 56af18e4 770aa107 06ef274b 202e2e3e d4c280d8 5ca9e886 9d889e31
diff --git a/udisks2/manage.py b/udisks2/manage.py
deleted file mode 100755
index ead6da0..0000000
--- a/udisks2/manage.py
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env python3
-from plainbox.provider_manager import setup, N_
-
-setup(
-    name='plainbox-provider-udisks2',
-    namespace='2017.com.canonical.udisks2',
-    version="1.0",
-    description=N_("Plainbox provider for the udisks2 snap"),
-    gettext_domain="2017_com_canonical_udisks2",
-)
diff --git a/udisks2/units/udisks2.pxu b/udisks2/units/udisks2.pxu
deleted file mode 100644
index 7667aa5..0000000
--- a/udisks2/units/udisks2.pxu
+++ /dev/null
@@ -1,319 +0,0 @@
-# Copyright 2017 Canonical Ltd.
-# All rights reserved.
-#
-# Written by:
-# Scott Sweeny <scott.sweeny@canonical.com>
-
-unit: category
-id: udisks2
-_name: UDisks2
-
-id: udisks2/setup/ensure_interface_connection_setup
-category_id: udisks2
-_description: Ensure that the udisks2 interfaces are connected
-plugin: manual
-_steps:
-  1. Run the following:
-     $ sudo snap interfaces udisks2
-     .
-_verification:
-  Verify that you see the following:
-  Slot             Plug
-  :mount-observe   udisks2
-  :network-bind    udisks2
-  udisks2:service  udisks2:client
-  -                udisks2:hardware-observe
-
-id: udisks2/client/can_communicate_with_udisksd
-category_id: udisks2
-plugin: manual
-depends: udisks2/setup/ensure_interface_connection_setup
-_summary: udisksctl can communicate with udisksd
-_purpose:
-   Makes sure udisksctl can communicate with udisksd
-_steps:
-  1. Run a simple udisksctl command
-     .
-     $ sudo udisks2.udisksctl status
-     .
-_verification:
-  Verify that the command returns a list of connected storage devices and no
-  errors.
-
-id: udisks2/service/can_receive_hotplug_events
-category_id: udisks2
-plugin:manual
-depends: udisks2/client/can_communicate_with_udisksd
-_summary: udisks can see when a drive is plugged in
-_purpose:
-  Makes sure that udisks gets the hotplug event when a USB drive is
-  plugged in
-_steps:
-  1. Start the udisks client and have it watch for new events
-     .
-     $ sudo udisks2.udisksctl monitor
-     .
-  2. Plug in a USB storage device and wait for activity from the client
-     .
-  3. Unplug the USB storage device and wait for activity from the client
-     .
-_verification:
-  Verify that udisks shows information about the USB device when it's plugged
-  in, and that it recognizes when the device is removed.
-  .
-  The information shown when the device is plugged in will be everything
-  udisks knows about the device and its partitions, expressed as DBus objects.
-  You will likely see something like:
-  .
-  21:37:20.621: Added /org/freedesktop/UDisks2/drives/Kingston_DataTraveler_2_2e0_0607151625382
-  org.freedesktop.UDisks2.Drive:
-    CanPowerOff:                true
-    Configuration:              {}
-    ConnectionBus:              usb
-    Ejectable:                  true
-    Id:                         Kingston-DataTraveler-2.0-0607151625382
-    Media:                      thumb
-    MediaAvailable:             true
-    MediaChangeDetected:        true
-  .
-  and so on for the drive itself, each block device, and each filesystem
-
-id: udisks2/service/can_mount_unmount
-category_id: udisks2
-plugin: manual
-depends: udisks2/client/can_communicate_with_udisksd
-_summary: udisks can mount and unmount a storage device
-_purpose:
-  Makes sure that udisks can mount and unmount a storage device, and that
-  the mount points are visible outside of the snap
-_steps:
-  1. Plug in a USB storage device
-  2. Run the following:
-     .
-     $ sudo udisks2.udisksctl status
-     .
-     and note the name under the "DEVICE" column for the drive you just
-     plugged in. It should be "sdb" or similar
-  3. Mount the filesystem on the device:
-     .
-     $ sudo udisks2.udisksctl mount -b /dev/<device>1
-     .
-     Where <device> is the value from the status call above. This should mount
-     the first filesystem on the device and return the path
-  4. Examine the mount point:
-     .
-     $ sudo -s # You must be root to see the mount point
-     $ ls /mountpoint/path/returned/above
-     .
-     Make sure the contents of that directory match what you expect to see on
-     the drive.
-     .
-     Leave the root shell
-     $ exit
-  5. Unmount the filesystem:
-     .
-     $ sudo udisks2.udisksctl unmount -b /dev/<device>1
-_verification:
-  Verify that mounts and unmounts are performed successfully, and that the
-  contents of the drive can be seen from your shell (i.e. outside of the snap's
-  own namespace)
-
-id: udisks2/automount/default_off
-category_id: udisks2
-plugin: manual
-depends: udisks2/setup/ensure_interface_connection_setup
-_summary: The automount option defaults to off
-_purpose:
-  Makes sure that the automount option defaults to disabled
-_steps:
-  1. Install the udisks2 snap fresh (i.e. not an upgrade)
-  2. Run the following:
-     .
-     $ sudo snap get udisks2 automount.enable
-_verification:
-  Verify that the returned value is "false"
-
-id: udisks2/automount/disabling_works
-category_id: udisks2
-plugin: manual
-depends: udisks2/automount/default_off
-_summary: Disabling automount actually disables automount
-_purpose:
-  Makes sure that when automount.enabled is set to "false" automounts are
-  prevented
-_steps:
-  1. Make sure that automount is disabled. Run:
-     .
-     $ sudo snap set udisks2 automount.enable=false
-  2. Plug in a USB storage device
-_verification:
-  Verify that no filesystem on the USB device was mounted. /media/root/ should
-  be empty
-
-id: udisks2/automount/automount_works
-category_id: udisks2
-plugin: manual
-depends: udisks2/automount/default_off
-_summary: When enabled, automounting works
-_purpose:
-  Makes sure that automounting a USB drive works when the option is enabled
-_steps:
-  1. Make sure that automount is enabled. Run:
-     .
-     $ sudo snap set udisks2 automount.enable=true
-  2. Plug in a USB storage drive
-_verification:
-  Verify that the filesystem on the USB device was mounted to
-  /media/root/<filesystem label>, for example /media/root/7C69-3855
-
-id: udisks2/automount/automount_does_not_mount_system_devices
-category_id: udisks2
-plugin: manual
-depends: udisks2/automount/automount_works
-_summary: When enabled, automount does not mount system devices
-_purpose:
-  Makes sure that automount is only restricted to pluggable devices, not system
-_steps:
-  1. Make sure that automount is enabled. Run:
-     .
-     $ sudo snap set udisks2 automount.enable=true
-  3. Reboot the device and wait for it to power on again
-  4. Run the following:
-     .
-     $ sudo udisks2.udisksctl status
-     .
-     and check the names under the "DEVICE" column. It should just contain
-     thumb drives [if any is plugged-in] and the filesystem. For example,
-     in case of RaspberryPi it would contain just: mmcblk0.
-     Make sure that system devices, such as an ESP partition, are
-     not displayed here.
-  5. Examine the mount point:
-     .
-     $ sudo -s # You must be root to see the mount point
-     $ ls /media/root
-     .
-     Make sure the contents of that directory match what you expect to see on
-     the drive.
-     .
-     Leave the root shell
-     $ exit
-_verification:
-  Verify that none of the system devices were mounted and their filesystems
-  are not available /media/root/<filesystem label>
-
-id: udisks2/automount/automount_does_mount_usb_devices_plugged_before_boot
-category_id: udisks2
-plugin: manual
-depends: udisks2/automount/automount_works
-_summary: When enabled, automount mount USB devices plugged before boot
-_purpose:
-  Makes sure that system can mount devices plugged in before boot
-_steps:
-  1. Make sure that automount is enabled. Run:
-     .
-     $ sudo snap set udisks2 automount.enable=true
-  2. Switch the device off, insert USB flash drive and boot the device again
-  3. Run the following:
-     .
-     $ sudo udisks2.udisksctl status
-     .
-     and check the names under the "DEVICE" column. It should contain the device
-     that has been plugged before booting.
-  4. Examine the mount point:
-     .
-     $ sudo -s # You must be root to see the mount point
-     $ ls /media/root
-     .
-     Make sure the contents of that directory match what you expect to see on
-     the drive.
-     .
-     Leave the root shell
-     $ exit
-_verification:
-  Verify that the cold-plugged device is mounted on boot
-
-id: udisks2/automount/automount_works_after_manual_unmount
-category_id: udisks2
-plugin: manual
-depends: udisks2/automount/automount_works
-_summary: When enabled, automount still works after unmount has been called manually
-_purpose:
-  Make sure that the system can auto mount devices after the unmount has been called
-_steps:
-  1. Make sure that automount is enabled. Run:
-     .
-     $ sudo snap set udisks2 automount.enable=true
-  2. Insert USB flash drive
-  3. Examine the mount point:
-     .
-     $ sudo ls /media/root
-     .
-     Make sure the USB drive that just have been plugged in is listed there.
-  4. Run the following:
-     .
-     $ sudo udisks2.udisksctl status
-     .
-     and check the names under the "DEVICE" column. It should contain the device
-     that has been plugged before booting.
-  5. Unmount manually:
-     .
-     $ sudo udisks2.udisksctl unmount -b /dev/<device>1
-  6. Insert another USB flash drive
-  7. Examine the mount point:
-     .
-     $ sudo ls /media/root
-     .
-     Make sure the USB drive that just have been plugged in is listed there.
-_verification:
-  Verify that the USB drive that has been plugged in after the first one has
-  been unmounted manually is mounted.
-
-id: udisks2/debug/default_off
-category_id: udisks2
-plugin: manual
-depends: udisks2/setup/ensure_interface_connection_setup
-_summary: The debug option defaults to off
-_purpose:
-  Makes sure that the debug option defaults to disabled
-_steps:
-  1. Install the udisks2 snap fresh (i.e. not an upgrade)
-  2. Run the following:
-     .
-     $ sudo snap get udisks2 debug.enable
-_verification:
-  Verify that the returned value is "false"
-
-id: udisks2/debug/disabling_works
-category_id: udisks2
-plugin: manual
-depends: udisks2/debug/default_off
-_summary: Disabling debug actually disables debug logging
-_purpose:
-  Makes sure that when debug.enabled is set to "false" no loggs are written
-_steps:
-  1. Make sure that debug is disabled. Run:
-     .
-     $ sudo snap set udisks2 debug.enable=false
-  2. Plug in a USB storage device
-_verification:
-  Verify that no debug information coming from files such as jobs.go,
-  dispatcher.go, udisks2.go is written to the journal.
-
-id: udisks2/automount/debug_works
-category_id: udisks2
-plugin: manual
-depends: udisks2/debug/default_off
-_summary: When debug is enabled logs are available
-_purpose:
-  Makes sure that when debug option is enabled the logs are available
-_steps:
-  1. Make sure that debug is enabled. Run:
-     .
-     $ sudo snap set udisks2 debug.enable=true
-  2. Restart ciborium service for the above change to take effect
-     .
-     $ sudo systemctl restart snap.udisks2.ciborium.service
-  3. Plug in a USB storage drive
-_verification:
-  Verify that debug information coming from udisks2 snap (files such as
-  jobs.go, dispatcher.go, udisks2.go) is written to the journal.
diff --git a/upower/manage.py b/upower/manage.py
deleted file mode 100755
index a30933e..0000000
--- a/upower/manage.py
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env python3
-from plainbox.provider_manager import setup, N_
-
-setup(
-    name='plainbox-provider-upower',
-    namespace='2016.com.canonical.upower',
-    version="1.0",
-    description=N_("Plainbox provider for the upower snap"),
-    gettext_domain="2016_com_canonical_upower",
-)
diff --git a/upower/units/00_general.pxu b/upower/units/00_general.pxu
deleted file mode 100644
index 3ab4d2d..0000000
--- a/upower/units/00_general.pxu
+++ /dev/null
@@ -1,52 +0,0 @@
-# Copyright 2016 Canonical Ltd.
-# All rights reserved.
-#
-# Written by:
-#   Simon Fels <simon.fels@canonical.com>
-
-unit: category
-id: upower
-_name: UPower
-
-id: upower/general/can_be_installed
-category_id: upower
-_description: Ensure that the upower snap can be installed
-plugin: manual
-_steps:
-  Install upower snap from the appropiate channel via the following command
-  .
-   $ snap install --candidate upower
-  .
-  NOTE: Depending on which channel you want to test you need to select the
-  right one. The command above uses the candidate channel as that is the
-  most used one.
-_verification:
-  The installation of the snap should finish with no errors.
-
-id: upower/general/service_started
-category_id: upower
-_description: Ensure that the upowerd service is up and running
-plugin: manual
-_steps:
-  Check service status with the following command
-   $ systemctl status snap.upower.service.service
-_verification:
-  Output should look like this:
-  snap.upower.upowerd.service - Service for snap application upower.upowerd
-     Loaded: loaded (/etc/systemd/system/snap.upower.upowerd.service; enabled; vendor preset: enabled)
-     Active: active (running) since Thu 2016-12-15 16:13:37 UTC; 54ms ago
-  Main PID: 4265 (upowerd)
-    CGroup: /system.slice/snap.upower.upowerd.service
-             4265 /snap/upower/x1/usr/libexec/upowerd
-
-id: upower/general/client_can_talk_to_service
-category_id: upower
-_description: Verify that the upower client can talk to the service
-plugin: manual
-_steps:
-  Enumerate available devices available on the system:
-   $ upower -e
-_verification:
-  Output should look like this and at least one device should be present:
-  /org/freedesktop/UPower/devices/battery_BAT0
-  /org/freedesktop/UPower/devices/DisplayDevice
diff --git a/upower/units/10_battery_powered.pxu b/upower/units/10_battery_powered.pxu
deleted file mode 100644
index d5fe6b1..0000000
--- a/upower/units/10_battery_powered.pxu
+++ /dev/null
@@ -1,129 +0,0 @@
-# Copyright 2016 Canonical Ltd.
-# All rights reserved.
-#
-# Written by:
-#   Simon Fels <simon.fels@canonical.com>
-
-id: upower/battery_powered/battery_detected
-category_id: upower
-_description: Verify upower is able to detect the battery of the system
-plugin: manual
-_steps:
-  Query upowerd for available power devices on the system
-   $ upower -d
-_verification:
-  The output should be similar to the following and should list the
-  battery of your system:
-  .
-  Device: /org/freedesktop/UPower/devices/line_power_AC
-    native-path:          AC
-    power supply:         yes
-    updated:              Do 15 Dez 2016 15:06:55 CET (7163 seconds ago)
-    has history:          no
-    has statistics:       no
-    line-power
-      warning-level:       none
-      online:              yes
-      icon-name:          'ac-adapter-symbolic'
-  .
-  Device: /org/freedesktop/UPower/devices/battery_BAT0
-    native-path:          BAT0
-    vendor:               SANYO
-    model:                45N1779
-    serial:               115
-    power supply:         yes
-    updated:              Do 15 Dez 2016 17:05:18 CET (60 seconds ago)
-    has history:          yes
-    has statistics:       yes
-    battery
-      present:             yes
-      rechargeable:        yes
-      state:               fully-charged
-      warning-level:       none
-      energy:              97,05 Wh
-      energy-empty:        0 Wh
-      energy-full:         97,13 Wh
-      energy-full-design:  99,47 Wh
-      energy-rate:         7,983 W
-      voltage:             12,374 V
-      percentage:          99%
-      capacity:            97,6475%
-      technology:          lithium-ion
-      icon-name:          'battery-full-charged-symbolic'
-  .
-  Device: /org/freedesktop/UPower/devices/DisplayDevice
-    power supply:         yes
-    updated:              Do 15 Dez 2016 16:41:14 CET (1504 seconds ago)
-    has history:          no
-    has statistics:       no
-    battery
-      present:             yes
-      state:               fully-charged
-      warning-level:       none
-      energy:              97,05 Wh
-      energy-full:         97,13 Wh
-      energy-rate:         7,983 W
-      percentage:          99%
-      icon-name:          'battery-full-charged-symbolic'
-  .
-  Daemon:
-    daemon-version:  0.99.4
-    on-battery:      no
-    lid-is-closed:   no
-    lid-is-present:  yes
-    critical-action: PowerOff
-
-id: upower/battery_powered/battery_discharging
-category_id: upower
-_description: Verify upower reports discharging battery
-plugin: manual
-_steps:
-  1. Unplug the power cable from your battery powered device
-  2. Listen to reported changes from upower
-   $ upower -m
-_verification:
-  Leave the monitor running for some time. It should report the device changes
-  for the battery device:
-  .
-  [17:22:55.277]device changed:     /org/freedesktop/UPowerr/devices/battery_BAT0
-  [17:22:55.277]device changed:     /org/freedesktop/UPower/devices/battery_BAT0
-  .
-  Verify with the following command that the actual battery capacity is changing
-  .
-  $ upower -i /org/freedesktop/UPower/devices/battery_BAT0 | capacity
-      capacity:            97,6475%
-  .
-  and that the state of the battery device is changed to 'discharging'
-  .
-  $ upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep state
-      state:               discharging
-
-id: upower/battery_powered/low_battery_causes_poweroff
-category_id: upower
-_description: Verify upower reports discharging battery
-plugin: manual
-_steps:
-  A battery with a low capacity should cause the device to power off. This
-  involves as a first step to wait until the battery of the device under test
-  is close to being empty. The default trigger of the poweroff action is by
-  default at <= 2%
-  .
-  Depending on how full your device battery is you have to wait some time
-  until it is discharged enough.
-  .
-  Watch the system via
-  .
-  $ sudo journalctl --no-pager -f
-_verification:
-  Once the defined threshold of the battery capacity is reached the system
-  should power off itself. You can spot this by looking at the output
-  of the journalctl command which should print something like:
-  .
-  Dec 15 16:37:02 localhost.localdomain systemd-logind[1022]: System is powering down
-  [...]
-  Dec 15 16:37:02 localhost.localdomain systemd[1]: Starting Power-Off...
-  Dec 15 16:37:02 localhost.localdomain systemd[1]: Starting Update UTMP about System Runlevel Changes...
-  Dec 15 16:37:02 localhost.localdomain systemd[1]: Started Power-Off.
-  Dec 15 16:37:02 localhost.localdomain systemd[1]: Started Update UTMP about System Runlevel Changes.
-  Dec 15 16:37:02 localhost.localdomain systemd[1]: Reached target Power-Off.
-  Dec 15 16:37:02 localhost.localdomain systemd-logind[1022]: Operation 'shutdown' finished.
diff --git a/upower/units/20_ac_powered.pxu b/upower/units/20_ac_powered.pxu
deleted file mode 100644
index 169f0e3..0000000
--- a/upower/units/20_ac_powered.pxu
+++ /dev/null
@@ -1,49 +0,0 @@
-# Copyright 2016 Canonical Ltd.
-# All rights reserved.
-#
-# Written by:
-#   Simon Fels <simon.fels@canonical.com>
-
-id: upower/ac_powered/source_detected
-category_id: upower
-_description: Verify upower is able to detect the AC power source
-plugin: manual
-_steps:
- Query upowerd for available power devices on the system
- .
-  $ upower -e
-_verification:
- The AC power source should be listed in the result, e.g.:
- .
-  /org/freedesktop/UPower/devices/line_power_AC
-
-id: upower/ac_powered/status_plugged
-category_id: upower
-_description: Verify upower report AC source as plugged
-plugin: manual
-_steps:
- Plug in the AC adapter to your device and query upower with
- .
-  $ upower -i /org/freedesktop/UPower/devices/line_power_AC | grep online
- for the online status of the source.
-_verification:
- The output should be
- .
-     online:              yes
- .
- If the source is not plugged upower will report a "no" instead of "yes".
-
-id: upower/ac_powered/status_unplugged
-category_id: upower
-_description: Verify upower report AC source as unplugged
-plugin: manual
-_steps:
- Unplug the AC adapter from your device and query upower with
-  $ upower -i /org/freedesktop/UPower/devices/line_power_AC | grep online
- for the online status of the source.
-_verification:
- The output should be
- .
-     online:              no
- .
- If the source is plugged upower will report a "yes" instead of "no".
diff --git a/wifi-ap/manage.py b/wifi-ap/manage.py
deleted file mode 100755
index 824585c..0000000
--- a/wifi-ap/manage.py
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env python3
-from plainbox.provider_manager import setup, N_
-
-setup(
-    name='plainbox-provider-wifi-ap',
-    namespace='2016.com.canonical.wifi-ap',
-    version="1.0",
-    description=N_("Plainbox provider for the WiFi AP snap"),
-    gettext_domain="2016_com_canonical_wifi_ap",
-)
diff --git a/wifi-ap/units/wifi-ap.pxu b/wifi-ap/units/wifi-ap.pxu
deleted file mode 100644
index 2f61369..0000000
--- a/wifi-ap/units/wifi-ap.pxu
+++ /dev/null
@@ -1,213 +0,0 @@
-# Copyright 2016 Canonical Ltd.
-# All rights reserved.
-#
-# Written by:
-#   Jim Hodapp <jim.hodapp@canonical.com>
-#   Simon Fels <simon.fels@canonical.com>
-#   Alfonso Sanchez-Beato <alfonso.sanchez-beato@canonical.com>
-
-unit: category
-id: wifi_ap
-_name: WiFi Access Point
-
-id: wifi_ap/setup/ensure_interface_connection_setup
-category_id: wifi_ap
-_description: Ensure that the wifi_ap interfaces are connected
-plugin: manual
-_steps:
-  0. If the wifi-ap snap is already installed remove it via
-     .
-     $ snap remove wifi-ap
-     .
-  1. Network Manager setup
-     .
-     For snaps on Classic:
-     NetworkManager is part of the base Ubuntu Desktop system
-     and does not need to be installed again.
-     .
-     For an Ubuntu Core system you have to install
-     the NetworkManager snap from the Ubuntu store.
-     $ snap install network-manager
-     .
-  2. Install now the wifi-ap snap via
-     .
-     $ snap install wifi-ap
-     .
-_verification:
-  Verify that you see the following when running snap interfaces:
-  :firewall-control        wifi-ap
-  :network-control         wifi-ap
-  :network                 wifi-ap
-  :network-bind            wifi-ap
-  .
-  For snaps on Classic:
-  :network-manager         wifi-ap
-  .
-  For full-snap based system:
-  network-manager:service  wifi-ap:network-manager
-
-id: wifi_ap/configuration/get_all
-category_id: wifi_ap
-plugin: manual
-depends: wifi_ap/setup/ensure_interface_connection_setup
-_summary: All WiFi AP configuration items are listed
-_purpose:
-  Check if the configuration of the WiFi AP can be listed
-  with the expected command.
-_steps:
-  1. Execute the following command to retrieve all configuration items:
-  .
-     $ /snap/bin/wifi-ap.config get
-_verification:
-  All available configuration items are listed as output.
-
-id: wifi_ap/configuration/set_any
-category_id: wifi_ap
-plugin: manual
-depends: wifi_ap/setup/ensure_interface_connection_setup
-_summary: Setting any configuration key is possible
-_purpose:
-  Check if any configuration key can be set via the
-  configuration system of the snap.
-_steps:
-  1. Retrieve the current value of a specific configuration item
-     e.g. 'wifi.interface'.
-  .
-     $ /snap/bin/wifi-ap.config get wifi.interface
-  .
-  2. Set a new value for the same configuration item
-  .
-     $ sudo /snap/bin/wifi-ap.config set wifi.interface=wlan1
-  .
-  3. Retrieve the current value of the same configuration item
-     for comparison.
-  .
-     $ /snap/bin/wifi-ap.config get wifi.interface
-_verification:
-  Verify that the new value for the configuration is not the same
-  as before the 'set' operation and is now the the value specified
-  in step 2.
-
-id: wifi_ap/connect/enable_ap
-category_id: wifi_ap
-plugin: manual
-depends: wifi_ap/setup/ensure_interface_connection_setup
-_summary: Enabling the AP succeeds
-_purpose:
-   Check to make sure the AP can be enabled. 
-_steps:
-  0. If the AP is already enabled as on some devices where the
-     automated wizard was able to find a good configuration
-     automatically you can skip the following steps. You can
-     verify if the AP is active by calling
-  .
-     $ /snap/bin/wifi-ap.status
-     ap.active: true
-  .
-  1. Look up and set the wifi interface to the proper name
-     e.g. from default wlan0 to enp0s3
-  .
-     $ ifconfig
-     $ /snap/bin/wifi-ap.config set wifi.interface=<interface_name>
-  .
-  2. Enable the AP with the default configuration for other key values
-  .
-     $ sudo /snap/bin/wifi-ap.config set disabled=false
-  .
-  3. Verify that the AP is enabled by looking at the key/value pair
-  .
-     $ /snap/bin/wifi-ap.config get disabled
-_verification:
-  Verify that the new value for the disabled is set to false. Also verify that a
-  different machine such as a phone or a laptop can connect to the AP using
-  SSID of "Ubuntu" and no security type.
-
-id: wifi_ap/configuration/control_socket
-category_id: wifi_ap
-plugin: manual
-depends: wifi_ap/setup/ensure_interface_connection_setup
-_summary: Check content interface
-_purpose:
-   Check if the content interface is accessible and
-   it exports a socket for a consumer snap.
-_steps:
-  1. Install the wifiap-consumer snap
-  .
-     $ sudo snap install wifiap-consumer
-  .
-  2. Connect the wifi-ap and wifiap-consumer content interface
-  .
-     $ sudo snap connect wifiap-consumer:control wifi-ap:control
-  .
-  3. Get the configuration with the unix HTTP client
-  .
-     $ sudo wifiap-consumer.unixhttpc /v1/configuration
-  .
-_verification:
-  Verify that the configuration is a valid JSON with reasonable data, like:
-  {
-    "result": {
-      "debug": false,
-      "disabled": false,
-      "wifi.interface": "wlan0",
-      "wifi.security": "open",
-      "wifi.ssid": "Ubuntu"
-    },
-    "status": "OK",
-    "status-code": 200,
-    "type": "sync"
-  }
-
-id: wifi_ap/configuration/default_ssid
-category_id: wifi_ap
-plugin: manual
-_summary: WiFi AP default SSID is set from gadget snap
-_purpose:
-  Check if the configuration of the WiFi AP SSID is set to the value
-  coming from the gadget snap, when present.
-_steps:
-  1. Install a gadget snap which contains in gadget.yaml:
-  .
-     defaults:
-       # Below snap ID matches the one assigned for wifi-ap in the Ubuntu Store
-       2rGgvyaY0CCzlWuKAPwFtCWrgwkM8lqS:
-         default.wifi.ssid: GadgetSnap
-  .
-  2. Reboot
-  3. Remove wifi-ap if present:
-  .
-     $ snap remove wifi-ap
-  .
-  4. Install wifi-ap (this must be done from the store, otherwise the gadget
-     will not set the defaults for the snap). Assuming we are testing candidate:
-  .
-     $ snap install --candidate wifi-ap
-  .
-  5. Get the SSID value:
-  .
-      $ /snap/bin/wifi-ap.config get wifi.ssid
-  .
-_verification:
-  Check that wifi.ssid=GadgetSnap
-
-id: wifi_ap/configuration/country_code
-category_id: wifi_ap
-plugin: manual
-depends: wifi_ap/connect/enable_ap
-_summary: WiFi AP sends the country code IE in beacon frames
-_purpose:
-  Check if the WiFi AP sends the configured country code in beacon frames
-_steps:
-  1. Set the ISO/IEC 3166-1 code of the country you are in at the moment,
-     for instance
-  .
-     $ sudo wifi-ap.config set wifi.country-code=ES
-  .
-  2. Use a device with wifi to capture the beacon frames. You have to
-     turn on monitor mode for the wifi card to achieve this. See, for
-     instance https://sandilands.info/sgordon/capturing-wifi-in-monitor-mode-with-iw.
-  3. Capture the packets with tcpdump or wireshark
-  4. Check that the beacon frames from the SSID from the device where
-     you are testing wifi-ap contain the country code information element.
-_verification:
-  Check that IE contains the configure country code.
diff --git a/wifi-connect/manage.py b/wifi-connect/manage.py
deleted file mode 100755
index f0884de..0000000
--- a/wifi-connect/manage.py
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env python3
-from plainbox.provider_manager import setup, N_
-
-setup(
-    name='plainbox-provider-wifi-connect',
-    namespace='2017.com.canonical.wifi-connect',
-    version="1.0",
-    description=N_("Plainbox provider for the WiFi connect snap"),
-    gettext_domain="2017_com_canonical_wifi_connect",
-)
diff --git a/wifi-connect/units/wifi.connect.pxu b/wifi-connect/units/wifi.connect.pxu
deleted file mode 100644
index 78fce85..0000000
--- a/wifi-connect/units/wifi.connect.pxu
+++ /dev/null
@@ -1,202 +0,0 @@
-# Copyright 2017 Canonical Ltd.
-# All rights reserved.
-#
-# Written by:
-#   Roberto Mier Escandon <roberto.escandon@canonical.com>
-
-unit: category
-id: wifi-connect
-_name: WiFi Connect
-
-id: wifi-connect/setup/ensure_interface_connection_setup
-category_id: wifi-connect
-_description: Ensure that the wifi-connect interfaces are connected
-plugin: manual
-_steps:
-  0. If the wifi-connect snap is already installed remove it via
-     .
-     $ snap remove wifi-connect
-     .
-  1. Network Manager setup
-     .
-     For snaps on Classic:
-     NetworkManager is part of the base Ubuntu Desktop system
-     and does not need to be installed again.
-     .
-     For an Ubuntu Core system you have to install
-     the NetworkManager snap from the Ubuntu store.
-     $ snap install network-manager
-     .
-  2. Wifi AP setup
-     .
-     You have to install Wifi AP snap.
-     $ snap install wifi-ap
-     .
-  3. Install now the wifi-connect snap via
-     .
-     $ snap install wifi-connect
-     .
-  4. Connect wifi-connect interfaces
-     .
-     $ snap connect wifi-connect:control wifi-ap:control
-     $ snap connect wifi-connect:network core:network
-     $ snap connect wifi-connect:network-bind core:network-bind
-     .
-     For snaps on Classic you have to connect:
-     $ snap connect wifi-connect:network-manager core:network-manager
-     .
-     For an Ubuntu Core system you have to connect:
-     $ snap connect wifi-connect:network-manager network-manager:service 
-     .
-_verification:
-  Verify that you see the following when running snap interfaces:
-  :firewall-control        wifi-ap
-  :network-control         wifi-ap
-  :network                 wifi-ap,wifi-connect
-  :network-bind            wifi-ap,wifi-connect
-  wifi-ap:control          wifi-connect
-  .
-  For snaps on Classic:
-  :network-manager         wifi-ap,wifi-connect
-  .
-  For full-snap based system:
-  network-manager:service  wifi-ap:network-manager,wifi-connect:network-manager
-
-id: wifi-connect/configuration/network_manager_does_not_control_network_before_reboot
-category_id: wifi-connect
-plugin: manual
-depends: wifi-connect/setup/ensure_interface_connection_setup
-_summary: NetworkManager does not control all networking before rebooting
-_purpose:
-  Check if netplan is configured for NetworkManager to control networking
-_steps:
-  0. Backup existing /etc/netplan/00-snapd-config.yaml file
-     .
-     $ mv /etc/netplan/00-snapd-config.yaml ~/
-     .
-  1. Create a new netplan config file named /etc/netplan/00-default-nm-renderer.yaml
-     .
-     $ echo -e "network:\n    renderer: NetworkManager" > /etc/netplan/00-default-nm-renderer.yaml
-     .
-  2. See current managed devices by NetworkManager:
-     .
-     $ nmcli d
-     .
-_verification:
-  Verify that wireless device (wlan0 by default) STATE column value does not equals to 'connected' or 'disconnected' 
-
-id: wifi-connect/configuration/network_manager_controls_network_after_reboot
-category_id: wifi-connect
-plugin: manual
-depends: wifi-connect/configuration/network_manager_does_not_control_network_before_reboot
-_summary: NetworkManager controls network after configure netplan file and reboot
-_steps:
-  0. Reboot the device
-     .
-     $ sudo reboot
-     .
-  1. When the device finished booting, check nm status with the following command:
-     .
-     $ nmcli d
-     .
-_verification:
-  Verify that wireless device (wlan0 by default) STATE column value does NOT equals to 'unmanaged'.
-  If it is connected to external Wi-Fi, it should be displayed in green with 'connected' state, and 
-  if it is not connected to external Wi-Fi, it should be shown in red iwth 'disconnected' state
-
-id: wifi-connect/configuration/content_interface_is_plugged_after_reboot
-category_id: wifi-connect
-plugin: manual
-depends: wifi-connect/configuration/network_manager_controls_network_after_reboot
-_summary: Check that wifi-ap control interface is connected and working
-_steps:
-  0. Enter in snap runtime environment
-     .
-     $ snap run --shell wifi-connect.wifi-connect
-     .
-  1. List $SNAP_COMMON content
-     .
-     $ ls /var/snap/wifi-connect/common
-     .
-_verification:
-  Check that exists /var/snap/wifi-connect/common/control
-
-id: wifi-connect/configuration/set_AP_ssid_and_passphrase
-category_id: wifi-connect
-plugin: manual
-depends: wifi-connect/configuration/content_interface_is_plugged_after_reboot
-_summary: Verify it is possible changing wifi-ap access point ssid and passphrase params
-_steps:
-  0. Set wifi-ap AP ssid
-     .
-     $ wifi-connect ssid MYSSID
-     .
-  1. Set wifi-ap AP passphrase
-     .
-     $ wifi-connect passphrase MYPASSPHRASE
-     .
-  2. Display config
-     .
-     $ wifi-connect show-ap
-     .
-_verification:
-  Verify into returning values exist:
-    wifi.ssid: MYSSID
-    wifi.security-passphrase: MYPASSPHRASE
-
-id: wifi-connect/configuration/set_portal_password
-category_id: wifi-connect
-plugin: manual
-depends: wifi-connect/configuration/content_interface_is_plugged_after_reboot
-_summary: Verify portal password change
-_steps:
-  0. Set portal password
-     .
-     $ wifi-connect set-portal-password WHATEVER
-     .
-_verification:
-  Verify result of set-portal-password operation is a hash of 60 chars starting with '$2a$08$' string
-
-id: wifi-connect/connect/local_AP_is_up
-category_id: wifi-connect
-plugin: manual
-depends: wifi-connect/configuration/network_manager_controls_network_after_reboot
-_summary: Verify management portal is up, running and has got some ssids
-_steps:
-  0. From another device different from the one where wifi-connect is deployed:
-     .
-     Search available Wi-Fi access points
-     .
-_verification:
-  Check that an SSID is available named MYSSID (or the one set when configured). Verify you can
-  connect to that access point by introducing MYPASSPHRASE password
-
-id: wifi-connect/connect/can_connect_to_external_wifi
-category_id: wifi-connect
-plugin: manual
-depends: wifi-connect/connect/local_AP_is_up
-_summary: Management portal shows available access points and can connect to them
-_steps:
-  0. From another device different from the one where wifi-connect is deployed, once connected to local AP
-     .
-     Open browser and access http://10.0.60.1:8080
-     .
-_verification:
-  Verify a list of available external networks are shown. Verify you can access any of them by setting
-  the related passphrase and clicking connect button.
-  You should ssh device where wifi-connect is and see if 'nmcli d' command shows device is connected to 
-  selected external Wi-Fi
-
-id: wifi-connect/connect/can_get_back_to_management_mode
-category_id: wifi-connect
-plugin: manual
-depends: wifi-connect/connect/can_connect_to_external_wifi
-_summary: It is possible to bring back local AP and management portal
-_steps:
-  0. From another device different from the one where wifi-connect is deployed, once connected to external Wi-Fi
-     .
-     Open browser and access http://<device_ip>:8080 (or http://<device_hostname>.local:8080 in case browser device supports avahi)
-     .
-_verification:
-  Check that a web is shown with a button to return back to management mode. Press button and after passed around a minute
-  verify same steps as the ones in id=wifi-connect/connect/can_connect_to_external_wifi
diff --git a/wireless-tools/manage.py b/wireless-tools/manage.py
deleted file mode 100755
index 93a5a14..0000000
--- a/wireless-tools/manage.py
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env python3
-from plainbox.provider_manager import setup, N_
-
-setup(
-    name='plainbox-provider-wireless-tools',
-    namespace='2016.com.canonical.wireless-tools',
-    version="1.0",
-    description=N_("Plainbox provider for the Wireless tools snap"),
-    gettext_domain="2016_com_canonical_wireless_tools",
-)
diff --git a/wireless-tools/units/wireless-tools.pxu b/wireless-tools/units/wireless-tools.pxu
deleted file mode 100644
index 39c070e..0000000
--- a/wireless-tools/units/wireless-tools.pxu
+++ /dev/null
@@ -1,100 +0,0 @@
-# Copyright 2016 Canonical Ltd.
-# All rights reserved.
-#
-# Written by:
-#   Konrad Zapalowicz <konrad.zapalowicz@canonical.com>
-
-unit: category
-id:wireless-tools
-_name: Wireless Tools
-
-id: wireless-tools/setup/ensure_interface_connection_setup
-category_id: wireless-tools
-_description: Ensure that wireless_tools interfaces are connected
-plugin: manual
-_steps:
-  1. Connect required wireless-tools slots/plugs 
-  .
-    $ sudo snap connect wireless-tools:network-control :network-control
-  .
-_verification:
-  Verify that you see the following when running snap interfaces:
-    :network                wireless-tools
-    :network-bind           wireless-tools
-    :network-control        wireless-tools
-
-id: wireless-tools/rfkill/list
-category_id:wireless-tools
-plugin: manual
-depends: wireless-tools/setup/ensure_interface_connection_setup
-_summary: The RF kill switches are listed
-_purpose: Check if all RF kill switches that are available on the HW are listed.
-_steps:
-  1. Execute the following command to retrieve the list of all RF kill switches:
-  .
-    $ /snap/bin/wireless-tools.rfkill list
-  .
-_verification:
-  Your expected RF kill switche(s) is/are shown in the output such as:
-    <id>: <name>: <description>
-        Soft blocked: <yes|no>
-        Hard blocked: <yes|no>
-  .
-  For example:
-    1: phy0: Wireless LAN
-        Soft blocked: no
-        Hard blocked: no
-    2: hci0: Bluetooth
-        Soft blocked: yes
-        Hard blocked: no
-
-id: wireless-tools/rfkill/change_state
-category_id:wireless-tools
-plugin: manual
-depends: wireless-tools/rfkill/list
-_summary: It is possible to change the state of RF kill
-_purpose: Check if it is possible to change a state of the RF kill switch
-_steps:
-  1. Execute the following commands first to list the available RF kill switches
-  .
-    $ /snap/bin/wireles-tools.rfkill list
-  .
-  2. Change the state of the selected RF kill switch using the id obtained in
-     the previous step. Note that the action: block or unblock shall be selected
-     based on the initial state of the RF kill switch: blocked yes or no.
-  .
-    $ /snap/bin/wireless-tools.rfkill [un]block <id>
-  .
-_verification:
-  There shall be no output on the standard output however there shall be a
-  change of state visible when listing the RF kill switches.
-  .
-    $ /snap/bin/wireless_tools.rfkill list
-  .
-
-id: wireless_tools/rfkill/capture_event
-category_id: wireless-tools
-plugin: manual
-depends: wireless-tools/rfkill/list
-_summary: It is possible to see the events related to RF kill switch(es)
-_purpose: Check if it is possible to capture the event notifications
-_steps:
-  1. Execute the following command to enter the capture-events mode
-  .
-    $ /snap/bin/wireless_tools.rfkill event
-  .
-  2. Change the state of the RF kill switch using a hardware button if
-     available.
-_verification:
-  The command executed in the step 1 shall block and display the current state
-  of the RF kill switches in a following form:
-    <timestamp>: idx <id> type <type id> op <op id> soft <0|1> hard <0|1>
-  Pressing the hardware RF kill switch should be printed in the following
-  form as in the above. For example:
-    1478774281.491635: idx 0 type 2 op 0 soft 0 hard 0
-    1478774281.491762: idx 1 type 1 op 0 soft 0 hard 0
-    1478774281.491776: idx 2 type 2 op 0 soft 1 hard 0
-    1478774301.905695: idx 2 type 2 op 2 soft 0 hard 0
-    1478774307.837112: idx 0 type 2 op 2 soft 1 hard 0
-    1478774310.817935: idx 2 type 2 op 2 soft 1 hard 0
-    1478774310.818989: idx 2 type 2 op 1 soft 1 hard 0
diff --git a/wpa-supplicant/manage.py b/wpa-supplicant/manage.py
deleted file mode 100755
index 500ad63..0000000
--- a/wpa-supplicant/manage.py
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env python3
-from plainbox.provider_manager import setup, N_
-
-setup(
-    name='plainbox-provider-wpa-supplicant',
-    namespace='2017.com.canonical.wpa-supplicant',
-    version="1.0",
-    description=N_("Plainbox provider for the wpa-supplicant snap"),
-    gettext_domain="2017_com_canonical_wpa_supplicant",
-)
diff --git a/wpa-supplicant/units/00_general.pxu b/wpa-supplicant/units/00_general.pxu
deleted file mode 100644
index 11d61b4..0000000
--- a/wpa-supplicant/units/00_general.pxu
+++ /dev/null
@@ -1,99 +0,0 @@
-# Copyright 2017 Canonical Ltd.
-# All rights reserved.
-#
-# Written by:
-#   Simon Fels <simon.fels@canonical.com>
-
-unit: category
-id: wpa_supplicant
-_name: wpa-supplicant
-
-id: wpa_supplicant/general/can_be_installed
-category_id: wpa_supplicant
-_description: Ensure that the wpa-supplicant snap can be installed
-plugin: manual
-_steps:
-  Install wpa-supplicant snap from the appropiate channel via the following command
-  .
-   $ snap install [--<channel>] wpa-supplicant
-  .
-  NOTE: Depending on which channel you want to test you need to select the right one.
-_verification:
-  The installation of the snap should finish with no errors.
-
-id: wpa_supplicant/general/slots_and_plugs_connected
-category_id: wpa_supplicant
-depends: wpa_supplicant/general/can_be_installed
-plugin: manual
-_summary: Verify that all plugs and slots of the snap are connected automatically.
-_steps:
- 1. Install the snap from the store:
- .
-   $ snap wpa-supplicant
- .
-_verification:
- 1. Verify that the 'wpa-supplicant' snap has all required plugs and slots connected
-    and you see a similar output like the example below. If any further plugs
-    from other snaps are shown for the same slot this can be safely ignored.
- .
-   $ snap interfaces wpa-supplicant
-   Slot                           Plug
-   :network                       wpa-supplicant
-   :network-control               wpa-supplicant
-   wpa-supplicant:legacy-service  -
-   wpa-supplicant:service         network-manager:wpa,wpa-supplicant:wpa
-
-id: wpa_supplicant/general/service_failed_to_start_without_reboot
-category_id: wpa_supplicant
-depends: wpa_supplicant/general/can_be_installed
-_description:
-  Verify that the wpa-supplicant can't be started after installation of the snap
-  without a system reboot.
-plugin: manual
-_steps:
-  Check service status with the following command
-  $ systemctl status snap.wpa-supplicant.wpa.service
-_verification:
-  Output should look like this:
-  .
-  * snap.wpa-supplicant.wpa.service - Service for snap application wpa-supplicant.wpa
-     Loaded: loaded (/etc/systemd/system/snap.wpa-supplicant.wpa.service; enabled; vendor preset: enabled)
-     Active: inactive (dead) (Result: exit-code) since Mon 2017-03-20 10:45:00 UTC; 5s ago
-     Process: 2645 ExecStart=/usr/bin/snap run wpa-supplicant.wpa (code=exited, status=255)
-     Main PID: 2645 (code=exited, status=255)
-
-id: wpa_supplicant/general/service_starts_after_reboot
-category_id: wpa_supplicant
-depends: wpa_supplicant/general/service_failed_to_start_without_reboot
-_description: Ensure that the wpa-supplicant service is up and running
-plugin: manual
-_steps:
- 1. Reboot the device
- .
-  $ sudo reboot
- .
- 2. When the device finished booting, check service status with the following command:
- .
-  $ systemctl status snap.wpa-supplicant.wpa.service
-_verification:
-  Output should look like this:
-  .
-  * snap.wpa-supplicant.wpa.service - Service for snap application wpa-supplicant.wpa
-     Loaded: loaded (/etc/systemd/system/snap.wpa-supplicant.wpa.service; enabled; vendor preset: enabled)
-     Active: active (running) since Mon 2017-03-20 08:50:29 UTC; 1h 50min ago
-     Main PID: 1587 (wpa_supplicant)
-
-id: wpa_supplicant/general/system_has_a_single_wpa_running
-category_id: wpa_supplicant
-depends: wpa_supplicant/general/service_starts_after_reboot
-_description: Ensure that only a single wpa-supplicant instance runs on the system.
-plugin: manual
-_steps:
-  Check which wpa-supplicant processes are running via
-  .
-  $ pgrep wpa_supplicant
-_verification:
-  The output should list only a single process id, e.g.:
-  .
-  $ pgrep wpa_supplicant
-  2134
diff --git a/wpa-supplicant/units/10_network_manager.pxu b/wpa-supplicant/units/10_network_manager.pxu
deleted file mode 100644
index 3b33e4c..0000000
--- a/wpa-supplicant/units/10_network_manager.pxu
+++ /dev/null
@@ -1,74 +0,0 @@
-# Copyright 2017 Canonical Ltd.
-# All rights reserved.
-#
-# Written by:
-#   Simon Fels <simon.fels@canonical.com>
-
-id: wpa_supplicant/network_manager/wpa_plug_connected
-category_id: wpa_supplicant
-depends: wpa_supplicant/general/system_has_a_single_wpa_running
-_description:
-  Ensure that the necessary wpa plug of the network-manager snap is connected.
-plugin: manual
-_steps:
-  1. Install the NetworkManager snap from the store
-  .
-  $ snap install network-manager
-  .
-  2. List plug/slot connections for the wpa-supplicant snap
-  .
-  $ snap interfaces wpa-supplicant
-_verification:
-  Output should look like:
-  .
-  Slot                           Plug
-  [...]
-  wpa-supplicant:service         network-manager:wpa
-
-id: wpa_supplicant/network_manager/finds_wifi_networks
-category_id: wpa_supplicant
-depends: wpa_supplicant/network_manager/wpa_plug_connected
-_description:
-  Verify WiFi networks can be found by using the wpa-supplicant and
-  network-manager snaps.
-plugin: manual
-_steps:
-  1. Trigger a scan for WiFi networks
-  .
-  $ nmcli d wifi rescan
-  .
-  2. List found WiFi networks
-  .
-  $ nmcli d wifi
-_verification:
-  The output should look similar to the following and should list available
-  WiFi networks in your environment:
-  .
-  *  SSID  MODE   CHAN  RATE       SIGNAL  BARS  SECURITY
-  *  test1 Infra  6     54 Mbit/s  85      ****  WPA1 WPA2
-     test2 Infra  6     54 Mbit/s  45      **    WPA1 WPA2
-
-id: wpa_supplicant/network_manager/connect_secure_wifi_network
-category_id: wpa_supplicant
-depends: wpa_supplicant/network_manager/finds_wifi_networks
-_description:
-  Verify connecting one of the previously found WiFi networks is possible.
-  network-manager snaps.
-plugin: manual
-_steps:
-  Connect one of the previously found WiFi networks via:
-  .
-  $ nmcli d wifi connect <SSID> password <password>
-  .
-  Replace <SSID> and <password> with the right values for your selected WiFi
-  network.
-_verification:
-  The nmcli command call should return with no error. Verify why running
-  .
-  $ echo $?
-  0
-  .
-  Also verify that the WiFi network is connected:
-  .
-  $ nmcli d | grep wifi
-  wlan0     wifi      connected    test1
