add synthetics pipeline script

This commit is contained in:
Dominique Clarke 2022-01-19 16:03:39 -05:00
parent e02a1f70e1
commit 9a38d5a499
4 changed files with 91 additions and 8 deletions

View file

@ -0,0 +1,17 @@
#!/usr/bin/env bash
set -euo pipefail
source .buildkite/scripts/common/util.sh
.buildkite/scripts/bootstrap.sh
.buildkite/scripts/download_build_artifacts.sh
export JOB=kibana-uptime-playwright
echo "--- Uptime @elastic/synthetics Tests"
cd "$XPACK_DIR"
checks-reporter-with-killswitch "Uptime @elastic/synthetics Tests" \
node plugins/uptime/scripts/e2e.js --kibana-install-dir "$KIBANA_BUILD_LOCATION" --grep="Monitor Management"

View file

@ -10,6 +10,11 @@ import { monitorManagementPageProvider } from '../page_objects/monitor_managemen
journey('Monitor Management', async ({ page, params }: { page: Page; params: any }) => {
const uptime = monitorManagementPageProvider({ page, kibanaUrl: params.kibanaUrl });
const httpName = 'http monitor';
const icmpName = 'icmp monitor';
const tcpName = 'tcp monitor';
const browserName = 'browser monitor';
const basicMonitorDetails = {
name: 'Sample monitor',
location: 'US Central',
@ -37,6 +42,7 @@ journey('Monitor Management', async ({ page, params }: { page: Page; params: any
step('create monitor http monitor', async () => {
const monitorDetails = {
...basicMonitorDetails,
name: httpName,
url: 'https://elastic.co',
locations: [basicMonitorDetails.location],
};
@ -49,19 +55,27 @@ journey('Monitor Management', async ({ page, params }: { page: Page; params: any
step('view HTTP details in monitor management UI', async () => {
const monitorDetails = {
...basicMonitorDetails,
name: httpName,
url: 'https://elastic.co',
};
await uptime.clickAddMonitor();
await uptime.findMonitorConfiguration(monitorDetails);
});
step('view results in overview page', async () => {
await uptime.navigateToOverviewPage();
await page.waitForSelector(`text=${httpName}`, { timeout: 60 * 1000 });
});
step('delete http monitor', async () => {
await uptime.navigateToMonitorManagement();
await deleteMonitor();
});
step('create monitor tcp monitor', async () => {
const monitorDetails = {
...basicMonitorDetails,
name: tcpName,
host: 'smtp.gmail.com:587',
locations: [basicMonitorDetails.location],
};
@ -74,19 +88,27 @@ journey('Monitor Management', async ({ page, params }: { page: Page; params: any
step('view TCP details in monitor management UI', async () => {
const monitorDetails = {
...basicMonitorDetails,
name: tcpName,
host: 'smtp.gmail.com:587',
};
await uptime.clickAddMonitor();
await uptime.findMonitorConfiguration(monitorDetails);
});
step('view results in overview page', async () => {
await uptime.navigateToOverviewPage();
await page.waitForSelector(`text=${tcpName}`, { timeout: 60 * 1000 });
});
step('delete tcp monitor', async () => {
await uptime.navigateToMonitorManagement();
await deleteMonitor();
});
step('create basic ICMP monitor', async () => {
const monitorDetails = {
...basicMonitorDetails,
name: icmpName,
host: '1.1.1.1',
locations: [basicMonitorDetails.location],
};
@ -99,19 +121,27 @@ journey('Monitor Management', async ({ page, params }: { page: Page; params: any
step('view ICMP details in monitor management UI', async () => {
const monitorDetails = {
...basicMonitorDetails,
name: icmpName,
host: '1.1.1.1',
};
await uptime.clickAddMonitor();
await uptime.findMonitorConfiguration(monitorDetails);
});
step('view results in overview page', async () => {
await uptime.navigateToOverviewPage();
await page.waitForSelector(`text=${icmpName}`, { timeout: 60 * 1000 });
});
step('delete ICMP monitor', async () => {
await uptime.navigateToMonitorManagement();
await deleteMonitor();
});
step('create basic Browser monitor', async () => {
const monitorDetails = {
...basicMonitorDetails,
name: browserName,
inlineScript: 'step("test step", () => {})',
locations: [basicMonitorDetails.location],
};
@ -121,16 +151,23 @@ journey('Monitor Management', async ({ page, params }: { page: Page; params: any
expect(isSuccessful).toBeTruthy();
});
step('view ICMP details in monitor management UI', async () => {
step('view browser details in monitor management UI', async () => {
const monitorDetails = {
...basicMonitorDetails,
name: browserName,
host: '1.1.1.1',
};
await uptime.clickAddMonitor();
await uptime.findMonitorConfiguration(monitorDetails);
});
step('delete ICMP monitor', async () => {
step('view results in overview page', async () => {
await uptime.navigateToOverviewPage();
await page.waitForSelector(`text=${browserName} - inline`, { timeout: 60 * 1000 });
});
step('delete browser monitor', async () => {
await uptime.navigateToMonitorManagement();
await deleteMonitor();
});
});

View file

@ -6,7 +6,17 @@
*/
import { Page } from '@elastic/synthetics';
export function loginPageProvider({ page }: { page: Page; kibanaUrl: string }) {
export function loginPageProvider({
page,
isRemote,
username = 'elastic',
password = 'changeme',
}: {
page: Page;
isRemote: boolean;
username?: string;
password?: string;
}) {
return {
async waitForLoadingToFinish() {
while (true) {
@ -15,10 +25,13 @@ export function loginPageProvider({ page }: { page: Page; kibanaUrl: string }) {
}
},
async loginToKibana() {
await page.fill('[data-test-subj=loginUsername]', 'elastic', {
if (isRemote) {
await page.click('text="Log in with Elasticsearch"');
}
await page.fill('[data-test-subj=loginUsername]', username, {
timeout: 60 * 1000,
});
await page.fill('[data-test-subj=loginPassword]', 'changeme');
await page.fill('[data-test-subj=loginPassword]', password);
await page.click('[data-test-subj=loginSubmit]');

View file

@ -16,11 +16,21 @@ export function monitorManagementPageProvider({
page: Page;
kibanaUrl: string;
}) {
const monitorManagement = `${kibanaUrl}/app/uptime/manage-monitors`;
const addMonitor = `${kibanaUrl}/app/uptime/add-monitor`;
const remoteKibanaUrl = process.env.SYNTHETICS_KIBANA_URL;
const remoteUsername = process.env.SYNTHETICS_KIBANA_USERNAME;
const remotePassword = process.env.SYNTHETICS_KIBANA_PASSWORD;
const basePath = remoteKibanaUrl || kibanaUrl;
const monitorManagement = `${basePath}/app/uptime/manage-monitors`;
const addMonitor = `${basePath}/app/uptime/add-monitor`;
const overview = `${basePath}/app/uptime`;
return {
...loginPageProvider({ page, kibanaUrl }),
...loginPageProvider({
page,
isRemote: !!remoteKibanaUrl,
username: remoteUsername,
password: remotePassword,
}),
...utilsPageProvider({ page }),
async navigateToMonitorManagement() {
@ -35,6 +45,12 @@ export function monitorManagementPageProvider({
});
},
async navigateToOverviewPage() {
await page.goto(overview, {
waitUntil: 'networkidle',
});
},
async clickAddMonitor() {
await page.click('text=Add monitor');
},