Skip to content

Commit

Permalink
Fix missing customApiRegistryPromise param for test connection (#5944)
Browse files Browse the repository at this point in the history
* fix missing param and add changelog and test

Signed-off-by: Lu Yu <[email protected]>

* change pr number

Signed-off-by: Lu Yu <[email protected]>

* remove dangling changelog

Signed-off-by: Lu Yu <[email protected]>

---------

Signed-off-by: Lu Yu <[email protected]>
  • Loading branch information
BionIT committed Feb 27, 2024
1 parent e59e506 commit 3355a16
Show file tree
Hide file tree
Showing 4 changed files with 104 additions and 2 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,9 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
- [Discover] Fix missing index pattern field from breaking Discover [#5626](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/5626)
- [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

Expand Down
3 changes: 2 additions & 1 deletion src/plugins/data_source/server/plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,8 @@ export class DataSourcePlugin implements Plugin<DataSourcePluginSetup, DataSourc
router,
dataSourceService,
cryptographyServiceSetup,
authRegistryPromise
authRegistryPromise,
customApiSchemaRegistryPromise
);

const registerCredentialProvider = (method: AuthenticationMethod) => {
Expand Down
96 changes: 96 additions & 0 deletions src/plugins/data_source/server/routes/test_connection.test.ts
Original file line number Diff line number Diff line change
@@ -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<ReturnType<typeof setupServer>>;

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<CryptographyServiceSetup>;
const customApiSchemaRegistry = new CustomApiSchemaRegistry();
let customApiSchemaRegistryPromise: Promise<CustomApiSchemaRegistry>;
let dataSourceClient: ReturnType<typeof opensearchClientMock.createInternalClient>;
let dataSourceServiceSetupMock: DataSourceServiceSetup;
let authRegistryPromiseMock: Promise<IAuthenticationMethodRegistery>;
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,
})
);
});
});
4 changes: 3 additions & 1 deletion src/plugins/data_source/server/routes/test_connection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ export const registerTestConnectionRoute = async (
router: IRouter,
dataSourceServiceSetup: DataSourceServiceSetup,
cryptography: CryptographyServiceSetup,
authRegistryPromise: Promise<IAuthenticationMethodRegistery>
authRegistryPromise: Promise<IAuthenticationMethodRegistery>,
customApiSchemaRegistryPromise: Promise<CustomApiSchemaRegistry>
) => {
const authRegistry = await authRegistryPromise;
router.post(
Expand Down Expand Up @@ -68,6 +69,7 @@ export const registerTestConnectionRoute = async (
testClientDataSourceAttr: dataSourceAttr as DataSourceAttributes,
request,
authRegistry,
customApiSchemaRegistryPromise,
}
);

Expand Down

0 comments on commit 3355a16

Please sign in to comment.