From 281510b9501cce128a194b40228c215c5a7691e9 Mon Sep 17 00:00:00 2001 From: td Date: Tue, 23 Apr 2024 15:21:46 +0530 Subject: [PATCH] feat: lcov and tag olm tests --- .github/workflows/app.yml | 86 +- dart_test.yaml | 2 + lib/fake_matrix_api.dart | 2406 ----------------- scripts/test.sh | 36 +- test/client_test.dart | 114 +- test/commands_test.dart | 32 +- test/database_api_test.dart | 16 +- test/device_keys_list_test.dart | 21 +- test/encryption/bootstrap_test.dart | 23 +- test/encryption/cross_signing_test.dart | 22 +- .../encrypt_decrypt_room_message_test.dart | 22 +- .../encrypt_decrypt_to_device_test.dart | 23 +- test/encryption/key_manager_test.dart | 24 +- test/encryption/key_request_test.dart | 20 +- test/encryption/key_verification_test.dart | 26 +- test/encryption/olm_manager_test.dart | 26 +- test/encryption/online_key_backup_test.dart | 23 +- .../encryption/qr_verification_self_test.dart | 17 +- test/encryption/ssss_test.dart | 30 +- test/event_test.dart | 197 +- test/fake_matrix_api.dart | 4 +- test/matrix_file_test.dart | 17 +- test/pushevaluator_test.dart | 10 - test/room_archived_test.dart | 11 - test/timeline_context_test.dart | 20 +- test/timeline_test.dart | 20 +- 26 files changed, 295 insertions(+), 2953 deletions(-) create mode 100644 dart_test.yaml delete mode 100644 lib/fake_matrix_api.dart diff --git a/.github/workflows/app.yml b/.github/workflows/app.yml index 6640508ee..09eac5118 100644 --- a/.github/workflows/app.yml +++ b/.github/workflows/app.yml @@ -30,33 +30,30 @@ jobs: scripts/prepare.sh scripts/test_driver.sh" - # coverage is done on the flutter-linux image because we setup olm there - # coverage_without_olm is done on dart images because why not :D - coverage: + coverage_without_olm: runs-on: ubuntu-latest + env: + NO_OLM: 1 steps: - uses: actions/checkout@v4 - run: cat .github/workflows/versions.env >> $GITHUB_ENV - - uses: subosito/flutter-action@48cafc24713cca54bbe03cdc3a423187d413aafa + - uses: dart-lang/setup-dart@a57a6c04cf7d4840e88432aad6281d1e125f0d46 with: - flutter-version: ${{ env.flutter_version }} - cache: true + sdk: ${{ env.dart_version }} - name: Run tests run: | - sed -i 's/#flutter_test/flutter_test/g' pubspec.yaml - rm -r example - ./scripts/prepare.sh + sudo apt-get update && sudo apt-get install --no-install-recommends --no-install-suggests -y curl lcov python3 python3-distutils libsqlite3-0 libsqlite3-dev ./scripts/test.sh - - name: Ensure SDK compiles on web - run: | - pushd web_test - dart pub get - dart run webdev build + - uses: actions/upload-artifact@v4 + if: always() + with: + name: coverage_without_olm + path: coverage_dir/ + retention-days: 1 - coverage_without_olm: + + coverage: runs-on: ubuntu-latest - env: - NO_OLM: 1 steps: - uses: actions/checkout@v4 - run: cat .github/workflows/versions.env >> $GITHUB_ENV @@ -65,10 +62,59 @@ jobs: sdk: ${{ env.dart_version }} - name: Run tests run: | - apt-get update && apt-get install --no-install-recommends --no-install-suggests -y curl lcov python3 python3-distutils libsqlite3-0 libsqlite3-dev - curl -o /bin/lcov_cobertura.py https://raw.githubusercontent.com/eriwen/lcov-to-cobertura-xml/master/lcov_cobertura/lcov_cobertura.py && sed 's/env python/env python3/' -i /bin/lcov_cobertura.py && chmod +x /bin/lcov_cobertura.py - dart pub get + sudo apt-get update && sudo apt-get install --no-install-recommends --no-install-suggests -y curl lcov python3 python3-distutils libsqlite3-0 libsqlite3-dev libolm3 libssl3 ./scripts/test.sh + - uses: actions/upload-artifact@v4 + if: always() + with: + name: coverage + path: coverage_dir/ + retention-days: 1 + + + merge_converage: + if: always() + runs-on: ubuntu-latest + needs: [coverage, coverage_without_olm] + steps: + - uses: actions/checkout@v4 + - uses: actions/download-artifact@v4 + - name: Merge lcov files + run: | + sudo apt-get -y install lcov + lcov -a coverage/lcov.info -a coverage_without_olm/lcov.info -o merged.info + genhtml merged.info -o merged + echo $(lcov --summary merged.info | grep 'lines......:') >> $GITHUB_STEP_SUMMARY + - uses: actions/upload-artifact@v4 + with: + name: merged + path: merged/ + retention-days: 1 + + review_app_coverage: + if: github.event_name == 'pull_request' + needs: [merge_converage] + secrets: inherit + uses: famedly/frontend-ci-templates/.github/workflows/review-app.yml@main + with: + projectname: "matrix-dart-sdk-coverage" + pr: ${{ github.event.pull_request.number }} + environment: "review" + artifact-name: "merged" + + dart_web_compatible: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: cat .github/workflows/versions.env >> $GITHUB_ENV + - uses: subosito/flutter-action@48cafc24713cca54bbe03cdc3a423187d413aafa + with: + flutter-version: ${{ env.flutter_version }} + - name: Ensure SDK compiles on web + run: | + pushd web_test + dart pub get + dart run webdev build pub-dev-dry-run: runs-on: ubuntu-latest diff --git a/dart_test.yaml b/dart_test.yaml new file mode 100644 index 000000000..23121f0f6 --- /dev/null +++ b/dart_test.yaml @@ -0,0 +1,2 @@ +tags: + olm: \ No newline at end of file diff --git a/lib/fake_matrix_api.dart b/lib/fake_matrix_api.dart deleted file mode 100644 index 6017f3b07..000000000 --- a/lib/fake_matrix_api.dart +++ /dev/null @@ -1,2406 +0,0 @@ -/* MIT License -* -* Copyright (C) 2019, 2020, 2021 Famedly GmbH -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to deal -* in the Software without restriction, including without limitation the rights -* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -* copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in all -* copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -* SOFTWARE. -*/ - -import 'dart:convert'; -import 'dart:core'; -import 'dart:math'; - -import 'package:http/http.dart'; -import 'package:http/testing.dart'; - -import 'package:matrix/matrix_api_lite.dart'; - -Map decodeJson(dynamic data) { - if (data is String) { - return json.decode(data) as Map; - } - if (data is Map && data.isEmpty) { - return {}; - } - return data as Map; -} - -T? tryCast(dynamic object) => object is T ? object : null; - -/// A mock http client for testing purposes. -class FakeMatrixApi extends MockClient { - static final calledEndpoints = >{}; - static int eventCounter = 0; - - FakeMatrixApi() - : super((request) async { - // Collect data from Request - var action = request.url.path; - if (request.url.path.contains('/_matrix')) { - action = - '${request.url.path.split('/_matrix').last}?${request.url.query}'; - } - - if (action.endsWith('?')) { - action = action.substring(0, action.length - 1); - } - if (action.endsWith('/')) { - action = action.substring(0, action.length - 1); - } - final method = request.method; - final dynamic data = - method == 'GET' ? request.url.queryParameters : request.body; - dynamic res = {}; - var statusCode = 200; - - //print('\$method request to $action with Data: $data'); - - // Sync requests with timeout - if (data is Map && data['timeout'] is String) { - await Future.delayed(Duration(seconds: 5)); - } - - if (request.url.origin != 'https://fakeserver.notexisting') { - return Response( - 'Not found...', 404); - } - - // Call API - if (!calledEndpoints.containsKey(action)) { - calledEndpoints[action] = []; - } - calledEndpoints[action]!.add(data); - if (api.containsKey(method) && api[method]!.containsKey(action)) { - res = api[method]![action]?.call(data); - if (res is Map && res.containsKey('errcode')) { - statusCode = 405; - } - } else if (method == 'PUT' && - action.contains('/client/v3/sendToDevice/')) { - res = {}; - } else if (method == 'GET' && - action.contains('/client/v3/rooms/') && - action.contains('/state/m.room.member/')) { - res = {'displayname': ''}; - } else if (method == 'PUT' && - action.contains( - '/client/v3/rooms/!1234%3AfakeServer.notExisting/send/')) { - res = {'event_id': '\$event${FakeMatrixApi.eventCounter++}'}; - } else if (action.contains('/client/v3/sync')) { - res = { - 'next_batch': DateTime.now().millisecondsSinceEpoch.toString - }; - } else { - res = { - 'errcode': 'M_UNRECOGNIZED', - 'error': 'Unrecognized request' - }; - statusCode = 405; - } - - return Response.bytes(utf8.encode(json.encode(res)), statusCode); - }); - - static Map messagesResponse = { - 'start': 't47429-4392820_219380_26003_2265', - 'end': 't47409-4357353_219380_26003_2265', - 'chunk': [ - { - 'content': { - 'body': 'This is an example text message', - 'msgtype': 'm.text', - 'format': 'org.matrix.custom.html', - 'formatted_body': 'This is an example text message' - }, - 'type': 'm.room.message', - 'event_id': '3143273582443PhrSn:example.org', - 'room_id': '!1234:example.com', - 'sender': '@example:example.org', - 'origin_server_ts': 1432735824653, - 'unsigned': {'age': 1234} - }, - { - 'content': {'name': 'The room name'}, - 'type': 'm.room.name', - 'event_id': '2143273582443PhrSn:example.org', - 'room_id': '!1234:example.com', - 'sender': '@example:example.org', - 'origin_server_ts': 1432735824653, - 'unsigned': {'age': 1234}, - 'state_key': '' - }, - { - 'content': { - 'body': 'Gangnam Style', - 'url': 'mxc://example.org/a526eYUSFFxlgbQYZmo442', - 'info': { - 'thumbnail_url': 'mxc://example.org/FHyPlCeYUSFFxlgbQYZmoEoe', - 'thumbnail_info': { - 'mimetype': 'image/jpeg', - 'size': 46144, - 'w': 300, - 'h': 300 - }, - 'w': 480, - 'h': 320, - 'duration': 2140786, - 'size': 1563685, - 'mimetype': 'video/mp4' - }, - 'msgtype': 'm.video' - }, - 'type': 'm.room.message', - 'event_id': '1143273582443PhrSn:example.org', - 'room_id': '!1234:example.com', - 'sender': '@example:example.org', - 'origin_server_ts': 1432735824653, - 'unsigned': {'age': 1234} - } - ], - 'state': >[], - }; - - static Map syncResponse = { - 'next_batch': Random().nextDouble().toString(), - 'rooms': { - 'join': { - '!726s6s6q:example.com': { - 'summary': { - 'm.heroes': ['@alice:example.com', '@bob:example.com'], - 'm.joined_member_count': 2, - 'm.invited_member_count': 0 - }, - 'unread_notifications': { - 'highlight_count': 2, - 'notification_count': 2, - }, - 'state': { - 'events': [ - { - 'sender': '@alice:example.com', - 'type': 'm.room.member', - 'state_key': '@alice:example.com', - 'content': { - 'membership': 'join', - 'avatar_url': 'mxc://example.org/SEsfnsuifSDFSSEF', - 'displayname': 'Alice Margatroid', - }, - 'origin_server_ts': 1417731086795, - 'event_id': '66697273743031:example.com' - }, - { - 'sender': '@alice:example.com', - 'type': 'm.room.canonical_alias', - 'content': { - 'alias': '#famedlyContactDiscovery:fakeServer.notExisting' - }, - 'state_key': '', - 'origin_server_ts': 1417731086796, - 'event_id': '66697273743032:example.com' - }, - { - 'sender': '@alice:example.com', - 'type': 'm.room.encryption', - 'state_key': '', - 'content': {'algorithm': AlgorithmTypes.megolmV1AesSha2}, - 'origin_server_ts': 1417731086795, - 'event_id': '666972737430353:example.com' - }, - { - 'content': { - 'pinned': ['1234:bla'] - }, - 'type': 'm.room.pinned_events', - 'event_id': '21432735824443PhrSn:example.org', - 'room_id': '!1234:example.com', - 'sender': '@example:example.org', - 'origin_server_ts': 1432735824653, - 'unsigned': {'age': 1234}, - 'state_key': '' - }, - ] - }, - 'timeline': { - 'events': [ - { - 'sender': '@bob:example.com', - 'type': 'm.room.member', - 'state_key': '@bob:example.com', - 'content': {'membership': 'join'}, - 'prev_content': {'membership': 'invite'}, - 'origin_server_ts': 1417731086795, - 'event_id': '7365636s6r6432:example.com', - 'unsigned': {'foo': 'bar'} - }, - { - 'sender': '@alice:example.com', - 'type': 'm.room.message', - 'content': {'body': 'I am a fish', 'msgtype': 'm.text'}, - 'origin_server_ts': 1417731086797, - 'event_id': '74686972643033:example.com' - } - ], - 'limited': true, - 'prev_batch': 't34-23535_0_0' - }, - 'ephemeral': { - 'events': [ - { - 'type': 'm.typing', - 'content': { - 'user_ids': ['@alice:example.com'] - } - }, - { - 'content': { - '7365636s6r6432:example.com': { - 'm.read': { - '@alice:example.com': {'ts': 1436451550453} - } - } - }, - 'room_id': '!726s6s6q:example.com', - 'type': 'm.receipt' - } - ] - }, - 'account_data': { - 'events': [ - { - 'type': 'm.tag', - 'content': { - 'tags': { - 'work': {'order': 1} - } - } - }, - { - 'type': 'org.example.custom.room.config', - 'content': {'custom_config_key': 'custom_config_value'} - } - ] - } - } - }, - 'invite': { - '!696r7674:example.com': { - 'invite_state': { - 'events': [ - { - 'sender': '@alice:example.com', - 'type': 'm.room.name', - 'state_key': '', - 'content': {'name': 'My Room Name'} - }, - { - 'sender': '@alice:example.com', - 'type': 'm.room.member', - 'state_key': '@bob:example.com', - 'content': {'membership': 'invite'} - } - ] - } - } - }, - 'leave': { - '!726s6s6f:example.com': { - 'state': { - 'events': [ - { - 'sender': '@charley:example.com', - 'type': 'm.room.name', - 'state_key': '', - 'content': {'name': 'left room'}, - 'origin_server_ts': 1417731086795, - 'event_id': '66697273743031:example.com' - }, - ] - }, - 'timeline': { - 'events': [ - { - 'sender': '@bob:example.com', - 'type': 'm.room.message', - 'content': {'text': 'Hallo'}, - 'origin_server_ts': 1417731086795, - 'event_id': '7365636s6r64300:example.com', - 'unsigned': {'foo': 'bar'} - }, - ], - 'limited': true, - 'prev_batch': 't34-23535_0_0' - }, - 'account_data': { - 'events': [ - { - 'type': 'm.tag', - 'content': { - 'tags': { - 'work': {'order': 1} - } - } - }, - { - 'type': 'org.example.custom.room.config', - 'content': {'custom_config_key': 'custom_config_value'} - } - ] - } - } - }, - }, - 'presence': { - 'events': [ - { - 'sender': '@alice:example.com', - 'type': 'm.presence', - 'content': {'presence': 'online'} - } - ] - }, - 'account_data': { - 'events': [ - { - 'content': { - 'global': { - 'content': [ - { - 'actions': [ - 'notify', - {'set_tweak': 'sound', 'value': 'default'}, - {'set_tweak': 'highlight'} - ], - 'default': true, - 'enabled': true, - 'pattern': 'alice', - 'rule_id': '.m.rule.contains_user_name' - } - ], - 'override': [ - { - 'actions': ['dont_notify'], - 'conditions': >[], - 'default': true, - 'enabled': false, - 'rule_id': '.m.rule.master' - }, - { - 'actions': ['dont_notify'], - 'conditions': [ - { - 'key': 'content.msgtype', - 'kind': 'event_match', - 'pattern': 'm.notice' - } - ], - 'default': true, - 'enabled': true, - 'rule_id': '.m.rule.suppress_notices' - } - ], - 'room': [ - { - 'actions': ['dont_notify'], - 'conditions': [ - { - 'key': 'room_id', - 'kind': 'event_match', - 'pattern': '!localpart:server.abc', - } - ], - 'default': true, - 'enabled': true, - 'rule_id': '!localpart:server.abc' - } - ], - 'sender': >[], - 'underride': [ - { - 'actions': [ - 'notify', - {'set_tweak': 'sound', 'value': 'ring'}, - {'set_tweak': 'highlight', 'value': false} - ], - 'conditions': [ - { - 'key': 'type', - 'kind': 'event_match', - 'pattern': 'm.call.invite' - } - ], - 'default': true, - 'enabled': true, - 'rule_id': '.m.rule.call' - }, - { - 'actions': [ - 'notify', - {'set_tweak': 'sound', 'value': 'default'}, - {'set_tweak': 'highlight'} - ], - 'conditions': [ - {'kind': 'contains_display_name'} - ], - 'default': true, - 'enabled': true, - 'rule_id': '.m.rule.contains_display_name' - }, - { - 'actions': [ - 'notify', - {'set_tweak': 'sound', 'value': 'default'}, - {'set_tweak': 'highlight', 'value': false} - ], - 'conditions': [ - {'is': '2', 'kind': 'room_member_count'}, - { - 'key': 'type', - 'kind': 'event_match', - 'pattern': 'm.room.message' - } - ], - 'default': true, - 'enabled': true, - 'rule_id': '.m.rule.room_one_to_one' - }, - { - 'actions': [ - 'notify', - {'set_tweak': 'sound', 'value': 'default'}, - {'set_tweak': 'highlight', 'value': false} - ], - 'conditions': [ - { - 'key': 'type', - 'kind': 'event_match', - 'pattern': 'm.room.member' - }, - { - 'key': 'content.membership', - 'kind': 'event_match', - 'pattern': 'invite' - }, - { - 'key': 'state_key', - 'kind': 'event_match', - 'pattern': '@alice:example.com' - } - ], - 'default': true, - 'enabled': true, - 'rule_id': '.m.rule.invite_for_me' - }, - { - 'actions': [ - 'notify', - {'set_tweak': 'highlight', 'value': false} - ], - 'conditions': [ - { - 'key': 'type', - 'kind': 'event_match', - 'pattern': 'm.room.member' - } - ], - 'default': true, - 'enabled': true, - 'rule_id': '.m.rule.member_event' - }, - { - 'actions': [ - 'notify', - {'set_tweak': 'highlight', 'value': false} - ], - 'conditions': [ - { - 'key': 'type', - 'kind': 'event_match', - 'pattern': 'm.room.message' - } - ], - 'default': true, - 'enabled': true, - 'rule_id': '.m.rule.message' - } - ] - } - }, - 'type': 'm.push_rules' - }, - { - 'type': 'org.example.custom.config', - 'content': {'custom_config_key': 'custom_config_value'} - }, - { - 'content': { - '@bob:example.com': [ - '!726s6s6q:example.com', - '!hgfedcba:example.com' - ] - }, - 'type': 'm.direct' - }, - { - 'type': EventTypes.SecretStorageDefaultKey, - 'content': {'key': '0FajDWYaM6wQ4O60OZnLvwZfsBNu4Bu3'} - }, - { - 'type': 'm.secret_storage.key.0FajDWYaM6wQ4O60OZnLvwZfsBNu4Bu3', - 'content': { - 'algorithm': AlgorithmTypes.secretStorageV1AesHmcSha2, - 'passphrase': { - 'algorithm': AlgorithmTypes.pbkdf2, - 'iterations': 500000, - 'salt': 'F4jJ80mr0Fc8mRwU9JgA3lQDyjPuZXQL' - }, - 'iv': 'HjbTgIoQH2pI7jQo19NUzA==', - 'mac': 'QbJjQzDnAggU0cM4RBnDxw2XyarRGjdahcKukP9xVlk=' - } - }, - { - 'type': 'm.cross_signing.master', - 'content': { - 'encrypted': { - '0FajDWYaM6wQ4O60OZnLvwZfsBNu4Bu3': { - 'iv': 'eIb2IITxtmcq+1TrT8D5eQ==', - 'ciphertext': - 'lWRTPo5qxf4LAVwVPzGHOyMcP181n7bb9/B0lvkLDC2Oy4DvAL0eLx2x3bY=', - 'mac': 'Ynx89tIxPkx0o6ljMgxszww17JOgB4tg4etmNnMC9XI=' - } - } - } - }, - { - 'type': EventTypes.CrossSigningSelfSigning, - 'content': { - 'encrypted': { - '0FajDWYaM6wQ4O60OZnLvwZfsBNu4Bu3': { - 'iv': 'YqU2XIjYulYZl+bkZtGgVw==', - 'ciphertext': - 'kM2TSoy/jR/4d357ZoRPbpPypxQl6XRLo3FsEXz+f7vIOp82GeRp28RYb3k=', - 'mac': 'F+DZa5tAFmWsYSryw5EuEpzTmmABRab4GETkM85bGGo=' - } - } - } - }, - { - 'type': EventTypes.CrossSigningUserSigning, - 'content': { - 'encrypted': { - '0FajDWYaM6wQ4O60OZnLvwZfsBNu4Bu3': { - 'iv': 'D7AM3LXFu7ZlyGOkR+OeqQ==', - 'ciphertext': - 'bYA2+OMgsO6QB1E31aY+ESAWrT0fUBTXqajy4qmL7bVDSZY4Uj64EXNbHuA=', - 'mac': 'j2UtyPo/UBSoiaQCWfzCiRZXp3IRt0ZZujuXgUMjnw4=' - } - } - } - }, - { - 'type': EventTypes.MegolmBackup, - 'content': { - 'encrypted': { - '0FajDWYaM6wQ4O60OZnLvwZfsBNu4Bu3': { - 'iv': 'cL/0MJZaiEd3fNU+I9oJrw==', - 'ciphertext': - 'WL73Pzdk5wZdaaSpaeRH0uZYKcxkuV8IS6Qa2FEfA1+vMeRLuHcWlXbMX0w=', - 'mac': '+xozp909S6oDX8KRV8D8ZFVRyh7eEYQpPP76f+DOsnw=' - } - } - } - } - ] - }, - 'to_device': { - 'events': [ - { - 'sender': '@alice:example.com', - 'type': 'm.new_device', - 'content': { - 'device_id': 'XYZABCDE', - 'rooms': ['!726s6s6q:example.com'] - } - }, -// { -// 'sender': '@othertest:fakeServer.notExisting', -// 'content': { -// 'algorithm': AlgorithmTypes.megolmV1AesSha2, -// 'room_id': '!726s6s6q:example.com', -// 'session_id': 'ciM/JWTPrmiWPPZNkRLDPQYf9AW/I46bxyLSr+Bx5oU', -// 'session_key': -// 'AgAAAAAQcQ6XrFJk6Prm8FikZDqfry/NbDz8Xw7T6e+/9Yf/q3YHIPEQlzv7IZMNcYb51ifkRzFejVvtphS7wwG2FaXIp4XS2obla14iKISR0X74ugB2vyb1AydIHE/zbBQ1ic5s3kgjMFlWpu/S3FQCnCrv+DPFGEt3ERGWxIl3Bl5X53IjPyVkz65oljz2TZESwz0GH/QFvyOOm8ci0q/gceaF3S7Dmafg3dwTKYwcA5xkcc+BLyrLRzB6Hn+oMAqSNSscnm4mTeT5zYibIhrzqyUTMWr32spFtI9dNR/RFSzfCw' -// }, -// 'type': 'm.room_key' -// }, - { - // this is the commented out m.room_key event - only encrypted - 'sender': '@othertest:fakeServer.notExisting', - 'content': { - 'algorithm': AlgorithmTypes.olmV1Curve25519AesSha2, - 'sender_key': 'JBG7ZaPn54OBC7TuIEiylW3BZ+7WcGQhFBPB9pogbAg', - 'ciphertext': { - '7rvl3jORJkBiK4XX1e5TnGnqz068XfYJ0W++Ml63rgk': { - 'type': 0, - 'body': - 'Awogyh7K4iLUQjcOxIfi7q7LhBBqv9w0mQ6JI9+U9tv7iF4SIHC6xb5YFWf9voRnmDBbd+0vxD/xDlVNRDlPIKliLGkYGiAkEbtlo+fng4ELtO4gSLKVbcFn7tZwZCEUE8H2miBsCCKABgMKIFrKDJwB7gM3lXPt9yVoh6gQksafKt7VFCNRN5KLKqsDEAAi0AX5EfTV7jJ1ZWAbxftjoSN6kCVIxzGclbyg1HjchmNCX7nxNCHWl+q5ZgqHYZVu2n2mCVmIaKD0kvoEZeY3tV1Itb6zf67BLaU0qgW/QzHCHg5a44tNLjucvL2mumHjIG8k0BY2uh+52HeiMCvSOvtDwHg7nzCASGdqPVCj9Kzw6z7F6nL4e3mYim8zvJd7f+mD9z3ARrypUOLGkTGYbB2PQOovf0Do8WzcaRzfaUCnuu/YVZWKK7DPgG8uhw/TjR6XtraAKZysF+4DJYMG9SQWx558r6s7Z5EUOF5CU2M35w1t1Xxllb3vrS83dtf9LPCrBhLsEBeYEUBE2+bTBfl0BDKqLiB0Cc0N0ixOcHIt6e40wAvW622/gMgHlpNSx8xG12u0s6h6EMWdCXXLWd9fy2q6glFUHvA67A35q7O+M8DVml7Y9xG55Y3DHkMDc9cwgwFkBDCAYQe6pQF1nlKytcVCGREpBs/gq69gHAStMQ8WEg38Lf8u8eBr2DFexrN4U+QAk+S//P3fJgf0bQx/Eosx4fvWSz9En41iC+ADCsWQpMbwHn4JWvtAbn3oW0XmL/OgThTkJMLiCymduYAa1Hnt7a3tP0KTL2/x11F02ggQHL28cCjq5W4zUGjWjl5wo2PsKB6t8aAvMg2ujGD2rCjb4yrv5VIzAKMOZLyj7K0vSK9gwDLQ/4vq+QnKUBG5zrcOze0hX+kz2909/tmAdeCH61Ypw7gbPUJAKnmKYUiB/UgwkJvzMJSsk/SEs5SXosHDI+HsJHJp4Mp4iKD0xRMst+8f9aTjaWwh8ZvELE1ZOhhCbF3RXhxi3x2Nu8ORIz+vhEQ1NOlMc7UIo98Fk/96T36vL/fviowT4C/0AlaapZDJBmKwhmwqisMjY2n1vY29oM2p5BzY1iwP7q9BYdRFst6xwo57TNSuRwQw7IhFsf0k+ABuPEZy5xB5nPHyIRTf/pr3Hw', - }, - }, - }, - 'type': 'm.room.encrypted', - }, - ] - }, - 'device_lists': { - 'changed': [ - '@alice:example.com', - ], - 'left': [ - '@bob:example.com', - ], - }, - 'device_one_time_keys_count': {'curve25519': 10, 'signed_curve25519': 20}, - }; - - static Map archiveSyncResponse = { - 'next_batch': Random().nextDouble().toString(), - 'presence': {'events': >[]}, - 'account_data': {'events': >[]}, - 'to_device': {'events': >[]}, - 'rooms': { - 'join': {}, - 'invite': {}, - 'leave': { - '!5345234234:example.com': { - 'timeline': { - 'events': [ - { - 'content': { - 'body': 'This is an example text message', - 'msgtype': 'm.text', - 'format': 'org.matrix.custom.html', - 'formatted_body': 'This is an example text message' - }, - 'type': 'm.room.message', - 'event_id': '143273582443PhrSn:example.org', - 'room_id': '!5345234234:example.com', - 'sender': '@example:example.org', - 'origin_server_ts': 1432735824653, - 'unsigned': {'age': 1234} - }, - ] - }, - 'state': { - 'events': [ - { - 'content': {'name': 'The room name'}, - 'type': 'm.room.name', - 'event_id': '2143273582443PhrSn:example.org', - 'room_id': '!5345234234:example.com', - 'sender': '@example:example.org', - 'origin_server_ts': 1432735824653, - 'unsigned': {'age': 1234}, - 'state_key': '' - }, - ] - }, - 'account_data': { - 'events': [ - { - 'type': 'test.type.data', - 'content': {'foo': 'bar'}, - }, - ], - }, - }, - '!5345234235:example.com': { - 'timeline': {'events': >[]}, - 'state': { - 'events': [ - { - 'content': {'name': 'The room name 2'}, - 'type': 'm.room.name', - 'event_id': '2143273582443PhrSn:example.org', - 'room_id': '!5345234235:example.com', - 'sender': '@example:example.org', - 'origin_server_ts': 1432735824653, - 'unsigned': {'age': 1234}, - 'state_key': '' - }, - ] - } - }, - }, - } - }; - - static Map spaceHierarchyResponse = { - 'rooms': [ - { - 'room_id': '!gPxZhKUssFZKZcoCKY:neko.dev', - 'name': 'Gentoo Community', - 'topic': - 'Unofficial Gentoo community rooms. Please keep chatter to the chatter room and have Gentoo discussions and questions in the actual Gentoo rooms. Also listen to the mods and try to keep nasty stuff to yourself. Thank you!', - 'canonical_alias': '#gentoo-community:matrix.org', - 'num_joined_members': 71, - 'avatar_url': 'mxc://neko.dev/YShzHcuHenkxaxostDrlMEYL', - 'join_rule': 'public', - 'world_readable': true, - 'guest_can_join': true, - 'room_type': 'm.space', - 'children_state': [ - { - 'type': 'm.space.child', - 'state_key': '!UpbiadsgRndwvYKPLK:neko.dev', - 'content': { - 'via': ['neko.dev'], - 'suggested': true, - 'auto_join': false - }, - 'sender': '@deepbluev7:neko.dev', - 'origin_server_ts': 1636376075316 - }, - { - 'type': 'm.space.child', - 'state_key': '!aZUzMIEZvEwnDquxLf:neko.dev', - 'content': { - 'via': ['neko.dev', 'matrix.org', 'privacytools.io'], - 'suggested': true, - 'auto_join': false - }, - 'sender': '@deepbluev7:neko.dev', - 'origin_server_ts': 1636378043231 - }, - { - 'type': 'm.space.child', - 'state_key': '!aRzRZBvOAkHMcEjAPS:libera.chat', - 'content': { - 'via': ['libera.chat', 'kde.org', 'neko.dev'], - 'suggested': false, - 'auto_join': false - }, - 'sender': '@deepbluev7:neko.dev', - 'origin_server_ts': 1637612945217 - }, - { - 'type': 'm.space.child', - 'state_key': '!DXsRRxkqqDhDkAyXfL:matrix.org', - 'content': { - 'via': ['matrix.org', 'libera.chat', 'neko.dev'], - 'suggested': false, - 'auto_join': false - }, - 'sender': '@deepbluev7:neko.dev', - 'origin_server_ts': 1637612945334 - }, - { - 'type': 'm.space.child', - 'state_key': '!tbCRpmsMiwMBlIThOd:matrix.org', - 'content': { - 'via': ['kde.org', 'matrix.org', 'server.matrix4ulm.de'], - 'suggested': false, - 'auto_join': false - }, - 'sender': '@deepbluev7:neko.dev', - 'origin_server_ts': 1637612945491 - }, - { - 'type': 'm.space.child', - 'state_key': '!LPpmvMsEgDwuSuHSpM:matrix.org', - 'content': { - 'via': ['matrix.org', 'anontier.nl', 't2bot.io'], - 'suggested': false, - 'auto_join': false - }, - 'sender': '@deepbluev7:neko.dev', - 'origin_server_ts': 1638720840346 - }, - { - 'type': 'm.space.child', - 'state_key': '!prlZxmnmAGuCYHUNSw:neko.dev', - 'content': { - 'auto_join': false, - 'suggested': true, - 'via': ['neko.dev', 'matrix.org'] - }, - 'sender': '@mo-the-alias-manager:matrix.org', - 'origin_server_ts': 1645661824176 - }, - { - 'type': 'm.space.child', - 'state_key': '!ooHixUOgoLVUjCSMZC:matrix.org', - 'content': { - 'via': ['neko.dev'], - 'suggested': false, - 'auto_join': false - }, - 'sender': '@deepbluev7:neko.dev', - 'origin_server_ts': 1647825979776 - } - ] - }, - { - 'room_id': '!UpbiadsgRndwvYKPLK:neko.dev', - 'name': 'Gentoo Chatter', - 'topic': - 'Offtopic discussions, distractions while emerge is running and banter. Keep attacks, politics and illegal stuff out of here, but otherwise most topics can end up here.', - 'canonical_alias': '#gentoo-chatter:matrix.org', - 'num_joined_members': 109, - 'avatar_url': 'mxc://neko.dev/kGMWPCWawJbKGEtEGwCETSrM', - 'join_rule': 'public', - 'world_readable': true, - 'guest_can_join': true, - 'children_state': >[] - }, - { - 'room_id': '!aZUzMIEZvEwnDquxLf:neko.dev', - 'name': 'Gentoo', - 'topic': - "Unofficial. Talk about Gentoo stuff. Lightly moderated, i.e. try to keep topics Gentoo related and listen to the mods. Don't talk about politics, stuff like that never stays civil. (There are other rooms for that.) Checkout #gentoo-community:matrix.org and #gentoo-chatter:matrix.org. Also we love cats :3", - 'canonical_alias': '#gentoo:matrix.org', - 'num_joined_members': 1044, - 'avatar_url': 'mxc://neko.dev/dESQaOugYSkcFgLJYPNlWiNg', - 'join_rule': 'public', - 'world_readable': true, - 'guest_can_join': true, - 'children_state': >[] - }, - { - 'room_id': '!aRzRZBvOAkHMcEjAPS:libera.chat', - 'name': '#gentoo-qt', - 'topic': - 'Gentoo Qt Project | Project page: https://qt.gentoo.org/ | Bugz: https://tinyurl.com/genqtbugs | FAQ: https://bit.ly/1jz8EhK | Latest Qt Stable: 5.15.3 / Unstable 5.15.4 | LXQt Stable: 1.0.0 / Unstable: 1.1.0 | Overlay: qt (Qt 6.3.0 Masked for Testing and 9999s for All)', - 'canonical_alias': '#gentoo-qt:libera.chat', - 'num_joined_members': 72, - 'join_rule': 'public', - 'world_readable': false, - 'guest_can_join': false, - 'children_state': >[] - }, - { - 'room_id': '!DXsRRxkqqDhDkAyXfL:matrix.org', - 'name': 'Gentoo - de', - 'topic': - 'Deutschsprachiger Raum rund um die GNU/Linux Distribution Gentoo.', - 'canonical_alias': '#german-gentoo:matrix.org', - 'num_joined_members': 15, - 'avatar_url': 'mxc://matrix.org/UDJIpOEsVDGbgAliaxjqmhlf', - 'join_rule': 'public', - 'world_readable': false, - 'guest_can_join': false, - 'children_state': >[] - }, - { - 'room_id': '!tbCRpmsMiwMBlIThOd:matrix.org', - 'name': '#gentoo-kde', - 'topic': - "Gentoo KDE | Guide: http://xrl.us/kdeguide | KF5 5.54.0 stable, 5.56.0 testing | Plasma 5.14.5 stable, 5.15.3 testing | Applications 18.08.3 stable, 18.12.3 testing | Bugs: http://xrl.us/kdebugs | Statistics: https://tinyurl.com/gkdestats | Please report bugs with pastebin'd build.log", - 'canonical_alias': '#freenode_#gentoo-kde:matrix.org', - 'num_joined_members': 86, - 'join_rule': 'public', - 'world_readable': false, - 'guest_can_join': false, - 'children_state': >[] - }, - { - 'room_id': '!LPpmvMsEgDwuSuHSpM:matrix.org', - 'name': 'Gentoo-rus (Русский/Russian)', - 'topic': 'Вопросы по Gentoo', - 'canonical_alias': '#gentoo-rus:matrix.org', - 'num_joined_members': 68, - 'avatar_url': 'mxc://matrix.org/KuRHZNSQttAmQekputXpXmeQ', - 'join_rule': 'public', - 'world_readable': true, - 'guest_can_join': true, - 'children_state': >[] - }, - { - 'room_id': '!prlZxmnmAGuCYHUNSw:neko.dev', - 'name': 'Gentoo Hardening', - 'topic': - 'If you care too much about security and Gentoo, this is your place to talk about it. Bring your hard hats, it sometimes gets heated (please behave). (Unofficial)', - 'canonical_alias': '#gentoo-hardening:matrix.org', - 'num_joined_members': 47, - 'avatar_url': 'mxc://neko.dev/MMDsJENimfwQlHshSkdFlDaU', - 'join_rule': 'public', - 'world_readable': true, - 'guest_can_join': false, - 'children_state': >[] - }, - { - 'room_id': '!ooHixUOgoLVUjCSMZC:matrix.org', - 'name': 'Gentoo Brasil', - 'topic': 'Usuários brasileiros do Gentoo Linux', - 'canonical_alias': '#gentoobr:matrix.org', - 'num_joined_members': 35, - 'avatar_url': 'mxc://matrix.org/vXqGcGnyUbIjhXAalSxfDxJD', - 'join_rule': 'public', - 'world_readable': true, - 'guest_can_join': true, - 'children_state': >[] - } - ] - }; - - static final Map> api = { - 'GET': { - '/path/to/auth/error': (var req) => { - 'errcode': 'M_FORBIDDEN', - 'error': 'Blabla', - }, - '/media/v3/preview_url?url=https%3A%2F%2Fmatrix.org&ts=10': (var req) => { - 'og:image': 'mxc://example.com/ascERGshawAWawugaAcauga', - 'matrix:image:size': 102400 - }, - '/media/v3/config': (var req) => {'m.upload.size': 50000000}, - '/.well-known/matrix/client': (var req) => { - 'm.homeserver': { - 'base_url': 'https://fakeserver.notexisting', - }, - 'm.identity_server': { - 'base_url': 'https://identity.fakeserver.notexisting' - }, - 'org.example.custom.property': { - 'app_url': 'https://custom.app.fakeserver.notexisting' - } - }, - '/client/v3/user/%40alice%3Aexample.com/rooms/!localpart%3Aexample.com/tags': - (var req) => { - 'tags': { - 'm.favourite': {'order': 0.1}, - 'u.Work': {'order': 0.7}, - 'u.Customers': {}, - } - }, - '/client/v3/events?from=1234&timeout=10&room_id=%211234': (var req) => { - 'start': 's3456_9_0', - 'end': 's3457_9_0', - 'chunk': [ - { - 'content': { - 'body': 'This is an example text message', - 'msgtype': 'm.text', - 'format': 'org.matrix.custom.html', - 'formatted_body': 'This is an example text message' - }, - 'type': 'm.room.message', - 'event_id': '\$143273582443PhrSn:example.org', - 'room_id': '!somewhere:over.the.rainbow', - 'sender': '@example:example.org', - 'origin_server_ts': 1432735824653, - 'unsigned': {'age': 1234} - } - ] - }, - '/client/v3/thirdparty/location?alias=1234': (var req) => [ - { - 'alias': '#freenode_#matrix:matrix.org', - 'protocol': 'irc', - 'fields': {'network': 'freenode', 'channel': '#matrix'} - } - ], - '/client/v3/thirdparty/location/irc': (var req) => [ - { - 'alias': '#freenode_#matrix:matrix.org', - 'protocol': 'irc', - 'fields': {'network': 'freenode', 'channel': '#matrix'} - } - ], - '/client/v3/thirdparty/user/irc': (var req) => [ - { - 'userid': '@_gitter_jim:matrix.org', - 'protocol': 'gitter', - 'fields': {'user': 'jim'} - } - ], - '/client/v3/thirdparty/user?userid=1234': (var req) => [ - { - 'userid': '@_gitter_jim:matrix.org', - 'protocol': 'gitter', - 'fields': {'user': 'jim'} - } - ], - '/client/v3/thirdparty/protocol/irc': (var req) => { - 'user_fields': ['network', 'nickname'], - 'location_fields': ['network', 'channel'], - 'icon': 'mxc://example.org/aBcDeFgH', - 'field_types': { - 'network': { - 'regexp': '([a-z0-9]+\\.)*[a-z0-9]+', - 'placeholder': 'irc.example.org' - }, - 'nickname': {'regexp': '[^\\s#]+', 'placeholder': 'username'}, - 'channel': {'regexp': '#[^\\s]+', 'placeholder': '#foobar'} - }, - 'instances': [ - { - 'desc': 'Freenode', - 'icon': 'mxc://example.org/JkLmNoPq', - 'fields': {'network': 'freenode'}, - 'network_id': 'freenode' - } - ] - }, - '/client/v3/thirdparty/protocols': (var req) => { - 'irc': { - 'user_fields': ['network', 'nickname'], - 'location_fields': ['network', 'channel'], - 'icon': 'mxc://example.org/aBcDeFgH', - 'field_types': { - 'network': { - 'regexp': '([a-z0-9]+\\.)*[a-z0-9]+', - 'placeholder': 'irc.example.org' - }, - 'nickname': {'regexp': '[^\\s]+', 'placeholder': 'username'}, - 'channel': {'regexp': '#[^\\s]+', 'placeholder': '#foobar'} - }, - 'instances': [ - { - 'network_id': 'freenode', - 'desc': 'Freenode', - 'icon': 'mxc://example.org/JkLmNoPq', - 'fields': {'network': 'freenode.net'} - } - ] - }, - 'gitter': { - 'user_fields': ['username'], - 'location_fields': ['room'], - 'icon': 'mxc://example.org/aBcDeFgH', - 'field_types': { - 'username': {'regexp': '@[^\\s]+', 'placeholder': '@username'}, - 'room': { - 'regexp': '[^\\s]+\\/[^\\s]+', - 'placeholder': 'matrix-org/matrix-doc' - } - }, - 'instances': [ - { - 'network_id': 'gitter', - 'desc': 'Gitter', - 'icon': 'mxc://example.org/zXyWvUt', - 'fields': {} - } - ] - } - }, - '/client/v3/account/whoami': (var req) => - {'user_id': 'alice@example.com'}, - '/client/v3/capabilities': (var req) => { - 'capabilities': { - 'm.change_password': {'enabled': false}, - 'm.room_versions': { - 'default': '1', - 'available': { - '1': 'stable', - '2': 'stable', - '3': 'unstable', - 'test-version': 'unstable' - } - }, - 'com.example.custom.ratelimit': {'max_requests_per_hour': 600} - } - }, - '/client/v3/rooms/1234/context/1234?limit=10&filter=%7B%7D': (var req) => - { - 'end': 't29-57_2_0_2', - 'events_after': [ - { - 'content': { - 'body': 'This is an example text message', - 'msgtype': 'm.text', - 'format': 'org.matrix.custom.html', - 'formatted_body': 'This is an example text message' - }, - 'type': 'm.room.message', - 'event_id': '\$143273582443PhrSn:example.org', - 'room_id': '!636q39766251:example.com', - 'sender': '@example:example.org', - 'origin_server_ts': 1432735824653, - 'unsigned': {'age': 1234} - } - ], - 'event': { - 'content': { - 'body': 'filename.jpg', - 'info': { - 'h': 398, - 'w': 394, - 'mimetype': 'image/jpeg', - 'size': 31037 - }, - 'url': 'mxc://example.org/JWEIFJgwEIhweiWJE', - 'msgtype': 'm.image' - }, - 'type': 'm.room.message', - 'event_id': '\$f3h4d129462ha:example.com', - 'room_id': '!636q39766251:example.com', - 'sender': '@example:example.org', - 'origin_server_ts': 1432735824653, - 'unsigned': {'age': 1234} - }, - 'events_before': [ - { - 'content': { - 'body': 'something-important.doc', - 'filename': 'something-important.doc', - 'info': {'mimetype': 'application/msword', 'size': 46144}, - 'msgtype': 'm.file', - 'url': 'mxc://example.org/FHyPlCeYUSFFxlgbQYZmoEoe' - }, - 'type': 'm.room.message', - 'event_id': '\$143273582443PhrSn:example.org', - 'room_id': '!636q39766251:example.com', - 'sender': '@example:example.org', - 'origin_server_ts': 1432735824653, - 'unsigned': {'age': 1234} - } - ], - 'start': 't27-54_2_0_2', - 'state': [ - { - 'content': { - 'creator': '@example:example.org', - 'room_version': '1', - 'm.federate': true, - 'predecessor': { - 'event_id': '\$something:example.org', - 'room_id': '!oldroom:example.org' - } - }, - 'type': 'm.room.create', - 'event_id': '\$143273582443PhrSn:example.org', - 'room_id': '!636q39766251:example.com', - 'sender': '@example:example.org', - 'origin_server_ts': 1432735824653, - 'unsigned': {'age': 1234}, - 'state_key': '' - }, - { - 'content': { - 'membership': 'join', - 'avatar_url': 'mxc://example.org/SEsfnsuifSDFSSEF', - 'displayname': 'Alice Margatroid' - }, - 'type': 'm.room.member', - 'event_id': '\$143273582443PhrSn:example.org', - 'room_id': '!636q39766251:example.com', - 'sender': '@example:example.org', - 'origin_server_ts': 1432735824653, - 'unsigned': {'age': 1234}, - 'state_key': '@alice:example.org' - } - ] - }, - '/client/v3/admin/whois/%40alice%3Aexample.com': (var req) => { - 'user_id': '@peter:rabbit.rocks', - 'devices': { - 'teapot': { - 'sessions': [ - { - 'connections': [ - { - 'ip': '127.0.0.1', - 'last_seen': 1411996332123, - 'user_agent': 'curl/7.31.0-DEV' - }, - { - 'ip': '10.0.0.2', - 'last_seen': 1411996332123, - 'user_agent': - 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36' - } - ] - } - ] - } - } - }, - '/client/v3/user/%40alice%3Aexample.com/account_data/test.account.data': - (var req) => {'foo': 'bar'}, - '/client/v3/user/%40alice%3Aexample.com/rooms/1234/account_data/test.account.data': - (var req) => {'foo': 'bar'}, - '/client/v3/directory/room/%23testalias%3Aexample.com': (var reqI) => { - 'room_id': '!abnjk1jdasj98:capuchins.com', - 'servers': ['capuchins.com', 'matrix.org', 'another.com'] - }, - '/client/v3/account/3pid': (var req) => { - 'threepids': [ - { - 'medium': 'email', - 'address': 'monkey@banana.island', - 'validated_at': 1535176800000, - 'added_at': 1535336848756 - } - ] - }, - '/client/v3/devices': (var req) => { - 'devices': [ - { - 'device_id': 'QBUAZIFURK', - 'display_name': 'android', - 'last_seen_ip': '1.2.3.4', - 'last_seen_ts': 1474491775024 - } - ] - }, - '/client/v3/notifications?from=1234&limit=10&only=1234': (var req) => { - 'next_token': 'abcdef', - 'notifications': [ - { - 'actions': ['notify'], - 'profile_tag': 'hcbvkzxhcvb', - 'read': true, - 'room_id': '!abcdefg:example.com', - 'ts': 1475508881945, - 'event': { - 'content': { - 'body': 'This is an example text message', - 'msgtype': 'm.text', - 'format': 'org.matrix.custom.html', - 'formatted_body': 'This is an example text message' - }, - 'type': 'm.room.message', - 'event_id': '\$143273582443PhrSn:example.org', - 'room_id': '!jEsUZKDJdhlrceRyVU:example.org', - 'sender': '@example:example.org', - 'origin_server_ts': 1432735824653, - 'unsigned': {'age': 1234} - } - } - ] - }, - '/client/v3/devices/QBUAZIFURK': (var req) => { - 'device_id': 'QBUAZIFURK', - 'display_name': 'android', - 'last_seen_ip': '1.2.3.4', - 'last_seen_ts': 1474491775024 - }, - '/client/v3/profile/%40alice%3Aexample.com/displayname': (var reqI) => - {'displayname': 'Alice M'}, - '/client/v3/profile/%40alice%3Aexample.com/avatar_url': (var reqI) => - {'avatar_url': 'mxc://test'}, - '/client/v3/profile/%40alice%3Aexample.com': (var reqI) => { - 'avatar_url': 'mxc://test', - 'displayname': 'Alice M', - }, - '/client/v3/voip/turnServer': (var req) => { - 'username': '1443779631:@user:example.com', - 'password': 'JlKfBy1QwLrO20385QyAtEyIv0=', - 'uris': [ - 'turn:turn.example.com:3478?transport=udp', - 'turn:10.20.30.40:3478?transport=tcp', - 'turns:10.20.30.40:443?transport=tcp' - ], - 'ttl': 86400 - }, - '/client/v3/presence/${Uri.encodeComponent('@alice:example.com')}/status': - (var req) => { - 'presence': 'unavailable', - 'last_active_ago': 420845, - 'status_msg': 'test', - 'currently_active': false - }, - '/client/v3/keys/changes?from=1234&to=1234': (var req) => { - 'changed': ['@alice:example.com', '@bob:example.org'], - 'left': ['@clara:example.com', '@doug:example.org'] - }, - '/client/v3/pushers': (var req) => { - 'pushers': [ - { - 'pushkey': 'Xp/MzCt8/9DcSNE9cuiaoT5Ac55job3TdLSSmtmYl4A=', - 'kind': 'http', - 'app_id': 'face.mcapp.appy.prod', - 'app_display_name': 'Appy McAppface', - 'device_display_name': 'Alices Phone', - 'profile_tag': 'xyz', - 'lang': 'en-US', - 'data': { - 'url': 'https://example.com/_matrix/push/v1/notify', - 'format': 'event_id_only', - } - } - ] - }, - '/client/v3/publicRooms?limit=10&since=1234&server=example.com': - (var req) => { - 'chunk': [ - { - 'canonical_alias': '#murrays:cheese.bar', - 'avatar_url': 'mxc://bleeker.street/CHEDDARandBRIE', - 'guest_can_join': false, - 'name': 'CHEESE', - 'num_joined_members': 37, - 'room_id': '!ol19s:bleecker.street', - 'topic': 'Tasty tasty cheese', - 'world_readable': true - } - ], - 'next_batch': 'p190q', - 'prev_batch': 'p1902', - 'total_room_count_estimate': 115 - }, - '/client/v3/rooms/!localpart%3Aexample.com/aliases': (var req) => { - 'aliases': [ - '#somewhere:example.com', - '#another:example.com', - '#hat_trick:example.com' - ] - }, - '/client/v3/joined_rooms': (var req) => { - 'joined_rooms': ['!foo:example.com'] - }, - '/client/v3/directory/list/room/!localpart%3Aexample.com': (var req) => - {'visibility': 'public'}, - '/client/v3/rooms/1/state/m.room.member/@alice:example.com': (var req) => - {'displayname': 'Alice'}, - '/client/v3/profile/%40getme%3Aexample.com': (var req) => { - 'avatar_url': 'mxc://test', - 'displayname': 'You got me', - }, - '/client/v3/rooms/!localpart%3Aserver.abc/state/m.room.member/@getme%3Aexample.com': - (var req) => { - 'avatar_url': 'mxc://test', - 'displayname': 'You got me', - }, - '/client/v3/rooms/!localpart%3Aserver.abc/state': (var req) => [ - { - 'content': {'join_rule': 'public'}, - 'type': 'm.room.join_rules', - 'event_id': '\$143273582443PhrSn:example.org', - 'room_id': '!636q39766251:example.com', - 'sender': '@example:example.org', - 'origin_server_ts': 1432735824653, - 'unsigned': {'age': 1234}, - 'state_key': '' - }, - { - 'content': { - 'membership': 'join', - 'avatar_url': 'mxc://example.org/SEsfnsuifSDFSSEF', - 'displayname': 'Alice Margatroid' - }, - 'type': 'm.room.member', - 'event_id': '\$143273582443PhrSn:example.org', - 'room_id': '!636q39766251:example.com', - 'sender': '@example:example.org', - 'origin_server_ts': 1432735824653, - 'unsigned': {'age': 1234}, - 'state_key': '@alice:example.org' - }, - { - 'content': { - 'creator': '@example:example.org', - 'room_version': '1', - 'm.federate': true, - 'predecessor': { - 'event_id': '\$something:example.org', - 'room_id': '!oldroom:example.org' - } - }, - 'type': 'm.room.create', - 'event_id': '\$143273582443PhrSn:example.org', - 'room_id': '!636q39766251:example.com', - 'sender': '@example:example.org', - 'origin_server_ts': 1432735824653, - 'unsigned': {'age': 1234}, - 'state_key': '' - }, - { - 'content': { - 'ban': 50, - 'events': {'m.room.name': 100, 'm.room.power_levels': 100}, - 'events_default': 0, - 'invite': 50, - 'kick': 50, - 'redact': 50, - 'state_default': 50, - 'users': {'@example:localhost': 100}, - 'users_default': 0, - 'notifications': {'room': 20} - }, - 'type': 'm.room.power_levels', - 'event_id': '\$143273582443PhrSn:example.org', - 'room_id': '!636q39766251:example.com', - 'sender': '@example:example.org', - 'origin_server_ts': 1432735824653, - 'unsigned': {'age': 1234}, - 'state_key': '' - } - ], - '/client/v3/rooms/!localpart:server.abc/state/m.room.member/@getme:example.com': - (var req) => { - 'avatar_url': 'mxc://test', - 'displayname': 'You got me', - }, - '/client/v3/rooms/!localpart:server.abc/event/1234': (var req) => { - 'content': { - 'body': 'This is an example text message', - 'msgtype': 'm.text', - 'format': 'org.matrix.custom.html', - 'formatted_body': 'This is an example text message' - }, - 'type': 'm.room.message', - 'event_id': '143273582443PhrSn:example.org', - 'room_id': '!localpart:server.abc', - 'sender': '@example:example.org', - 'origin_server_ts': 1432735824653, - 'unsigned': {'age': 1234} - }, - '/client/v3/rooms/!localpart%3Aserver.abc/event/1234': (var req) => { - 'content': { - 'body': 'This is an example text message', - 'msgtype': 'm.text', - 'format': 'org.matrix.custom.html', - 'formatted_body': 'This is an example text message' - }, - 'type': 'm.room.message', - 'event_id': '143273582443PhrSn:example.org', - 'room_id': '!localpart:server.abc', - 'sender': '@example:example.org', - 'origin_server_ts': 1432735824653, - 'unsigned': {'age': 1234} - }, - '/client/v3/rooms/!localpart%3Aserver.abc/messages?from=1234&to=1234&dir=b&limit=10&filter=%7B%22lazy_load_members%22%3Atrue%7D': - (var req) => messagesResponse, - '/client/v3/rooms/!localpart%3Aserver.abc/messages?from=&dir=b&limit=10&filter=%7B%22lazy_load_members%22%3Atrue%7D': - (var req) => messagesResponse, - '/client/v3/rooms/!1234%3Aexample.com/messages?from=1234&dir=b&limit=100&filter=%7B%22lazy_load_members%22%3Atrue%7D': - (var req) => messagesResponse, - '/client/versions': (var req) => { - 'versions': [ - 'r0.0.1', - 'r0.1.0', - 'r0.2.0', - 'r0.3.0', - 'r0.4.0', - 'r0.5.0', - 'v1.1', - 'v1.2', - ], - 'unstable_features': {'m.lazy_load_members': true}, - }, - '/client/v3/login': (var req) => { - 'flows': [ - {'type': 'm.login.password'} - ] - }, - '/client/v3/rooms/!localpart%3Aserver.abc/joined_members': (var req) => { - 'joined': { - '@bar:example.com': { - 'display_name': 'Bar', - 'avatar_url': 'mxc://riot.ovh/printErCATzZijQsSDWorRaK' - } - } - }, - '/client/v3/rooms/!localpart%3Aserver.abc/members?at=1234&membership=join¬_membership=leave': - (var req) => { - 'chunk': [ - { - 'content': { - 'membership': 'join', - 'avatar_url': 'mxc://example.org/SEsfnsuifSDFSSEF', - 'displayname': 'Alice Margatroid' - }, - 'type': 'm.room.member', - 'event_id': '§143273582443PhrSn:example.org', - 'room_id': '!636q39766251:example.com', - 'sender': '@alice:example.com', - 'origin_server_ts': 1432735824653, - 'unsigned': {'age': 1234}, - 'state_key': '@alice:example.com' - } - ] - }, - '/client/v3/rooms/!696r7674:example.com/members': (var req) => { - 'chunk': [ - { - 'content': { - 'membership': 'join', - 'avatar_url': 'mxc://example.org/SEsfnsuifSDFSSEF', - 'displayname': 'Alice Margatroid' - }, - 'type': 'm.room.member', - 'event_id': '§143273582443PhrSn:example.org', - 'room_id': '!636q39766251:example.com', - 'sender': '@alice:example.com', - 'origin_server_ts': 1432735824653, - 'unsigned': {'age': 1234}, - 'state_key': '@alice:example.com' - } - ] - }, - '/client/v3/rooms/!726s6s6q:example.com/members': (var req) => { - 'chunk': [ - { - 'content': { - 'membership': 'join', - 'avatar_url': 'mxc://example.org/SEsfnsuifSDFSSEF', - 'displayname': 'Alice Margatroid' - }, - 'type': 'm.room.member', - 'event_id': '§143273582443PhrSn:example.org', - 'room_id': '!636q39766251:example.com', - 'sender': '@alice:example.com', - 'origin_server_ts': 1432735824653, - 'unsigned': {'age': 1234}, - 'state_key': '@alice:example.com' - } - ] - }, - '/client/v3/rooms/!localpart%3Aserver.abc/members': (var req) => { - 'chunk': [ - { - 'content': { - 'membership': 'join', - 'avatar_url': 'mxc://example.org/SEsfnsuifSDFSSEF', - 'displayname': 'Alice Margatroid' - }, - 'type': 'm.room.member', - 'event_id': '§143273582443PhrSn:example.org', - 'room_id': '!636q39766251:example.com', - 'sender': '@example:example.org', - 'origin_server_ts': 1432735824653, - 'unsigned': {'age': 1234}, - 'state_key': '@alice:example.org' - } - ] - }, - '/client/v3/pushrules/global/content/nocake': (var req) => { - 'actions': ['dont_notify'], - 'pattern': 'cake*lie', - 'rule_id': 'nocake', - 'enabled': true, - 'default': false - }, - '/client/v3/pushrules/global/content/nocake/enabled': (var req) => { - 'enabled': true, - }, - '/client/v3/pushrules/global/content/nocake/actions': (var req) => { - 'actions': ['notify'] - }, - '/client/v3/pushrules': (var req) => { - 'global': { - 'content': [ - { - 'actions': [ - 'notify', - {'set_tweak': 'sound', 'value': 'default'}, - {'set_tweak': 'highlight'} - ], - 'default': true, - 'enabled': true, - 'pattern': 'alice', - 'rule_id': '.m.rule.contains_user_name' - } - ], - 'override': [ - { - 'actions': ['dont_notify'], - 'conditions': >[], - 'default': true, - 'enabled': false, - 'rule_id': '.m.rule.master' - }, - { - 'actions': ['dont_notify'], - 'conditions': [ - { - 'key': 'content.msgtype', - 'kind': 'event_match', - 'pattern': 'm.notice' - } - ], - 'default': true, - 'enabled': true, - 'rule_id': '.m.rule.suppress_notices' - } - ], - 'room': >[], - 'sender': >[], - 'underride': [ - { - 'actions': [ - 'notify', - {'set_tweak': 'sound', 'value': 'ring'}, - {'set_tweak': 'highlight', 'value': false} - ], - 'conditions': [ - { - 'key': 'type', - 'kind': 'event_match', - 'pattern': 'm.call.invite' - } - ], - 'default': true, - 'enabled': true, - 'rule_id': '.m.rule.call' - }, - { - 'actions': [ - 'notify', - {'set_tweak': 'sound', 'value': 'default'}, - {'set_tweak': 'highlight'} - ], - 'conditions': [ - {'kind': 'contains_display_name'} - ], - 'default': true, - 'enabled': true, - 'rule_id': '.m.rule.contains_display_name' - }, - { - 'actions': [ - 'notify', - {'set_tweak': 'sound', 'value': 'default'}, - {'set_tweak': 'highlight', 'value': false} - ], - 'conditions': [ - {'is': '2', 'kind': 'room_member_count'} - ], - 'default': true, - 'enabled': true, - 'rule_id': '.m.rule.room_one_to_one' - }, - { - 'actions': [ - 'notify', - {'set_tweak': 'sound', 'value': 'default'}, - {'set_tweak': 'highlight', 'value': false} - ], - 'conditions': [ - { - 'key': 'type', - 'kind': 'event_match', - 'pattern': 'm.room.member' - }, - { - 'key': 'content.membership', - 'kind': 'event_match', - 'pattern': 'invite' - }, - { - 'key': 'state_key', - 'kind': 'event_match', - 'pattern': '@alice:example.com' - } - ], - 'default': true, - 'enabled': true, - 'rule_id': '.m.rule.invite_for_me' - }, - { - 'actions': [ - 'notify', - {'set_tweak': 'highlight', 'value': false} - ], - 'conditions': [ - { - 'key': 'type', - 'kind': 'event_match', - 'pattern': 'm.room.member' - } - ], - 'default': true, - 'enabled': true, - 'rule_id': '.m.rule.member_event' - }, - { - 'actions': [ - 'notify', - {'set_tweak': 'highlight', 'value': false} - ], - 'conditions': [ - { - 'key': 'type', - 'kind': 'event_match', - 'pattern': 'm.room.message' - } - ], - 'default': true, - 'enabled': true, - 'rule_id': '.m.rule.message' - } - ] - } - }, - '/client/v3/sync?filter=%7B%22room%22%3A%7B%22include_leave%22%3Atrue%2C%22timeline%22%3A%7B%22limit%22%3A10%7D%7D%7D&timeout=0': - (var req) => archiveSyncResponse, - '/client/v3/sync?filter=%7B%22room%22%3A%7B%22state%22%3A%7B%22lazy_load_members%22%3Atrue%7D%7D%7D': - (var req) => syncResponse, - '/client/v3/sync?filter=%7B%7D&since=1234&full_state=false&set_presence=unavailable&timeout=15': - (var req) => syncResponse, - '/client/v3/register/available?username=testuser': (var req) => - {'available': true}, - '/client/v3/user/${Uri.encodeComponent('alice@example.com')}/filter/1234': - (var req) => { - 'room': { - 'state': { - 'types': ['m.room.*'], - 'not_rooms': ['!726s6s6q:example.com'] - }, - 'timeline': { - 'limit': 10, - 'types': ['m.room.message'], - 'not_rooms': ['!726s6s6q:example.com'], - 'not_senders': ['@spam:example.com'] - }, - 'ephemeral': { - 'types': ['m.receipt', 'm.typing'], - 'not_rooms': ['!726s6s6q:example.com'], - 'not_senders': ['@spam:example.com'] - }, - 'account_data': { - 'types': ['m.receipt', 'm.typing'], - 'not_rooms': ['!726s6s6q:example.com'], - 'not_senders': ['@spam:example.com'] - } - }, - 'presence': { - 'types': ['m.presence'], - 'not_senders': ['@alice:example.com'] - }, - 'event_format': 'client', - 'event_fields': ['type', 'content', 'sender'] - }, - '/client/v3/room_keys/version': (var req) => { - 'algorithm': AlgorithmTypes.megolmBackupV1Curve25519AesSha2, - 'auth_data': { - 'public_key': 'GXYaxqhNhUK28zUdxOmEsFRguz+PzBsDlTLlF0O0RkM', - 'signatures': {}, - }, - 'count': 0, - 'etag': '0', - 'version': '5', - }, - '/client/v3/room_keys/keys/${Uri.encodeComponent('!726s6s6q:example.com')}/${Uri.encodeComponent('ciM/JWTPrmiWPPZNkRLDPQYf9AW/I46bxyLSr+Bx5oU')}?version=5': - (var req) => { - 'first_message_index': 0, - 'forwarded_count': 0, - 'is_verified': true, - 'session_data': { - 'ephemeral': 'fwRxYh+seqLykz5mQCLypJ4/59URdcFJ2s69OU1dGRc', - 'ciphertext': - '19jkQYlbgdP+VL9DH3qY/Dvpk6onJZgf+6frZFl1TinPCm9OMK9AZZLuM1haS9XLAUK1YsREgjBqfl6T+Tq8JlJ5ONZGg2Wttt24sGYc0iTMZJ8rXcNDeKMZhM96ETyjufJSeYoXLqifiVLDw9rrVBmNStF7PskYp040em+0OZ4pF85Cwsdf7l9V7MMynzh9BoXqVUCBiwT03PNYH9AEmNUxXX+6ZwCpe/saONv8MgGt5uGXMZIK29phA3D8jD6uV/WOHsB8NjHNq9FrfSEAsl+dAcS4uiYie4BKSSeQN+zGAQqu1MMW4OAdxGOuf8WpIINx7n+7cKQfxlmc/Cgg5+MmIm2H0oDwQ+Xu7aSxp1OCUzbxQRdjz6+tnbYmZBuH0Ov2RbEvC5tDb261LRqKXpub0llg5fqKHl01D0ahv4OAQgRs5oU+4mq+H2QGTwIFGFqP9tCRo0I+aICawpxYOfoLJpFW6KvEPnM2Lr3sl6Nq2fmkz6RL5F7nUtzxN8OKazLQpv8DOYzXbi7+ayEsqS0/EINetq7RfCqgjrEUgfNWYuFXWqvUT8lnxLdNu+8cyrJqh1UquFjXWTw1kWcJ0pkokVeBtK9YysCnF1UYh/Iv3rl2ZoYSSLNtuvMSYlYHggZ8xV8bz9S3X2/NwBycBiWIy5Ou/OuSX7trIKgkkmda0xjBWEM1a2acVuqu2OFbMn2zFxm2a3YwKP//OlIgMg', - 'mac': 'QzKV/fgAs4U', - }, - }, - '/client/v3/room_keys/keys/${Uri.encodeComponent('!726s6s6q:example.com')}?version=5': - (var req) => { - 'sessions': { - 'ciM/JWTPrmiWPPZNkRLDPQYf9AW/I46bxyLSr+Bx5oU': { - 'first_message_index': 0, - 'forwarded_count': 0, - 'is_verified': true, - 'session_data': { - 'ephemeral': - 'fwRxYh+seqLykz5mQCLypJ4/59URdcFJ2s69OU1dGRc', - 'ciphertext': - '19jkQYlbgdP+VL9DH3qY/Dvpk6onJZgf+6frZFl1TinPCm9OMK9AZZLuM1haS9XLAUK1YsREgjBqfl6T+Tq8JlJ5ONZGg2Wttt24sGYc0iTMZJ8rXcNDeKMZhM96ETyjufJSeYoXLqifiVLDw9rrVBmNStF7PskYp040em+0OZ4pF85Cwsdf7l9V7MMynzh9BoXqVUCBiwT03PNYH9AEmNUxXX+6ZwCpe/saONv8MgGt5uGXMZIK29phA3D8jD6uV/WOHsB8NjHNq9FrfSEAsl+dAcS4uiYie4BKSSeQN+zGAQqu1MMW4OAdxGOuf8WpIINx7n+7cKQfxlmc/Cgg5+MmIm2H0oDwQ+Xu7aSxp1OCUzbxQRdjz6+tnbYmZBuH0Ov2RbEvC5tDb261LRqKXpub0llg5fqKHl01D0ahv4OAQgRs5oU+4mq+H2QGTwIFGFqP9tCRo0I+aICawpxYOfoLJpFW6KvEPnM2Lr3sl6Nq2fmkz6RL5F7nUtzxN8OKazLQpv8DOYzXbi7+ayEsqS0/EINetq7RfCqgjrEUgfNWYuFXWqvUT8lnxLdNu+8cyrJqh1UquFjXWTw1kWcJ0pkokVeBtK9YysCnF1UYh/Iv3rl2ZoYSSLNtuvMSYlYHggZ8xV8bz9S3X2/NwBycBiWIy5Ou/OuSX7trIKgkkmda0xjBWEM1a2acVuqu2OFbMn2zFxm2a3YwKP//OlIgMg', - 'mac': 'QzKV/fgAs4U', - }, - }, - }, - }, - '/client/v3/room_keys/keys?version=5': (var req) => { - 'rooms': { - '!726s6s6q:example.com': { - 'sessions': { - 'ciM/JWTPrmiWPPZNkRLDPQYf9AW/I46bxyLSr+Bx5oU': { - 'first_message_index': 0, - 'forwarded_count': 0, - 'is_verified': true, - 'session_data': { - 'ephemeral': - 'fwRxYh+seqLykz5mQCLypJ4/59URdcFJ2s69OU1dGRc', - 'ciphertext': - '19jkQYlbgdP+VL9DH3qY/Dvpk6onJZgf+6frZFl1TinPCm9OMK9AZZLuM1haS9XLAUK1YsREgjBqfl6T+Tq8JlJ5ONZGg2Wttt24sGYc0iTMZJ8rXcNDeKMZhM96ETyjufJSeYoXLqifiVLDw9rrVBmNStF7PskYp040em+0OZ4pF85Cwsdf7l9V7MMynzh9BoXqVUCBiwT03PNYH9AEmNUxXX+6ZwCpe/saONv8MgGt5uGXMZIK29phA3D8jD6uV/WOHsB8NjHNq9FrfSEAsl+dAcS4uiYie4BKSSeQN+zGAQqu1MMW4OAdxGOuf8WpIINx7n+7cKQfxlmc/Cgg5+MmIm2H0oDwQ+Xu7aSxp1OCUzbxQRdjz6+tnbYmZBuH0Ov2RbEvC5tDb261LRqKXpub0llg5fqKHl01D0ahv4OAQgRs5oU+4mq+H2QGTwIFGFqP9tCRo0I+aICawpxYOfoLJpFW6KvEPnM2Lr3sl6Nq2fmkz6RL5F7nUtzxN8OKazLQpv8DOYzXbi7+ayEsqS0/EINetq7RfCqgjrEUgfNWYuFXWqvUT8lnxLdNu+8cyrJqh1UquFjXWTw1kWcJ0pkokVeBtK9YysCnF1UYh/Iv3rl2ZoYSSLNtuvMSYlYHggZ8xV8bz9S3X2/NwBycBiWIy5Ou/OuSX7trIKgkkmda0xjBWEM1a2acVuqu2OFbMn2zFxm2a3YwKP//OlIgMg', - 'mac': 'QzKV/fgAs4U', - }, - }, - }, - }, - }, - }, - '/client/v1/rooms/${Uri.encodeComponent('!gPxZhKUssFZKZcoCKY:neko.dev')}/hierarchy': - (var req) => spaceHierarchyResponse, - }, - 'POST': { - '/client/v3/delete_devices': (var req) => {}, - '/client/v3/account/3pid/add': (var req) => {}, - '/client/v3/account/3pid/bind': (var req) => {}, - '/client/v3/account/3pid/delete': (var req) => - {'id_server_unbind_result': 'success'}, - '/client/v3/account/3pid/unbind': (var req) => - {'id_server_unbind_result': 'success'}, - '/client/v3/account/password': (var req) => {}, - '/client/v3/rooms/1234/report/1234': (var req) => {}, - '/client/v3/search': (var req) => { - 'search_categories': { - 'room_events': { - 'groups': { - 'room_id': { - '!qPewotXpIctQySfjSy:localhost': { - 'order': 1, - 'next_batch': 'BdgFsdfHSf-dsFD', - 'results': ['\$144429830826TWwbB:localhost'] - } - } - }, - 'highlights': ['martians', 'men'], - 'next_batch': '5FdgFsd234dfgsdfFD', - 'count': 1224, - 'results': [ - { - 'rank': 0.00424866, - 'result': { - 'content': { - 'body': 'This is an example text message', - 'msgtype': 'm.text', - 'format': 'org.matrix.custom.html', - 'formatted_body': - 'This is an example text message' - }, - 'type': 'm.room.message', - 'event_id': '\$144429830826TWwbB:localhost', - 'room_id': '!qPewotXpIctQySfjSy:localhost', - 'sender': '@example:example.org', - 'origin_server_ts': 1432735824653, - 'unsigned': {'age': 1234} - } - } - ] - } - } - }, - '/client/v3/account/deactivate': (var req) => - {'id_server_unbind_result': 'success'}, - '/client/v3/user_directory/search': (var req) => { - 'results': [ - { - 'user_id': '@foo:bar.com', - 'display_name': 'Foo', - 'avatar_url': 'mxc://bar.com/foo' - } - ], - 'limited': false - }, - '/client/v3/register/email/requestToken': (var req) => { - 'sid': '123abc', - 'submit_url': 'https://example.org/path/to/submitToken' - }, - '/client/v3/register/msisdn/requestToken': (var req) => { - 'sid': '123abc', - 'submit_url': 'https://example.org/path/to/submitToken' - }, - '/client/v3/account/password/email/requestToken': (var req) => { - 'sid': '123abc', - 'submit_url': 'https://example.org/path/to/submitToken' - }, - '/client/v3/account/password/msisdn/requestToken': (var req) => { - 'sid': '123abc', - 'submit_url': 'https://example.org/path/to/submitToken' - }, - '/client/v3/account/3pid/email/requestToken': (var req) => { - 'sid': '123abc', - 'submit_url': 'https://example.org/path/to/submitToken' - }, - '/client/v3/account/3pid/msisdn/requestToken': (var req) => { - 'sid': '123abc', - 'submit_url': 'https://example.org/path/to/submitToken' - }, - '/client/v3/rooms/!localpart%3Aexample.com/receipt/m.read/%241234%3Aexample.com': - (var req) => {}, - '/client/v3/rooms/!localpart%3Aexample.com/read_markers': (var req) => - {}, - '/client/v3/user/${Uri.encodeComponent('alice@example.com')}/filter': - (var req) => {'filter_id': '1234'}, - '/client/v3/publicRooms?server=example.com': (var req) => { - 'chunk': [ - { - 'canonical_alias': '#murrays:cheese.bar', - 'avatar_url': 'mxc://bleeker.street/CHEDDARandBRIE', - 'guest_can_join': false, - 'name': 'CHEESE', - 'num_joined_members': 37, - 'room_id': '!ol19s:bleecker.street', - 'topic': 'Tasty tasty cheese', - 'world_readable': true - } - ], - 'next_batch': 'p190q', - 'prev_batch': 'p1902', - 'total_room_count_estimate': 115 - }, - '/client/v3/keys/claim': (dynamic req) { - final request = decodeJson(req)['one_time_keys']; - final keys = (request is Map) - ? request['one_time_keys'] as Map? - : null; - return { - 'failures': {}, - 'one_time_keys': { - if (keys?['@alice:example.com'] != null) - '@alice:example.com': { - 'JLAFKJWSCS': { - 'signed_curve25519:AAAAAQ': { - 'key': 'ikMXajRlkS7Xi9CROrAh3jXnbygk8mLBdSaY9/al0X0', - 'signatures': { - '@alice:example.com': { - 'ed25519:JLAFKJWSCS': - 'XdboCa0Ljoh0Y0i/IVnmMqy/+T1hJyu8BA/nRYniJMQ7QWh/pGS5AsWswdARD+MAX+r4u98Qzk0y27HUddZXDA' - } - } - } - } - }, - if (keys?['@test:fakeServer.notExisting'] != null) - '@test:fakeServer.notExisting': { - 'GHTYAJCE': { - 'signed_curve25519:AAAAAQ': { - 'key': 'qc72ve94cA28iuE0fXa98QO3uls39DHWdQlYyvvhGh0', - 'signatures': { - '@test:fakeServer.notExisting': { - 'ed25519:GHTYAJCE': - 'dFwffr5kTKefO7sjnWLMhTzw7oV31nkPIDRxFy5OQT2OP5++Ao0KRbaBZ6qfuT7lW1owKK0Xk3s7QTBvc/eNDA', - }, - }, - }, - }, - }, - } - }; - }, - '/client/v3/rooms/!localpart%3Aexample.com/invite': (var req) => - {}, - '/client/v3/rooms/!localpart%3Aexample.com/leave': (var req) => - {}, - '/client/v3/rooms/!localpart%3Aexample.com/forget': (var req) => - {}, - '/client/v3/rooms/!localpart%3Aserver.abc/kick': (var req) => - {}, - '/client/v3/rooms/!localpart%3Aexample.com/kick': (var req) => - {}, - '/client/v3/rooms/!localpart%3Aexample.com/ban': (var req) => - {}, - '/client/v3/rooms/!localpart%3Aexample.com/unban': (var req) => - {}, - '/client/v3/rooms/!localpart%3Aexample.com/join': (var req) => - {'room_id': '!localpart:example.com'}, - '/client/v3/join/!localpart%3Aexample.com?server_name=example.com&server_name=example.abc': - (var req) => {'room_id': '!localpart:example.com'}, - '/client/v3/keys/upload': (var req) => { - 'one_time_key_counts': { - 'curve25519': 10, - 'signed_curve25519': - tryCast>(decodeJson(req)) - ?.tryGetMap('one_time_keys') - ?.keys - .length ?? - 0, - } - }, - '/client/v3/keys/query': (var req) => { - 'failures': {}, - 'device_keys': { - '@alice:example.com': { - 'JLAFKJWSCS': { - 'user_id': '@alice:example.com', - 'device_id': 'JLAFKJWSCS', - 'algorithms': [ - AlgorithmTypes.olmV1Curve25519AesSha2, - AlgorithmTypes.megolmV1AesSha2 - ], - 'keys': { - 'curve25519:JLAFKJWSCS': - 'L+4+JCl8MD63dgo8z5Ta+9QAHXiANyOVSfgbHA5d3H8', - 'ed25519:JLAFKJWSCS': - 'rUFJftIWpFF/jqqz3bexGGYiG8UobKhzkeabqw1v0zM' - }, - 'signatures': { - '@alice:example.com': { - 'ed25519:JLAFKJWSCS': - 'go3mi5o3Ile+Ik+lCEpHmBmyJmKWfnRDCBBvfaVlKsMyha5IORuYcxwEUrAeLyAeeeHvkWDFX+No5eY1jYeKBw' - } - }, - 'unsigned': {'device_display_name': 'Alices mobile phone'} - }, - 'OTHERDEVICE': { - 'user_id': '@alice:example.com', - 'device_id': 'OTHERDEVICE', - 'algorithms': [ - AlgorithmTypes.olmV1Curve25519AesSha2, - AlgorithmTypes.megolmV1AesSha2 - ], - 'keys': { - 'curve25519:OTHERDEVICE': - 'wMIDhiQl5jEXQrTB03ePOSQfR8sA/KMrW0CIfFfXKEE', - 'ed25519:OTHERDEVICE': - '2Lyaj5NB7HPqKZMjZpA/pECXuQ+9wi8AGFdw33y3DuQ' - }, - 'signatures': { - '@alice:example.com': { - 'ed25519:OTHERDEVICE': - 'bwHd6ylISP13AICdDPd0HQd4V6dvvd4vno8/OwUNdm9UAprr3YjkDqVw425I74u2UQAarq9bytBqVqFyD6trAw', - } - }, - }, - }, - '@test:fakeServer.notExisting': { - 'GHTYAJCE': { - 'user_id': '@test:fakeServer.notExisting', - 'device_id': 'GHTYAJCE', - 'algorithms': [ - AlgorithmTypes.olmV1Curve25519AesSha2, - AlgorithmTypes.megolmV1AesSha2 - ], - 'keys': { - 'curve25519:GHTYAJCE': - '7rvl3jORJkBiK4XX1e5TnGnqz068XfYJ0W++Ml63rgk', - 'ed25519:GHTYAJCE': - 'gjL//fyaFHADt9KBADGag8g7F8Up78B/K1zXeiEPLJo' - }, - 'signatures': { - '@test:fakeServer.notExisting': { - 'ed25519:GHTYAJCE': - 'NEQeTgv7ew1IZSLQphWd0y60EdHdcNfHgvoaMQco5XKeIYyiUZIWd7F4x/mkPDjUizv6yWMbTDCWdSg5XcgNBA', - 'ed25519:F9ypFzgbISXCzxQhhSnXMkc1vq12Luna3Nw5rqViOJY': - 'Q4/55vZjEJD7M2EC40bgZqd9Zuy/4C75UPVopJdXeioQVaKtFf6EF0nUUuql0yD+r3hinsZcock0wO6Q2xcoAQ', - }, - }, - }, - 'OTHERDEVICE': { - 'user_id': '@test:fakeServer.notExisting', - 'device_id': 'OTHERDEVICE', - 'algorithms': [ - AlgorithmTypes.olmV1Curve25519AesSha2, - AlgorithmTypes.megolmV1AesSha2 - ], - 'keys': { - 'curve25519:OTHERDEVICE': - 'R96BA0qE1+QAWLp7E1jyWSTJ1VXMLpEdiM2SZHlKMXM', - 'ed25519:OTHERDEVICE': - 'EQo9eYbSygIbOR+tVJziqAY1NI6Gga+JQOVIqJe4mr4' - }, - 'signatures': { - '@test:fakeServer.notExisting': { - 'ed25519:OTHERDEVICE': - '/rT6pVRypJWxGos1QcI7jHL9HwcA83nkHLHqMcRPeLSxXHh4oHWvC0/tl0Xg06ogyiGw4NuB7TpOISvJBdt7BA', - 'ed25519:F9ypFzgbISXCzxQhhSnXMkc1vq12Luna3Nw5rqViOJY': - 'qnjiLl36h/1jlLvcAgt46Igaod2T9lOSnoSVkV0KC+c7vYIjG4QBzXpH+hycfufOT/y+a/kl52dUTLQWctMKCA', - }, - }, - }, - }, - '@othertest:fakeServer.notExisting': { - 'FOXDEVICE': { - 'user_id': '@othertest:fakeServer.notExisting', - 'device_id': 'FOXDEVICE', - 'algorithms': [ - AlgorithmTypes.olmV1Curve25519AesSha2, - AlgorithmTypes.megolmV1AesSha2 - ], - 'keys': { - 'curve25519:FOXDEVICE': - 'JBG7ZaPn54OBC7TuIEiylW3BZ+7WcGQhFBPB9pogbAg', - 'ed25519:FOXDEVICE': - 'R5/p04tticvdlNIxiiBIP0j9OQWv8ep6eEU6/lWKDxw', - }, - 'signatures': { - '@othertest:fakeServer.notExisting': { - 'ed25519:FOXDEVICE': - '2lJ3atmRIWgkyQNC9gvWEpxwuozsBQsg33M2IMDJqLhx/+g3Ds1vQ683dJsYIu04ORa4U0L9TqieHVpV/7qqDA', - }, - }, - }, - }, - }, - 'master_keys': { - '@test:fakeServer.notExisting': { - 'user_id': '@test:fakeServer.notExisting', - 'usage': ['master'], - 'keys': { - 'ed25519:82mAXjsmbTbrE6zyShpR869jnrANO75H8nYY0nDLoJ8': - '82mAXjsmbTbrE6zyShpR869jnrANO75H8nYY0nDLoJ8', - }, - 'signatures': {}, - }, - '@othertest:fakeServer.notExisting': { - 'user_id': '@othertest:fakeServer.notExisting', - 'usage': ['master'], - 'keys': { - 'ed25519:master': 'master', - }, - 'signatures': {}, - }, - }, - 'self_signing_keys': { - '@test:fakeServer.notExisting': { - 'user_id': '@test:fakeServer.notExisting', - 'usage': ['self_signing'], - 'keys': { - 'ed25519:F9ypFzgbISXCzxQhhSnXMkc1vq12Luna3Nw5rqViOJY': - 'F9ypFzgbISXCzxQhhSnXMkc1vq12Luna3Nw5rqViOJY', - }, - 'signatures': { - '@test:fakeServer.notExisting': { - 'ed25519:82mAXjsmbTbrE6zyShpR869jnrANO75H8nYY0nDLoJ8': - 'afkrbGvPn5Zb5zc7Lk9cz2skI3QrzI/L0st1GS+/GATxNjMzc6vKmGu7r9cMb1GJxy4RdeUpfH3L7Fs/fNL1Dw', - }, - }, - }, - '@othertest:fakeServer.notExisting': { - 'user_id': '@othertest:fakeServer.notExisting', - 'usage': ['self_signing'], - 'keys': { - 'ed25519:self_signing': 'self_signing', - }, - 'signatures': {}, - }, - }, - 'user_signing_keys': { - '@test:fakeServer.notExisting': { - 'user_id': '@test:fakeServer.notExisting', - 'usage': ['user_signing'], - 'keys': { - 'ed25519:0PiwulzJ/RU86LlzSSZ8St80HUMN3dqjKa/orIJoA0g': - '0PiwulzJ/RU86LlzSSZ8St80HUMN3dqjKa/orIJoA0g', - }, - 'signatures': { - '@test:fakeServer.notExisting': { - 'ed25519:82mAXjsmbTbrE6zyShpR869jnrANO75H8nYY0nDLoJ8': - 'pvgbZxEbllaElhpiRnb7/uOIUhrglvHCFnpoxr3/5ZrWa0EK/uaefhex9eEV4uBLrHjHg2ymwdNaM7ap9+sBBg', - }, - }, - }, - '@othertest:fakeServer.notExisting': { - 'user_id': '@othertest:fakeServer.notExisting', - 'usage': ['user_signing'], - 'keys': { - 'ed25519:user_signing': 'user_signing', - }, - 'signatures': {}, - }, - }, - }, - '/client/v3/register': (var req) => { - 'user_id': '@testuser:example.com', - 'access_token': '1234', - 'device_id': 'ABCD', - }, - '/client/v3/register?kind=user': (var req) => - {'user_id': '@testuser:example.com'}, - '/client/v3/register?kind=guest': (var req) => - {'user_id': '@testuser:example.com'}, - '/client/v3/rooms/1234/upgrade': (var req) => { - 'replacement_room': '!1234:fakeServer.notExisting', - }, - '/client/v3/user/1234/openid/request_token': (var req) => { - 'access_token': 'SomeT0kenHere', - 'token_type': 'Bearer', - 'matrix_server_name': 'example.com', - 'expires_in': 3600 - }, - '/client/v3/user/@test:fakeServer.notExisting/openid/request_token': - (var req) => { - 'access_token': 'SomeT0kenHere', - 'token_type': 'Bearer', - 'matrix_server_name': 'example.com', - 'expires_in': 3600 - }, - '/client/v3/login': (var req) => { - 'user_id': '@test:fakeServer.notExisting', - 'access_token': 'abc123', - 'device_id': 'GHTYAJCE', - 'well_known': { - 'm.homeserver': {'base_url': 'https://example.org'}, - 'm.identity_server': {'base_url': 'https://id.example.org'} - } - }, - '/media/v3/upload?filename=file.jpeg': (var req) => - {'content_uri': 'mxc://example.com/AQwafuaFswefuhsfAFAgsw'}, - '/client/v3/logout': (var reqI) => {}, - '/client/v3/pushers/set': (var reqI) => {}, - '/client/v3/join/1234': (var reqI) => {'room_id': '1234'}, - '/client/v3/logout/all': (var reqI) => {}, - '/client/v3/createRoom': (var reqI) => { - 'room_id': '!1234:fakeServer.notExisting', - }, - '/client/v3/rooms/!localpart%3Aserver.abc/read_markers': (var reqI) => - {}, - '/client/v3/rooms/!localpart:server.abc/kick': (var reqI) => - {}, - '/client/v3/rooms/!localpart%3Aserver.abc/ban': (var reqI) => - {}, - '/client/v3/rooms/!localpart%3Aserver.abc/unban': (var reqI) => - {}, - '/client/v3/rooms/!localpart%3Aserver.abc/invite': (var reqI) => - {}, - '/client/v3/keys/device_signing/upload': (var reqI) { - return {}; - }, - '/client/v3/keys/signatures/upload': (var reqI) => - {'failures': {}}, - '/client/v3/room_keys/version': (var reqI) => {'version': '5'}, - }, - 'PUT': { - '/client/v3/user/%40test%3AfakeServer.notExisting/account_data/m.ignored_user_list': - (var req) => {}, - '/client/v3/presence/${Uri.encodeComponent('@alice:example.com')}/status': - (var req) => {}, - '/client/v3/pushrules/global/content/nocake/enabled': (var req) => - {}, - '/client/v3/pushrules/global/content/nocake/actions': (var req) => - {}, - '/client/v3/rooms/!localpart%3Aserver.abc/state/m.room.history_visibility': - (var req) => {}, - '/client/v3/rooms/!localpart%3Aserver.abc/state/m.room.join_rules': - (var req) => {}, - '/client/v3/rooms/!localpart%3Aserver.abc/state/m.room.guest_access': - (var req) => {}, - '/client/v3/rooms/!localpart%3Aserver.abc/send/m.call.invite/1234': - (var req) => {}, - '/client/v3/rooms/!localpart%3Aserver.abc/send/m.call.answer/1234': - (var req) => {}, - '/client/v3/rooms/!localpart%3Aserver.abc/send/m.call.candidates/1234': - (var req) => {}, - '/client/v3/rooms/!localpart%3Aserver.abc/send/m.call.hangup/1234': - (var req) => {}, - '/client/v3/rooms/!1234%3Aexample.com/redact/1143273582443PhrSn%3Aexample.org/1234': - (var req) => {'event_id': '1234'}, - '/client/v3/pushrules/global/room/!localpart%3Aserver.abc': (var req) => - {}, - '/client/v3/pushrules/global/override/.m.rule.master/enabled': - (var req) => {}, - '/client/v3/pushrules/global/content/nocake?before=1&after=2': - (var req) => {}, - '/client/v3/devices/QBUAZIFURK': (var req) => {}, - '/client/v3/directory/room/%23testalias%3Aexample.com': (var reqI) => - {}, - '/client/v3/rooms/!localpart%3Aserver.abc/send/m.room.message/testtxid': - (var reqI) => { - 'event_id': '\$event${FakeMatrixApi.eventCounter++}', - }, - '/client/v3/rooms/!localpart%3Aserver.abc/send/m.reaction/testtxid': - (var reqI) => { - 'event_id': '\$event${FakeMatrixApi.eventCounter++}', - }, - '/client/v3/rooms/!localpart%3Aexample.com/typing/%40alice%3Aexample.com': - (var req) => {}, - '/client/v3/rooms/!1234%3Aexample.com/send/m.room.message/1234': - (var reqI) => { - 'event_id': '\$event${FakeMatrixApi.eventCounter++}', - }, - '/client/v3/rooms/!1234%3Aexample.com/send/m.room.message/newresend': - (var reqI) => { - 'event_id': '\$event${FakeMatrixApi.eventCounter++}', - }, - '/client/v3/user/%40test%3AfakeServer.notExisting/rooms/!localpart%3Aserver.abc/tags/m.favourite': - (var req) => {}, - '/client/v3/user/%40alice%3Aexample.com/rooms/!localpart%3Aexample.com/tags/testtag': - (var req) => {}, - '/client/v3/user/%40alice%3Aexample.com/account_data/test.account.data': - (var req) => {}, - '/client/v3/user/%40test%3AfakeServer.notExisting/account_data/best%20animal': - (var req) => {}, - '/client/v3/user/%40alice%3Aexample.com/rooms/1234/account_data/test.account.data': - (var req) => {}, - '/client/v3/user/%40test%3AfakeServer.notExisting/rooms/!localpart%3Aserver.abc/account_data/com.famedly.marked_unread': - (var req) => {}, - '/client/v3/user/%40test%3AfakeServer.notExisting/account_data/m.direct': - (var req) => {}, - '/client/v3/user/%40othertest%3AfakeServer.notExisting/account_data/m.direct': - (var req) => {}, - '/client/v3/profile/%40alice%3Aexample.com/displayname': (var reqI) => - {}, - '/client/v3/profile/%40alice%3Aexample.com/avatar_url': (var reqI) => - {}, - '/client/v3/profile/%40test%3AfakeServer.notExisting/avatar_url': - (var reqI) => {}, - '/client/v3/rooms/!localpart%3Aserver.abc/state/m.room.encryption': - (var reqI) => {'event_id': 'YUwRidLecu:example.com'}, - '/client/v3/rooms/!localpart%3Aserver.abc/state/m.room.avatar': - (var reqI) => {'event_id': 'YUwRidLecu:example.com'}, - '/client/v3/rooms/!localpart%3Aserver.abc/send/m.room.message/1234': - (var reqI) => {'event_id': 'YUwRidLecu:example.com'}, - '/client/v3/rooms/!localpart%3Aserver.abc/redact/1234/1234': (var reqI) => - {'event_id': 'YUwRidLecu:example.com'}, - '/client/v3/rooms/!localpart%3Aserver.abc/state/m.room.name': - (var reqI) => { - 'event_id': '42', - }, - '/client/v3/rooms/!localpart%3Aserver.abc/state/m.room.topic': - (var reqI) => { - 'event_id': '42', - }, - '/client/v3/rooms/!localpart%3Aserver.abc/state/m.room.pinned_events': - (var reqI) => { - 'event_id': '42', - }, - '/client/v3/rooms/!localpart%3Aserver.abc/state/m.room.power_levels': - (var reqI) => { - 'event_id': '42', - }, - '/client/v3/directory/list/room/!localpart%3Aexample.com': (var req) => - {}, - '/client/v3/room_keys/version/5': (var req) => {}, - '/client/v3/room_keys/keys/${Uri.encodeComponent('!726s6s6q:example.com')}/${Uri.encodeComponent('ciM/JWTPrmiWPPZNkRLDPQYf9AW/I46bxyLSr+Bx5oU')}?version=5': - (var req) => { - 'etag': 'asdf', - 'count': 1, - }, - '/client/v3/room_keys/keys/${Uri.encodeComponent('!726s6s6q:example.com')}?version=5': - (var req) => { - 'etag': 'asdf', - 'count': 1, - }, - '/client/v3/room_keys/keys?version=5': (var req) => { - 'etag': 'asdf', - 'count': 1, - }, - }, - 'DELETE': { - '/unknown/token': (var req) => {'errcode': 'M_UNKNOWN_TOKEN'}, - '/client/v3/devices/QBUAZIFURK': (var req) => {}, - '/client/v3/directory/room/%23testalias%3Aexample.com': (var reqI) => - {}, - '/client/v3/pushrules/global/content/nocake': (var req) => - {}, - '/client/v3/pushrules/global/override/!localpart%3Aserver.abc': - (var req) => {}, - '/client/v3/user/%40test%3AfakeServer.notExisting/rooms/!localpart%3Aserver.abc/tags/m.favourite': - (var req) => {}, - '/client/v3/user/%40alice%3Aexample.com/rooms/!localpart%3Aexample.com/tags/testtag': - (var req) => {}, - '/client/v3/room_keys/version/5': (var req) => {}, - '/client/v3/room_keys/keys/${Uri.encodeComponent('!726s6s6q:example.com')}/${Uri.encodeComponent('ciM/JWTPrmiWPPZNkRLDPQYf9AW/I46bxyLSr+Bx5oU')}?version=5': - (var req) => { - 'etag': 'asdf', - 'count': 1, - }, - '/client/v3/room_keys/keys/${Uri.encodeComponent('!726s6s6q:example.com')}?version=5': - (var req) => { - 'etag': 'asdf', - 'count': 1, - }, - '/client/v3/room_keys/keys?version=5': (var req) => { - 'etag': 'asdf', - 'count': 1, - }, - }, - }; -} diff --git a/scripts/test.sh b/scripts/test.sh index ed904841e..84207a80d 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -2,33 +2,17 @@ thread_count=$(getconf _NPROCESSORS_ONLN) -if which flutter >/dev/null; then - flutter pub global activate junitreport - flutter test --concurrency=$thread_count --coverage - TEST_CODE=$? - - # coverage - flutter pub global activate remove_from_coverage - flutter pub global run remove_from_coverage:remove_from_coverage -f coverage/lcov.info -r '\.g\.dart$' -else - dart test --concurrency=$thread_count --coverage=coverage - TEST_CODE=$? - - # coverage -> broken see https://github.com/dart-lang/test/issues/1698 - dart pub global activate coverage - - #reporton="--report-on=lib/" - if [ -n "$NO_OLM" ]; then reporton="--report-on=lib/src --report-on=lib/msc_extensions"; fi - - dart pub global run coverage:format_coverage -i coverage/ --lcov -o coverage/lcov.info $reporton - dart pub global activate remove_from_coverage - dart pub global run remove_from_coverage:remove_from_coverage -f coverage/lcov.info -r '\.g\.dart$' +if [ -n "$NO_OLM" ]; then + tagFlag="-x olm" fi -# coverage html report -genhtml -o coverage coverage/lcov.info || true +dart test --concurrency=$thread_count --coverage=coverage_dir $tagFlag +TEST_CODE=$? -# https://github.com/eriwen/lcov-to-cobertura-xml -lcov_cobertura.py coverage/lcov.info || true +# lets you do more stuff like reporton +dart pub global activate coverage +dart pub global run coverage:format_coverage --lcov -i coverage_dir -o coverage_dir/lcov.info --report-on=lib/ +dart pub global activate remove_from_coverage +dart pub global run remove_from_coverage:remove_from_coverage -f coverage_dir/lcov.info -r '\.g\.dart$' -exit $TEST_CODE +exit $TEST_CODE \ No newline at end of file diff --git a/test/client_test.dart b/test/client_test.dart index 9e31cced0..d290c8008 100644 --- a/test/client_test.dart +++ b/test/client_test.dart @@ -41,7 +41,7 @@ void main() { const fingerprintKey = 'gjL//fyaFHADt9KBADGag8g7F8Up78B/K1zXeiEPLJo'; /// All Tests related to the Login - group('Client', () { + group('Client', tags: 'olm', () { Logs().level = Level.error; /// Check if all Elements get created @@ -50,8 +50,6 @@ void main() { matrix = await getClient(); }); - var olmEnabled = true; - test('Login', () async { matrix = Client( 'testclient', @@ -60,15 +58,6 @@ void main() { ); final eventUpdateListFuture = matrix.onEvent.stream.toList(); final toDeviceUpdateListFuture = matrix.onToDeviceEvent.stream.toList(); - try { - await olm.init(); - olm.get_library_version(); - } catch (e) { - olmEnabled = false; - Logs().w('[LibOlm] Failed to load LibOlm', e); - } - Logs().w('[LibOlm] Enabled: $olmEnabled'); - var presenceCounter = 0; var accountDataCounter = 0; matrix.onPresenceChanged.stream.listen((CachedPresence data) { @@ -112,11 +101,10 @@ void main() { expect(loginState, LoginState.loggedIn); expect(matrix.onSync.value != null, true); - expect(matrix.encryptionEnabled, olmEnabled); - if (olmEnabled) { - expect(matrix.identityKey, identityKey); - expect(matrix.fingerprintKey, fingerprintKey); - } + expect(matrix.encryptionEnabled, true); + expect(matrix.identityKey, identityKey); + expect(matrix.fingerprintKey, fingerprintKey); + expect(sync.nextBatch == matrix.prevBatch, true); expect(matrix.accountData.length, 10); @@ -276,11 +264,8 @@ void main() { expect(deviceeventUpdateList.length, 2); expect(deviceeventUpdateList[0].type, 'm.new_device'); - if (olmEnabled) { - expect(deviceeventUpdateList[1].type, 'm.room_key'); - } else { - expect(deviceeventUpdateList[1].type, 'm.room.encrypted'); - } + + expect(deviceeventUpdateList[1].type, 'm.room_key'); }); test('recentEmoji', () async { @@ -349,15 +334,6 @@ void main() { databaseBuilder: getDatabase, ); - try { - await olm.init(); - olm.get_library_version(); - } catch (e) { - olmEnabled = false; - Logs().w('[LibOlm] Failed to load LibOlm', e); - } - Logs().w('[LibOlm] Enabled: $olmEnabled'); - expect(matrix.homeserver, null); try { @@ -392,11 +368,11 @@ void main() { expect(loginState, LoginState.loggedIn); expect(matrix.onSync.value != null, true); - expect(matrix.encryptionEnabled, olmEnabled); - if (olmEnabled) { - expect(matrix.identityKey, identityKey); - expect(matrix.fingerprintKey, fingerprintKey); - } + expect(matrix.encryptionEnabled, true); + + expect(matrix.identityKey, identityKey); + expect(matrix.fingerprintKey, fingerprintKey); + expect(sync.nextBatch == matrix.prevBatch, true); }); @@ -695,9 +671,6 @@ void main() { await client.dispose(closeDatabase: true); }); test('sendToDeviceEncrypted', () async { - if (!olmEnabled) { - return; - } FakeMatrixApi.calledEndpoints.clear(); await matrix.sendToDeviceEncrypted( @@ -714,9 +687,6 @@ void main() { true); }); test('sendToDeviceEncryptedChunked', () async { - if (!olmEnabled) { - return; - } FakeMatrixApi.calledEndpoints.clear(); await matrix.sendToDeviceEncryptedChunked( matrix.userDeviceKeys['@alice:example.com']!.deviceKeys.values @@ -1199,40 +1169,34 @@ void main() { reason: '!5345234235:example.com not found as archived room'); }); - test('Client Init Exception', () async { - try { - await olm.init(); - olm.get_library_version(); - } catch (e) { - olmEnabled = false; - Logs().w('[LibOlm] Failed to load LibOlm', e); - } - Logs().w('[LibOlm] Enabled: $olmEnabled'); - if (!olmEnabled) return; - final customClient = Client( - 'failclient', - databaseBuilder: getMatrixSdkDatabase, - ); - try { - await customClient.init( - newToken: 'testtoken', - newDeviceID: 'testdeviceid', - newDeviceName: 'testdevicename', - newHomeserver: Uri.parse('https://test.server'), - newOlmAccount: 'abcd', - newUserID: '@user:server', + test( + 'Client Init Exception', + () async { + final customClient = Client( + 'failclient', + databaseBuilder: getMatrixSdkDatabase, ); - throw Exception('No exception?'); - } on ClientInitException catch (error) { - expect(error.accessToken, 'testtoken'); - expect(error.deviceId, 'testdeviceid'); - expect(error.deviceName, 'testdevicename'); - expect(error.homeserver, Uri.parse('https://test.server')); - expect(error.olmAccount, 'abcd'); - expect(error.userId, '@user:server'); - expect(error.toString(), 'Exception: BAD_ACCOUNT_KEY'); - } - }); + try { + await customClient.init( + newToken: 'testtoken', + newDeviceID: 'testdeviceid', + newDeviceName: 'testdevicename', + newHomeserver: Uri.parse('https://test.server'), + newOlmAccount: 'abcd', + newUserID: '@user:server', + ); + throw Exception('No exception?'); + } on ClientInitException catch (error) { + expect(error.accessToken, 'testtoken'); + expect(error.deviceId, 'testdeviceid'); + expect(error.deviceName, 'testdevicename'); + expect(error.homeserver, Uri.parse('https://test.server')); + expect(error.olmAccount, 'abcd'); + expect(error.userId, '@user:server'); + expect(error.toString(), 'Exception: BAD_ACCOUNT_KEY'); + } + }, + ); tearDown(() async { await matrix.dispose(closeDatabase: true); diff --git a/test/commands_test.dart b/test/commands_test.dart index ba4ac670d..4a0e61801 100644 --- a/test/commands_test.dart +++ b/test/commands_test.dart @@ -19,7 +19,6 @@ import 'dart:convert'; import 'dart:typed_data'; -import 'package:olm/olm.dart' as olm; import 'package:test/test.dart'; import 'package:matrix/matrix.dart'; @@ -27,10 +26,9 @@ import 'fake_client.dart'; import 'fake_matrix_api.dart'; void main() { - group('Commands', () { + group('Commands', tags: 'olm', () { late Client client; late Room room; - var olmEnabled = true; Map getLastMessagePayload( [String type = 'm.room.message', String? stateKey]) { @@ -43,12 +41,6 @@ void main() { } test('setupClient', () async { - try { - await olm.init(); - olm.get_library_version(); - } catch (e) { - olmEnabled = false; - } client = await getClient(); room = Room(id: '!1234:fakeServer.notExisting', client: client); room.setState(Event( @@ -398,18 +390,16 @@ void main() { }); test('discardsession', () async { - if (olmEnabled) { - await client.encryption?.keyManager.createOutboundGroupSession(room.id); - expect( - client.encryption?.keyManager.getOutboundGroupSession(room.id) != - null, - true); - await room.sendTextEvent('/discardsession'); - expect( - client.encryption?.keyManager.getOutboundGroupSession(room.id) != - null, - false); - } + await client.encryption?.keyManager.createOutboundGroupSession(room.id); + expect( + client.encryption?.keyManager.getOutboundGroupSession(room.id) != + null, + true); + await room.sendTextEvent('/discardsession'); + expect( + client.encryption?.keyManager.getOutboundGroupSession(room.id) != + null, + false); }); test('markasdm', () async { diff --git a/test/database_api_test.dart b/test/database_api_test.dart index d4d135360..7894da54e 100644 --- a/test/database_api_test.dart +++ b/test/database_api_test.dart @@ -20,7 +20,6 @@ import 'dart:async'; import 'dart:convert'; import 'dart:typed_data'; -import 'package:olm/olm.dart' as olm; import 'package:test/test.dart'; import 'package:matrix/matrix.dart'; @@ -44,7 +43,7 @@ void main() { }; for (final databaseBuilder in databaseBuilders.entries) { - group('Test ${databaseBuilder.key}', () { + group('Test ${databaseBuilder.key}', tags: 'olm', () { late DatabaseApi database; late int toDeviceQueueIndex; @@ -372,7 +371,6 @@ void main() { expect(olm.isEmpty, true); }); test('storeOlmSession', () async { - if (!(await olmEnabled())) return; await database.storeOlmSession( 'identityKey', 'sessionId', @@ -393,7 +391,6 @@ void main() { expect(session, null); }); test('storeOutboundGroupSession', () async { - if (!(await olmEnabled())) return; await database.storeOutboundGroupSession( '!testroom:example.com', 'pickle', @@ -531,14 +528,3 @@ void main() { }); } } - -Future olmEnabled() async { - var olmEnabled = true; - try { - await olm.init(); - olm.get_library_version(); - } catch (e) { - olmEnabled = false; - } - return olmEnabled; -} diff --git a/test/device_keys_list_test.dart b/test/device_keys_list_test.dart index 69a2498e2..cd6ca90f7 100644 --- a/test/device_keys_list_test.dart +++ b/test/device_keys_list_test.dart @@ -18,7 +18,6 @@ import 'dart:convert'; -import 'package:olm/olm.dart' as olm; import 'package:test/test.dart'; import 'package:matrix/matrix.dart'; @@ -27,29 +26,16 @@ import './fake_matrix_api.dart'; void main() { /// All Tests related to device keys - group('Device keys', () { + group('Device keys', tags: 'olm', () { Logs().level = Level.error; - var olmEnabled = true; - late Client client; test('setupClient', () async { - try { - await olm.init(); - olm.get_library_version(); - } catch (e) { - olmEnabled = false; - Logs().w('[LibOlm] Failed to load LibOlm', e); - } - Logs().i('[LibOlm] Enabled: $olmEnabled'); - if (!olmEnabled) return; - client = await getClient(); }); test('fromJson', () async { - if (!olmEnabled) return; var rawJson = { 'user_id': '@alice:example.com', 'device_id': 'JLAFKJWSCS', @@ -94,7 +80,6 @@ void main() { }); test('reject devices without self-signature', () async { - if (!olmEnabled) return; var key = DeviceKeys.fromJson({ 'user_id': '@test:fakeServer.notExisting', 'device_id': 'BADDEVICE', @@ -131,7 +116,6 @@ void main() { }); test('set blocked / verified', () async { - if (!olmEnabled) return; final key = client.userDeviceKeys[client.userID]!.deviceKeys['OTHERDEVICE']!; client.userDeviceKeys[client.userID]?.deviceKeys['UNSIGNEDDEVICE'] = @@ -212,7 +196,6 @@ void main() { }); test('verification based on signatures', () async { - if (!olmEnabled) return; final user = client.userDeviceKeys[client.userID]!; user.masterKey?.setDirectVerified(true); expect(user.deviceKeys['GHTYAJCE']?.crossVerified, true); @@ -248,7 +231,6 @@ void main() { }); test('start verification', () async { - if (!olmEnabled) return; var req = await client .userDeviceKeys['@alice:example.com']?.deviceKeys['JLAFKJWSCS'] ?.startVerification(); @@ -262,7 +244,6 @@ void main() { }); test('dispose client', () async { - if (!olmEnabled) return; await client.dispose(closeDatabase: true); }); }); diff --git a/test/encryption/bootstrap_test.dart b/test/encryption/bootstrap_test.dart index 0f5323bd7..046e5e1a4 100644 --- a/test/encryption/bootstrap_test.dart +++ b/test/encryption/bootstrap_test.dart @@ -27,30 +27,20 @@ import 'package:matrix/matrix.dart'; import '../fake_client.dart'; void main() { - group('Bootstrap', () { + group('Bootstrap', tags: 'olm', () { Logs().level = Level.error; - var olmEnabled = true; late Client client; late Map oldSecret; late String origKeyId; - test('setupClient', () async { + setUpAll(() async { + await olm.init(); + olm.get_library_version(); client = await getClient(); - await client.abortSync(); }); test('setup', () async { - try { - await olm.init(); - olm.get_library_version(); - } catch (e) { - olmEnabled = false; - Logs().w('[LibOlm] Failed to load LibOlm', e); - } - Logs().i('[LibOlm] Enabled: $olmEnabled'); - if (!olmEnabled) return; - Bootstrap? bootstrap; bootstrap = client.encryption!.bootstrap( onUpdate: (bootstrap) async { @@ -105,7 +95,6 @@ void main() { }, timeout: Timeout(Duration(minutes: 2))); test('change recovery passphrase', () async { - if (!olmEnabled) return; Bootstrap? bootstrap; bootstrap = client.encryption!.bootstrap( onUpdate: (bootstrap) async { @@ -153,7 +142,6 @@ void main() { }, timeout: Timeout(Duration(minutes: 2))); test('change passphrase with multiple keys', () async { - if (!olmEnabled) return; await client.setAccountData(client.userID!, 'foxes', oldSecret); await Future.delayed(Duration(milliseconds: 50)); @@ -206,7 +194,6 @@ void main() { }, timeout: Timeout(Duration(minutes: 2))); test('setup new ssss', () async { - if (!olmEnabled) return; client.accountData.clear(); Bootstrap? bootstrap; bootstrap = client.encryption!.bootstrap( @@ -229,7 +216,6 @@ void main() { }, timeout: Timeout(Duration(minutes: 2))); test('bad ssss', () async { - if (!olmEnabled) return; client.accountData.clear(); await client.setAccountData(client.userID!, 'foxes', oldSecret); await Future.delayed(Duration(milliseconds: 50)); @@ -252,7 +238,6 @@ void main() { }); test('dispose client', () async { - if (!olmEnabled) return; await client.dispose(closeDatabase: true); }); }); diff --git a/test/encryption/cross_signing_test.dart b/test/encryption/cross_signing_test.dart index 15bb22cab..dcfa5dd25 100644 --- a/test/encryption/cross_signing_test.dart +++ b/test/encryption/cross_signing_test.dart @@ -26,33 +26,22 @@ import '../fake_client.dart'; import '../fake_matrix_api.dart'; void main() { - group('Cross Signing', () { + group('Cross Signing', tags: 'olm', () { Logs().level = Level.error; - var olmEnabled = true; late Client client; - test('setupClient', () async { - try { - await olm.init(); - olm.get_library_version(); - } catch (e) { - olmEnabled = false; - Logs().w('[LibOlm] Failed to load LibOlm', e); - } - Logs().i('[LibOlm] Enabled: $olmEnabled'); - if (!olmEnabled) return; - + setUpAll(() async { + await olm.init(); + olm.get_library_version(); client = await getClient(); }); test('basic things', () async { - if (!olmEnabled) return; expect(client.encryption?.crossSigning.enabled, true); }); test('selfSign', () async { - if (!olmEnabled) return; final key = client.userDeviceKeys[client.userID]!.masterKey!; key.setDirectVerified(false); FakeMatrixApi.calledEndpoints.clear(); @@ -66,7 +55,6 @@ void main() { }); test('signable', () async { - if (!olmEnabled) return; expect( client.encryption!.crossSigning .signable([client.userDeviceKeys[client.userID!]!.masterKey!]), @@ -90,7 +78,6 @@ void main() { }); test('sign', () async { - if (!olmEnabled) return; FakeMatrixApi.calledEndpoints.clear(); await client.encryption!.crossSigning.sign([ client.userDeviceKeys[client.userID!]!.masterKey!, @@ -114,7 +101,6 @@ void main() { }); test('dispose client', () async { - if (!olmEnabled) return; await client.dispose(closeDatabase: true); }); }); diff --git a/test/encryption/encrypt_decrypt_room_message_test.dart b/test/encryption/encrypt_decrypt_room_message_test.dart index 2f3d3703e..357a4057c 100644 --- a/test/encryption/encrypt_decrypt_room_message_test.dart +++ b/test/encryption/encrypt_decrypt_room_message_test.dart @@ -23,9 +23,8 @@ import 'package:matrix/matrix.dart'; import '../fake_client.dart'; void main() { - group('Encrypt/Decrypt room message', () { + group('Encrypt/Decrypt room message', tags: 'olm', () { Logs().level = Level.error; - var olmEnabled = true; late Client client; final roomId = '!726s6s6q:example.com'; @@ -33,23 +32,14 @@ void main() { late Map payload; final now = DateTime.now(); - test('setupClient', () async { - try { - await olm.init(); - olm.get_library_version(); - } catch (e) { - olmEnabled = false; - Logs().w('[LibOlm] Failed to load LibOlm', e); - } - Logs().i('[LibOlm] Enabled: $olmEnabled'); - if (!olmEnabled) return; - + setUpAll(() async { + await olm.init(); + olm.get_library_version(); client = await getClient(); room = client.getRoomById(roomId)!; }); test('encrypt payload', () async { - if (!olmEnabled) return; payload = await client.encryption!.encryptGroupMessagePayload(roomId, { 'msgtype': 'm.text', 'text': 'Hello foxies!', @@ -62,7 +52,6 @@ void main() { }); test('decrypt payload', () async { - if (!olmEnabled) return; final encryptedEvent = Event( type: EventTypes.Encrypted, content: payload, @@ -80,7 +69,6 @@ void main() { }); test('decrypt payload without device_id', () async { - if (!olmEnabled) return; payload.remove('device_id'); payload.remove('sender_key'); final encryptedEvent = Event( @@ -100,7 +88,6 @@ void main() { }); test('decrypt payload nocache', () async { - if (!olmEnabled) return; client.encryption!.keyManager.clearInboundGroupSessions(); final encryptedEvent = Event( type: EventTypes.Encrypted, @@ -120,7 +107,6 @@ void main() { }); test('dispose client', () async { - if (!olmEnabled) return; await client.dispose(closeDatabase: true); }); }); diff --git a/test/encryption/encrypt_decrypt_to_device_test.dart b/test/encryption/encrypt_decrypt_to_device_test.dart index 10904eae9..ecd826e84 100644 --- a/test/encryption/encrypt_decrypt_to_device_test.dart +++ b/test/encryption/encrypt_decrypt_to_device_test.dart @@ -29,9 +29,8 @@ void main() { const otherPickledOlmAccount = 'VWhVApbkcilKAEGppsPDf9nNVjaK8/IxT3asSR0sYg0S5KgbfE8vXEPwoiKBX2cEvwX3OessOBOkk+ZE7TTbjlrh/KEd31p8Wo+47qj0AP+Ky+pabnhi+/rTBvZy+gfzTqUfCxZrkzfXI9Op4JnP6gYmy7dVX2lMYIIs9WCO1jcmIXiXum5jnfXu1WLfc7PZtO2hH+k9CDKosOFaXRBmsu8k/BGXPSoWqUpvu6WpEG9t5STk4FeAzA'; - group('Encrypt/Decrypt to-device messages', () { + group('Encrypt/Decrypt to-device messages', tags: 'olm', () { Logs().level = Level.error; - var olmEnabled = true; late Client client; final otherClient = Client('othertestclient', @@ -39,17 +38,13 @@ void main() { late DeviceKeys device; late Map payload; - test('setupClient', () async { - try { - await olm.init(); - olm.get_library_version(); - } catch (e) { - olmEnabled = false; - Logs().w('[LibOlm] Failed to load LibOlm', e); - } - Logs().i('[LibOlm] Enabled: $olmEnabled'); - if (!olmEnabled) return; + setUpAll(() async { + await olm.init(); + olm.get_library_version(); + client = await getClient(); + }); + test('setupClient', () async { client = await getClient(); await client.abortSync(); await otherClient.checkHomeserver( @@ -81,13 +76,11 @@ void main() { }); test('encryptToDeviceMessage', () async { - if (!olmEnabled) return; payload = await otherClient.encryption! .encryptToDeviceMessage([device], 'm.to_device', {'hello': 'foxies'}); }); test('decryptToDeviceEvent', () async { - if (!olmEnabled) return; final encryptedEvent = ToDeviceEvent( sender: '@othertest:fakeServer.notExisting', type: EventTypes.Encrypted, @@ -100,7 +93,6 @@ void main() { }); test('decryptToDeviceEvent nocache', () async { - if (!olmEnabled) return; client.encryption!.olmManager.olmSessions.clear(); payload = await otherClient.encryption!.encryptToDeviceMessage( [device], 'm.to_device', {'hello': 'superfoxies'}); @@ -116,7 +108,6 @@ void main() { }); test('dispose client', () async { - if (!olmEnabled) return; await client.dispose(closeDatabase: true); await otherClient.dispose(closeDatabase: true); }); diff --git a/test/encryption/key_manager_test.dart b/test/encryption/key_manager_test.dart index 7110bc751..d5eb04335 100644 --- a/test/encryption/key_manager_test.dart +++ b/test/encryption/key_manager_test.dart @@ -26,28 +26,17 @@ import '../fake_client.dart'; import '../fake_matrix_api.dart'; void main() { - group('Key Manager', () { + group('Key Manager', tags: 'olm', () { Logs().level = Level.error; - var olmEnabled = true; - late Client client; - test('setupClient', () async { - try { - await olm.init(); - olm.get_library_version(); - } catch (e) { - olmEnabled = false; - Logs().w('[LibOlm] Failed to load LibOlm', e); - } - Logs().i('[LibOlm] Enabled: $olmEnabled'); - if (!olmEnabled) return; - + setUpAll(() async { + await olm.init(); + olm.get_library_version(); client = await getClient(); }); test('handle new m.room_key', () async { - if (!olmEnabled) return; final validSessionId = 'ciM/JWTPrmiWPPZNkRLDPQYf9AW/I46bxyLSr+Bx5oU'; final validSenderKey = 'JBG7ZaPn54OBC7TuIEiylW3BZ+7WcGQhFBPB9pogbAg'; final sessionKey = @@ -95,7 +84,6 @@ void main() { }); test('outbound group session', () async { - if (!olmEnabled) return; final roomId = '!726s6s6q:example.com'; expect( client.encryption!.keyManager.getOutboundGroupSession(roomId) != null, @@ -270,7 +258,6 @@ void main() { }); test('inbound group session', () async { - if (!olmEnabled) return; final roomId = '!726s6s6q:example.com'; final sessionId = 'ciM/JWTPrmiWPPZNkRLDPQYf9AW/I46bxyLSr+Bx5oU'; final senderKey = 'JBG7ZaPn54OBC7TuIEiylW3BZ+7WcGQhFBPB9pogbAg'; @@ -324,7 +311,6 @@ void main() { }); test('setInboundGroupSession', () async { - if (!olmEnabled) return; final session = olm.OutboundGroupSession(); session.create(); final inbound = olm.InboundGroupSession(); @@ -495,7 +481,6 @@ void main() { }); test('Reused deviceID attack', () async { - if (!olmEnabled) return; Logs().level = Level.warning; // Ensure the device came from sync @@ -542,7 +527,6 @@ void main() { }); test('dispose client', () async { - if (!olmEnabled) return; await client.dispose(closeDatabase: false); }); }); diff --git a/test/encryption/key_request_test.dart b/test/encryption/key_request_test.dart index b788a06f0..9b87f5cf5 100644 --- a/test/encryption/key_request_test.dart +++ b/test/encryption/key_request_test.dart @@ -39,23 +39,17 @@ Map jsonDecode(dynamic payload) { void main() { /// All Tests related to device keys - group('Key Request', () { + group('Key Request', tags: 'olm', () { Logs().level = Level.error; - var olmEnabled = true; + + setUpAll(() async { + await olm.init(); + olm.get_library_version(); + }); final validSessionId = 'ciM/JWTPrmiWPPZNkRLDPQYf9AW/I46bxyLSr+Bx5oU'; final validSenderKey = 'JBG7ZaPn54OBC7TuIEiylW3BZ+7WcGQhFBPB9pogbAg'; test('Create Request', () async { - try { - await olm.init(); - olm.get_library_version(); - } catch (e) { - olmEnabled = false; - Logs().w('[LibOlm] Failed to load LibOlm', e); - } - Logs().i('[LibOlm] Enabled: $olmEnabled'); - if (!olmEnabled) return; - final matrix = await getClient(); final requestRoom = matrix.getRoomById('!726s6s6q:example.com')!; await matrix.encryption!.keyManager.request( @@ -82,7 +76,6 @@ void main() { await matrix.dispose(closeDatabase: true); }); test('Reply To Request', () async { - if (!olmEnabled) return; final matrix = await getClient(); matrix.setUserId('@alice:example.com'); // we need to pretend to be alice FakeMatrixApi.calledEndpoints.clear(); @@ -277,7 +270,6 @@ void main() { await matrix.dispose(closeDatabase: true); }); test('Receive shared keys', () async { - if (!olmEnabled) return; final matrix = await getClient(); final requestRoom = matrix.getRoomById('!726s6s6q:example.com')!; await matrix.encryption!.keyManager.request( diff --git a/test/encryption/key_verification_test.dart b/test/encryption/key_verification_test.dart index 8ad2dfdd5..e67c93218 100644 --- a/test/encryption/key_verification_test.dart +++ b/test/encryption/key_verification_test.dart @@ -48,20 +48,8 @@ EventUpdate getLastSentEvent(KeyVerification req) { } void main() async { - var olmEnabled = true; - try { - await olm.init(); - olm.get_library_version(); - } catch (e) { - olmEnabled = false; - Logs().w('[LibOlm] Failed to load LibOlm', e); - } - Logs().i('[LibOlm] Enabled: $olmEnabled'); - - final dynamic skip = olmEnabled ? false : 'olm library not available'; - /// All Tests related to the ChatTime - group('Key Verification', () { + group('Key Verification', tags: 'olm', () { Logs().level = Level.error; // key @othertest:fakeServer.notExisting @@ -70,6 +58,12 @@ void main() async { late Client client1; late Client client2; + + setUpAll(() async { + await olm.init(); + olm.get_library_version(); + }); + setUp(() async { client1 = await getClient(); client2 = Client( @@ -101,7 +95,11 @@ void main() async { KeyVerificationMethod.qrShow, KeyVerificationMethod.reciprocate }; + + // get client2 device keys to start verification + await client1.updateUserDeviceKeys(additionalUsers: {client2.userID!}); }); + tearDown(() async { await client1.dispose(closeDatabase: true); await client2.dispose(closeDatabase: true); @@ -810,5 +808,5 @@ void main() async { await client1.encryption!.keyVerificationManager.cleanup(); await client2.encryption!.keyVerificationManager.cleanup(); }); - }, skip: skip); + }); } diff --git a/test/encryption/olm_manager_test.dart b/test/encryption/olm_manager_test.dart index 5792b7617..3ec1c1e62 100644 --- a/test/encryption/olm_manager_test.dart +++ b/test/encryption/olm_manager_test.dart @@ -27,29 +27,18 @@ import '../fake_client.dart'; import '../fake_matrix_api.dart'; void main() { - group('Olm Manager', () { + group('Olm Manager', tags: 'olm', () { Logs().level = Level.error; - var olmEnabled = true; late Client client; - setUp(() async { - try { - await olm.init(); - olm.get_library_version(); - } catch (e) { - olmEnabled = false; - Logs().w('[LibOlm] Failed to load LibOlm', e); - } - Logs().i('[LibOlm] Enabled: $olmEnabled'); - if (!olmEnabled) return Future.value(); - + setUpAll(() async { + await olm.init(); + olm.get_library_version(); client = await getClient(); - return Future.value(); }); test('signatures', () async { - if (!olmEnabled) return; final payload = { 'fox': 'floof', }; @@ -61,7 +50,6 @@ void main() { }); test('uploadKeys', () async { - if (!olmEnabled) return; FakeMatrixApi.calledEndpoints.clear(); final res = await client.encryption!.olmManager .uploadKeys(uploadDeviceKeys: true); @@ -89,8 +77,6 @@ void main() { }); test('handleDeviceOneTimeKeysCount', () async { - if (!olmEnabled) return; - FakeMatrixApi.calledEndpoints.clear(); await client.encryption!.olmManager .handleDeviceOneTimeKeysCount({'signed_curve25519': 20}, null); @@ -127,7 +113,6 @@ void main() { }); test('restoreOlmSession', () async { - if (!olmEnabled) return; client.encryption!.olmManager.olmSessions.clear(); await client.encryption!.olmManager .restoreOlmSession(client.userID!, client.identityKey); @@ -145,7 +130,6 @@ void main() { }); test('startOutgoingOlmSessions', () async { - if (!olmEnabled) return; // start an olm session.....with ourself! client.encryption!.olmManager.olmSessions.clear(); await client.encryption!.olmManager.startOutgoingOlmSessions([ @@ -158,7 +142,6 @@ void main() { }); test('replay to_device events', () async { - if (!olmEnabled) return; final userId = '@alice:example.com'; final deviceId = 'JLAFKJWSCS'; final senderKey = 'L+4+JCl8MD63dgo8z5Ta+9QAHXiANyOVSfgbHA5d3H8'; @@ -261,7 +244,6 @@ void main() { }); test('dispose client', () async { - if (!olmEnabled) return; await client.dispose(closeDatabase: true); }); }); diff --git a/test/encryption/online_key_backup_test.dart b/test/encryption/online_key_backup_test.dart index acc76f0ac..cbf45f6e3 100644 --- a/test/encryption/online_key_backup_test.dart +++ b/test/encryption/online_key_backup_test.dart @@ -26,9 +26,8 @@ import '../fake_client.dart'; import '../fake_matrix_api.dart'; void main() { - group('Online Key Backup', () { + group('Online Key Backup', tags: 'olm', () { Logs().level = Level.error; - var olmEnabled = true; late Client client; @@ -36,22 +35,13 @@ void main() { final sessionId = 'ciM/JWTPrmiWPPZNkRLDPQYf9AW/I46bxyLSr+Bx5oU'; final senderKey = 'JBG7ZaPn54OBC7TuIEiylW3BZ+7WcGQhFBPB9pogbAg'; - test('setupClient', () async { - try { - await olm.init(); - olm.get_library_version(); - } catch (e) { - olmEnabled = false; - Logs().w('[LibOlm] Failed to load LibOlm', e); - } - Logs().i('[LibOlm] Enabled: $olmEnabled'); - if (!olmEnabled) return; - + setUpAll(() async { + await olm.init(); + olm.get_library_version(); client = await getClient(); }); test('basic things', () async { - if (!olmEnabled) return; expect(client.encryption!.keyManager.enabled, true); expect(await client.encryption!.keyManager.isCached(), false); final handle = client.encryption!.ssss.open(); @@ -61,7 +51,6 @@ void main() { }); test('load key', () async { - if (!olmEnabled) return; client.encryption!.keyManager.clearInboundGroupSessions(); await client.encryption!.keyManager .request(client.getRoomById(roomId)!, sessionId, senderKey); @@ -73,7 +62,6 @@ void main() { }); test('Load all Room Keys', () async { - if (!olmEnabled) return; final keyManager = client.encryption!.keyManager; const roomId = '!getroomkeys726s6s6q:example.com'; const sessionId = 'ciM/JWTPrmiWPPZNkRLDPQYf9AW/I46bxyLSr+Bx5oU'; @@ -86,7 +74,6 @@ void main() { }); test('Load all Keys', () async { - if (!olmEnabled) return; final keyManager = client.encryption!.keyManager; const roomId = '!getallkeys726s6s6q:example.com'; const sessionId = 'ciM/JWTPrmiWPPZNkRLDPQYf9AW/I46bxyLSr+Bx5oU'; @@ -99,7 +86,6 @@ void main() { }); test('upload key', () async { - if (!olmEnabled) return; final session = olm.OutboundGroupSession(); session.create(); final inbound = olm.InboundGroupSession(); @@ -143,7 +129,6 @@ void main() { }); test('dispose client', () async { - if (!olmEnabled) return; await client.dispose(closeDatabase: false); }); }); diff --git a/test/encryption/qr_verification_self_test.dart b/test/encryption/qr_verification_self_test.dart index 1fe1c1bba..1e46b3486 100644 --- a/test/encryption/qr_verification_self_test.dart +++ b/test/encryption/qr_verification_self_test.dart @@ -19,7 +19,6 @@ import 'dart:async'; import 'dart:typed_data'; -import 'package:olm/olm.dart' as olm; import 'package:test/test.dart'; import 'package:matrix/encryption.dart'; @@ -62,20 +61,8 @@ void main() async { ); } - var olmEnabled = true; - try { - await olm.init(); - olm.get_library_version(); - } catch (e) { - olmEnabled = false; - Logs().w('[LibOlm] Failed to load LibOlm', e); - } - Logs().i('[LibOlm] Enabled: $olmEnabled'); - - final dynamic skip = olmEnabled ? false : 'olm library not available'; - /// All Tests related to the ChatTime - group('Key Verification', () { + group('Key Verification', tags: 'olm', () { Logs().level = Level.error; late Client client1; @@ -532,5 +519,5 @@ void main() async { await client1.encryption!.keyVerificationManager.cleanup(); await client2.encryption!.keyVerificationManager.cleanup(); }); - }, skip: skip); + }); } diff --git a/test/encryption/ssss_test.dart b/test/encryption/ssss_test.dart index e3827f1ca..4d914a5a1 100644 --- a/test/encryption/ssss_test.dart +++ b/test/encryption/ssss_test.dart @@ -49,34 +49,23 @@ class MockSSSS extends SSSS { } void main() { - group('SSSS', () { + group('SSSS', tags: 'olm', () { Logs().level = Level.error; - var olmEnabled = true; late Client client; - test('setupClient', () async { - try { - await olm.init(); - olm.get_library_version(); - } catch (e) { - olmEnabled = false; - Logs().w('[LibOlm] Failed to load LibOlm', e); - } - Logs().i('[LibOlm] Enabled: $olmEnabled'); - if (!olmEnabled) return; - + setUpAll(() async { + await olm.init(); + olm.get_library_version(); client = await getClient(); }); test('basic things', () async { - if (!olmEnabled) return; expect(client.encryption!.ssss.defaultKeyId, '0FajDWYaM6wQ4O60OZnLvwZfsBNu4Bu3'); }); test('encrypt / decrypt', () async { - if (!olmEnabled) return; final key = Uint8List.fromList(secureRandomBytes(32)); final enc = await SSSS.encryptAes('secret foxies', key, 'name'); @@ -85,7 +74,6 @@ void main() { }); test('store', () async { - if (!olmEnabled) return; final handle = client.encryption!.ssss.open(); var failed = false; try { @@ -125,7 +113,6 @@ void main() { }); test('encode / decode recovery key', () async { - if (!olmEnabled) return; final key = Uint8List.fromList(secureRandomBytes(32)); final encoded = SSSS.encodeRecoveryKey(key); var decoded = SSSS.decodeRecoveryKey(encoded); @@ -140,7 +127,6 @@ void main() { }); test('cache', () async { - if (!olmEnabled) return; await client.encryption!.ssss.clearCache(); final handle = client.encryption!.ssss.open(EventTypes.CrossSigningSelfSigning); @@ -174,7 +160,6 @@ void main() { }); test('postUnlock', () async { - if (!olmEnabled) return; await client.encryption!.ssss.clearCache(); client.userDeviceKeys[client.userID!]!.masterKey! .setDirectVerified(false); @@ -200,7 +185,6 @@ void main() { }); test('make share requests', () async { - if (!olmEnabled) return; final key = client.userDeviceKeys[client.userID!]!.deviceKeys['OTHERDEVICE']!; key.setDirectVerified(true); @@ -213,7 +197,6 @@ void main() { }); test('answer to share requests', () async { - if (!olmEnabled) return; var event = ToDeviceEvent( sender: client.userID!, type: 'm.secret.request', @@ -313,7 +296,6 @@ void main() { }); test('receive share requests', () async { - if (!olmEnabled) return; final key = client.userDeviceKeys[client.userID!]!.deviceKeys['OTHERDEVICE']!; key.setDirectVerified(true); @@ -456,7 +438,6 @@ void main() { }); test('request all', () async { - if (!olmEnabled) return; final key = client.userDeviceKeys[client.userID!]!.deviceKeys['OTHERDEVICE']!; key.setDirectVerified(true); @@ -467,7 +448,6 @@ void main() { }); test('periodicallyRequestMissingCache', () async { - if (!olmEnabled) return; client.userDeviceKeys[client.userID!]!.masterKey!.setDirectVerified(true); client.encryption!.ssss = MockSSSS(client.encryption!); (client.encryption!.ssss as MockSSSS).requestedSecrets = false; @@ -480,7 +460,6 @@ void main() { }); test('createKey', () async { - if (!olmEnabled) return; // with passphrase var newKey = await client.encryption!.ssss.createKey('test'); expect(client.encryption!.ssss.isKeyValid(newKey.keyId), true); @@ -496,7 +475,6 @@ void main() { }); test('dispose client', () async { - if (!olmEnabled) return; await client.dispose(closeDatabase: true); }); }); diff --git a/test/event_test.dart b/test/event_test.dart index 5c925b4d1..46c4c92ce 100644 --- a/test/event_test.dart +++ b/test/event_test.dart @@ -19,7 +19,6 @@ import 'dart:convert'; import 'dart:typed_data'; -import 'package:olm/olm.dart' as olm; import 'package:test/test.dart'; import 'package:matrix/encryption.dart'; @@ -30,9 +29,8 @@ import 'fake_matrix_api.dart'; void main() { /// All Tests related to the Event - group('Event', () { + group('Event', tags: 'olm', () { Logs().level = Level.error; - var olmEnabled = true; final timestamp = DateTime.now().millisecondsSinceEpoch; final id = '!4fsdfjisjf:server.abc'; @@ -59,17 +57,6 @@ void main() { final event = Event.fromJson( jsonObj, Room(id: '!testroom:example.abc', client: client)); - test('setup', () async { - try { - await olm.init(); - olm.get_library_version(); - } catch (e) { - olmEnabled = false; - Logs().w('[LibOlm] Failed to load LibOlm', e); - } - Logs().i('[LibOlm] Enabled: $olmEnabled'); - }); - test('Create from json', () async { jsonObj.remove('status'); jsonObj['content'] = json.decode(contentJson); @@ -1405,109 +1392,117 @@ void main() { getThumbnail: true, downloadCallback: downloadCallback); expect(buffer.bytes, THUMBNAIL_BUFF); }); - test('encrypted attachments', () async { - if (!olmEnabled) return; - - final FILE_BUFF_ENC = Uint8List.fromList([0x3B, 0x6B, 0xB2, 0x8C, 0xAF]); - final FILE_BUFF_DEC = Uint8List.fromList([0x74, 0x65, 0x73, 0x74, 0x0A]); - final THUMB_BUFF_ENC = - Uint8List.fromList([0x55, 0xD7, 0xEB, 0x72, 0x05, 0x13]); - final THUMB_BUFF_DEC = - Uint8List.fromList([0x74, 0x68, 0x75, 0x6D, 0x62, 0x0A]); - Future downloadCallback(Uri uri) async { - return { - '/_matrix/media/v3/download/example.com/file': FILE_BUFF_ENC, - '/_matrix/media/v3/download/example.com/thumb': THUMB_BUFF_ENC, - }[uri.path]!; - } - - final room = Room(id: '!localpart:server.abc', client: await getClient()); - var event = Event.fromJson({ - 'type': EventTypes.Message, - 'content': { - 'body': 'image', - 'msgtype': 'm.image', - 'file': { - 'v': 'v2', - 'key': { - 'alg': 'A256CTR', - 'ext': true, - 'k': '7aPRNIDPeUAUqD6SPR3vVX5W9liyMG98NexVJ9udnCc', - 'key_ops': ['encrypt', 'decrypt'], - 'kty': 'oct' - }, - 'iv': 'Wdsf+tnOHIoAAAAAAAAAAA', - 'hashes': {'sha256': 'WgC7fw2alBC5t+xDx+PFlZxfFJXtIstQCg+j0WDaXxE'}, - 'url': 'mxc://example.com/file', - 'mimetype': 'text/plain' - }, - }, - 'event_id': '\$edit2', - 'sender': '@alice:example.org', - }, room); - var buffer = await event.downloadAndDecryptAttachment( - downloadCallback: downloadCallback); - expect(buffer.bytes, FILE_BUFF_DEC); + test( + 'encrypted attachments', + () async { + final FILE_BUFF_ENC = + Uint8List.fromList([0x3B, 0x6B, 0xB2, 0x8C, 0xAF]); + final FILE_BUFF_DEC = + Uint8List.fromList([0x74, 0x65, 0x73, 0x74, 0x0A]); + final THUMB_BUFF_ENC = + Uint8List.fromList([0x55, 0xD7, 0xEB, 0x72, 0x05, 0x13]); + final THUMB_BUFF_DEC = + Uint8List.fromList([0x74, 0x68, 0x75, 0x6D, 0x62, 0x0A]); + Future downloadCallback(Uri uri) async { + return { + '/_matrix/media/v3/download/example.com/file': FILE_BUFF_ENC, + '/_matrix/media/v3/download/example.com/thumb': THUMB_BUFF_ENC, + }[uri.path]!; + } - event = Event.fromJson({ - 'type': EventTypes.Message, - 'content': { - 'body': 'image', - 'msgtype': 'm.image', - 'file': { - 'v': 'v2', - 'key': { - 'alg': 'A256CTR', - 'ext': true, - 'k': '7aPRNIDPeUAUqD6SPR3vVX5W9liyMG98NexVJ9udnCc', - 'key_ops': ['encrypt', 'decrypt'], - 'kty': 'oct' + final room = + Room(id: '!localpart:server.abc', client: await getClient()); + var event = Event.fromJson({ + 'type': EventTypes.Message, + 'content': { + 'body': 'image', + 'msgtype': 'm.image', + 'file': { + 'v': 'v2', + 'key': { + 'alg': 'A256CTR', + 'ext': true, + 'k': '7aPRNIDPeUAUqD6SPR3vVX5W9liyMG98NexVJ9udnCc', + 'key_ops': ['encrypt', 'decrypt'], + 'kty': 'oct' + }, + 'iv': 'Wdsf+tnOHIoAAAAAAAAAAA', + 'hashes': { + 'sha256': 'WgC7fw2alBC5t+xDx+PFlZxfFJXtIstQCg+j0WDaXxE' + }, + 'url': 'mxc://example.com/file', + 'mimetype': 'text/plain' }, - 'iv': 'Wdsf+tnOHIoAAAAAAAAAAA', - 'hashes': {'sha256': 'WgC7fw2alBC5t+xDx+PFlZxfFJXtIstQCg+j0WDaXxE'}, - 'url': 'mxc://example.com/file', - 'mimetype': 'text/plain' }, - 'info': { - 'thumbnail_file': { + 'event_id': '\$edit2', + 'sender': '@alice:example.org', + }, room); + var buffer = await event.downloadAndDecryptAttachment( + downloadCallback: downloadCallback); + expect(buffer.bytes, FILE_BUFF_DEC); + + event = Event.fromJson({ + 'type': EventTypes.Message, + 'content': { + 'body': 'image', + 'msgtype': 'm.image', + 'file': { 'v': 'v2', 'key': { 'alg': 'A256CTR', 'ext': true, - 'k': 'TmF-rZYetZbxpL5yjDPE21UALQJcpEE6X-nvUDD5rA0', + 'k': '7aPRNIDPeUAUqD6SPR3vVX5W9liyMG98NexVJ9udnCc', 'key_ops': ['encrypt', 'decrypt'], 'kty': 'oct' }, - 'iv': '41ZqNRZSLFUAAAAAAAAAAA', + 'iv': 'Wdsf+tnOHIoAAAAAAAAAAA', 'hashes': { - 'sha256': 'zccOwXiOTAYhGXyk0Fra7CRreBF6itjiCKdd+ov8mO4' + 'sha256': 'WgC7fw2alBC5t+xDx+PFlZxfFJXtIstQCg+j0WDaXxE' }, - 'url': 'mxc://example.com/thumb', + 'url': 'mxc://example.com/file', 'mimetype': 'text/plain' - } + }, + 'info': { + 'thumbnail_file': { + 'v': 'v2', + 'key': { + 'alg': 'A256CTR', + 'ext': true, + 'k': 'TmF-rZYetZbxpL5yjDPE21UALQJcpEE6X-nvUDD5rA0', + 'key_ops': ['encrypt', 'decrypt'], + 'kty': 'oct' + }, + 'iv': '41ZqNRZSLFUAAAAAAAAAAA', + 'hashes': { + 'sha256': 'zccOwXiOTAYhGXyk0Fra7CRreBF6itjiCKdd+ov8mO4' + }, + 'url': 'mxc://example.com/thumb', + 'mimetype': 'text/plain' + } + }, }, - }, - 'event_id': '\$edit2', - 'sender': '@alice:example.org', - }, room); - expect(event.hasAttachment, true); - expect(event.hasThumbnail, true); - expect(event.isAttachmentEncrypted, true); - expect(event.isThumbnailEncrypted, true); - expect(event.attachmentMimetype, 'text/plain'); - expect(event.thumbnailMimetype, 'text/plain'); - expect(event.attachmentMxcUrl.toString(), 'mxc://example.com/file'); - expect(event.thumbnailMxcUrl.toString(), 'mxc://example.com/thumb'); - buffer = await event.downloadAndDecryptAttachment( - downloadCallback: downloadCallback); - expect(buffer.bytes, FILE_BUFF_DEC); + 'event_id': '\$edit2', + 'sender': '@alice:example.org', + }, room); + expect(event.hasAttachment, true); + expect(event.hasThumbnail, true); + expect(event.isAttachmentEncrypted, true); + expect(event.isThumbnailEncrypted, true); + expect(event.attachmentMimetype, 'text/plain'); + expect(event.thumbnailMimetype, 'text/plain'); + expect(event.attachmentMxcUrl.toString(), 'mxc://example.com/file'); + expect(event.thumbnailMxcUrl.toString(), 'mxc://example.com/thumb'); + buffer = await event.downloadAndDecryptAttachment( + downloadCallback: downloadCallback); + expect(buffer.bytes, FILE_BUFF_DEC); - buffer = await event.downloadAndDecryptAttachment( - getThumbnail: true, downloadCallback: downloadCallback); - expect(buffer.bytes, THUMB_BUFF_DEC); + buffer = await event.downloadAndDecryptAttachment( + getThumbnail: true, downloadCallback: downloadCallback); + expect(buffer.bytes, THUMB_BUFF_DEC); - await room.client.dispose(closeDatabase: true); - }); + await room.client.dispose(closeDatabase: true); + }, + ); test('downloadAndDecryptAttachment store', () async { final FILE_BUFF = Uint8List.fromList([0]); var serverHits = 0; diff --git a/test/fake_matrix_api.dart b/test/fake_matrix_api.dart index 0b19e5ec3..f8e993e2a 100644 --- a/test/fake_matrix_api.dart +++ b/test/fake_matrix_api.dart @@ -477,8 +477,8 @@ class FakeMatrixApi extends BaseClient { 'join': { '!726s6s6q:example.com': { 'summary': { - 'm.heroes': ['@alice:example.com', '@bob:example.com'], - 'm.joined_member_count': 2, + 'm.heroes': ['@alice:example.com'], + 'm.joined_member_count': 1, 'm.invited_member_count': 0 }, 'unread_notifications': { diff --git a/test/matrix_file_test.dart b/test/matrix_file_test.dart index cd36b1ae4..ff9d1a7c4 100644 --- a/test/matrix_file_test.dart +++ b/test/matrix_file_test.dart @@ -19,14 +19,13 @@ import 'dart:typed_data'; import 'package:http/http.dart' as http; -import 'package:olm/olm.dart' as olm; import 'package:test/test.dart'; import 'package:matrix/matrix.dart'; void main() { /// All Tests related to device keys - group('Matrix File', () { + group('Matrix File', tags: 'olm', () { Logs().level = Level.error; test('Decrypt', () async { final text = 'hello world'; @@ -34,17 +33,9 @@ void main() { name: 'file.txt', bytes: Uint8List.fromList(text.codeUnits), ); - var olmEnabled = true; - try { - await olm.init(); - olm.Account(); - } catch (_) { - olmEnabled = false; - } - if (olmEnabled) { - final encryptedFile = await file.encrypt(); - expect(encryptedFile.data.isNotEmpty, true); - } + + final encryptedFile = await file.encrypt(); + expect(encryptedFile.data.isNotEmpty, true); }); test('Shrink', () async { diff --git a/test/pushevaluator_test.dart b/test/pushevaluator_test.dart index 1d1555955..e293d7a59 100644 --- a/test/pushevaluator_test.dart +++ b/test/pushevaluator_test.dart @@ -18,7 +18,6 @@ import 'dart:convert'; -import 'package:olm/olm.dart' as olm; import 'package:test/test.dart'; import 'package:matrix/matrix.dart'; @@ -28,7 +27,6 @@ void main() { /// All Tests related to the Event group('Event', () { Logs().level = Level.error; - var olmEnabled = true; final timestamp = DateTime.now().millisecondsSinceEpoch; final id = '!4fsdfjisjf:server.abc'; @@ -54,14 +52,6 @@ void main() { late Room room; setUpAll(() async { - try { - await olm.init(); - olm.get_library_version(); - } catch (e) { - olmEnabled = false; - Logs().w('[LibOlm] Failed to load LibOlm', e); - } - Logs().i('[LibOlm] Enabled: $olmEnabled'); client = await getClient(); room = Room(id: '!testroom:example.abc', client: client); }); diff --git a/test/room_archived_test.dart b/test/room_archived_test.dart index 3c23d8d6e..d5be2633c 100644 --- a/test/room_archived_test.dart +++ b/test/room_archived_test.dart @@ -18,7 +18,6 @@ import 'dart:async'; -import 'package:olm/olm.dart' as olm; import 'package:test/test.dart'; import 'package:matrix/matrix.dart'; @@ -27,22 +26,12 @@ import 'fake_client.dart'; void main() { group('Timeline', () { Logs().level = Level.error; - var olmEnabled = true; final insertList = []; late Client client; setUp(() async { - try { - await olm.init(); - olm.get_library_version(); - } catch (e) { - olmEnabled = false; - Logs().w('[LibOlm] Failed to load LibOlm', e); - } - Logs().i('[LibOlm] Enabled: $olmEnabled'); - client = await getClient(); client.sendMessageTimeoutSeconds = 5; diff --git a/test/timeline_context_test.dart b/test/timeline_context_test.dart index e1d07ca67..31c8f707d 100644 --- a/test/timeline_context_test.dart +++ b/test/timeline_context_test.dart @@ -18,7 +18,6 @@ import 'dart:async'; -import 'package:olm/olm.dart' as olm; import 'package:test/test.dart'; import 'package:matrix/matrix.dart'; @@ -27,7 +26,7 @@ import 'fake_client.dart'; import 'fake_matrix_api.dart'; void main() { - group('Timeline context', () { + group('Timeline context', tags: 'olm', () { Logs().level = Level.error; final roomID = '!1234:example.com'; var testTimeStamp = 0; @@ -35,7 +34,6 @@ void main() { final insertList = []; final changeList = []; final removeList = []; - var olmEnabled = true; final countStream = StreamController.broadcast(); Future waitForCount(int count) async { @@ -65,14 +63,6 @@ void main() { late Room room; late Timeline timeline; setUp(() async { - try { - await olm.init(); - olm.get_library_version(); - } catch (e) { - olmEnabled = false; - Logs().w('[LibOlm] Failed to load LibOlm', e); - } - Logs().i('[LibOlm] Enabled: $olmEnabled'); client = await getClient(); client.sendMessageTimeoutSeconds = 5; @@ -318,11 +308,9 @@ void main() { event = await timeline.getEventById('unencrypted_event'); expect(event?.body, 'This is an example text message'); - if (olmEnabled) { - event = await timeline.getEventById('encrypted_event'); - // the event is invalid but should have traces of attempting to decrypt - expect(event?.messageType, MessageTypes.BadEncrypted); - } + event = await timeline.getEventById('encrypted_event'); + // the event is invalid but should have traces of attempting to decrypt + expect(event?.messageType, MessageTypes.BadEncrypted); }); test('Resend message', () async { diff --git a/test/timeline_test.dart b/test/timeline_test.dart index e7e7c2307..54c871649 100644 --- a/test/timeline_test.dart +++ b/test/timeline_test.dart @@ -19,7 +19,6 @@ import 'dart:async'; import 'dart:math'; -import 'package:olm/olm.dart' as olm; import 'package:test/test.dart'; import 'package:matrix/matrix.dart'; @@ -27,7 +26,7 @@ import 'package:matrix/src/models/timeline_chunk.dart'; import 'fake_client.dart'; void main() { - group('Timeline', () { + group('Timeline', tags: 'olm', () { Logs().level = Level.error; final roomID = '!1234:example.com'; var testTimeStamp = 0; @@ -35,7 +34,6 @@ void main() { final insertList = []; final changeList = []; final removeList = []; - var olmEnabled = true; var currentPoison = 0; final countStream = StreamController.broadcast(); @@ -66,14 +64,6 @@ void main() { late Room room; late Timeline timeline; setUp(() async { - try { - await olm.init(); - olm.get_library_version(); - } catch (e) { - olmEnabled = false; - Logs().w('[LibOlm] Failed to load LibOlm', e); - } - Logs().i('[LibOlm] Enabled: $olmEnabled'); client = await getClient(); client.sendMessageTimeoutSeconds = 5; @@ -550,11 +540,9 @@ void main() { event = await timeline.getEventById('unencrypted_event'); expect(event?.body, 'This is an example text message'); - if (olmEnabled) { - event = await timeline.getEventById('encrypted_event'); - // the event is invalid but should have traces of attempting to decrypt - expect(event?.messageType, MessageTypes.BadEncrypted); - } + event = await timeline.getEventById('encrypted_event'); + // the event is invalid but should have traces of attempting to decrypt + expect(event?.messageType, MessageTypes.BadEncrypted); }); test('Resend message', () async {