omemo_dart/test/serialisation_test.dart

108 lines
3.6 KiB
Dart
Raw Normal View History

2022-08-05 15:32:59 +00:00
import 'package:omemo_dart/omemo_dart.dart';
2022-08-08 16:03:05 +00:00
import 'package:omemo_dart/src/trust/always.dart';
2022-08-05 15:32:59 +00:00
import 'package:test/test.dart';
void main() {
2022-08-05 16:14:10 +00:00
test('Test serialising and deserialising the Device', () async {
2022-08-05 15:32:59 +00:00
// Generate a random session
2022-08-08 16:03:05 +00:00
final oldSession = await OmemoSessionManager.generateNewIdentity(
'user@test.server',
AlwaysTrustingTrustManager(),
opkAmount: 1,
);
2022-08-05 15:32:59 +00:00
final oldDevice = await oldSession.getDevice();
final serialised = await oldDevice.toJson();
final newDevice = Device.fromJson(serialised);
expect(await oldDevice.equals(newDevice), true);
2022-08-05 15:32:59 +00:00
});
2022-08-05 16:14:10 +00:00
test('Test serialising and deserialising the Device after rotating the SPK', () async {
// Generate a random session
2022-08-08 16:03:05 +00:00
final oldSession = await OmemoSessionManager.generateNewIdentity(
'user@test.server',
AlwaysTrustingTrustManager(),
opkAmount: 1,
);
final oldDevice = await (await oldSession.getDevice()).replaceSignedPrekey();
final serialised = await oldDevice.toJson();
final newDevice = Device.fromJson(serialised);
expect(await oldDevice.equals(newDevice), true);
});
2022-08-05 16:14:10 +00:00
test('Test serialising and deserialising the OmemoDoubleRatchet', () async {
// Generate a random ratchet
const aliceJid = 'alice@server.example';
const bobJid = 'bob@other.server.example';
2022-08-08 16:03:05 +00:00
final aliceSession = await OmemoSessionManager.generateNewIdentity(
aliceJid,
AlwaysTrustingTrustManager(),
opkAmount: 1,
);
final bobSession = await OmemoSessionManager.generateNewIdentity(
bobJid,
AlwaysTrustingTrustManager(),
opkAmount: 1,
);
2022-08-05 16:14:10 +00:00
final aliceMessage = await aliceSession.encryptToJid(
bobJid,
'Hello Bob!',
newSessions: [
await (await bobSession.getDevice()).toBundle(),
],
);
await bobSession.decryptMessage(
aliceMessage.ciphertext,
aliceJid,
(await aliceSession.getDevice()).id,
aliceMessage.encryptedKeys,
);
final aliceOld = aliceSession.getRatchet(bobJid, (await bobSession.getDevice()).id);
2022-08-05 16:14:10 +00:00
final aliceSerialised = await aliceOld.toJson();
final aliceNew = OmemoDoubleRatchet.fromJson(aliceSerialised);
expect(await aliceOld.equals(aliceNew), true);
});
test('Test serialising and deserialising the OmemoSessionManager', () async {
// Generate a random session
2022-08-08 16:03:05 +00:00
final oldSession = await OmemoSessionManager.generateNewIdentity(
'a@server',
AlwaysTrustingTrustManager(),
opkAmount: 4,
);
final bobSession = await OmemoSessionManager.generateNewIdentity(
'b@other.server',
AlwaysTrustingTrustManager(),
opkAmount: 4,
);
await oldSession.addSessionFromBundle(
'bob@localhost',
(await bobSession.getDevice()).id,
await (await bobSession.getDevice()).toBundle(),
);
// Serialise and deserialise
final serialised = await oldSession.toJson();
2022-08-08 16:03:05 +00:00
final newSession = OmemoSessionManager.fromJson(
serialised,
AlwaysTrustingTrustManager(),
);
final oldDevice = await oldSession.getDevice();
final newDevice = await newSession.getDevice();
expect(await oldDevice.equals(newDevice), true);
2022-08-11 10:02:21 +00:00
expect(await oldSession.getDeviceMap(), await newSession.getDeviceMap());
expect(oldSession.getRatchetMap().length, newSession.getRatchetMap().length);
for (final session in oldSession.getRatchetMap().entries) {
expect(newSession.getRatchetMap().containsKey(session.key), true);
final oldRatchet = oldSession.getRatchetMap()[session.key]!;
final newRatchet = newSession.getRatchetMap()[session.key]!;
expect(await oldRatchet.equals(newRatchet), true);
2022-08-05 16:14:10 +00:00
}
});
2022-08-05 15:32:59 +00:00
}