[Data Streams] Fix forward-compatibility api test failures (#224795)

Fixes https://github.com/elastic/kibana/issues/223990

## Summary

This PR fixes the forward-compatibility test for index mode, which
failed because the index mode was added to Get Data Streams API in 8.19
and 9.1 (see https://github.com/elastic/elasticsearch/pull/122486), so
if Kibana 8.19 is run with Es 9.0, the index mode is always displayed as
"Standard" because Es doesn't return an index mode field.

In this PR, we separate all index mode-related tests into a separate
file, and only run it for Es versions 8.19 or 9.1+.

This was also fixed for functional tests in
https://github.com/elastic/kibana/pull/223129

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
This commit is contained in:
Sonia Sanz Vivas 2025-06-25 13:55:46 +02:00 committed by GitHub
parent b82ab8acb8
commit 493ca9f106
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 92 additions and 69 deletions

View file

@ -14,7 +14,6 @@ import { datastreamsHelpers } from './lib/datastreams.helpers';
export default function ({ getService }: FtrProviderContext) {
const supertest = getService('supertest');
const es = getService('es');
const {
createDataStream,
@ -170,74 +169,6 @@ export default function ({ getService }: FtrProviderContext) {
indexMode: 'standard',
});
});
describe('index mode', () => {
it('correctly returns index mode property based on index settings', async () => {
const logsdbDataStreamName = 'logsdb-test-data-stream';
const indexMode = 'logsdb';
await createDataStream(logsdbDataStreamName, indexMode);
const { body: dataStream } = await supertest
.get(`${API_BASE_PATH}/data_streams/${logsdbDataStreamName}`)
.set('kbn-xsrf', 'xxx')
.expect(200);
expect(dataStream.indexMode).to.eql(indexMode);
await deleteDataStream(logsdbDataStreamName);
});
describe('index mode of logs-*-* data streams', () => {
const logsdbDataStreamName = 'logs-test-ds';
before(async () => {
await createDataStream(logsdbDataStreamName);
});
after(async () => {
await deleteDataStream(logsdbDataStreamName);
});
const logsdbSettings: Array<{
enabled: boolean | null;
prior_logs_usage: boolean;
indexMode: string;
}> = [
{ enabled: true, prior_logs_usage: true, indexMode: 'logsdb' },
{ enabled: false, prior_logs_usage: true, indexMode: 'standard' },
// In stateful Kibana, if prior_logs_usage is set to true, the cluster.logsdb.enabled setting is false by default, so standard index mode
{ enabled: null, prior_logs_usage: true, indexMode: 'standard' },
// In stateful Kibana, if prior_logs_usage is set to false, the cluster.logsdb.enabled setting is true by default, so logsdb index mode
{ enabled: null, prior_logs_usage: false, indexMode: 'logsdb' },
];
// eslint-disable-next-line @typescript-eslint/naming-convention
logsdbSettings.forEach(({ enabled, prior_logs_usage, indexMode }) => {
it(`returns ${indexMode} index mode if logsdb.enabled setting is ${enabled} and logs.prior_logs_usage is ${prior_logs_usage}`, async () => {
await es.cluster.putSettings({
persistent: {
cluster: {
logsdb: {
enabled,
},
},
logsdb: {
prior_logs_usage,
},
},
});
const { body: dataStream } = await supertest
.get(`${API_BASE_PATH}/data_streams/${logsdbDataStreamName}`)
.set('kbn-xsrf', 'xxx')
.expect(200);
expect(dataStream.indexMode).to.eql(indexMode);
});
});
});
});
});
describe('Update', () => {

View file

@ -0,0 +1,91 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import expect from '@kbn/expect';
import { FtrProviderContext } from '../../../ftr_provider_context';
import { API_BASE_PATH } from './constants';
import { datastreamsHelpers } from './lib/datastreams.helpers';
export default function ({ getService }: FtrProviderContext) {
const supertest = getService('supertest');
const es = getService('es');
const { createDataStream, deleteDataStream } = datastreamsHelpers(getService);
describe('Data streams index mode', function () {
// This mutes the forward-compatibility test with Elasticsearch, 8.19 kibana and 9.0 ES.
// They are not expected to work together since the index mode field was added to
// the Get Data Streams API in 8.19 and 9.1, but not in 9.0.
this.onlyEsVersion('8.19 || >=9.1');
it('correctly returns index mode property based on index settings', async () => {
const logsdbDataStreamName = 'logsdb-test-data-stream';
const indexMode = 'logsdb';
await createDataStream(logsdbDataStreamName, indexMode);
const { body: dataStream } = await supertest
.get(`${API_BASE_PATH}/data_streams/${logsdbDataStreamName}`)
.set('kbn-xsrf', 'xxx')
.expect(200);
expect(dataStream.indexMode).to.eql(indexMode);
await deleteDataStream(logsdbDataStreamName);
});
describe('index mode of logs-*-* data streams', () => {
const logsdbDataStreamName = 'logs-test-ds';
before(async () => {
await createDataStream(logsdbDataStreamName);
});
after(async () => {
await deleteDataStream(logsdbDataStreamName);
});
const logsdbSettings: Array<{
enabled: boolean | null;
prior_logs_usage: boolean;
indexMode: string;
}> = [
{ enabled: true, prior_logs_usage: true, indexMode: 'logsdb' },
{ enabled: false, prior_logs_usage: true, indexMode: 'standard' },
// In stateful Kibana, if prior_logs_usage is set to true, the cluster.logsdb.enabled setting is false by default, so standard index mode
{ enabled: null, prior_logs_usage: true, indexMode: 'standard' },
// In stateful Kibana, if prior_logs_usage is set to false, the cluster.logsdb.enabled setting is true by default, so logsdb index mode
{ enabled: null, prior_logs_usage: false, indexMode: 'logsdb' },
];
// eslint-disable-next-line @typescript-eslint/naming-convention
logsdbSettings.forEach(({ enabled, prior_logs_usage, indexMode }) => {
it(`returns ${indexMode} index mode if logsdb.enabled setting is ${enabled} and logs.prior_logs_usage is ${prior_logs_usage}`, async () => {
await es.cluster.putSettings({
persistent: {
cluster: {
logsdb: {
enabled,
},
},
logsdb: {
prior_logs_usage,
},
},
});
const { body: dataStream } = await supertest
.get(`${API_BASE_PATH}/data_streams/${logsdbDataStreamName}`)
.set('kbn-xsrf', 'xxx')
.expect(200);
expect(dataStream.indexMode).to.eql(indexMode);
});
});
});
});
}

View file

@ -14,6 +14,7 @@ export default function ({ loadTestFile }: FtrProviderContext) {
loadTestFile(require.resolve('./settings'));
loadTestFile(require.resolve('./stats'));
loadTestFile(require.resolve('./data_streams'));
loadTestFile(require.resolve('./data_streams_index_mode'));
loadTestFile(require.resolve('./templates'));
loadTestFile(require.resolve('./component_templates'));
loadTestFile(require.resolve('./cluster_nodes'));