Skip to content

Commit

Permalink
migrate es query rule tests to the deployment agnostic framework (ela…
Browse files Browse the repository at this point in the history
…stic#195715)

Fixes elastic#183395

This PR migrates the ES query rule tests to the [deployment agnostic
framework](https://github.com/elastic/kibana/tree/main/x-pack/test/api_integration/deployment_agnostic)

### TODO

- [x] Migrate ES rule tests into the deployment agnostic solution
- [ ] Test in MKI before merging

### How to run tests locally

To run serverless
```
node scripts/functional_tests_server --config x-pack/test/api_integration/deployment_agnostic/configs/serverless/oblt.serverless.config.ts
node scripts/functional_test_runner --config x-pack/test/api_integration/deployment_agnostic/configs/serverless/oblt.serverless.config.ts --grep="ElasticSearch query rule"
```

To run stateful
```
node scripts/functional_tests_server --config x-pack/test/api_integration/deployment_agnostic/configs/stateful/oblt.stateful.config.ts
node scripts/functional_test_runner --config x-pack/test/api_integration/deployment_agnostic/configs/stateful/oblt.stateful.config.ts --grep="ElasticSearch query rule"
```

### How to run tests on MKI

According to this
[discussion](elastic/observability-dev#3519 (comment)),
we should test in MKI environment before merging. For details on how to
run in MKI, see [this section of the
document](https://docs.google.com/document/d/1tiax7xoDYwFXYZjRTgVKkVMjN-SQzBWk4yn1JY6Z5UY/edit#heading=h.ece2z8p74izh)
and [this
readme](https://github.com/elastic/kibana/blob/main/x-pack/test_serverless/README.md#run-tests-on-mki).

Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
Co-authored-by: Maryam Saeidi <maryam.saeidi@elastic.co>
(cherry picked from commit 512bfcc)

# Conflicts:
#	x-pack/test/api_integration/deployment_agnostic/apis/observability/alerting/index.ts
  • Loading branch information
mgiota committed Nov 5, 2024
1 parent e932099 commit 5332db8
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,22 @@
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
/*
* 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 { InternalRequestHeader, RoleCredentials } from '../../../../shared/services';
import { RoleCredentials, InternalRequestHeader } from '@kbn/ftr-common-functional-services';
import { DeploymentAgnosticFtrProviderContext } from '../../../ftr_provider_context';

export default function ({ getService }: FtrProviderContext) {
export default function ({ getService }: DeploymentAgnosticFtrProviderContext) {
const esClient = getService('es');
const supertest = getService('supertest');
const samlAuth = getService('samlAuth');
const supertestWithoutAuth = getService('supertestWithoutAuth');
const esDeleteAllIndices = getService('esDeleteAllIndices');
const alertingApi = getService('alertingApi');
const svlCommonApi = getService('svlCommonApi');
const svlUserManager = getService('svlUserManager');
let roleAuthc: RoleCredentials;
const config = getService('config');
const isServerless = config.get('serverless');
const expectedConsumer = isServerless ? 'observability' : 'logs';

let adminRoleAuthc: RoleCredentials;
let internalReqHeader: InternalRequestHeader;

describe('ElasticSearch query rule', () => {
Expand All @@ -31,34 +29,40 @@ export default function ({ getService }: FtrProviderContext) {
let ruleId: string;

before(async () => {
roleAuthc = await svlUserManager.createM2mApiKeyWithRoleScope('admin');
internalReqHeader = svlCommonApi.getInternalRequestHeader();
adminRoleAuthc = await samlAuth.createM2mApiKeyWithRoleScope('admin');
internalReqHeader = samlAuth.getInternalRequestHeader();
});

after(async () => {
await supertest.delete(`/api/alerting/rule/${ruleId}`).set(internalReqHeader);
await supertest.delete(`/api/actions/connector/${actionId}`).set(internalReqHeader);
await supertestWithoutAuth
.delete(`/api/alerting/rule/${ruleId}`)
.set(adminRoleAuthc.apiKeyHeader)
.set(internalReqHeader);
await supertestWithoutAuth
.delete(`/api/actions/connector/${actionId}`)
.set(adminRoleAuthc.apiKeyHeader)
.set(internalReqHeader);

await esClient.deleteByQuery({
index: '.kibana-event-log-*',
query: { term: { 'rule.id': ruleId } },
conflicts: 'proceed',
});
await esDeleteAllIndices([ALERT_ACTION_INDEX]);
await svlUserManager.invalidateM2mApiKeyWithRoleScope(roleAuthc);
await samlAuth.invalidateM2mApiKeyWithRoleScope(adminRoleAuthc);
});

describe('Rule creation', () => {
it('creates rule successfully', async () => {
actionId = await alertingApi.createIndexConnector({
roleAuthc,
roleAuthc: adminRoleAuthc,
name: 'Index Connector: Alerting API test',
indexName: ALERT_ACTION_INDEX,
});

const createdRule = await alertingApi.helpers.createEsQueryRule({
roleAuthc,
consumer: 'observability',
roleAuthc: adminRoleAuthc,
consumer: expectedConsumer,
name: 'always fire',
ruleTypeId: RULE_TYPE_ID,
params: {
Expand Down Expand Up @@ -104,17 +108,17 @@ export default function ({ getService }: FtrProviderContext) {

it('should be active', async () => {
const executionStatus = await alertingApi.waitForRuleStatus({
roleAuthc,
roleAuthc: adminRoleAuthc,
ruleId,
expectedStatus: 'active',
});
expect(executionStatus).to.be('active');
});

it('should find the created rule with correct information about the consumer', async () => {
const match = await alertingApi.findInRules(roleAuthc, ruleId);
const match = await alertingApi.findInRules(adminRoleAuthc, ruleId);
expect(match).not.to.be(undefined);
expect(match.consumer).to.be('observability');
expect(match.consumer).to.be(expectedConsumer);
});
});
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@
import { DeploymentAgnosticFtrProviderContext } from '../../../ftr_provider_context';

export default function ({ loadTestFile }: DeploymentAgnosticFtrProviderContext) {
describe('SLO - Burn rate rule', () => {
describe('Observability Alerting', () => {
loadTestFile(require.resolve('./burn_rate_rule'));
loadTestFile(require.resolve('./custom_threshold'));
loadTestFile(require.resolve('./es_query_rule'));
});
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ export default function ({ loadTestFile }: FtrProviderContext) {
loadTestFile(require.resolve('./apm_api_integration/service_maps/service_maps'));
loadTestFile(require.resolve('./apm_api_integration/traces/critical_path'));
loadTestFile(require.resolve('./cases'));
loadTestFile(require.resolve('./es_query_rule/es_query_rule'));
loadTestFile(require.resolve('./slos'));
loadTestFile(require.resolve('./synthetics'));
loadTestFile(require.resolve('./dataset_quality_api_integration'));
Expand Down

0 comments on commit 5332db8

Please sign in to comment.