Compare commits
3 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8f1ba74759 | ||
|
|
1c3ed83889 | ||
|
|
59f500f5c8 |
7 changed files with 104 additions and 19 deletions
1
.fmf/version
Normal file
1
.fmf/version
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
1
|
||||||
12
packit.yaml
12
packit.yaml
|
|
@ -16,6 +16,17 @@ srpm_build_deps:
|
||||||
- npm
|
- npm
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
- job: tests
|
||||||
|
identifier: self
|
||||||
|
trigger: pull_request
|
||||||
|
tmt_plan: /plans/all/main
|
||||||
|
targets:
|
||||||
|
- centos-stream-10
|
||||||
|
- centos-stream-10-aarch64
|
||||||
|
- fedora-41
|
||||||
|
- fedora-42
|
||||||
|
- fedora-latest-stable-aarch64
|
||||||
|
|
||||||
- job: copr_build
|
- job: copr_build
|
||||||
trigger: pull_request
|
trigger: pull_request
|
||||||
targets: &build_targets
|
targets: &build_targets
|
||||||
|
|
@ -24,7 +35,6 @@ jobs:
|
||||||
- centos-stream-10
|
- centos-stream-10
|
||||||
- centos-stream-10-aarch64
|
- centos-stream-10-aarch64
|
||||||
- fedora-all
|
- fedora-all
|
||||||
- fedora-all-aarch64
|
|
||||||
|
|
||||||
- job: copr_build
|
- job: copr_build
|
||||||
trigger: commit
|
trigger: commit
|
||||||
|
|
|
||||||
14
plans/all.fmf
Normal file
14
plans/all.fmf
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
summary: cockpit-image-builder playwright tests
|
||||||
|
prepare:
|
||||||
|
how: install
|
||||||
|
package:
|
||||||
|
- cockpit-image-builder
|
||||||
|
discover:
|
||||||
|
how: fmf
|
||||||
|
execute:
|
||||||
|
how: tmt
|
||||||
|
|
||||||
|
/main:
|
||||||
|
summary: playwright tests
|
||||||
|
discover+:
|
||||||
|
test: /schutzbot/playwright
|
||||||
|
|
@ -1,3 +1,6 @@
|
||||||
|
import { execSync } from 'child_process';
|
||||||
|
import { readFileSync } from 'node:fs';
|
||||||
|
|
||||||
import { expect, type Page } from '@playwright/test';
|
import { expect, type Page } from '@playwright/test';
|
||||||
|
|
||||||
export const togglePreview = async (page: Page) => {
|
export const togglePreview = async (page: Page) => {
|
||||||
|
|
@ -42,3 +45,41 @@ export const closePopupsIfExist = async (page: Page) => {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// copied over from constants
|
||||||
|
const ON_PREM_RELEASES = new Map([
|
||||||
|
['centos-10', 'CentOS Stream 10'],
|
||||||
|
['fedora-41', 'Fedora Linux 41'],
|
||||||
|
['fedora-42', 'Fedora Linux 42'],
|
||||||
|
['rhel-10', 'Red Hat Enterprise Linux (RHEL) 10'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||||
|
export const getHostDistroName = (): string => {
|
||||||
|
const osRelData = readFileSync('/etc/os-release');
|
||||||
|
const lines = osRelData
|
||||||
|
.toString('utf-8')
|
||||||
|
.split('\n')
|
||||||
|
.filter((l) => l !== '');
|
||||||
|
const osRel = {};
|
||||||
|
|
||||||
|
for (const l of lines) {
|
||||||
|
const lineData = l.split('=');
|
||||||
|
(osRel as any)[lineData[0]] = lineData[1].replace(/"/g, '');
|
||||||
|
}
|
||||||
|
const distro = ON_PREM_RELEASES.get(
|
||||||
|
`${(osRel as any)['ID']}-${(osRel as any)['VERSION_ID']}`,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (distro === undefined) {
|
||||||
|
/* eslint-disable no-console */
|
||||||
|
console.error('getHostDistroName failed, os-release config:', osRel);
|
||||||
|
throw new Error('getHostDistroName failed, distro undefined');
|
||||||
|
}
|
||||||
|
|
||||||
|
return distro;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const getHostArch = (): string => {
|
||||||
|
return execSync('uname -m').toString('utf-8').replace(/\s/g, '');
|
||||||
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import type { FrameLocator, Page } from '@playwright/test';
|
import { expect, FrameLocator, Page } from '@playwright/test';
|
||||||
|
|
||||||
import { isHosted } from './helpers';
|
import { getHostArch, getHostDistroName, isHosted } from './helpers';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Opens the wizard, fills out the "Image Output" step, and navigates to the optional steps
|
* Opens the wizard, fills out the "Image Output" step, and navigates to the optional steps
|
||||||
|
|
@ -8,6 +8,13 @@ import { isHosted } from './helpers';
|
||||||
*/
|
*/
|
||||||
export const navigateToOptionalSteps = async (page: Page | FrameLocator) => {
|
export const navigateToOptionalSteps = async (page: Page | FrameLocator) => {
|
||||||
await page.getByRole('button', { name: 'Create image blueprint' }).click();
|
await page.getByRole('button', { name: 'Create image blueprint' }).click();
|
||||||
|
if (!isHosted()) {
|
||||||
|
// wait until the distro and architecture aligns with the host
|
||||||
|
await expect(page.getByTestId('release_select')).toHaveText(
|
||||||
|
getHostDistroName(),
|
||||||
|
);
|
||||||
|
await expect(page.getByTestId('arch_select')).toHaveText(getHostArch());
|
||||||
|
}
|
||||||
await page.getByRole('checkbox', { name: 'Virtualization' }).click();
|
await page.getByRole('checkbox', { name: 'Virtualization' }).click();
|
||||||
await page.getByRole('button', { name: 'Next' }).click();
|
await page.getByRole('button', { name: 'Next' }).click();
|
||||||
};
|
};
|
||||||
|
|
|
||||||
8
schutzbot/playwright.fmf
Normal file
8
schutzbot/playwright.fmf
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
summary: run playwright tests
|
||||||
|
test: ./playwright_tests.sh
|
||||||
|
require:
|
||||||
|
- cockpit-image-builder
|
||||||
|
- podman
|
||||||
|
- nodejs
|
||||||
|
- nodejs-npm
|
||||||
|
duration: 30m
|
||||||
|
|
@ -1,16 +1,16 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
# As playwright isn't supported on fedora/el, install dependencies
|
TMT_SOURCE_DIR=${TMT_SOURCE_DIR:-}
|
||||||
# beforehand.
|
if [ -n "$TMT_SOURCE_DIR" ]; then
|
||||||
sudo dnf install -y \
|
# Move to the directory with sources
|
||||||
alsa-lib \
|
cd "${TMT_SOURCE_DIR}/cockpit-image-builder"
|
||||||
libXrandr-devel \
|
npm ci
|
||||||
libXdamage-devel \
|
elif [ "${CI:-}" != "true" ]; then
|
||||||
libXcomposite-devel \
|
# packit drops us into the schutzbot directory
|
||||||
at-spi2-atk-devel \
|
cd ../
|
||||||
cups \
|
npm ci
|
||||||
atk
|
fi
|
||||||
|
|
||||||
sudo systemctl enable --now cockpit.socket
|
sudo systemctl enable --now cockpit.socket
|
||||||
|
|
||||||
|
|
@ -19,10 +19,13 @@ sudo usermod -aG wheel admin
|
||||||
echo "admin ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee "/etc/sudoers.d/admin-nopasswd"
|
echo "admin ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee "/etc/sudoers.d/admin-nopasswd"
|
||||||
|
|
||||||
function upload_artifacts {
|
function upload_artifacts {
|
||||||
mkdir -p /tmp/artifacts/extra-screenshots
|
if [ -n "${TMT_TEST_DATA:-}" ]; then
|
||||||
USER="$(whoami)"
|
mv playwright-report "$TMT_TEST_DATA"/playwright-report
|
||||||
sudo chown -R "$USER:$USER" playwright-report
|
else
|
||||||
mv playwright-report /tmp/artifacts/
|
USER="$(whoami)"
|
||||||
|
sudo chown -R "$USER:$USER" playwright-report
|
||||||
|
mv playwright-report /tmp/artifacts/
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
trap upload_artifacts EXIT
|
trap upload_artifacts EXIT
|
||||||
|
|
||||||
|
|
@ -73,11 +76,12 @@ sudo podman run \
|
||||||
-e "CI=true" \
|
-e "CI=true" \
|
||||||
-e "PLAYWRIGHT_USER=admin" \
|
-e "PLAYWRIGHT_USER=admin" \
|
||||||
-e "PLAYWRIGHT_PASSWORD=foobar" \
|
-e "PLAYWRIGHT_PASSWORD=foobar" \
|
||||||
-e "CURRENTS_PROJECT_ID=$CURRENTS_PROJECT_ID" \
|
-e "CURRENTS_PROJECT_ID=${CURRENTS_PROJECT_ID:-}" \
|
||||||
-e "CURRENTS_RECORD_KEY=$CURRENTS_RECORD_KEY" \
|
-e "CURRENTS_RECORD_KEY=${CURRENTS_RECORD_KEY:-}" \
|
||||||
--net=host \
|
--net=host \
|
||||||
-v "$PWD:/tests" \
|
-v "$PWD:/tests" \
|
||||||
-v '/etc:/etc' \
|
-v '/etc:/etc' \
|
||||||
|
-v '/etc/os-release:/etc/os-release' \
|
||||||
--privileged \
|
--privileged \
|
||||||
--rm \
|
--rm \
|
||||||
--init \
|
--init \
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue