You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-07-31 15:24:23 +03:00
Test: stop loading Olm into global namespace (#4895)
* Test: stop loading Olm into global namespace Now that the js-sdk no longer relies on libolm, there is no need to populate `globalThis.Olm`. Remove the code that did so (or relied on it being done). * fix lint
This commit is contained in:
committed by
GitHub
parent
161c12f5d5
commit
940d358b0e
@ -19,9 +19,6 @@ limitations under the License.
|
|||||||
// `expect` is allowed in helper functions which are called within `test`/`it` blocks
|
// `expect` is allowed in helper functions which are called within `test`/`it` blocks
|
||||||
/* eslint-disable jest/no-standalone-expect */
|
/* eslint-disable jest/no-standalone-expect */
|
||||||
|
|
||||||
// load olm before the sdk if possible
|
|
||||||
import "./olm-loader";
|
|
||||||
|
|
||||||
import MockHttpBackend from "matrix-mock-request";
|
import MockHttpBackend from "matrix-mock-request";
|
||||||
|
|
||||||
import type { IDeviceKeys, IOneTimeKey } from "../src/@types/crypto";
|
import type { IDeviceKeys, IOneTimeKey } from "../src/@types/crypto";
|
||||||
|
@ -19,9 +19,9 @@ import anotherjson from "another-json";
|
|||||||
import fetchMock from "fetch-mock-jest";
|
import fetchMock from "fetch-mock-jest";
|
||||||
import "fake-indexeddb/auto";
|
import "fake-indexeddb/auto";
|
||||||
import { IDBFactory } from "fake-indexeddb";
|
import { IDBFactory } from "fake-indexeddb";
|
||||||
|
import Olm from "@matrix-org/olm";
|
||||||
|
|
||||||
import type FetchMock from "fetch-mock";
|
import type FetchMock from "fetch-mock";
|
||||||
import type Olm from "@matrix-org/olm";
|
|
||||||
import * as testUtils from "../../test-utils/test-utils";
|
import * as testUtils from "../../test-utils/test-utils";
|
||||||
import {
|
import {
|
||||||
emitPromise,
|
emitPromise,
|
||||||
@ -124,7 +124,6 @@ async function expectSendRoomKey(
|
|||||||
recipientOlmAccount: Olm.Account,
|
recipientOlmAccount: Olm.Account,
|
||||||
recipientOlmSession: Olm.Session | null = null,
|
recipientOlmSession: Olm.Session | null = null,
|
||||||
): Promise<Olm.InboundGroupSession> {
|
): Promise<Olm.InboundGroupSession> {
|
||||||
const Olm = globalThis.Olm;
|
|
||||||
const testRecipientKey = JSON.parse(recipientOlmAccount.identity_keys())["curve25519"];
|
const testRecipientKey = JSON.parse(recipientOlmAccount.identity_keys())["curve25519"];
|
||||||
|
|
||||||
function onSendRoomKey(content: any): Olm.InboundGroupSession {
|
function onSendRoomKey(content: any): Olm.InboundGroupSession {
|
||||||
@ -207,14 +206,6 @@ async function expectSendMegolmMessage(
|
|||||||
}
|
}
|
||||||
|
|
||||||
describe("crypto", () => {
|
describe("crypto", () => {
|
||||||
if (!globalThis.Olm) {
|
|
||||||
// currently we use libolm to implement the crypto in the tests, so need it to be present.
|
|
||||||
logger.warn("not running megolm tests: Olm not present");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Olm = globalThis.Olm;
|
|
||||||
|
|
||||||
let testOlmAccount = {} as unknown as Olm.Account;
|
let testOlmAccount = {} as unknown as Olm.Account;
|
||||||
let testSenderKey = "";
|
let testSenderKey = "";
|
||||||
|
|
||||||
|
@ -93,15 +93,15 @@ export function bootstrapCrossSigningTestOlmAccount(
|
|||||||
deviceId: string,
|
deviceId: string,
|
||||||
keyBackupInfo: KeyBackupInfo[] = [],
|
keyBackupInfo: KeyBackupInfo[] = [],
|
||||||
): Partial<IDownloadKeyResult> {
|
): Partial<IDownloadKeyResult> {
|
||||||
const olmAliceMSK = new globalThis.Olm.PkSigning();
|
const olmAliceMSK = new Olm.PkSigning();
|
||||||
const masterPrivkey = olmAliceMSK.generate_seed();
|
const masterPrivkey = olmAliceMSK.generate_seed();
|
||||||
const masterPubkey = olmAliceMSK.init_with_seed(masterPrivkey);
|
const masterPubkey = olmAliceMSK.init_with_seed(masterPrivkey);
|
||||||
|
|
||||||
const olmAliceUSK = new globalThis.Olm.PkSigning();
|
const olmAliceUSK = new Olm.PkSigning();
|
||||||
const userPrivkey = olmAliceUSK.generate_seed();
|
const userPrivkey = olmAliceUSK.generate_seed();
|
||||||
const userPubkey = olmAliceUSK.init_with_seed(userPrivkey);
|
const userPubkey = olmAliceUSK.init_with_seed(userPrivkey);
|
||||||
|
|
||||||
const olmAliceSSK = new globalThis.Olm.PkSigning();
|
const olmAliceSSK = new Olm.PkSigning();
|
||||||
const sskPrivkey = olmAliceSSK.generate_seed();
|
const sskPrivkey = olmAliceSSK.generate_seed();
|
||||||
const sskPubkey = olmAliceSSK.init_with_seed(sskPrivkey);
|
const sskPubkey = olmAliceSSK.init_with_seed(sskPrivkey);
|
||||||
|
|
||||||
@ -189,7 +189,7 @@ export async function createOlmSession(
|
|||||||
const otkId = Object.keys(keys)[0];
|
const otkId = Object.keys(keys)[0];
|
||||||
const otk = keys[otkId];
|
const otk = keys[otkId];
|
||||||
|
|
||||||
const session = new globalThis.Olm.Session();
|
const session = new Olm.Session();
|
||||||
session.create_outbound(olmAccount, recipientTestClient.getDeviceKey(), otk.key);
|
session.create_outbound(olmAccount, recipientTestClient.getDeviceKey(), otk.key);
|
||||||
return session;
|
return session;
|
||||||
}
|
}
|
||||||
|
@ -84,7 +84,7 @@ jest.useFakeTimers({ doNotFake: ["queueMicrotask"] });
|
|||||||
|
|
||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
// we use the libolm primitives in the test, so init the Olm library
|
// we use the libolm primitives in the test, so init the Olm library
|
||||||
await globalThis.Olm.init();
|
await Olm.init();
|
||||||
});
|
});
|
||||||
|
|
||||||
// load the rust library. This can take a few seconds on a slow GH worker.
|
// load the rust library. This can take a few seconds on a slow GH worker.
|
||||||
@ -110,7 +110,6 @@ const TEST_HOMESERVER_URL = "https://alice-server.com";
|
|||||||
* These tests work by intercepting HTTP requests via fetch-mock rather than mocking out bits of the client, so as
|
* These tests work by intercepting HTTP requests via fetch-mock rather than mocking out bits of the client, so as
|
||||||
* to provide the most effective integration tests possible.
|
* to provide the most effective integration tests possible.
|
||||||
*/
|
*/
|
||||||
// we test with both crypto stacks...
|
|
||||||
describe("verification", () => {
|
describe("verification", () => {
|
||||||
/** the client under test */
|
/** the client under test */
|
||||||
let aliceClient: MatrixClient;
|
let aliceClient: MatrixClient;
|
||||||
@ -254,7 +253,7 @@ describe("verification", () => {
|
|||||||
|
|
||||||
// The dummy device makes up a curve25519 keypair and sends the public bit back in an `m.key.verification.key'
|
// The dummy device makes up a curve25519 keypair and sends the public bit back in an `m.key.verification.key'
|
||||||
// We use the Curve25519, HMAC and HKDF implementations in libolm, for now
|
// We use the Curve25519, HMAC and HKDF implementations in libolm, for now
|
||||||
const olmSAS = new globalThis.Olm.SAS();
|
const olmSAS = new Olm.SAS();
|
||||||
returnToDeviceMessageFromSync(buildSasKeyMessage(transactionId, olmSAS.get_pubkey()));
|
returnToDeviceMessageFromSync(buildSasKeyMessage(transactionId, olmSAS.get_pubkey()));
|
||||||
|
|
||||||
// alice responds with a 'key' ...
|
// alice responds with a 'key' ...
|
||||||
@ -348,7 +347,7 @@ describe("verification", () => {
|
|||||||
|
|
||||||
// The dummy device makes up a curve25519 keypair and uses the hash in an 'm.key.verification.accept'
|
// The dummy device makes up a curve25519 keypair and uses the hash in an 'm.key.verification.accept'
|
||||||
// We use the Curve25519, HMAC and HKDF implementations in libolm, for now
|
// We use the Curve25519, HMAC and HKDF implementations in libolm, for now
|
||||||
const olmSAS = new globalThis.Olm.SAS();
|
const olmSAS = new Olm.SAS();
|
||||||
const commitmentStr = olmSAS.get_pubkey() + anotherjson.stringify(toDeviceMessage);
|
const commitmentStr = olmSAS.get_pubkey() + anotherjson.stringify(toDeviceMessage);
|
||||||
|
|
||||||
sendToDevicePromise = expectSendToDeviceMessage("m.key.verification.key");
|
sendToDevicePromise = expectSendToDeviceMessage("m.key.verification.key");
|
||||||
|
@ -1,27 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2017 Vector creations Ltd
|
|
||||||
Copyright 2019 The Matrix.org Foundation C.I.C.
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { logger } from "../src/logger";
|
|
||||||
|
|
||||||
// try to load the olm library.
|
|
||||||
try {
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
||||||
globalThis.Olm = require("@matrix-org/olm");
|
|
||||||
logger.log("loaded libolm");
|
|
||||||
} catch (e) {
|
|
||||||
logger.warn("unable to run crypto tests: libolm not available", e);
|
|
||||||
}
|
|
@ -1,6 +1,3 @@
|
|||||||
// load olm before the sdk if possible
|
|
||||||
import "../olm-loader";
|
|
||||||
|
|
||||||
// eslint-disable-next-line no-restricted-imports
|
// eslint-disable-next-line no-restricted-imports
|
||||||
import type EventEmitter from "events";
|
import type EventEmitter from "events";
|
||||||
import { logger } from "../../src/logger";
|
import { logger } from "../../src/logger";
|
||||||
|
Reference in New Issue
Block a user