From 580184d9489ab1d448820af93ed84aa50eb1c136 Mon Sep 17 00:00:00 2001 From: Isla Koenigsknecht Date: Mon, 30 Sep 2024 10:33:30 -0400 Subject: [PATCH] Actually fix tests? --- packages/backend/src/backendManager.ts | 12 ++++++ .../src/nest/storage/storage.service.ts | 38 ++++++++++++++++--- .../src/rtl-tests/community.create.test.tsx | 5 +++ .../src/rtl-tests/community.join.test.tsx | 5 +++ packages/identity/src/test/helpers.ts | 30 ++++++++------- .../src/utils/tests/factories.ts | 3 ++ 6 files changed, 74 insertions(+), 19 deletions(-) diff --git a/packages/backend/src/backendManager.ts b/packages/backend/src/backendManager.ts index bf86ba95a..fa3252c6a 100644 --- a/packages/backend/src/backendManager.ts +++ b/packages/backend/src/backendManager.ts @@ -12,6 +12,7 @@ import { INestApplicationContext } from '@nestjs/common' import { OpenServices, validateOptions } from './options' import { SOCKS_PROXY_AGENT } from './nest/const' import { createLogger } from './nest/common/logger' +import { CryptoEngine, setEngine } from 'pkijs' const logger = createLogger('backendManager') @@ -40,6 +41,17 @@ export const runBackendDesktop = async () => { const isDev = process.env.NODE_ENV === 'development' + const webcrypto = new Crypto() + setEngine( + 'newEngine', + webcrypto, + new CryptoEngine({ + name: '', + crypto: webcrypto, + subtle: webcrypto.subtle, + }) + ) + validateOptions(options) const resourcesPath = isDev ? null : options.resourcesPath.trim() diff --git a/packages/backend/src/nest/storage/storage.service.ts b/packages/backend/src/nest/storage/storage.service.ts index 2098c98c1..08150c343 100644 --- a/packages/backend/src/nest/storage/storage.service.ts +++ b/packages/backend/src/nest/storage/storage.service.ts @@ -251,31 +251,59 @@ export class StorageService extends EventEmitter { await this.channels?.close() this.logger.info('Closed channels DB') } catch (e) { - this.logger.error('Error closing channels db', e) + if ((e as Error).message.includes('Store not initialized')) { + this.logger.warn(`Channels db wasn't initialized, moving on...`) + } else { + this.logger.error('Error closing channels db', e) + } } try { + this.logger.info('Closing certificates DB') await this.certificatesStore?.close() + this.logger.info('Closed certificates DB') } catch (e) { - this.logger.error('Error closing certificates db', e) + if ((e as Error).message.includes('Store not initialized')) { + this.logger.warn(`Certificates db wasn't initialized, moving on...`) + } else { + this.logger.error('Error closing certificates db', e) + } } try { + this.logger.info('Closing certificates requests DB') await this.certificatesRequestsStore?.close() + this.logger.info('Closed certificates requests DB') } catch (e) { - this.logger.error('Error closing certificates db', e) + if ((e as Error).message.includes('Store not initialized')) { + this.logger.warn(`Certificates requests db wasn't initialized, moving on...`) + } else { + this.logger.error('Error closing certificates requests db', e) + } } try { + this.logger.info('Closing community metadata DB') await this.communityMetadataStore?.close() + this.logger.info('Closed community metadata DB') } catch (e) { - this.logger.error('Error closing community metadata store', e) + if ((e as Error).message.includes('Store not initialized')) { + this.logger.warn(`Community metadata db wasn't initialized, moving on...`) + } else { + this.logger.error('Error closing community metadata db', e) + } } try { + this.logger.info('Closing user profile DB') await this.userProfileStore?.close() + this.logger.info('Closed user profile DB') } catch (e) { - this.logger.error('Error closing user profiles db', e) + if ((e as Error).message.includes('Store not initialized')) { + this.logger.warn(`User profile db wasn't initialized, moving on...`) + } else { + this.logger.error('Error closing user profile db', e) + } } await this.orbitDbService.stop() diff --git a/packages/desktop/src/rtl-tests/community.create.test.tsx b/packages/desktop/src/rtl-tests/community.create.test.tsx index 467c42272..22666f6f8 100644 --- a/packages/desktop/src/rtl-tests/community.create.test.tsx +++ b/packages/desktop/src/rtl-tests/community.create.test.tsx @@ -25,6 +25,7 @@ import { ModalName } from '../renderer/sagas/modals/modals.types' import { prepareStore } from '../renderer/testUtils/prepareStore' import { renderComponent } from '../renderer/testUtils/renderComponent' import { ioMock } from '../shared/setupTests' +import { setupCrypto } from '@quiet/identity' jest.setTimeout(20_000) @@ -32,6 +33,10 @@ describe('User', () => { let socket: MockedSocket const generalId = generateChannelId('general') + beforeAll(() => { + setupCrypto() + }) + beforeEach(() => { socket = new MockedSocket() ioMock.mockImplementation(() => socket) diff --git a/packages/desktop/src/rtl-tests/community.join.test.tsx b/packages/desktop/src/rtl-tests/community.join.test.tsx index 6e699d288..5ade0d452 100644 --- a/packages/desktop/src/rtl-tests/community.join.test.tsx +++ b/packages/desktop/src/rtl-tests/community.join.test.tsx @@ -35,6 +35,7 @@ import { SocketActionTypes, } from '@quiet/types' import { composeInvitationShareUrl } from '@quiet/common' +import { setupCrypto } from '@quiet/identity' jest.setTimeout(20_000) @@ -62,6 +63,10 @@ describe('User', () => { })) }) + beforeAll(() => { + setupCrypto() + }) + it('joins community and registers username', async () => { const { store, runSaga } = await prepareStore( {}, diff --git a/packages/identity/src/test/helpers.ts b/packages/identity/src/test/helpers.ts index 61c6e952b..bb3707d9d 100644 --- a/packages/identity/src/test/helpers.ts +++ b/packages/identity/src/test/helpers.ts @@ -5,6 +5,20 @@ import { createUserCert, type UserCert } from '../createUserCert' import { createUserCsr, type UserCsr } from '../createUserCsr' import config from '../config' +export function setupCrypto() { + const webcrypto = new Crypto() + + setEngine( + 'newEngine', + webcrypto, + new CryptoEngine({ + name: '', + crypto: webcrypto, + subtle: webcrypto.subtle, + }) + ) +} + export const userData = { nickname: 'userName', commonName: 'nqnw4kc4c77fb47lk52m5l57h4tcxceo7ymxekfn7yh5m66t4jv2olad.onion', @@ -17,6 +31,7 @@ const notBeforeDate = new Date() const notAfterDate = new Date(2030, 1, 1) export async function createTestRootCA(commonName?: string): Promise { + setupCrypto() return await createRootCA( new Time({ type: 1, value: notBeforeDate }), new Time({ type: 1, value: notAfterDate }), @@ -34,21 +49,8 @@ export async function createTestUserCert(rootCert?: RootCA, userCsr?: UserCsr): return await createUserCert(rootC.rootCertString, rootC.rootKeyString, user.userCsr, notBeforeDate, notAfterDate) } -export function setupCrypto() { - const webcrypto = new Crypto() - - setEngine( - 'newEngine', - webcrypto, - new CryptoEngine({ - name: '', - crypto: webcrypto, - subtle: webcrypto.subtle, - }) - ) -} - export const createRootCertificateTestHelper = async (commonName: string): Promise => { + setupCrypto() return await createRootCA( new Time({ type: 0, value: notBeforeDate }), new Time({ type: 0, value: notAfterDate }), diff --git a/packages/state-manager/src/utils/tests/factories.ts b/packages/state-manager/src/utils/tests/factories.ts index 9a0ee68f6..e98335e43 100644 --- a/packages/state-manager/src/utils/tests/factories.ts +++ b/packages/state-manager/src/utils/tests/factories.ts @@ -19,6 +19,7 @@ import { createRootCertificateTestHelper, createUserCertificateTestHelper, keyObjectFromString, + setupCrypto, verifySignature, } from '@quiet/identity' @@ -42,6 +43,8 @@ export const generateMessageFactoryContentWithId = ( } export const getFactory = async (store: Store) => { + setupCrypto() + // @ts-ignore const factory = new factoryGirl.FactoryGirl()