From 6d5560e00c31748ddfbcd031241d67abaaf58c91 Mon Sep 17 00:00:00 2001 From: Lu Yu Date: Mon, 26 Feb 2024 20:46:51 -0800 Subject: [PATCH 1/2] Fix missing customApiRegistryPromise param for test connection (#5944) * fix missing param and add changelog and test Signed-off-by: Lu Yu * change pr number Signed-off-by: Lu Yu * remove dangling changelog Signed-off-by: Lu Yu --------- Signed-off-by: Lu Yu --- CHANGELOG.md | 2 + src/plugins/data_source/server/plugin.ts | 3 +- .../server/routes/test_connection.test.ts | 96 +++++++++++++++++++ .../server/routes/test_connection.ts | 4 +- 4 files changed, 103 insertions(+), 2 deletions(-) create mode 100644 src/plugins/data_source/server/routes/test_connection.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 30258724f82a..7b47a399d60c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -96,6 +96,8 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) - [BUG] Remove duplicate sample data as id 90943e30-9a47-11e8-b64d-95841ca0b247 ([5668](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/5668)) - [BUG][Multiple Datasource] Fix datasource testing connection unexpectedly passed with wrong endpoint [#5663](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/5663) - [Table Visualization] Fix filter action buttons for split table aggregations ([#5619](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/5619)) +- [BUG][Multiple Datasource] Fix missing customApiRegistryPromise param for test connection ([#5944](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/5944)) + ### 🚞 Infrastructure diff --git a/src/plugins/data_source/server/plugin.ts b/src/plugins/data_source/server/plugin.ts index c75e55809781..77ca0dd7b8a7 100644 --- a/src/plugins/data_source/server/plugin.ts +++ b/src/plugins/data_source/server/plugin.ts @@ -129,7 +129,8 @@ export class DataSourcePlugin implements Plugin { diff --git a/src/plugins/data_source/server/routes/test_connection.test.ts b/src/plugins/data_source/server/routes/test_connection.test.ts new file mode 100644 index 000000000000..888a241e464d --- /dev/null +++ b/src/plugins/data_source/server/routes/test_connection.test.ts @@ -0,0 +1,96 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import supertest from 'supertest'; +import { UnwrapPromise } from '@osd/utility-types'; +import { setupServer } from '../../../../../src/core/server/test_utils'; + +import { + IAuthenticationMethodRegistery, + authenticationMethodRegisteryMock, +} from '../auth_registry'; +import { CustomApiSchemaRegistry } from '../schema_registry'; +import { DataSourceServiceSetup } from '../../server/data_source_service'; +import { CryptographyServiceSetup } from '../cryptography_service'; +import { registerTestConnectionRoute } from './test_connection'; +import { AuthType } from '../../common/data_sources'; +// eslint-disable-next-line @osd/eslint/no-restricted-paths +import { opensearchClientMock } from '../../../../../src/core/server/opensearch/client/mocks'; + +type SetupServerReturn = UnwrapPromise>; + +const URL = '/internal/data-source-management/validate'; + +describe(`Test connection ${URL}`, () => { + let server: SetupServerReturn['server']; + let httpSetup: SetupServerReturn['httpSetup']; + let handlerContext: SetupServerReturn['handlerContext']; + let cryptographyMock: jest.Mocked; + const customApiSchemaRegistry = new CustomApiSchemaRegistry(); + let customApiSchemaRegistryPromise: Promise; + let dataSourceClient: ReturnType; + let dataSourceServiceSetupMock: DataSourceServiceSetup; + let authRegistryPromiseMock: Promise; + const dataSourceAttr = { + endpoint: 'https://test.com', + auth: { + type: AuthType.UsernamePasswordType, + credentials: { + username: 'testUser', + password: 'testPassword', + }, + }, + }; + + beforeEach(async () => { + ({ server, httpSetup, handlerContext } = await setupServer()); + customApiSchemaRegistryPromise = Promise.resolve(customApiSchemaRegistry); + authRegistryPromiseMock = Promise.resolve(authenticationMethodRegisteryMock.create()); + dataSourceClient = opensearchClientMock.createInternalClient(); + + dataSourceServiceSetupMock = { + getDataSourceClient: jest.fn(() => Promise.resolve(dataSourceClient)), + getDataSourceLegacyClient: jest.fn(), + }; + + const router = httpSetup.createRouter(''); + dataSourceClient.info.mockImplementationOnce(() => + opensearchClientMock.createSuccessTransportRequestPromise({ cluster_name: 'testCluster' }) + ); + registerTestConnectionRoute( + router, + dataSourceServiceSetupMock, + cryptographyMock, + authRegistryPromiseMock, + customApiSchemaRegistryPromise + ); + + await server.start(); + }); + + afterEach(async () => { + await server.stop(); + }); + + it('shows successful response', async () => { + const result = await supertest(httpSetup.server.listener) + .post(URL) + .send({ + id: 'testId', + dataSourceAttr, + }) + .expect(200); + expect(result.body).toEqual({ success: true }); + expect(dataSourceServiceSetupMock.getDataSourceClient).toHaveBeenCalledWith( + expect.objectContaining({ + savedObjects: handlerContext.savedObjects.client, + cryptography: cryptographyMock, + dataSourceId: 'testId', + testClientDataSourceAttr: dataSourceAttr, + customApiSchemaRegistryPromise, + }) + ); + }); +}); diff --git a/src/plugins/data_source/server/routes/test_connection.ts b/src/plugins/data_source/server/routes/test_connection.ts index e1205687bd17..b4c3d091aa35 100644 --- a/src/plugins/data_source/server/routes/test_connection.ts +++ b/src/plugins/data_source/server/routes/test_connection.ts @@ -15,7 +15,8 @@ export const registerTestConnectionRoute = async ( router: IRouter, dataSourceServiceSetup: DataSourceServiceSetup, cryptography: CryptographyServiceSetup, - authRegistryPromise: Promise + authRegistryPromise: Promise, + customApiSchemaRegistryPromise: Promise ) => { const authRegistry = await authRegistryPromise; router.post( @@ -68,6 +69,7 @@ export const registerTestConnectionRoute = async ( testClientDataSourceAttr: dataSourceAttr as DataSourceAttributes, request, authRegistry, + customApiSchemaRegistryPromise, } ); From 53545ac4f442b93e6916eb1a3b69433ba9c35548 Mon Sep 17 00:00:00 2001 From: Ashwin P Chandran Date: Tue, 27 Feb 2024 09:18:30 -0800 Subject: [PATCH 2/2] skip workflow for non release branches on push (#5964) Signed-off-by: Ashwin P Chandran --- .github/workflows/build_and_test_workflow.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_and_test_workflow.yml b/.github/workflows/build_and_test_workflow.yml index c954520a645d..36d75b5b5369 100644 --- a/.github/workflows/build_and_test_workflow.yml +++ b/.github/workflows/build_and_test_workflow.yml @@ -6,7 +6,7 @@ name: Build and test # trigger on every commit push and PR for all branches except pushes for backport branches on: push: - branches: ['**', '!backport/**'] + branches: ['main', '[0-9].x', '[0-9].[0=9]+'] # Run the functional test on push for only release branches paths-ignore: - '**/*.md' - 'docs/**'