[ftr] update common serverless tests to use saml auth (#176221)

## Summary

This PR updates FTR functional tests shared b/w projects to use SAML
authentication instead of login with default user and kibana `/login`
route.

Few notes for reviewers:
- admin role was added to each project roles.yml file and its definition
matches cloud one.
- please check your tests if selected role is as expected: the goal is
to run test with the role that has minimal required permissions, but
some tests were failing with lower access role:
   - `viewer` - read only
   - `editor` / `developer` for write actions (e.g. save search)
   - `admin` if full access required

- svl_common_page.ts was updated:
- `cleanBrowserState()` is added to reset state b/w test suites by
deleting all cookies, clearing session & local storages.
- `loginWithRole(role: string)` starts with `cleanBrowserState()` call,
then sets the new cookie based on provided role and validates the role
is applied correctly. On its finish browser is at Kibana home screen.
- `loginAsAdmin()` and `loginWithPrivilegedRole()` to login as admin and
editor/developer roles.
- `forceLogout()` is only required in tests that use basic
authentication. It starts with `cleanBrowserState()` call and then loads
`/logout` route (we can't load base url because mock-id-plugin will
trigger redirects). On its finish browser is at Cloud login screen.

For @elastic/kibana-operations : 
This change affects the login in the functional serverless tests (18
config files at the moment) and while it seems to be stable enough, it
might be the reason of sudden flakiness/failures on CI.


[Flaky-test-runner
60x](https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5107)
to verify login via cookie is stable

---------

Co-authored-by: Robert Oskamp <traeluki@gmail.com>
This commit is contained in:
Dzmitry Lemechko 2024-02-09 19:23:24 +02:00 committed by GitHub
parent 888562ce20
commit 2b49a407f7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
86 changed files with 382 additions and 251 deletions

View file

@ -1,5 +1,5 @@
# -----
# Source: https://github.com/elastic/project-controller/blob/main/internal/project/esproject/config/roles.yml
# Source: project-controller/blob/main/internal/project/esproject/config/roles.yml
# -----
viewer:
cluster: ['manage_own_api_key', 'read_pipeline']
@ -29,6 +29,18 @@ developer:
resources:
- '*'
# admin role defined in elasticsearch controller
admin:
cluster: ['all']
indices:
- names: ['*']
privileges: ['all']
allow_restricted_indices: false
applications:
- application: '*'
privileges: ['*']
resources: ['*']
# temporarily added for testing purpose
system_indices_superuser:
cluster: ['all']

View file

@ -1,5 +1,5 @@
# -----
# Source: https://github.com/elastic/project-controller/blob/main/internal/project/security/config/roles.yml
# Source: project-controller/blob/main/internal/project/security/config/roles.yml
# -----
viewer:
cluster: []
@ -77,6 +77,18 @@ editor:
- '*'
run_as: []
# admin role defined in elasticsearch controller
admin:
cluster: ['all']
indices:
- names: ['*']
privileges: ['all']
allow_restricted_indices: false
applications:
- application: '*'
privileges: ['*']
resources: ['*']
# temporarily added for testing purpose
system_indices_superuser:
cluster: ['all']

View file

@ -1,5 +1,5 @@
# -----
# Source: https://github.com/elastic/project-controller/blob/main/internal/project/security/config/roles.yml
# Source: project-controller/blob/main/internal/project/security/config/roles.yml
# -----
# modeled after the t1_analyst minus osquery run saved queries privilege
viewer:
@ -724,6 +724,18 @@ endpoint_policy_manager:
- feature_visualize.all
resources: '*'
# admin role defined in elasticsearch controller
admin:
cluster: ['all']
indices:
- names: ['*']
privileges: ['all']
allow_restricted_indices: false
applications:
- application: '*'
privileges: ['*']
resources: ['*']
# temporarily added for testing purpose
system_indices_superuser:
cluster: ['all']

View file

@ -103,6 +103,29 @@ tests that should run in a serverless environment have to be added to the
Tests in this area should be clearly designed for the serverless environment,
particularly when it comes to timing for API requests and UI interaction.
### Roles-based testing
Each serverless project has its own set of SAML roles with [specfic permissions defined in roles.yml](https://github.com/elastic/kibana/blob/main/packages/kbn-es/src/serverless_resources/project_roles)
and in oder to properly test Kibana functionality, UI tests design requires to login with
a project-supported SAML role.
Some recommendations:
- in each test file top level `describe` suite should start with `loginWithRole` in `before` hook
- use the minimal required role to access tested functionality
- when feature logic depends on both project type & role, make sure to add separate tests
- avoid using basic authentication, unless it is the actual test case
- no need to log out, you can change role by calling `loginWithRole` again.
```
describe("my test suite", async function() {
before(async () => {
await PageObjects.svlCommonPage.loginWithRole('viewer');
await esArchiver.load(...);
await PageObjects.dashboard.navigateToApp();
});
});
```
### Testing with feature flags
**tl;dr:** Tests specific to functionality behind a feature flag need special

View file

@ -9,6 +9,7 @@ import { FtrProviderContext } from '../ftr_provider_context';
export function SvlCommonPageProvider({ getService, getPageObjects }: FtrProviderContext) {
const testSubjects = getService('testSubjects');
const find = getService('find');
const config = getService('config');
const pageObjects = getPageObjects(['security', 'common']);
const retry = getService('retry');
@ -24,28 +25,56 @@ export function SvlCommonPageProvider({ getService, getPageObjects }: FtrProvide
setTimeout(resolve, ms);
});
/**
* Delete browser cookies, clear session and local storages
*/
const cleanBrowserState = async () => {
// we need to load kibana host to delete/add cookie
const noAuthRequiredUrl = deployment.getHostPort() + '/bootstrap-anonymous.js';
log.debug(`browser: navigate to /bootstrap-anonymous.js`);
await browser.get(noAuthRequiredUrl);
// previous test might left unsaved changes and alert will show up on url change
const alert = await browser.getAlert();
if (alert) {
log.debug(`browser: closing alert`);
await alert.accept();
}
log.debug(`browser: wait for resource page to be loaded`);
await find.byCssSelector('body > pre', 5000);
log.debug(`browser: delete all the cookies`);
await retry.waitForWithTimeout('Browser cookies are deleted', 10000, async () => {
await browser.deleteAllCookies();
await pageObjects.common.sleep(1000);
const cookies = await browser.getCookies();
return cookies.length === 0;
});
log.debug(`browser: clearing session & local storages`);
await browser.clearSessionStorage();
await browser.clearLocalStorage();
await pageObjects.common.sleep(700);
};
return {
async loginWithRole(role: string) {
log.debug(`Fetch the cookie for '${role}' role`);
const sidCookie = await svlUserManager.getSessionCookieForRole(role);
await retry.waitForWithTimeout(
`Logging in by setting browser cookie for '${role}' role`,
30_000,
async () => {
log.debug(`Delete all the cookies in the current browser context`);
await browser.deleteAllCookies();
log.debug(`Setting the cookie for '${role}' role`);
const sidCookie = await svlUserManager.getSessionCookieForRole(role);
// Loading bootstrap.js in order to be on the domain that the cookie will be set for.
await browser.get(deployment.getHostPort() + '/bootstrap.js');
await browser.setCookie('sid', sidCookie);
await cleanBrowserState();
log.debug(`browser: set the new cookie`);
await retry.waitForWithTimeout('New cookie is added', 10000, async () => {
await browser.setCookie('sid', sidCookie);
await pageObjects.common.sleep(1000);
const cookies = await browser.getCookies();
return cookies.length === 1;
});
// Cookie should be already set in the browsing context, navigating to the Home page
log.debug(`browser: refresh the page`);
await browser.refresh();
log.debug(`browser: load base url and validate the cookie`);
await browser.get(deployment.getHostPort());
// Verifying that we are logged in
if (await testSubjects.exists('userMenuButton', { timeout: 10_000 })) {
log.debug('userMenuButton found, login passed');
} else {
throw new Error(`Failed to login with cookie for '${role}' role`);
}
// Validating that the new cookie in the browser is set for the correct user
const browserCookies = await browser.getCookies();
if (browserCookies.length === 0) {
@ -60,16 +89,31 @@ export function SvlCommonPageProvider({ getService, getPageObjects }: FtrProvide
// email returned from API call must match the email for the specified role
if (body.email === userData.email) {
log.debug(`The new cookie is properly set for '${role}' role`);
return true;
} else {
log.debug(`API response body: ${JSON.stringify(body)}`);
throw new Error(
`Cookie is not set properly, expected email is '${userData.email}', but found '${body.email}'`
);
}
// Verifying that we are logged in
if (await testSubjects.exists('userMenuButton', { timeout: 10_000 })) {
log.debug('userMenuButton found, login passed');
return true;
} else {
throw new Error(`Failed to login with cookie for '${role}' role`);
}
}
);
},
async loginAsAdmin() {
await this.loginWithRole('admin');
},
async loginWithPrivilegedRole() {
await this.loginWithRole(svlUserManager.DEFAULT_ROLE);
},
async navigateToLoginForm() {
const url = deployment.getHostPort() + '/login';
await browser.get(url);
@ -79,8 +123,38 @@ export function SvlCommonPageProvider({ getService, getPageObjects }: FtrProvide
});
},
async forceLogout() {
log.debug('SvlCommonPage.forceLogout');
if (await find.existsByDisplayedByCssSelector('.login-form', 100)) {
log.debug('Already on the login page, not forcing anything');
return;
}
await cleanBrowserState();
log.debug(`Navigating to ${deployment.getHostPort()}/logout to force the logout`);
await browser.get(deployment.getHostPort() + '/logout');
// After logging out, the user can be redirected to various locations depending on the context. By default, we
// expect the user to be redirected to the login page. However, if the login page is not available for some reason,
// we should simply wait until the user is redirected *elsewhere*.
// Timeout has been doubled here in attempt to quiet the flakiness
await retry.waitForWithTimeout('URL redirects to finish', 40000, async () => {
const urlBefore = await browser.getCurrentUrl();
delay(1000);
const urlAfter = await browser.getCurrentUrl();
log.debug(`Expecting before URL '${urlBefore}' to equal after URL '${urlAfter}'`);
return urlAfter === urlBefore;
});
const currentUrl = await browser.getCurrentUrl();
// Logout might trigger multiple redirects, but in the end we expect the Cloud login page
return currentUrl.includes('/login') || currentUrl.includes('/projects');
},
async login() {
await pageObjects.security.forceLogout({ waitForLoginPage: false });
await this.forceLogout();
// adding sleep to settle down logout
await pageObjects.common.sleep(2500);
@ -135,11 +209,6 @@ export function SvlCommonPageProvider({ getService, getPageObjects }: FtrProvide
log.debug('Logged in successfully');
},
async forceLogout() {
await pageObjects.security.forceLogout({ waitForLoginPage: false });
log.debug('Logged out successfully');
},
async assertProjectHeaderExists() {
await testSubjects.existOrFail('kibanaProjectHeader');
},

View file

@ -26,9 +26,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const PageObjects = getPageObjects(['svlCommonPage', 'common', 'console', 'header']);
describe('console app', function describeIndexTests() {
this.tags('includeFirefox');
before(async () => {
await PageObjects.svlCommonPage.login();
// TODO: https://github.com/elastic/kibana/issues/176582
// this test scenario requires roles definition check:
// Search & Oblt projects 'viewer' role has access to Console, but for
// Security project only 'admin' role has access
await PageObjects.svlCommonPage.loginWithRole('admin');
log.debug('navigateTo console');
await PageObjects.common.navigateToApp('dev_tools', { hash: '/console' });
});
@ -37,10 +40,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
await PageObjects.console.closeHelpIfExists();
});
after(async () => {
await PageObjects.svlCommonPage.forceLogout();
});
it('should show the default request', async () => {
await retry.try(async () => {
const actualRequest = await PageObjects.console.getRequest();

View file

@ -22,6 +22,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const dataGrid = getService('dataGrid');
const PageObjects = getPageObjects([
'common',
'svlCommonPage',
'header',
'context',
'discover',
@ -47,6 +48,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
await kibanaServer.uiSettings.update({
defaultIndex: 'logstash-*',
});
// TODO: Serverless tests require login first
await PageObjects.svlCommonPage.loginWithRole('viewer');
await PageObjects.common.navigateToApp('discover');
await PageObjects.header.waitUntilLoadingHasFinished();
for (const [columnName, value] of TEST_FILTER_COLUMN_NAMES) {

View file

@ -20,6 +20,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const filterBar = getService('filterBar');
const PageObjects = getPageObjects([
'common',
'svlCommonPage',
'discover',
'timePicker',
'settings',
@ -40,6 +41,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
await kibanaServer.uiSettings.update({
defaultIndex: 'logstash-*',
});
await PageObjects.svlCommonPage.loginWithPrivilegedRole();
await PageObjects.common.navigateToApp('discover');
await PageObjects.header.waitUntilLoadingHasFinished();

View file

@ -21,7 +21,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const browser = getService('browser');
const kibanaServer = getService('kibanaServer');
const PageObjects = getPageObjects(['common', 'context']);
const PageObjects = getPageObjects(['common', 'context', 'svlCommonPage']);
const testSubjects = getService('testSubjects');
describe('context filters', function contextSize() {
@ -29,6 +29,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
await kibanaServer.uiSettings.update({
'discover:rowHeightOption': 0, // to have more grid rows visible at once
});
await PageObjects.svlCommonPage.loginWithRole('viewer');
await PageObjects.common.navigateToApp('discover');
});
beforeEach(async function () {

View file

@ -19,7 +19,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const dataGrid = getService('dataGrid');
const browser = getService('browser');
const testSubjects = getService('testSubjects');
const PageObjects = getPageObjects(['context']);
const PageObjects = getPageObjects(['context', 'svlCommonPage']);
let expectedRowLength = 2 * TEST_DEFAULT_CONTEXT_SIZE + 1;
describe('context size', function contextSize() {
@ -29,6 +29,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
'context:defaultSize': `${TEST_DEFAULT_CONTEXT_SIZE}`,
'context:step': `${TEST_STEP_SIZE}`,
});
await PageObjects.svlCommonPage.loginWithRole('viewer');
await PageObjects.context.navigateTo(TEST_INDEX_PATTERN, TEST_ANCHOR_ID);
});

View file

@ -7,27 +7,17 @@
import { FtrProviderContext } from '../../../ftr_provider_context';
export default function ({
getService,
getPageObjects,
loadTestFile,
getPageObject,
}: FtrProviderContext) {
export default function ({ getService, getPageObjects, loadTestFile }: FtrProviderContext) {
const browser = getService('browser');
const esArchiver = getService('esArchiver');
const PageObjects = getPageObjects(['common']);
const kibanaServer = getService('kibanaServer');
const svlCommonPage = getPageObject('svlCommonPage');
describe('context app', function () {
before(async () => {
await browser.setWindowSize(1200, 800);
// TODO: Serverless tests require login first
await svlCommonPage.login();
await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional');
await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/visualize.json');
await kibanaServer.uiSettings.replace({ defaultIndex: 'logstash-*' });
await PageObjects.common.navigateToApp('discover');
});
after(async () => {

View file

@ -21,15 +21,11 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
describe('Search Profiler Editor', () => {
before(async () => {
await PageObjects.svlCommonPage.login();
await PageObjects.svlCommonPage.loginAsAdmin();
await PageObjects.common.navigateToApp('searchProfiler');
expect(await PageObjects.searchProfiler.editorExists()).to.be(true);
});
after(async () => {
await PageObjects.svlCommonPage.forceLogout();
});
it('supports pre-configured search query', async () => {
const query = {
query: {

View file

@ -19,10 +19,19 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const esArchiver = getService('esArchiver');
const kibanaServer = getService('kibanaServer');
const testSubjects = getService('testSubjects');
const PageObjects = getPageObjects(['common', 'dashboard', 'header', 'timePicker', 'discover']);
const PageObjects = getPageObjects([
'common',
'svlCommonPage',
'dashboard',
'header',
'timePicker',
'discover',
]);
describe('discover saved search embeddable', () => {
before(async () => {
await browser.setWindowSize(1300, 800);
await PageObjects.svlCommonPage.loginWithPrivilegedRole();
await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional');
await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/dashboard/current/data');
await kibanaServer.savedObjects.cleanStandardList();
@ -39,6 +48,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
});
after(async () => {
await esArchiver.unload('test/functional/fixtures/es_archiver/logstash_functional');
await esArchiver.unload('test/functional/fixtures/es_archiver/dashboard/current/data');
await kibanaServer.savedObjects.cleanStandardList();
await PageObjects.common.unsetTime();
});

View file

@ -7,22 +7,8 @@
import { FtrProviderContext } from '../../../../ftr_provider_context';
export default function ({ getService, loadTestFile, getPageObject }: FtrProviderContext) {
const esArchiver = getService('esArchiver');
const browser = getService('browser');
const svlCommonPage = getPageObject('svlCommonPage');
export default function ({ loadTestFile }: FtrProviderContext) {
describe('discover/embeddable', function () {
before(async function () {
await browser.setWindowSize(1300, 800);
// TODO: Serverless tests require login first
await svlCommonPage.login();
});
after(async function unloadMakelogs() {
await esArchiver.unload('test/functional/fixtures/es_archiver/logstash_functional');
});
loadTestFile(require.resolve('./_saved_search_embeddable'));
});
}

View file

@ -20,6 +20,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const testSubjects = getService('testSubjects');
const PageObjects = getPageObjects([
'common',
'svlCommonPage',
'discover',
'header',
'timePicker',
@ -37,6 +38,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
// and load a set of makelogs data
await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional');
await kibanaServer.uiSettings.replace(defaultSettings);
await PageObjects.svlCommonPage.loginWithPrivilegedRole();
await PageObjects.common.navigateToApp('discover');
await PageObjects.timePicker.setDefaultAbsoluteRange();
});

View file

@ -17,10 +17,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const PageObjects = getPageObjects([
'timePicker',
'dashboard',
'settings',
'discover',
'common',
'header',
'svlCommonPage',
]);
const defaultSettings = {
defaultIndex: 'long-window-logstash-*',
@ -42,6 +42,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
);
await security.testUser.setRoles(['kibana_admin', 'long_window_logstash']);
await kibanaServer.uiSettings.replace(defaultSettings);
await PageObjects.svlCommonPage.loginAsAdmin();
await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings();
await PageObjects.common.navigateToApp('discover');
});

View file

@ -19,11 +19,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const testSubjects = getService('testSubjects');
const PageObjects = getPageObjects([
'common',
'svlCommonPage',
'discover',
'header',
'timePicker',
'unifiedFieldList',
'visualize',
'svlCommonNavigation',
]);
@ -38,6 +37,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
// and load a set of makelogs data
await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional');
await kibanaServer.uiSettings.replace(defaultSettings);
await PageObjects.svlCommonPage.loginWithRole('viewer');
await PageObjects.common.navigateToApp('discover');
await PageObjects.timePicker.setDefaultAbsoluteRange();
});

View file

@ -7,16 +7,13 @@
import { FtrProviderContext } from '../../../../ftr_provider_context';
export default function ({ getService, loadTestFile, getPageObject }: FtrProviderContext) {
export default function ({ getService, loadTestFile }: FtrProviderContext) {
const esArchiver = getService('esArchiver');
const browser = getService('browser');
const svlCommonPage = getPageObject('svlCommonPage');
describe('discover/group1', function () {
before(async function () {
await browser.setWindowSize(1300, 800);
// TODO: Serverless tests require login first
await svlCommonPage.login();
});
after(async function unloadMakelogs() {

View file

@ -22,10 +22,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const browser = getService('browser');
const PageObjects = getPageObjects([
'common',
'unifiedSearch',
'svlCommonPage',
'discover',
'timePicker',
'settings',
'header',
'context',
'dashboard',
@ -45,7 +44,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
await security.testUser.setRoles(['kibana_admin', 'test_logstash_reader']);
await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover.json');
await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional');
await PageObjects.svlCommonPage.loginWithPrivilegedRole();
await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings();
await PageObjects.common.navigateToApp('discover');
});

View file

@ -12,7 +12,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const filterBar = getService('filterBar');
const dataGrid = getService('dataGrid');
const testSubjects = getService('testSubjects');
const PageObjects = getPageObjects(['common', 'discover', 'timePicker', 'context']);
const PageObjects = getPageObjects(['common', 'svlCommonPage', 'discover', 'timePicker']);
const esArchiver = getService('esArchiver');
const retry = getService('retry');
const kibanaServer = getService('kibanaServer');
@ -24,6 +24,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
await security.testUser.setRoles(['kibana_admin', 'test_logstash_reader']);
await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional');
await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover');
await PageObjects.svlCommonPage.loginWithRole('viewer');
});
after(async () => {

View file

@ -19,6 +19,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const dashboardAddPanel = getService('dashboardAddPanel');
const PageObjects = getPageObjects([
'common',
'svlCommonPage',
'discover',
'header',
'timePicker',
@ -41,6 +42,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional');
await kibanaServer.uiSettings.replace(defaultSettings);
await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings();
await PageObjects.svlCommonPage.loginWithPrivilegedRole();
});
beforeEach(async () => {

View file

@ -7,16 +7,13 @@
import { FtrProviderContext } from '../../../../ftr_provider_context';
export default function ({ getService, loadTestFile, getPageObject }: FtrProviderContext) {
export default function ({ getService, loadTestFile }: FtrProviderContext) {
const esArchiver = getService('esArchiver');
const browser = getService('browser');
const svlCommonPage = getPageObject('svlCommonPage');
describe('discover/group2', function () {
before(async function () {
await browser.setWindowSize(1600, 1200);
// TODO: Serverless tests require login first
await svlCommonPage.login();
});
after(async function unloadMakelogs() {

View file

@ -13,11 +13,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const kibanaServer = getService('kibanaServer');
const PageObjects = getPageObjects([
'common',
'svlCommonPage',
'discover',
'timePicker',
'header',
'unifiedSearch',
'settings',
]);
const testSubjects = getService('testSubjects');
const browser = getService('browser');
@ -27,6 +26,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
describe('discover request counts', function describeIndexTests() {
before(async function () {
await PageObjects.svlCommonPage.loginAsAdmin();
await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional');
await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/long_window_logstash');
await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover');

View file

@ -13,10 +13,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const kibanaServer = getService('kibanaServer');
const PageObjects = getPageObjects([
'common',
'svlCommonPage',
'discover',
'timePicker',
'header',
'unifiedSearch',
'unifiedFieldList',
]);
const testSubjects = getService('testSubjects');
@ -31,6 +31,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
describe('discover sidebar', function describeIndexTests() {
before(async function () {
await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional');
await PageObjects.svlCommonPage.loginAsAdmin();
});
beforeEach(async () => {

View file

@ -18,12 +18,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const dataGrid = getService('dataGrid');
const filterBar = getService('filterBar');
const PageObjects = getPageObjects([
'settings',
'common',
'svlCommonPage',
'discover',
'header',
'timePicker',
'dashboard',
'unifiedFieldList',
]);
const security = getService('security');
@ -37,6 +36,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
await security.testUser.setRoles(['kibana_admin', 'test_logstash_reader']);
await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional');
await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover');
await PageObjects.svlCommonPage.loginWithPrivilegedRole();
});
after(async () => {

View file

@ -7,16 +7,13 @@
import { FtrProviderContext } from '../../../../ftr_provider_context';
export default function ({ getService, loadTestFile, getPageObject }: FtrProviderContext) {
export default function ({ getService, loadTestFile }: FtrProviderContext) {
const esArchiver = getService('esArchiver');
const browser = getService('browser');
const svlCommonPage = getPageObject('svlCommonPage');
describe('discover/group3', function () {
before(async function () {
await browser.setWindowSize(1300, 800);
// TODO: Serverless tests require login first
await svlCommonPage.login();
});
after(async function unloadMakelogs() {

View file

@ -7,15 +7,8 @@
import { FtrProviderContext } from '../../../../ftr_provider_context';
export default function ({ loadTestFile, getPageObject }: FtrProviderContext) {
const svlCommonPage = getPageObject('svlCommonPage');
export default function ({ loadTestFile }: FtrProviderContext) {
describe('discover', function () {
before(async function () {
// TODO: Serverless tests require login first
await svlCommonPage.login();
});
loadTestFile(require.resolve('./reporting'));
loadTestFile(require.resolve('./visualize_field'));
});

View file

@ -18,7 +18,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const kibanaServer = getService('kibanaServer');
const browser = getService('browser');
const retry = getService('retry');
const PageObjects = getPageObjects(['reporting', 'common', 'discover', 'timePicker', 'share']);
const PageObjects = getPageObjects([
'reporting',
'common',
'svlCommonPage',
'discover',
'timePicker',
'share',
]);
const filterBar = getService('filterBar');
const find = getService('find');
const testSubjects = getService('testSubjects');
@ -56,6 +63,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
describe('Discover CSV Export', () => {
describe('Check Available', () => {
before(async () => {
await PageObjects.svlCommonPage.loginAsAdmin();
// TODO: emptyKibanaIndex fails in Serverless with
// "index_not_found_exception: no such index [.kibana_ingest]",
// so it was switched to `savedObjects.cleanStandardList()`

View file

@ -18,13 +18,10 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
const kibanaServer = getService('kibanaServer');
const PageObjects = getPageObjects([
'common',
'error',
'svlCommonPage',
'discover',
'timePicker',
'unifiedSearch',
'lens',
'security',
'spaceSelector',
'header',
'unifiedFieldList',
]);
@ -36,11 +33,19 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
}
describe('discover field visualize button', () => {
beforeEach(async () => {
before(async () => {
// Security project requires admin role, search/oblt project passes with developer/editor.
await PageObjects.svlCommonPage.loginAsAdmin();
await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional');
await kibanaServer.importExport.load(
'x-pack/test/functional/fixtures/kbn_archiver/lens/lens_basic.json'
);
await kibanaServer.uiSettings.replace({
defaultIndex: 'logstash-*',
});
});
beforeEach(async () => {
await PageObjects.common.navigateToApp('discover');
await setDiscoverTimeRange();
});
@ -50,6 +55,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
await kibanaServer.importExport.unload(
'x-pack/test/functional/fixtures/kbn_archiver/lens/lens_basic.json'
);
await kibanaServer.uiSettings.replace({});
});
it('shows "visualize" field button', async () => {

View file

@ -6,15 +6,8 @@
*/
import { FtrProviderContext } from '../../../../ftr_provider_context';
export default ({ loadTestFile, getPageObject }: FtrProviderContext) => {
const svlCommonPage = getPageObject('svlCommonPage');
export default ({ loadTestFile }: FtrProviderContext) => {
describe('Discover alerting', function () {
before(async function () {
// TODO: Serverless tests require login first
await svlCommonPage.login();
});
loadTestFile(require.resolve('./search_source_alert'));
});
};

View file

@ -16,6 +16,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const monacoEditor = getService('monacoEditor');
const PageObjects = getPageObjects([
'settings',
'svlCommonPage',
'common',
'header',
'discover',
@ -343,6 +344,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
describe('Search source Alert', () => {
before(async () => {
await security.testUser.setRoles(['discover_alert']);
await PageObjects.svlCommonPage.loginAsAdmin();
log.debug('create source indices');
await createSourceIndex();

View file

@ -25,8 +25,7 @@ export default function ({ getService, getPageObjects, loadTestFile }: FtrProvid
describe('data view field editor example', function () {
before(async () => {
// TODO: Serverless tests require login first
await PageObjects.svlCommonPage.login();
await PageObjects.svlCommonPage.loginAsAdmin();
// TODO: emptyKibanaIndex fails in Serverless with
// "index_not_found_exception: no such index [.kibana_ingest]",
// so it was switched to `savedObjects.cleanStandardList()`

View file

@ -22,8 +22,7 @@ export default ({ getService, getPageObjects }: FtrProviderContext) => {
describe('Customizations', () => {
before(async () => {
// TODO: Serverless tests require login first
await PageObjects.svlCommonPage.login();
await PageObjects.svlCommonPage.loginAsAdmin();
await kibanaServer.savedObjects.cleanStandardList();
await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional');
await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover');

View file

@ -14,8 +14,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
describe('Field formats example', function () {
before(async () => {
// TODO: Serverless tests require login first
await PageObjects.svlCommonPage.login();
await PageObjects.svlCommonPage.loginAsAdmin();
await PageObjects.common.navigateToApp('fieldFormatsExample');
});

View file

@ -15,8 +15,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
// FLAKY: https://github.com/elastic/kibana/issues/167643
describe.skip('Partial Results Example', function () {
before(async () => {
// TODO: Serverless tests require login first
await PageObjects.svlCommonPage.login();
await PageObjects.svlCommonPage.loginAsAdmin();
await PageObjects.common.navigateToApp('partialResultsExample');
const element = await testSubjects.find('example-help');

View file

@ -45,8 +45,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
};
before(async () => {
// TODO: Serverless tests require login first
await PageObjects.svlCommonPage.login();
await PageObjects.svlCommonPage.loginAsAdmin();
// create rollup data
log.info(`loading ${testIndex} index...`);
await esArchiver.loadIfNeeded(testArchive);

View file

@ -15,15 +15,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
describe('Partial results example', () => {
before(async () => {
await PageObjects.svlCommonPage.login();
await PageObjects.svlCommonPage.loginAsAdmin();
await PageObjects.common.navigateToApp('searchExamples');
await testSubjects.click('/search');
});
after(async () => {
await PageObjects.svlCommonPage.forceLogout();
});
it('should update a progress bar', async () => {
await testSubjects.click('responseTab');
const progressBar = await testSubjects.find('progressBar');

View file

@ -17,8 +17,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
describe('Search example', () => {
before(async () => {
// TODO: Serverless tests require login first
await PageObjects.svlCommonPage.login();
await PageObjects.svlCommonPage.loginAsAdmin();
});
describe('with bfetch', () => {

View file

@ -65,7 +65,7 @@ export default ({ getService, getPageObjects }: FtrProviderContext) => {
await kibanaServer.importExport.load(
'test/api_integration/fixtures/kbn_archiver/index_patterns/constant_keyword.json'
);
await PageObjects.svlCommonPage.login();
await PageObjects.svlCommonPage.loginAsAdmin();
await PageObjects.common.navigateToApp('unifiedFieldListExamples');
await PageObjects.header.waitUntilLoadingHasFinished();
await retry.waitFor('combobox is ready', async () => {
@ -90,7 +90,6 @@ export default ({ getService, getPageObjects }: FtrProviderContext) => {
);
await PageObjects.unifiedFieldList.cleanSidebarLocalStorage();
await kibanaServer.savedObjects.cleanStandardList();
await PageObjects.svlCommonPage.forceLogout();
});
// FLAKY: https://github.com/elastic/kibana/issues/172781

View file

@ -29,8 +29,7 @@ export default ({ getService, getPageObjects }: FtrProviderContext) => {
describe('Field stats', () => {
before(async () => {
// TODO: Serverless tests require login first
await PageObjects.svlCommonPage.login();
await PageObjects.svlCommonPage.loginAsAdmin();
await kibanaServer.savedObjects.cleanStandardList();
await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional');
await kibanaServer.importExport.load(

View file

@ -22,7 +22,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
// fold. Otherwise it can't be clicked by the browser driver.
await browser.setWindowSize(1600, 1000);
await security.testUser.setRoles(['global_devtools_read', 'ingest_pipelines_user']);
await PageObjects.svlCommonPage.login();
await PageObjects.svlCommonPage.loginAsAdmin();
await PageObjects.common.navigateToApp('dev_tools', { hash: '/grokdebugger' });
await retry.waitFor('Grok Debugger Header to be visible', async () => {
return testSubjects.isDisplayed('grokDebuggerContainer');
@ -30,7 +30,6 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
});
after(async () => {
await PageObjects.svlCommonPage.forceLogout();
await security.testUser.restoreDefaults();
});

View file

@ -13,11 +13,7 @@ export default function ({ getPageObject, getService }: FtrProviderContext) {
describe('home page', function () {
before(async () => {
await svlCommonPage.login();
});
after(async () => {
await svlCommonPage.forceLogout();
await svlCommonPage.loginWithRole('viewer');
});
it('has project header', async () => {

View file

@ -14,12 +14,11 @@ export default function ({ getPageObjects }: FtrProviderContext) {
// Failing - should be fixed with https://github.com/elastic/kibana/pull/164052
describe.skip('Sample data in serverless', function () {
before(async () => {
await pageObjects.svlCommonPage.login();
await pageObjects.svlCommonPage.loginWithPrivilegedRole();
});
after(async () => {
await pageObjects.home.removeSampleDataSet('ecommerce');
await pageObjects.svlCommonPage.forceLogout();
});
it('Sample data loads', async () => {

View file

@ -46,7 +46,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
await kibanaServer.uiSettings.update({
'csv:quoteValues': true,
});
await pageObjects.svlCommonPage.login();
await pageObjects.svlCommonPage.loginAsAdmin();
await pageObjects.common.navigateToApp('settings');
});
@ -55,7 +55,6 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
await kibanaServer.uiSettings.update({
'csv:quoteValues': INITIAL_CSV_QUOTE_VALUES_SETTING_VALUE,
});
await pageObjects.svlCommonPage.forceLogout();
});
it('renders the page', async () => {

View file

@ -18,8 +18,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
// Failing: See https://github.com/elastic/kibana/issues/173558
describe.skip('runtime fields', function () {
this.tags(['skipFirefox']);
before(async function () {
await browser.setWindowSize(1200, 800);
await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover');

View file

@ -17,8 +17,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const testSubjects = getService('testSubjects');
describe('runtime fields', function () {
this.tags(['skipFirefox']);
before(async function () {
await browser.setWindowSize(1200, 800);
await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover');

View file

@ -13,8 +13,7 @@ export default ({ getService, loadTestFile, getPageObject }: FtrProviderContext)
const svlCommonPage = getPageObject('svlCommonPage');
before(async () => {
// TODO: Serverless tests require login first
await svlCommonPage.login();
await svlCommonPage.loginAsAdmin();
await esArchiver.unload('test/functional/fixtures/es_archiver/logstash_functional');
await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/makelogs');
});

View file

@ -20,9 +20,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const testSubjects = getService('testSubjects');
describe('Serverless tests', function () {
this.beforeAll(async () => {
await PageObjects.svlCommonPage.login();
});
describe('disables scripted fields', function () {
let dataViewId = '';

View file

@ -22,8 +22,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
describe('Index component templates', function () {
before(async () => {
await security.testUser.setRoles(['index_management_user']);
// Navigate to the index management page
await pageObjects.svlCommonPage.login();
await pageObjects.svlCommonPage.loginAsAdmin();
});
beforeEach(async () => {
@ -33,10 +32,6 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
await pageObjects.header.waitUntilLoadingHasFinished();
});
after(async () => {
await pageObjects.svlCommonPage.forceLogout();
});
it('renders the component templates tab', async () => {
const url = await browser.getCurrentUrl();
expect(url).to.contain(`/component_templates`);

View file

@ -46,7 +46,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
}
log.debug('Navigating to the enrich policies tab');
await pageObjects.svlCommonPage.login();
await pageObjects.svlCommonPage.loginAsAdmin();
await pageObjects.common.navigateToApp('indexManagement');
// Navigate to the enrich policies tab
@ -64,8 +64,6 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
} catch (e) {
log.debug('[Teardown error] Error deleting test policy');
throw e;
} finally {
await pageObjects.svlCommonPage.forceLogout();
}
});

View file

@ -21,7 +21,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
describe('Data Streams', function () {
before(async () => {
await log.debug('Creating required data stream');
log.debug('Creating required data stream');
try {
await es.cluster.putComponentTemplate({
name: `${TEST_DS_NAME}_mapping`,
@ -56,8 +56,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
}
await security.testUser.setRoles(['index_management_user']);
// Navigate to the index management page
await pageObjects.svlCommonPage.login();
await pageObjects.svlCommonPage.loginAsAdmin();
await pageObjects.common.navigateToApp('indexManagement');
// Navigate to the indices tab
await pageObjects.indexManagement.changeTabs('data_streamsTab');
@ -65,7 +64,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
});
after(async () => {
await log.debug('Cleaning up created data stream');
log.debug('Cleaning up created data stream');
try {
await es.indices.deleteDataStream({ name: TEST_DS_NAME });

View file

@ -53,7 +53,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
}
log.debug('Navigating to the enrich policies tab');
await pageObjects.svlCommonPage.login();
await pageObjects.svlCommonPage.loginAsAdmin();
await pageObjects.common.navigateToApp('indexManagement');
// Navigate to the enrich policies tab

View file

@ -23,7 +23,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
describe('Index Templates', function () {
before(async () => {
await pageObjects.svlCommonPage.login();
await pageObjects.svlCommonPage.loginAsAdmin();
});
beforeEach(async () => {
@ -42,8 +42,6 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
log.debug('[Setup error] Error creating test policy');
throw e;
}
await pageObjects.svlCommonPage.forceLogout();
});
it('renders the index templates tab', async () => {

View file

@ -16,8 +16,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
describe('Indices', function () {
before(async () => {
await security.testUser.setRoles(['index_management_user']);
// Navigate to the index management page
await pageObjects.svlCommonPage.login();
await pageObjects.svlCommonPage.loginAsAdmin();
await pageObjects.common.navigateToApp('indexManagement');
// Navigate to the indices tab
await pageObjects.indexManagement.changeTabs('indicesTab');

View file

@ -29,14 +29,11 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
describe('Ingest Pipelines', function () {
this.tags('smoke');
before(async () => {
await pageObjects.svlCommonPage.login();
await pageObjects.svlCommonPage.loginAsAdmin();
});
beforeEach(async () => {
await pageObjects.common.navigateToApp('ingestPipelines');
});
after(async () => {
await pageObjects.svlCommonPage.forceLogout();
});
it('Loads the app', async () => {
log.debug('Checking for section heading to say Ingest Pipelines.');

View file

@ -17,15 +17,10 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
describe('Management landing page', function () {
this.tags('smoke');
before(async () => {
// Navigate to the index management page
await pageObjects.svlCommonPage.login();
await pageObjects.svlCommonPage.loginAsAdmin();
await pageObjects.common.navigateToApp('management');
});
after(async () => {
await pageObjects.svlCommonPage.forceLogout();
});
it('renders the page', async () => {
await retry.waitFor('page to be visible', async () => {
return await testSubjects.exists('cards-navigation-page');

View file

@ -16,11 +16,7 @@ export default function ({ getPageObjects }: FtrProviderContext) {
describe('Search bar features', () => {
before(async () => {
await PageObjects.svlCommonPage.login();
});
after(async () => {
await PageObjects.svlCommonPage.forceLogout();
await PageObjects.svlCommonPage.loginAsAdmin();
});
describe('list features', () => {

View file

@ -17,7 +17,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
describe('Transform List', function () {
before(async () => {
await security.testUser.setRoles(['transform_user']);
await pageObjects.svlCommonPage.login();
await pageObjects.svlCommonPage.loginAsAdmin();
// For this test to work, make sure there are no pre-existing transform present.
// For example, solutions might set up transforms automatically.

View file

@ -27,17 +27,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
describe('Painless lab', function describeIndexTests() {
before(async () => {
await PageObjects.svlCommonPage.login();
await PageObjects.svlCommonPage.loginAsAdmin();
await PageObjects.common.navigateToApp('dev_tools', { hash: '/painless_lab' });
await retry.waitFor('Wait for editor to be visible', async () => {
return testSubjects.isDisplayed('painless_lab');
});
});
after(async () => {
await PageObjects.svlCommonPage.forceLogout();
});
it('should show the editor and preview panels', async () => {
const editor = await testSubjects.find('kibanaCodeEditor');
const preview = await testSubjects.find('painlessTabs');

View file

@ -33,12 +33,11 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
// TimeoutError: Waiting for element to be located By(css selector, [data-test-subj="apiKeysCreatePromptButton"]) Wait timed out after 10028ms
this.tags(['failsOnMKI']);
before(async () => {
await pageObjects.svlCommonPage.login();
await pageObjects.svlCommonPage.loginAsAdmin();
});
after(async () => {
await clearAllApiKeys(es, log);
await pageObjects.svlCommonPage.forceLogout();
});
it('should create and delete API keys correctly', async () => {

View file

@ -13,11 +13,7 @@ export default function ({ getPageObject, getService }: FtrProviderContext) {
describe('Avatar menu', function () {
before(async () => {
await svlCommonPage.login();
});
after(async () => {
await svlCommonPage.forceLogout();
await svlCommonPage.loginWithRole('viewer');
});
it('is displayed', async () => {

View file

@ -13,9 +13,14 @@ export default function ({ getPageObjects }: FtrProviderContext) {
describe('User Profile Page', async () => {
before(async () => {
// TODO: migrate to SAML role when profile page displays the data
await pageObjects.svlCommonPage.login();
});
after(async () => {
await pageObjects.svlCommonPage.forceLogout();
});
describe('Theme', async () => {
it('should change theme based on the User Profile Theme control', async () => {
await pageObjects.common.navigateToApp('security_account');

View file

@ -24,7 +24,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
const navigateToReportingManagement = async () => {
log.debug(`navigating to reporting management app`);
await retry.tryForTime(60 * 1000, async () => {
await PageObjects.svlCommonPage.login();
await PageObjects.svlCommonPage.loginAsAdmin();
await PageObjects.common.navigateToApp('reportingManagement');
await PageObjects.header.waitUntilLoadingHasFinished();
await testSubjects.existOrFail('reportingPageHeader', { timeout: 2000 });

View file

@ -26,7 +26,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
await kibanaServer.importExport.load(
'x-pack/test/functional/fixtures/kbn_archiver/saved_objects_management/hidden_saved_objects'
);
await pageObjects.svlCommonPage.login();
await pageObjects.svlCommonPage.loginAsAdmin();
await pageObjects.common.navigateToApp('management');
await testSubjects.click('app-card-objects');
await pageObjects.savedObjects.waitTableIsLoaded();
@ -40,7 +40,6 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
'x-pack/test/functional/fixtures/kbn_archiver/saved_objects_management/hidden_saved_objects'
);
await kibanaServer.savedObjects.cleanStandardList();
await pageObjects.svlCommonPage.forceLogout();
});
const URL = '/api/kibana/management/saved_objects/_bulk_get';

View file

@ -28,7 +28,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
await esArchiver.load(
'test/functional/fixtures/es_archiver/saved_objects_management/export_transform'
);
await pageObjects.svlCommonPage.login();
await pageObjects.svlCommonPage.loginAsAdmin();
await pageObjects.common.navigateToApp('management');
await testSubjects.click('app-card-objects');
await pageObjects.savedObjects.waitTableIsLoaded();
@ -39,7 +39,6 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
'test/functional/fixtures/es_archiver/saved_objects_management/export_transform'
);
await kibanaServer.savedObjects.cleanStandardList();
await pageObjects.svlCommonPage.forceLogout();
});
it('allows to mutate the objects during an export', async () => {
@ -159,7 +158,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
await esArchiver.load(
'test/functional/fixtures/es_archiver/saved_objects_management/nested_export_transform'
);
await pageObjects.svlCommonPage.login();
await pageObjects.svlCommonPage.loginAsAdmin();
await pageObjects.common.navigateToApp('management');
await testSubjects.click('app-card-objects');
await pageObjects.savedObjects.waitTableIsLoaded();
@ -170,7 +169,6 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
'test/functional/fixtures/es_archiver/saved_objects_management/nested_export_transform'
);
await kibanaServer.savedObjects.cleanStandardList();
await pageObjects.svlCommonPage.forceLogout();
});
it('execute export transforms for reference objects', async () => {
@ -211,7 +209,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
await esArchiver.load(
'test/functional/fixtures/es_archiver/saved_objects_management/export_exclusion'
);
await pageObjects.svlCommonPage.login();
await pageObjects.svlCommonPage.loginAsAdmin();
await pageObjects.common.navigateToApp('management');
await testSubjects.click('app-card-objects');
await pageObjects.savedObjects.waitTableIsLoaded();
@ -222,7 +220,6 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
'test/functional/fixtures/es_archiver/saved_objects_management/export_exclusion'
);
await kibanaServer.savedObjects.cleanStandardList();
await pageObjects.svlCommonPage.forceLogout();
});
it('should only export objects returning `true` for `isExportable`', async () => {

View file

@ -25,7 +25,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
await kibanaServer.importExport.load(
'x-pack/test/functional/fixtures/kbn_archiver/saved_objects_management/hidden_saved_objects'
);
await pageObjects.svlCommonPage.login();
await pageObjects.svlCommonPage.loginAsAdmin();
await pageObjects.common.navigateToApp('management');
await testSubjects.click('app-card-objects');
await pageObjects.savedObjects.waitTableIsLoaded();
@ -42,7 +42,6 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
// "index_not_found_exception: no such index [.kibana_ingest]",
// so it was switched to `savedObjects.cleanStandardList()
await kibanaServer.savedObjects.cleanStandardList();
await pageObjects.svlCommonPage.forceLogout();
});
it('returns saved objects with importableAndExportable types', async () =>

View file

@ -29,7 +29,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
await kbnServer.importExport.load(
'test/functional/fixtures/kbn_archiver/saved_objects_management/hidden_from_http_apis'
);
await pageObjects.svlCommonPage.login();
await pageObjects.svlCommonPage.loginAsAdmin();
await pageObjects.common.navigateToApp('management');
await testSubjects.click('app-card-objects');
await pageObjects.savedObjects.waitTableIsLoaded();
@ -42,7 +42,6 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
await esArchiver.unload(
'test/functional/fixtures/es_archiver/saved_objects_management/hidden_from_http_apis'
);
await pageObjects.svlCommonPage.forceLogout();
});
describe('APIS', () => {

View file

@ -27,7 +27,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
await esArchiver.load(
'test/functional/fixtures/es_archiver/saved_objects_management/hidden_types'
);
await PageObjects.svlCommonPage.login();
await PageObjects.svlCommonPage.loginAsAdmin();
await PageObjects.common.navigateToApp('management');
await testSubjects.click('app-card-objects');
await PageObjects.savedObjects.waitTableIsLoaded();
@ -38,11 +38,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
'test/functional/fixtures/es_archiver/saved_objects_management/hidden_types'
);
await kibanaServer.savedObjects.cleanStandardList();
await PageObjects.svlCommonPage.forceLogout();
});
beforeEach(async () => {
// await PageObjects.svlCommonPage.login();
await PageObjects.common.navigateToApp('management');
await testSubjects.click('app-card-objects');
await PageObjects.savedObjects.waitTableIsLoaded();

View file

@ -21,10 +21,10 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
// "index_not_found_exception: no such index [.kibana_ingest]",
// so it was switched to `savedObjects.cleanStandardList()
await kibanaServer.savedObjects.cleanStandardList();
await PageObjects.svlCommonPage.loginAsAdmin();
});
beforeEach(async () => {
await PageObjects.svlCommonPage.login();
await PageObjects.common.navigateToApp('management');
await testSubjects.click('app-card-objects');
await PageObjects.savedObjects.waitTableIsLoaded();

View file

@ -26,7 +26,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
await kibanaServer.importExport.load(
'x-pack/test/functional/fixtures/kbn_archiver/saved_objects_management/hidden_saved_objects'
);
await pageObjects.svlCommonPage.login();
await pageObjects.svlCommonPage.loginAsAdmin();
await pageObjects.common.navigateToApp('management');
await testSubjects.click('app-card-objects');
await pageObjects.savedObjects.waitTableIsLoaded();

View file

@ -28,7 +28,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
await esArchiver.load(
'test/functional/fixtures/es_archiver/saved_objects_management/visible_in_management'
);
await pageObjects.svlCommonPage.login();
await pageObjects.svlCommonPage.loginAsAdmin();
await pageObjects.common.navigateToApp('management');
await testSubjects.click('app-card-objects');
await pageObjects.savedObjects.waitTableIsLoaded();
@ -38,7 +38,6 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
await esArchiver.unload(
'test/functional/fixtures/es_archiver/saved_objects_management/visible_in_management'
);
await pageObjects.svlCommonPage.forceLogout();
});
describe('export', () => {

View file

@ -59,7 +59,6 @@ export default ({ getService, loadTestFile, getPageObjects }: FtrProviderContext
});
await kibanaServer.importExport.load(fixtureDirs.lensBasic);
await kibanaServer.importExport.load(fixtureDirs.lensDefault);
await PageObjects.svlCommonPage.login();
// changing the timepicker default here saves us from having to set it in Discover (~8s)
await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings();
});
@ -67,7 +66,6 @@ export default ({ getService, loadTestFile, getPageObjects }: FtrProviderContext
after(async () => {
await esArchiver.unload(esArchive);
await PageObjects.timePicker.resetDefaultAbsoluteRangeViaUiSettings();
await PageObjects.svlCommonPage.forceLogout();
await kibanaServer.importExport.unload(fixtureDirs.lensBasic);
await kibanaServer.importExport.unload(fixtureDirs.lensDefault);
await kibanaServer.savedObjects.cleanStandardList();

View file

@ -10,7 +10,7 @@ import { range } from 'lodash';
import { FtrProviderContext } from '../../../../ftr_provider_context';
export default function ({ getService, getPageObjects }: FtrProviderContext) {
const PageObjects = getPageObjects(['visualize', 'lens', 'common', 'header']);
const PageObjects = getPageObjects(['visualize', 'lens', 'common', 'header', 'svlCommonPage']);
const find = getService('find');
const listingTable = getService('listingTable');
const testSubjects = getService('testSubjects');
@ -20,6 +20,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const config = getService('config');
describe('lens smokescreen tests', () => {
before(async () => {
await PageObjects.svlCommonPage.loginWithPrivilegedRole();
});
it('should allow creation of lens xy chart', async () => {
await PageObjects.visualize.navigateToNewVisualization();
await PageObjects.visualize.clickVisType('lens');

View file

@ -238,7 +238,13 @@ function sumFirstNValues(n: number, bars: Array<{ y: number }>): number {
}
export default function ({ getService, getPageObjects }: FtrProviderContext) {
const PageObjects = getPageObjects(['common', 'timePicker', 'lens', 'dashboard']);
const PageObjects = getPageObjects([
'common',
'timePicker',
'lens',
'dashboard',
'svlCommonPage',
]);
const testSubjects = getService('testSubjects');
const find = getService('find');
const kibanaServer = getService('kibanaServer');
@ -319,6 +325,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const toTime = 'Jun 16, 2023 @ 00:00:00.000';
before(async () => {
await PageObjects.svlCommonPage.loginAsAdmin();
log.info(`loading ${tsdbIndex} index...`);
await esArchiver.loadIfNeeded(tsdbEsArchive);
log.info(`creating a data view for "${tsdbDataView}"...`);

View file

@ -32,6 +32,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
'visChart',
'visEditor',
'vegaChart',
'svlCommonPage',
]);
const filterBar = getService('filterBar');
const inspector = getService('inspector');
@ -42,6 +43,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
describe('vega chart in visualize app', () => {
before(async () => {
await PageObjects.svlCommonPage.loginWithPrivilegedRole();
await PageObjects.visualize.initTests();
log.debug('navigateToApp visualize');
await PageObjects.visualize.navigateToNewVisualization();

View file

@ -7,18 +7,8 @@
import { FtrProviderContext } from '../../../../ftr_provider_context';
export default ({ loadTestFile, getPageObject }: FtrProviderContext) => {
const svlCommonPage = getPageObject('svlCommonPage');
export default ({ loadTestFile }: FtrProviderContext) => {
describe('Visualizations - Group 2', function () {
before(async () => {
await svlCommonPage.login();
});
after(async () => {
await svlCommonPage.forceLogout();
});
loadTestFile(require.resolve('./open_in_lens/agg_based'));
});
};

View file

@ -9,7 +9,12 @@ import expect from '@kbn/expect';
import { FtrProviderContext } from '../../../../../../ftr_provider_context';
export default function ({ getPageObjects, getService }: FtrProviderContext) {
const { lens, timePicker, dashboard } = getPageObjects(['lens', 'timePicker', 'dashboard']);
const { svlCommonPage, lens, timePicker, dashboard } = getPageObjects([
'svlCommonPage',
'lens',
'timePicker',
'dashboard',
]);
const testSubjects = getService('testSubjects');
const find = getService('find');
@ -22,6 +27,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
before(async () => {
await kibanaServer.importExport.load(fixture);
await svlCommonPage.loginWithPrivilegedRole();
});
after(async () => {

View file

@ -9,7 +9,12 @@ import expect from '@kbn/expect';
import { FtrProviderContext } from '../../../../../../ftr_provider_context';
export default function ({ getPageObjects, getService }: FtrProviderContext) {
const { lens, timePicker, dashboard } = getPageObjects(['lens', 'timePicker', 'dashboard']);
const { svlCommonPage, lens, timePicker, dashboard } = getPageObjects([
'svlCommonPage',
'lens',
'timePicker',
'dashboard',
]);
const testSubjects = getService('testSubjects');
const panelActions = getService('dashboardPanelActions');
@ -21,6 +26,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
before(async () => {
await kibanaServer.importExport.load(fixture);
await svlCommonPage.loginWithPrivilegedRole();
});
after(async () => {

View file

@ -9,7 +9,12 @@ import expect from '@kbn/expect';
import { FtrProviderContext } from '../../../../../../ftr_provider_context';
export default function ({ getPageObjects, getService }: FtrProviderContext) {
const { lens, timePicker, dashboard } = getPageObjects(['lens', 'timePicker', 'dashboard']);
const { svlCommonPage, lens, timePicker, dashboard } = getPageObjects([
'svlCommonPage',
'lens',
'timePicker',
'dashboard',
]);
const panelActions = getService('dashboardPanelActions');
const kibanaServer = getService('kibanaServer');
@ -20,6 +25,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
before(async () => {
await kibanaServer.importExport.load(fixture);
await svlCommonPage.loginWithPrivilegedRole();
});
after(async () => {

View file

@ -9,7 +9,12 @@ import expect from '@kbn/expect';
import { FtrProviderContext } from '../../../../../../ftr_provider_context';
export default function ({ getPageObjects, getService }: FtrProviderContext) {
const { lens, timePicker, dashboard } = getPageObjects(['lens', 'timePicker', 'dashboard']);
const { svlCommonPage, lens, timePicker, dashboard } = getPageObjects([
'svlCommonPage',
'lens',
'timePicker',
'dashboard',
]);
const testSubjects = getService('testSubjects');
const panelActions = getService('dashboardPanelActions');
@ -21,6 +26,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
before(async () => {
await kibanaServer.importExport.load(fixture);
await svlCommonPage.loginWithPrivilegedRole();
});
after(async () => {

View file

@ -9,7 +9,12 @@ import expect from '@kbn/expect';
import { FtrProviderContext } from '../../../../../../ftr_provider_context';
export default function ({ getPageObjects, getService }: FtrProviderContext) {
const { lens, timePicker, dashboard } = getPageObjects(['lens', 'timePicker', 'dashboard']);
const { svlCommonPage, lens, timePicker, dashboard } = getPageObjects([
'svlCommonPage',
'lens',
'timePicker',
'dashboard',
]);
const pieChart = getService('pieChart');
const testSubjects = getService('testSubjects');
@ -22,6 +27,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
before(async () => {
await kibanaServer.importExport.load(fixture);
await svlCommonPage.loginWithPrivilegedRole();
});
after(async () => {

View file

@ -9,7 +9,12 @@ import expect from '@kbn/expect';
import { FtrProviderContext } from '../../../../../../ftr_provider_context';
export default function ({ getPageObjects, getService }: FtrProviderContext) {
const { lens, timePicker, dashboard } = getPageObjects(['lens', 'timePicker', 'dashboard']);
const { svlCommonPage, lens, timePicker, dashboard } = getPageObjects([
'svlCommonPage',
'lens',
'timePicker',
'dashboard',
]);
const testSubjects = getService('testSubjects');
const panelActions = getService('dashboardPanelActions');
@ -22,6 +27,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
before(async () => {
await kibanaServer.importExport.load(fixture);
await svlCommonPage.loginWithPrivilegedRole();
});
after(async () => {

View file

@ -9,7 +9,12 @@ import expect from '@kbn/expect';
import { FtrProviderContext } from '../../../../../../ftr_provider_context';
export default function ({ getPageObjects, getService }: FtrProviderContext) {
const { lens, timePicker, dashboard } = getPageObjects(['lens', 'timePicker', 'dashboard']);
const { svlCommonPage, lens, timePicker, dashboard } = getPageObjects([
'svlCommonPage',
'lens',
'timePicker',
'dashboard',
]);
const testSubjects = getService('testSubjects');
const retry = getService('retry');
@ -22,6 +27,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
before(async () => {
await kibanaServer.importExport.load(fixture);
await svlCommonPage.loginWithPrivilegedRole();
});
after(async () => {

View file

@ -12,11 +12,7 @@ export default ({ loadTestFile, getPageObject }: FtrProviderContext) => {
describe('Visualizations - Group 3', function () {
before(async () => {
await svlCommonPage.login();
});
after(async () => {
await svlCommonPage.forceLogout();
await svlCommonPage.loginWithPrivilegedRole();
});
loadTestFile(require.resolve('./open_in_lens/tsvb'));

View file

@ -15,7 +15,9 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) {
testFiles: [
require.resolve('../../common/discover/embeddable'),
require.resolve('../../common/discover/x_pack'),
require.resolve('../../common/discover_ml_uptime/discover'),
// flaky for Security project, should be checked with Admin role permissions.
// https://github.com/elastic/kibana/issues/172365
// require.resolve('../../common/discover_ml_uptime/discover'),
require.resolve('../../common/context'),
],
junit: {

View file

@ -9,6 +9,8 @@ import { ServerlessProjectType, SERVERLESS_ROLES_ROOT_PATH } from '@kbn/es';
import { SamlSessionManager } from '@kbn/test';
import { readRolesFromResource } from '@kbn/es';
import { resolve } from 'path';
import { Role } from '@kbn/test/src/auth/types';
import { isServerlessProjectType } from '@kbn/es/src/utils';
import { FtrProviderContext } from '../../functional/ftr_provider_context';
export function SvlUserManagerProvider({ getService }: FtrProviderContext) {
@ -17,11 +19,32 @@ export function SvlUserManagerProvider({ getService }: FtrProviderContext) {
const isCloud = !!process.env.TEST_CLOUD;
const kbnServerArgs = config.get('kbnTestServer.serverArgs') as string[];
const projectType = kbnServerArgs
.find((arg) => arg.startsWith('--serverless'))!
.split('=')[1] as ServerlessProjectType;
.filter((arg) => arg.startsWith('--serverless'))
.reduce((acc, arg) => {
const match = arg.match(/--serverless[=\s](\w+)/);
return acc + (match ? match[1] : '');
}, '') as ServerlessProjectType;
const resourcePath = resolve(SERVERLESS_ROLES_ROOT_PATH, projectType, 'roles.yml');
const supportedRoles = readRolesFromResource(resourcePath);
if (!isServerlessProjectType(projectType)) {
throw new Error(`Unsupported serverless projectType: ${projectType}`);
}
const supportedRoles = readRolesFromResource(
resolve(SERVERLESS_ROLES_ROOT_PATH, projectType, 'roles.yml')
);
const defaultRolesToMap = new Map<string, Role>([
['es', 'developer'],
['security', 'editor'],
['oblt', 'editor'],
]);
const getDefaultRole = () => {
if (defaultRolesToMap.has(projectType)) {
return defaultRolesToMap.get(projectType)!;
} else {
throw new Error(`Default role is not defined for ${projectType} project`);
}
};
// Sharing the instance within FTR config run means cookies are persistent for each role between tests.
const sessionManager = new SamlSessionManager({
@ -37,5 +60,18 @@ export function SvlUserManagerProvider({ getService }: FtrProviderContext) {
supportedRoles,
});
return sessionManager;
const DEFAULT_ROLE = getDefaultRole();
return {
async getSessionCookieForRole(role: string) {
return sessionManager.getSessionCookieForRole(role);
},
async getApiCredentialsForRole(role: string) {
return sessionManager.getApiCredentialsForRole(role);
},
async getUserData(role: string) {
return sessionManager.getUserData(role);
},
DEFAULT_ROLE,
};
}