[openqa-tests] Merge openqa tests from gnome-build-meta



commit 848af07947f2473a3d71cb2538872024eb51de2c
Author: Sam Thursfield <sam thursfield codethink co uk>
Date:   Tue Nov 9 11:48:24 2021 +0100

    Merge openqa tests from gnome-build-meta
    
    This have been moved into separate repo, see:
    https://gitlab.gnome.org/GNOME/gnome-build-meta/-/issues/453

 README.md                |  6 ++++++
 main.pm                  |  9 +++++++++
 tests/gnome_desktop.pm   | 15 +++++++++++++++
 tests/gnome_install.pm   | 20 ++++++++++++++++++++
 tests/gnome_welcome.pm   | 30 ++++++++++++++++++++++++++++++
 utils/setup_worker.sh    | 35 +++++++++++++++++++++++++++++++++++
 utils/start_job.sh       | 22 ++++++++++++++++++++++
 utils/teardown_worker.sh | 10 ++++++++++
 utils/wait_for_job.sh    | 29 +++++++++++++++++++++++++++++
 9 files changed, 176 insertions(+)
---
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..a8a6ae7
--- /dev/null
+++ b/README.md
@@ -0,0 +1,6 @@
+# OpenQA testing for GNOME
+
+GNOME has an OpenQA instance here: <https://openqa.gnome.org/>
+
+Documentation can be found here:
+<https://gitlab.gnome.org/GNOME/gnome-build-meta/-/wikis/openqa/OpenQA-for-GNOME-developers>
diff --git a/main.pm b/main.pm
new file mode 100644
index 0000000..b6fbf25
--- /dev/null
+++ b/main.pm
@@ -0,0 +1,9 @@
+use strict;
+use testapi;
+use autotest;
+use needle;
+
+autotest::loadtest "tests/gnome_install.pm";
+autotest::loadtest "tests/gnome_welcome.pm";
+autotest::loadtest "tests/gnome_desktop.pm";
+1;
diff --git a/tests/gnome_desktop.pm b/tests/gnome_desktop.pm
new file mode 100644
index 0000000..16f459b
--- /dev/null
+++ b/tests/gnome_desktop.pm
@@ -0,0 +1,15 @@
+use base 'basetest';
+use strict;
+use testapi;
+
+sub run {
+    my $self = shift;
+    assert_and_click('gnome_desktop_tour', timeout => 60, 'left');
+    assert_screen('gnome_desktop_desktop', 60);
+}
+
+sub test_flags {
+    return { fatal => 1 };
+}
+
+1;
diff --git a/tests/gnome_install.pm b/tests/gnome_install.pm
new file mode 100644
index 0000000..d6c3547
--- /dev/null
+++ b/tests/gnome_install.pm
@@ -0,0 +1,20 @@
+use base 'basetest';
+use strict;
+use testapi;
+
+sub run {
+    my $self = shift;
+    assert_and_click('gnome_install_1', timeout => 120, 'left');
+    assert_and_click('gnome_install_disk', 'left', 10);
+    assert_and_click('gnome_install_disk2', 'left', 10);
+    assert_screen('gnome_install_reformatting1', 120);
+    assert_screen('gnome_install_complete', 120);
+    eject_cd;
+    power('reset');
+}
+
+sub test_flags {
+    return { fatal => 1 };
+}
+
+1;
diff --git a/tests/gnome_welcome.pm b/tests/gnome_welcome.pm
new file mode 100644
index 0000000..d4d7ce6
--- /dev/null
+++ b/tests/gnome_welcome.pm
@@ -0,0 +1,30 @@
+use base 'basetest';
+use strict;
+use testapi;
+
+sub run {
+    my $self = shift;
+    assert_and_click('gnome_firstboot_welcome', timeout => 600, 'left');
+    assert_and_click('gnome_firstboot_language', timeout => 10, 'left');
+    assert_and_click('gnome_firstboot_privacy', timeout => 10, 'left');
+    assert_screen('gnome_firstboot_timezone_1', 30);
+    type_string('London, East');
+    assert_and_click('gnome_firstboot_timezone_2', timeout => 20, 'left');
+    assert_and_click('gnome_firstboot_timezone_3', timeout => 20, 'left');
+    assert_and_click('gnome_firstboot_accounts', timeout => 10, 'left');
+    assert_screen('gnome_firstboot_aboutyou_1', 10);
+    type_string('testuser');
+    assert_and_click('gnome_firstboot_aboutyou_2', timeout => 10, 'left');
+    assert_screen('gnome_firstboot_password_1', 10);
+    type_string('testingtesting123');
+    send_key('tab');
+    type_string('testingtesting123');
+    assert_and_click('gnome_firstboot_password_2', timeout => 10, 'left');
+    assert_and_click('gnome_firstboot_complete', timeout => 10, 'left');
+}
+
+sub test_flags {
+    return { fatal => 1 };
+}
+
+1;
diff --git a/utils/setup_worker.sh b/utils/setup_worker.sh
new file mode 100755
index 0000000..1678c66
--- /dev/null
+++ b/utils/setup_worker.sh
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+# Prepare a local OpenQA worker and register it with $OPENQA_HOST.
+#
+# On success, write the machine ID returned by server to stdout.
+
+set -eu
+
+# Unique identifier for this machine, so we can tell the server to schedule
+# tests here.
+worker_class=$1
+
+# Config for local OpenQA worker instance.
+cat >/etc/openqa/workers.ini <<EOF
+[global]
+WORKER_CLASS=$worker_class
+BACKEND = qemu
+HOST = $OPENQA_HOST
+EOF
+
+# Register local worker as a new machine on OpenQA server.
+openqa-cli api --apikey $OPENQA_API_KEY --apisecret $OPENQA_API_SECRET \
+  --host $OPENQA_HOST \
+  -X POST machines/ \
+  name=gitlab-runner-$worker_class \
+  backend=qemu \
+  settings[ARCH]=x86_64 \
+  settings[PART_TABLE_TYPE]=gpt \
+  settings[QEMUCPU]=host \
+  settings[QEMUCPUS]=2 \
+  settings[QEMURAM]=2560 \
+  settings[QEMUVGA]=virtio \
+  settings[UEFI]=1 \
+  settings[UEFI_PFLASH_CODE]=/usr/share/qemu/ovmf-x86_64-code.bin \
+  settings[WORKER_CLASS]=$worker_class | tee --append openqa.log | jq -e .id > /tmp/machine_id
diff --git a/utils/start_job.sh b/utils/start_job.sh
new file mode 100755
index 0000000..05c7229
--- /dev/null
+++ b/utils/start_job.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+# Start job on $OPENQA_HOST.
+#
+# On success, write the job ID returned by server to stdout.
+
+set -eu
+
+worker_class=$1
+version=$2
+
+openqa-cli api --apikey $OPENQA_API_KEY --apisecret $OPENQA_API_SECRET \
+  --host $OPENQA_HOST \
+  -X POST isos \
+  ISO=installer.iso \
+  DISTRI=gnomeos \
+  VERSION=$version \
+  FLAVOR=iso \
+  ARCH=x86_64 \
+  WORKER_CLASS=$worker_class \
+  CASEDIR=$(pwd)/openqa \
+  NEEDLES_DIR=$OPENQA_NEEDLES_GIT#$OPENQA_NEEDLES_SHA | tee --append openqa.log | jq -e .ids[0]
diff --git a/utils/teardown_worker.sh b/utils/teardown_worker.sh
new file mode 100755
index 0000000..9300332
--- /dev/null
+++ b/utils/teardown_worker.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+# Delete machine on $OPENQA_HOST.
+
+set -eu
+
+machine_id=$1
+
+openqa-cli api --apikey $OPENQA_API_KEY --apisecret $OPENQA_API_SECRET \
+    --host $OPENQA_HOST -X DELETE machines/${machine_id} | tee --append openqa.log
diff --git a/utils/wait_for_job.sh b/utils/wait_for_job.sh
new file mode 100755
index 0000000..476096b
--- /dev/null
+++ b/utils/wait_for_job.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+# Block until a job on $OPENQA_HOST completes.
+#
+# Write a status to stdout on completion: 1 if job fails, 0 if job passes.
+
+set -eu
+
+job_id=$1
+
+job_check() {
+    openqa-cli api --apikey $OPENQA_API_KEY \
+        --apisecret $OPENQA_API_KEY \
+        --host $OPENQA_HOST \
+        jobs/${job_id}
+}
+
+state=$(job_check | jq .job.state)
+while [ "$state" != "\"done\"" ]; do sleep 10 && state=$(job_check | jq .job.state); done
+echo >&2 "Tests finished"
+
+result=$(job_check | tee --append openqa.log | jq .job.result)
+if [ "$result" != "\"passed\"" ]; then
+  echo >&2 "Test job ${job_id} *FAILED*"
+  echo 1
+else
+  echo >&2 "Test job ${job_id} *PASSED*"
+  echo 0
+fi


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]