diff --git a/x-pack/platform/test/api_integration/apis/aiops/log_rate_analysis_full_analysis.ts b/x-pack/platform/test/api_integration/apis/aiops/log_rate_analysis_full_analysis.ts index 1b7cd6924661c..e490e6529ae12 100644 --- a/x-pack/platform/test/api_integration/apis/aiops/log_rate_analysis_full_analysis.ts +++ b/x-pack/platform/test/api_integration/apis/aiops/log_rate_analysis_full_analysis.ts @@ -5,8 +5,9 @@ * 2.0. */ +import { Readable } from 'stream'; +import type { ReadableStream } from 'stream/web'; import { orderBy } from 'lodash'; -import fetch from 'node-fetch'; import { format as formatUrl } from 'url'; import expect from '@kbn/expect'; @@ -28,7 +29,17 @@ export default ({ getService }: FtrProviderContext) => { const aiops = getService('aiops'); const supertest = getService('supertest'); const config = getService('config'); - const kibanaServerUrl = formatUrl(config.get('servers.kibana')); + let kibanaServerUrl = formatUrl(config.get('servers.kibana')); + // Native fetch doesn't support credentials in URLs, so we need to extract them + const parsedUrl = new URL(kibanaServerUrl); + const { username, password } = parsedUrl; + parsedUrl.username = ''; + parsedUrl.password = ''; + kibanaServerUrl = parsedUrl.toString().slice(0, -1); // Remove trailing slash + const authHeader: Record = + username && password + ? { Authorization: `Basic ${Buffer.from(`${username}:${password}`).toString('base64')}` } + : {}; const esArchiver = getService('esArchiver'); describe('POST /internal/aiops/log_rate_analysis - full analysis', () => { @@ -175,6 +186,7 @@ export default ({ getService }: FtrProviderContext) => { 'Content-Type': 'application/json', [ELASTIC_HTTP_VERSION_HEADER]: apiVersion, 'kbn-xsrf': 'stream', + ...authHeader, }, body: JSON.stringify(body), }); @@ -199,7 +211,10 @@ export default ({ getService }: FtrProviderContext) => { let chunkCounter = 0; const parseStreamCallback = (c: number) => (chunkCounter = c); - for await (const action of parseStream(stream, parseStreamCallback)) { + for await (const action of parseStream( + Readable.fromWeb(stream as ReadableStream), + parseStreamCallback + )) { expect(action.type).not.to.be('error'); data.push(action); } diff --git a/x-pack/platform/test/api_integration/apis/aiops/log_rate_analysis_groups_only.ts b/x-pack/platform/test/api_integration/apis/aiops/log_rate_analysis_groups_only.ts index 26bbd5c545846..41db4c16cc812 100644 --- a/x-pack/platform/test/api_integration/apis/aiops/log_rate_analysis_groups_only.ts +++ b/x-pack/platform/test/api_integration/apis/aiops/log_rate_analysis_groups_only.ts @@ -5,8 +5,9 @@ * 2.0. */ +import { Readable } from 'stream'; +import type { ReadableStream } from 'stream/web'; import { orderBy } from 'lodash'; -import fetch from 'node-fetch'; import { format as formatUrl } from 'url'; import expect from '@kbn/expect'; @@ -29,7 +30,17 @@ export default ({ getService }: FtrProviderContext) => { const aiops = getService('aiops'); const supertest = getService('supertest'); const config = getService('config'); - const kibanaServerUrl = formatUrl(config.get('servers.kibana')); + let kibanaServerUrl = formatUrl(config.get('servers.kibana')); + // Native fetch doesn't support credentials in URLs, so we need to extract them + const parsedUrl = new URL(kibanaServerUrl); + const { username, password } = parsedUrl; + parsedUrl.username = ''; + parsedUrl.password = ''; + kibanaServerUrl = parsedUrl.toString().slice(0, -1); // Remove trailing slash + const authHeader: Record = + username && password + ? { Authorization: `Basic ${Buffer.from(`${username}:${password}`).toString('base64')}` } + : {}; const esArchiver = getService('esArchiver'); describe('POST /internal/aiops/log_rate_analysis - groups only', () => { @@ -185,6 +196,7 @@ export default ({ getService }: FtrProviderContext) => { 'Content-Type': 'application/json', [ELASTIC_HTTP_VERSION_HEADER]: apiVersion, 'kbn-xsrf': 'stream', + ...authHeader, }, body: JSON.stringify(body), }); @@ -209,7 +221,10 @@ export default ({ getService }: FtrProviderContext) => { let chunkCounter = 0; const parseStreamCallback = (c: number) => (chunkCounter = c); - for await (const action of parseStream(stream, parseStreamCallback)) { + for await (const action of parseStream( + Readable.fromWeb(stream as ReadableStream), + parseStreamCallback + )) { expect(action.type).not.to.be('error'); data.push(action); } diff --git a/x-pack/platform/test/api_integration_basic/apis/aiops/permissions.ts b/x-pack/platform/test/api_integration_basic/apis/aiops/permissions.ts index ce87ad05ef8d5..43f301dd09d3f 100644 --- a/x-pack/platform/test/api_integration_basic/apis/aiops/permissions.ts +++ b/x-pack/platform/test/api_integration_basic/apis/aiops/permissions.ts @@ -5,7 +5,6 @@ * 2.0. */ -import fetch from 'node-fetch'; import { format as formatUrl } from 'url'; import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; @@ -22,7 +21,17 @@ const API_VERSIONS: ApiVersion[] = ['3']; export default ({ getService }: FtrProviderContext) => { const supertest = getService('supertest'); const config = getService('config'); - const kibanaServerUrl = formatUrl(config.get('servers.kibana')); + let kibanaServerUrl = formatUrl(config.get('servers.kibana')); + // Native fetch doesn't support credentials in URLs, so we need to extract them + const parsedUrl = new URL(kibanaServerUrl); + const { username, password } = parsedUrl; + parsedUrl.username = ''; + parsedUrl.password = ''; + kibanaServerUrl = parsedUrl.toString().slice(0, -1); // Remove trailing slash + const authHeader: Record = + username && password + ? { Authorization: `Basic ${Buffer.from(`${username}:${password}`).toString('base64')}` } + : {}; describe('POST /internal/aiops/log_rate_analysis', () => { API_VERSIONS.forEach((apiVersion) => { @@ -55,6 +64,7 @@ export default ({ getService }: FtrProviderContext) => { 'Content-Type': 'application/json', 'kbn-xsrf': 'stream', [ELASTIC_HTTP_VERSION_HEADER]: apiVersion, + ...authHeader, }, body: JSON.stringify(requestBody), });