Фикс: исправлено исчезновение части уведомлений при открытии пуша
This commit is contained in:
@@ -153,6 +153,65 @@ final class SchemaParityTests: XCTestCase {
|
||||
|
||||
XCTAssertEqual(decoded.packetId, 0x06)
|
||||
XCTAssertEqual(decodedMessage.attachments.first?.type, .call)
|
||||
XCTAssertFalse(decodedMessage.isMalformed)
|
||||
}
|
||||
|
||||
func testPacketMessageDecodeSupportsAttachmentMeta4Compatibility() throws {
|
||||
let encoded = makePacketMessageData(attachmentMetaFieldCount: 4)
|
||||
guard let decoded = PacketRegistry.decode(from: encoded),
|
||||
let message = decoded.packet as? PacketMessage else {
|
||||
XCTFail("Failed to decode packet with 4 attachment meta fields")
|
||||
return
|
||||
}
|
||||
|
||||
XCTAssertEqual(decoded.packetId, 0x06)
|
||||
XCTAssertFalse(message.isMalformed)
|
||||
XCTAssertEqual(message.fromPublicKey, "02from")
|
||||
XCTAssertEqual(message.toPublicKey, "02to")
|
||||
XCTAssertEqual(message.messageId, "msg-compat")
|
||||
XCTAssertEqual(message.aesChachaKey, "aes-key")
|
||||
XCTAssertEqual(message.attachments.count, 1)
|
||||
XCTAssertEqual(message.attachments[0].transportTag, "tag-1")
|
||||
XCTAssertEqual(message.attachments[0].transportServer, "cdn.rosetta.im")
|
||||
}
|
||||
|
||||
func testPacketMessageDecodeSupportsAttachmentMeta0Compatibility() throws {
|
||||
let encoded = makePacketMessageData(attachmentMetaFieldCount: 0)
|
||||
guard let decoded = PacketRegistry.decode(from: encoded),
|
||||
let message = decoded.packet as? PacketMessage else {
|
||||
XCTFail("Failed to decode packet with 0 attachment meta fields")
|
||||
return
|
||||
}
|
||||
|
||||
XCTAssertEqual(decoded.packetId, 0x06)
|
||||
XCTAssertFalse(message.isMalformed)
|
||||
XCTAssertEqual(message.messageId, "msg-compat")
|
||||
XCTAssertEqual(message.aesChachaKey, "aes-key")
|
||||
XCTAssertEqual(message.attachments.count, 1)
|
||||
XCTAssertEqual(message.attachments[0].transportTag, "")
|
||||
XCTAssertEqual(message.attachments[0].transportServer, "")
|
||||
}
|
||||
|
||||
func testPacketMessageDecodeMarksMalformedForTruncatedOrMisalignedPayload() throws {
|
||||
let canonical = makePacketMessageData(attachmentMetaFieldCount: 2)
|
||||
let truncated = canonical.dropLast(3)
|
||||
let withTrailingByte = canonical + Data([0x00])
|
||||
|
||||
guard let decodedTruncated = PacketRegistry.decode(from: Data(truncated)),
|
||||
let messageTruncated = decodedTruncated.packet as? PacketMessage else {
|
||||
XCTFail("Failed to decode truncated packet wrapper")
|
||||
return
|
||||
}
|
||||
XCTAssertTrue(messageTruncated.isMalformed)
|
||||
XCTAssertFalse(messageTruncated.malformedFingerprint.isEmpty)
|
||||
|
||||
guard let decodedTrailing = PacketRegistry.decode(from: withTrailingByte),
|
||||
let messageTrailing = decodedTrailing.packet as? PacketMessage else {
|
||||
XCTFail("Failed to decode trailing-byte packet wrapper")
|
||||
return
|
||||
}
|
||||
XCTAssertTrue(messageTrailing.isMalformed)
|
||||
XCTAssertFalse(messageTrailing.malformedFingerprint.isEmpty)
|
||||
}
|
||||
|
||||
func testSessionPacketContextResolverAcceptsGroupWireShape() throws {
|
||||
@@ -188,4 +247,33 @@ final class SchemaParityTests: XCTestCase {
|
||||
_ = stream
|
||||
XCTAssertTrue(true)
|
||||
}
|
||||
|
||||
private func makePacketMessageData(attachmentMetaFieldCount: Int) -> Data {
|
||||
let stream = Rosetta.Stream()
|
||||
stream.writeInt16(PacketMessage.packetId)
|
||||
stream.writeString("02from")
|
||||
stream.writeString("02to")
|
||||
stream.writeString("ciphertext")
|
||||
stream.writeString("chacha-key")
|
||||
stream.writeInt64(1_710_000_000_000)
|
||||
stream.writeString("hash")
|
||||
stream.writeString("msg-compat")
|
||||
stream.writeInt8(1)
|
||||
stream.writeString("att-1")
|
||||
stream.writeString("preview")
|
||||
stream.writeString("blob")
|
||||
stream.writeInt8(AttachmentType.image.rawValue)
|
||||
|
||||
if attachmentMetaFieldCount >= 2 {
|
||||
stream.writeString("tag-1")
|
||||
stream.writeString("cdn.rosetta.im")
|
||||
}
|
||||
if attachmentMetaFieldCount >= 4 {
|
||||
stream.writeString("02encoded-for")
|
||||
stream.writeString("desktop")
|
||||
}
|
||||
|
||||
stream.writeString("aes-key")
|
||||
return stream.toData()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user