[Obs AI Assistant] Add alerts test to serverless (#205524) (#205530)

Closes https://github.com/elastic/kibana/issues/205524

## Summary

Adds the alerts.spec to serverless tests. It's skipped in MKI because of
the LLM proxy. There is an open issue for this -
https://github.com/elastic/kibana/issues/192751

### Checklist

- [x] [Unit or functional
tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)
were updated or added to match the most common scenarios
- [x] The PR description includes the appropriate Release Notes section,
and the correct `release_note:*` label is applied per the
[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)
This commit is contained in:
Viduni Wickramarachchi 2025-01-03 16:01:05 -05:00 committed by GitHub
parent 283bcf5a15
commit f7b9d15df4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -0,0 +1,93 @@
/*
* 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 { MessageAddEvent, MessageRole } from '@kbn/observability-ai-assistant-plugin/common';
import expect from '@kbn/expect';
import {
LlmProxy,
createLlmProxy,
} from '@kbn/test-suites-xpack/observability_ai_assistant_api_integration/common/create_llm_proxy';
import { FtrProviderContext } from '../../../common/ftr_provider_context';
import { getMessageAddedEvents, invokeChatCompleteWithFunctionRequest } from './helpers';
import {
createProxyActionConnector,
deleteActionConnector,
} from '../../../common/action_connectors';
import type { InternalRequestHeader, RoleCredentials } from '../../../../../../../shared/services';
export default function ApiTest({ getService }: FtrProviderContext) {
const supertest = getService('supertest');
const log = getService('log');
const svlUserManager = getService('svlUserManager');
const svlCommonApi = getService('svlCommonApi');
const observabilityAIAssistantAPIClient = getService('observabilityAIAssistantAPIClient');
describe('when calling the alerts function', function () {
// TODO: https://github.com/elastic/kibana/issues/192751
this.tags(['skipMKI']);
let roleAuthc: RoleCredentials;
let internalReqHeader: InternalRequestHeader;
let proxy: LlmProxy;
let connectorId: string;
let alertsEvents: MessageAddEvent[];
const start = 'now-100h';
const end = 'now';
before(async () => {
roleAuthc = await svlUserManager.createM2mApiKeyWithRoleScope('editor');
internalReqHeader = svlCommonApi.getInternalRequestHeader();
proxy = await createLlmProxy(log);
connectorId = await createProxyActionConnector({
supertest,
log,
port: proxy.getPort(),
roleAuthc,
internalReqHeader,
});
void proxy
.intercept('conversation', () => true, 'Hello from LLM Proxy')
.completeAfterIntercept();
const alertsResponseBody = await invokeChatCompleteWithFunctionRequest({
connectorId,
observabilityAIAssistantAPIClient,
functionCall: {
name: 'alerts',
trigger: MessageRole.Assistant,
arguments: JSON.stringify({ start, end }),
},
});
await proxy.waitForAllInterceptorsSettled();
alertsEvents = getMessageAddedEvents(alertsResponseBody);
});
after(async () => {
proxy.close();
await deleteActionConnector({ supertest, connectorId, log, roleAuthc, internalReqHeader });
await svlUserManager.invalidateM2mApiKeyWithRoleScope(roleAuthc);
});
// This test ensures that invoking the alerts function does not result in an error.
it('should execute the function without any errors', async () => {
const alertsFunctionResponse = alertsEvents[0];
expect(alertsFunctionResponse.message.message.name).to.be('alerts');
const parsedAlertsResponse = JSON.parse(alertsFunctionResponse.message.message.content!);
expect(parsedAlertsResponse).not.to.have.property('error');
expect(parsedAlertsResponse).to.have.property('total');
expect(parsedAlertsResponse).to.have.property('alerts');
expect(parsedAlertsResponse.alerts).to.be.an('array');
expect(parsedAlertsResponse.total).to.be(0);
expect(parsedAlertsResponse.alerts.length).to.be(0);
});
});
}