kibana/test/interactive_setup_api_integration/tests/enrollment_flow.ts
Spencer 542b381fa5
[ftr] automatically determine config run order (#130983)
* [ftr] automatically determine config run order

* split lens config into two groups

* support ftr configs always running against CI

* Split detection_engine_api_integration rule exception list tests

* Add configs from previous commit

* [ftr] remove testMetadata and maintain a unique lifecycle instance per run

* Revert "[ftr] remove testMetadata and maintain a unique lifecycle instance per run"

This reverts commit d2b4fdb824.

* Split alerting_api_integration/security_and_spaces tests

* Add groups to yaml

* Revert "Revert "[ftr] remove testMetadata and maintain a unique lifecycle instance per run""

This reverts commit 56232eea68.

* stop ES more forcefully and fix timeout

* only cleanup lifecycle phases when the cleanup is totally complete

* only use kill when cleaning up an esTestInstance

* fix broken import

* fix runOptions.alwaysUseSource implementation

* fix config access

* fix x-pack/ccs config

* fix ml import file paths

* update kibana build id

* revert array.concat() change

* fix baseConfig usage

* fix pie chart data

* split up maps tests

* pull in all of group5 so that es archives are loaded correctly

* add to ftr configs.yml

* fix pie chart data without breaking legacy version

* fix more pie_chart stuff in new vis lib

* restore normal PR tasks

* bump kibana-buildkite-library

* remove ciGroup validation

* remove the script which is no longer called from checks.sh

* [CI] Auto-commit changed files from 'yarn kbn run build -i @kbn/pm'

* adapt flaky test runner scripts to handle ftrConfig paths

* fix types in alerting_api_integration

* improve flaky config parsing and use non-local var name for passing explicit configs to ftr_configs.sh

* Split xpack dashboard tests

* Add configs

* [flaky] remove key from ftr-config steps

* [CI] Auto-commit changed files from 'node scripts/eslint --no-cache --fix'

* restore cypress builds

* remove ciGroups from FTR config files

* fixup some docs

* add temporary script to hunt for FTR config files

* use config.base.js naming for clarity

* use script to power ftr_configs.yml

* remove usage of removed x-pack/scripts/functional_tests

* fix test names in dashboard snapshots

* bump kibana-buildkite-library

* Try retrying only failed configs

* be a little quieter about trying to get testStats from configs with testRunners defined

* Remove test code

* bump kibana-buildkite-library

* update es_snapshot and on_merge jobs too

* track duration and exit code for each config and print it at the end of the script

* store results in order, rather than by key, in case there are duplicates in $config

* bash is hard

* fix env source and use +e rather than disabling e for whole file

* bash sucks

* print config summary in jest jobs too

* define results in jest_parallel.sh

* simplify config summary print, format times a little better

* fix reference to unbound time variable, use better variable name

* skip the newline between each result

* finish with the nitpicking

* sync changes with ftr_configs.sh

* refuse to execute config files which aren't listed in the .buildkite/ftr_configs.yml

* fix config.edge.js base config import paths

* fix some readmes

* resolve paths from ftr_configs manifest

* fix readConfigFile tests

* just allow __fixtures__ configs

* list a few more cypress config files

* install the main branch of kibana-buildkite-library

* split up lens group1

* move ml data_visualizer tests to their own config

* fix import paths

* fix more imports

* install specific commit of buildkite-pipeline-library

* sort configs in ftr_configs.yml

* bump kibana-buildkite-library

* remove temporary script

* fix env var for limiting config types

* Update docs/developer/contributing/development-functional-tests.asciidoc

Co-authored-by: Christiane (Tina) Heiligers <christiane.heiligers@elastic.co>

* produce a JUnit report for saved objects field count

* apply standard concurrency limits from flaky test runner

* support customizing FTR concurrency via the env

Co-authored-by: Brian Seeders <brian.seeders@elastic.co>
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Christiane (Tina) Heiligers <christiane.heiligers@elastic.co>
2022-05-04 17:05:58 -05:00

149 lines
5.1 KiB
TypeScript

/*
* 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 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
import expect from '@kbn/expect';
import { getUrl } from '@kbn/test';
import { hasKibanaBooted } from '../fixtures/test_helpers';
import { getElasticsearchCaCertificate } from '../fixtures/tls_tools';
import type { FtrProviderContext } from '../ftr_provider_context';
export default function (context: FtrProviderContext) {
const supertest = context.getService('supertest');
const es = context.getService('es');
const log = context.getService('log');
const config = context.getService('config');
describe('Interactive setup APIs - Enrollment flow', function () {
this.tags('skipCloud');
let kibanaVerificationCode: string;
let elasticsearchCaFingerprint: string;
before(async () => {
const esServerConfig = config.get('servers.elasticsearch');
elasticsearchCaFingerprint = (
await getElasticsearchCaCertificate(esServerConfig.host, esServerConfig.port)
).fingerprint256.replace(/:/g, '');
kibanaVerificationCode = (
await supertest.get('/test_endpoints/verification_code').expect(200)
).body.verificationCode;
});
let enrollmentAPIKey: string;
beforeEach(async () => {
const apiResponse = await es.security.createApiKey({ body: { name: 'enrollment_api_key' } });
enrollmentAPIKey = Buffer.from(`${apiResponse.id}:${apiResponse.api_key}`).toString('base64');
});
afterEach(async () => {
await es.security.invalidateApiKey({ body: { name: 'enrollment_api_key' } });
});
it('fails to enroll with invalid authentication code', async () => {
const esHost = getUrl.baseUrl(config.get('servers.elasticsearch'));
const enrollPayload = {
apiKey: enrollmentAPIKey,
code: '000000',
caFingerprint: elasticsearchCaFingerprint,
hosts: [esHost],
};
log.debug(`Enroll payload ${JSON.stringify(enrollPayload)}`);
await supertest
.post('/internal/interactive_setup/enroll')
.set('kbn-xsrf', 'xxx')
.send(enrollPayload)
.expect(403, { statusCode: 403, error: 'Forbidden', message: 'Forbidden' });
});
it('fails to enroll with invalid CA fingerprint', async () => {
const esHost = getUrl.baseUrl(config.get('servers.elasticsearch'));
const enrollPayload = {
apiKey: enrollmentAPIKey,
code: kibanaVerificationCode,
caFingerprint: '3FDAEE71A3604070E6AE6B01412D19772DE5AE129F69C413F0453B293D9BE65D',
hosts: [esHost],
};
log.debug(`Enroll payload ${JSON.stringify(enrollPayload)}`);
await supertest
.post('/internal/interactive_setup/enroll')
.set('kbn-xsrf', 'xxx')
.send(enrollPayload)
.expect(500, {
statusCode: 500,
error: 'Internal Server Error',
message: 'Failed to enroll.',
attributes: { type: 'enroll_failure' },
});
});
it('fails to enroll with invalid api key', async function () {
const esServerConfig = config.get('servers.elasticsearch');
const enrollPayload = {
apiKey: enrollmentAPIKey,
code: kibanaVerificationCode,
caFingerprint: elasticsearchCaFingerprint,
hosts: [getUrl.baseUrl(esServerConfig)],
};
log.debug(`Enroll payload ${JSON.stringify(enrollPayload)}`);
// Invalidate API key.
await es.security.invalidateApiKey({ body: { name: 'enrollment_api_key' } });
await supertest
.post('/internal/interactive_setup/enroll')
.set('kbn-xsrf', 'xxx')
.send(enrollPayload)
.expect(500, {
statusCode: 500,
error: 'Internal Server Error',
message: 'Failed to enroll.',
attributes: { type: 'enroll_failure' },
});
});
it('should be able to enroll with valid authentication code', async function () {
this.timeout(60000);
const esServerConfig = config.get('servers.elasticsearch');
const enrollPayload = {
apiKey: enrollmentAPIKey,
code: kibanaVerificationCode,
caFingerprint: elasticsearchCaFingerprint,
hosts: [getUrl.baseUrl(esServerConfig)],
};
log.debug(`Enroll payload ${JSON.stringify(enrollPayload)}`);
await supertest
.post('/internal/interactive_setup/enroll')
.set('kbn-xsrf', 'xxx')
.send(enrollPayload)
.expect(204, {});
// Enroll should no longer accept requests.
await supertest
.post('/internal/interactive_setup/enroll')
.set('kbn-xsrf', 'xxx')
.send(enrollPayload)
.expect(400, {
error: 'Bad Request',
message: 'Cannot process request outside of preboot stage.',
statusCode: 400,
attributes: { type: 'outside_preboot_stage' },
});
expect(await hasKibanaBooted(context)).to.be(true);
});
});
}