From 8748545f67a6045cb4ef1729f6bc4ebe2845c3d6 Mon Sep 17 00:00:00 2001 From: Sorunome Date: Thu, 4 Jun 2020 18:36:07 +0200 Subject: [PATCH] add olm manager tests --- test/encryption/olm_manager_test.dart | 88 +++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 test/encryption/olm_manager_test.dart diff --git a/test/encryption/olm_manager_test.dart b/test/encryption/olm_manager_test.dart new file mode 100644 index 0000000..39a321e --- /dev/null +++ b/test/encryption/olm_manager_test.dart @@ -0,0 +1,88 @@ +/* + * Ansible inventory script used at Famedly GmbH for managing many hosts + * Copyright (C) 2020 Famedly GmbH + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import 'dart:convert'; +import 'package:famedlysdk/famedlysdk.dart'; +import 'package:test/test.dart'; +import 'package:olm/olm.dart' as olm; + +import '../fake_matrix_api.dart'; +import '../fake_database.dart'; + +void main() { + group('Olm Manager', () { + var olmEnabled = true; + try { + olm.init(); + olm.Account(); + } catch (_) { + olmEnabled = false; + print('[LibOlm] Failed to load LibOlm: ' + _.toString()); + } + print('[LibOlm] Enabled: $olmEnabled'); + + if (!olmEnabled) return; + + var client = Client('testclient', debug: true, httpClient: FakeMatrixApi()); + + test('setupClient', () async { + client.database = getDatabase(); + await client.checkServer('https://fakeServer.notExisting'); + await client.login('test', '1234'); + }); + + test('signatures', () async { + final payload = { + 'fox': 'floof', + }; + final signedPayload = client.encryption.olmManager.signJson(payload); + expect(client.encryption.olmManager.checkJsonSignature(client.fingerprintKey, signedPayload, client.userID, client.deviceID), true); + expect(client.encryption.olmManager.checkJsonSignature(client.fingerprintKey, payload, client.userID, client.deviceID), false); + }); + + test('uploadKeys', () async { + FakeMatrixApi.calledEndpoints.clear(); + final res = await client.encryption.olmManager.uploadKeys(uploadDeviceKeys: true); + expect(res, true); + var sent = json.decode(FakeMatrixApi.calledEndpoints['/client/r0/keys/upload'].first); + expect(sent['device_keys'] != null, true); + expect(sent['one_time_keys'] != null, true); + expect(sent['one_time_keys'].keys.length, 66); + FakeMatrixApi.calledEndpoints.clear(); + await client.encryption.olmManager.uploadKeys(); + sent = json.decode(FakeMatrixApi.calledEndpoints['/client/r0/keys/upload'].first); + expect(sent['device_keys'] != null, false); + FakeMatrixApi.calledEndpoints.clear(); + await client.encryption.olmManager.uploadKeys(oldKeyCount: 20); + sent = json.decode(FakeMatrixApi.calledEndpoints['/client/r0/keys/upload'].first); + expect(sent['one_time_keys'].keys.length, 46); + }); + + test('handleDeviceOneTimeKeysCount', () async { + FakeMatrixApi.calledEndpoints.clear(); + client.encryption.olmManager.handleDeviceOneTimeKeysCount({'signed_curve25519': 20}); + await Future.delayed(Duration(milliseconds: 50)); + expect(FakeMatrixApi.calledEndpoints.containsKey('/client/r0/keys/upload'), true); + + FakeMatrixApi.calledEndpoints.clear(); + client.encryption.olmManager.handleDeviceOneTimeKeysCount({'signed_curve25519': 70}); + await Future.delayed(Duration(milliseconds: 50)); + expect(FakeMatrixApi.calledEndpoints.containsKey('/client/r0/keys/upload'), false); + }); + }); +}