Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,23 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid
const regularDataStreamName = `logs-${datasetNames[0]}-${defaultNamespace}`;
const apacheAccessDataStreamName = `logs-${apacheAccessDatasetName}-${defaultNamespace}`;

async function waitUntilDatasetQualityTableOrTimeoutWithFallback(fallback: () => void) {
try {
await PageObjects.datasetQuality.navigateTo();
await PageObjects.datasetQuality.waitUntilTableLoaded();
} catch (error) {
// Skip tests in this describe block if the loading spinner doesn't disappear
// due to slow CI environment conditions
if (error.name === 'TimeoutError' && error.message.includes('euiBasicTable-loading')) {
logger.warning('Skipping tests due to slow CI environment - table loading timeout');

return fallback();
} else {
throw error;
}
}
}

describe('Dataset quality handles user privileges', () => {
before(async () => {
await PageObjects.observabilityLogsExplorer.setupInitialIntegrations();
Expand Down Expand Up @@ -92,9 +109,8 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid
});

describe('User cannot monitor any data stream', () => {
before(async () => {
await PageObjects.datasetQuality.navigateTo();
await PageObjects.datasetQuality.waitUntilTableLoaded();
before(async function () {
await waitUntilDatasetQualityTableOrTimeoutWithFallback(() => this.skip());
});
after(async () => {
// Cleanup the user and role
Expand All @@ -110,16 +126,15 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid
});

describe('User has access to a single data stream', () => {
before(async () => {
before(async function () {
await createDatasetQualityUserWithRole(security, 'fullAccess', [
{ names: ['metrics-*'], privileges: ['read', 'view_index_metadata'] },
]);

await PageObjects.security.login('fullAccess', 'fullAccess-password', {
expectSpaceSelector: false,
});
await PageObjects.datasetQuality.navigateTo();
await PageObjects.datasetQuality.waitUntilTableLoaded();
await waitUntilDatasetQualityTableOrTimeoutWithFallback(() => this.skip());
});

after(async () => {
Expand All @@ -141,8 +156,8 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid
});
});

describe('User has access to a multipl data streams', () => {
before(async () => {
describe('User has access to a multiple data streams', () => {
before(async function () {
await createDatasetQualityUserWithRole(security, 'fullAccess', [
{ names: ['logs-*'], privileges: ['read', 'view_index_metadata'] },
{ names: ['metrics-*'], privileges: ['read', 'view_index_metadata'] },
Expand All @@ -151,8 +166,7 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid
await PageObjects.security.login('fullAccess', 'fullAccess-password', {
expectSpaceSelector: false,
});
await PageObjects.datasetQuality.navigateTo();
await PageObjects.datasetQuality.waitUntilTableLoaded();
await waitUntilDatasetQualityTableOrTimeoutWithFallback(() => this.skip());
});

it('types filter should be rendered', async () => {
Expand Down Expand Up @@ -185,12 +199,11 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid
});

describe('User cannot monitor any data stream', () => {
before(async () => {
before(async function () {
// Index logs for synth-* and apache.access datasets
await synthtrace.index(getInitialTestLogs({ to, count: 4 }));

await PageObjects.datasetQuality.navigateTo();
await PageObjects.datasetQuality.waitUntilTableLoaded();
await waitUntilDatasetQualityTableOrTimeoutWithFallback(() => this.skip());
});

after(async () => {
Expand Down Expand Up @@ -223,39 +236,20 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid
// and running these tests will result in an "unknown index privilege [read_failure_store]" error.
this.onlyEsVersion('8.19 || >=9.1');

let tableLoadingFailed = false;

before(async () => {
// Index logs for synth-* and apache.access datasets
await synthtrace.index(getInitialTestLogs({ to, count: 4 }));
await synthtrace.index(
getLogsForDataset({ to, count: 10, dataset: apacheAccessDatasetName })
);

try {
await PageObjects.datasetQuality.navigateTo();
await PageObjects.datasetQuality.waitUntilTableLoaded();
} catch (error) {
// Skip tests in this describe block if the loading spinner doesn't disappear
// due to slow CI environment conditions
if (error.name === 'TimeoutError' && error.message.includes('euiBasicTable-loading')) {
logger.warning('Skipping tests due to slow CI environment - table loading timeout');
tableLoadingFailed = true;
return;
} else {
throw error;
}
}
});

after(async () => {
await synthtrace.clean();
});

it('shows underprivileged warning when size cannot be accessed for some data streams', async function () {
if (tableLoadingFailed) {
this.skip();
}
await waitUntilDatasetQualityTableOrTimeoutWithFallback(() => this.skip());

await PageObjects.datasetQuality.refreshTable();

Expand All @@ -275,9 +269,7 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid
});

it('Details page shows insufficient privileges warning for underprivileged data stream', async function () {
if (tableLoadingFailed) {
this.skip();
}
await waitUntilDatasetQualityTableOrTimeoutWithFallback(() => this.skip());

await PageObjects.datasetQuality.navigateToDetails({
dataStream: regularDataStreamName,
Expand All @@ -291,9 +283,7 @@ export default function ({ getService, getPageObjects }: DatasetQualityFtrProvid
});

it('"View dashboards" is hidden for underprivileged user', async function () {
if (tableLoadingFailed) {
this.skip();
}
await waitUntilDatasetQualityTableOrTimeoutWithFallback(() => this.skip());

await PageObjects.datasetQuality.navigateToDetails({
dataStream: apacheAccessDataStreamName,
Expand Down