Skip to content

Commit 493ca9f

Browse files
[Data Streams] Fix forward-compatibility api test failures (#224795)
Fixes #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 elastic/elasticsearch#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 #223129 --------- Co-authored-by: kibanamachine <[email protected]>
1 parent b82ab8a commit 493ca9f

File tree

3 files changed

+92
-69
lines changed

3 files changed

+92
-69
lines changed

x-pack/platform/test/api_integration/apis/management/index_management/data_streams.ts

Lines changed: 0 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import { datastreamsHelpers } from './lib/datastreams.helpers';
1414

1515
export default function ({ getService }: FtrProviderContext) {
1616
const supertest = getService('supertest');
17-
const es = getService('es');
1817

1918
const {
2019
createDataStream,
@@ -170,74 +169,6 @@ export default function ({ getService }: FtrProviderContext) {
170169
indexMode: 'standard',
171170
});
172171
});
173-
174-
describe('index mode', () => {
175-
it('correctly returns index mode property based on index settings', async () => {
176-
const logsdbDataStreamName = 'logsdb-test-data-stream';
177-
const indexMode = 'logsdb';
178-
179-
await createDataStream(logsdbDataStreamName, indexMode);
180-
181-
const { body: dataStream } = await supertest
182-
.get(`${API_BASE_PATH}/data_streams/${logsdbDataStreamName}`)
183-
.set('kbn-xsrf', 'xxx')
184-
.expect(200);
185-
186-
expect(dataStream.indexMode).to.eql(indexMode);
187-
188-
await deleteDataStream(logsdbDataStreamName);
189-
});
190-
191-
describe('index mode of logs-*-* data streams', () => {
192-
const logsdbDataStreamName = 'logs-test-ds';
193-
194-
before(async () => {
195-
await createDataStream(logsdbDataStreamName);
196-
});
197-
198-
after(async () => {
199-
await deleteDataStream(logsdbDataStreamName);
200-
});
201-
202-
const logsdbSettings: Array<{
203-
enabled: boolean | null;
204-
prior_logs_usage: boolean;
205-
indexMode: string;
206-
}> = [
207-
{ enabled: true, prior_logs_usage: true, indexMode: 'logsdb' },
208-
{ enabled: false, prior_logs_usage: true, indexMode: 'standard' },
209-
// In stateful Kibana, if prior_logs_usage is set to true, the cluster.logsdb.enabled setting is false by default, so standard index mode
210-
{ enabled: null, prior_logs_usage: true, indexMode: 'standard' },
211-
// In stateful Kibana, if prior_logs_usage is set to false, the cluster.logsdb.enabled setting is true by default, so logsdb index mode
212-
{ enabled: null, prior_logs_usage: false, indexMode: 'logsdb' },
213-
];
214-
215-
// eslint-disable-next-line @typescript-eslint/naming-convention
216-
logsdbSettings.forEach(({ enabled, prior_logs_usage, indexMode }) => {
217-
it(`returns ${indexMode} index mode if logsdb.enabled setting is ${enabled} and logs.prior_logs_usage is ${prior_logs_usage}`, async () => {
218-
await es.cluster.putSettings({
219-
persistent: {
220-
cluster: {
221-
logsdb: {
222-
enabled,
223-
},
224-
},
225-
logsdb: {
226-
prior_logs_usage,
227-
},
228-
},
229-
});
230-
231-
const { body: dataStream } = await supertest
232-
.get(`${API_BASE_PATH}/data_streams/${logsdbDataStreamName}`)
233-
.set('kbn-xsrf', 'xxx')
234-
.expect(200);
235-
236-
expect(dataStream.indexMode).to.eql(indexMode);
237-
});
238-
});
239-
});
240-
});
241172
});
242173

243174
describe('Update', () => {
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the Elastic License
4+
* 2.0; you may not use this file except in compliance with the Elastic License
5+
* 2.0.
6+
*/
7+
8+
import expect from '@kbn/expect';
9+
10+
import { FtrProviderContext } from '../../../ftr_provider_context';
11+
import { API_BASE_PATH } from './constants';
12+
import { datastreamsHelpers } from './lib/datastreams.helpers';
13+
14+
export default function ({ getService }: FtrProviderContext) {
15+
const supertest = getService('supertest');
16+
const es = getService('es');
17+
18+
const { createDataStream, deleteDataStream } = datastreamsHelpers(getService);
19+
20+
describe('Data streams index mode', function () {
21+
// This mutes the forward-compatibility test with Elasticsearch, 8.19 kibana and 9.0 ES.
22+
// They are not expected to work together since the index mode field was added to
23+
// the Get Data Streams API in 8.19 and 9.1, but not in 9.0.
24+
this.onlyEsVersion('8.19 || >=9.1');
25+
it('correctly returns index mode property based on index settings', async () => {
26+
const logsdbDataStreamName = 'logsdb-test-data-stream';
27+
const indexMode = 'logsdb';
28+
29+
await createDataStream(logsdbDataStreamName, indexMode);
30+
31+
const { body: dataStream } = await supertest
32+
.get(`${API_BASE_PATH}/data_streams/${logsdbDataStreamName}`)
33+
.set('kbn-xsrf', 'xxx')
34+
.expect(200);
35+
36+
expect(dataStream.indexMode).to.eql(indexMode);
37+
38+
await deleteDataStream(logsdbDataStreamName);
39+
});
40+
41+
describe('index mode of logs-*-* data streams', () => {
42+
const logsdbDataStreamName = 'logs-test-ds';
43+
44+
before(async () => {
45+
await createDataStream(logsdbDataStreamName);
46+
});
47+
48+
after(async () => {
49+
await deleteDataStream(logsdbDataStreamName);
50+
});
51+
52+
const logsdbSettings: Array<{
53+
enabled: boolean | null;
54+
prior_logs_usage: boolean;
55+
indexMode: string;
56+
}> = [
57+
{ enabled: true, prior_logs_usage: true, indexMode: 'logsdb' },
58+
{ enabled: false, prior_logs_usage: true, indexMode: 'standard' },
59+
// In stateful Kibana, if prior_logs_usage is set to true, the cluster.logsdb.enabled setting is false by default, so standard index mode
60+
{ enabled: null, prior_logs_usage: true, indexMode: 'standard' },
61+
// In stateful Kibana, if prior_logs_usage is set to false, the cluster.logsdb.enabled setting is true by default, so logsdb index mode
62+
{ enabled: null, prior_logs_usage: false, indexMode: 'logsdb' },
63+
];
64+
65+
// eslint-disable-next-line @typescript-eslint/naming-convention
66+
logsdbSettings.forEach(({ enabled, prior_logs_usage, indexMode }) => {
67+
it(`returns ${indexMode} index mode if logsdb.enabled setting is ${enabled} and logs.prior_logs_usage is ${prior_logs_usage}`, async () => {
68+
await es.cluster.putSettings({
69+
persistent: {
70+
cluster: {
71+
logsdb: {
72+
enabled,
73+
},
74+
},
75+
logsdb: {
76+
prior_logs_usage,
77+
},
78+
},
79+
});
80+
81+
const { body: dataStream } = await supertest
82+
.get(`${API_BASE_PATH}/data_streams/${logsdbDataStreamName}`)
83+
.set('kbn-xsrf', 'xxx')
84+
.expect(200);
85+
86+
expect(dataStream.indexMode).to.eql(indexMode);
87+
});
88+
});
89+
});
90+
});
91+
}

x-pack/platform/test/api_integration/apis/management/index_management/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export default function ({ loadTestFile }: FtrProviderContext) {
1414
loadTestFile(require.resolve('./settings'));
1515
loadTestFile(require.resolve('./stats'));
1616
loadTestFile(require.resolve('./data_streams'));
17+
loadTestFile(require.resolve('./data_streams_index_mode'));
1718
loadTestFile(require.resolve('./templates'));
1819
loadTestFile(require.resolve('./component_templates'));
1920
loadTestFile(require.resolve('./cluster_nodes'));

0 commit comments

Comments
 (0)