diff --git a/buildSrc/src/main/kotlin/de/justjanne/coverageconverter/CoverageConverterPlugin.kt b/buildSrc/src/main/kotlin/de/justjanne/coverageconverter/CoverageConverterPlugin.kt index db06c802200ca02453a012c2f38b4cfcdcb1e59c..c3d76efbf6a096b4863555d63856729c69cc58c4 100644 --- a/buildSrc/src/main/kotlin/de/justjanne/coverageconverter/CoverageConverterPlugin.kt +++ b/buildSrc/src/main/kotlin/de/justjanne/coverageconverter/CoverageConverterPlugin.kt @@ -10,7 +10,6 @@ package de.justjanne.coverageconverter -import groovy.util.XmlSlurper import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.testing.jacoco.plugins.JacocoPluginExtension @@ -36,7 +35,7 @@ class CoverageConverterPlugin : Plugin<Project> { jacocoReportTask.dependsOn(testTask) if (extension.autoConfigureCoverage) { jacocoReportTask.sourceDirectories.from(fileTree("src/main/kotlin")) - jacocoReportTask.classDirectories.from(fileTree("build/classes")) + jacocoReportTask.classDirectories.from(fileTree("build/classes/kotlin/main")) jacocoReportTask.reports { xml.destination = File("${buildDir}/reports/jacoco/report.xml") html.isEnabled = true diff --git a/libquassel-protocol/build.gradle.kts b/libquassel-protocol/build.gradle.kts index 530c483a520e1e252f534525b261fbf4480109d6..47844ec66160bc57a7f2c78bd754b8117a21c28b 100644 --- a/libquassel-protocol/build.gradle.kts +++ b/libquassel-protocol/build.gradle.kts @@ -9,6 +9,7 @@ */ plugins { + id("java-library") id("com.vanniktech.maven.publish") id("com.google.devtools.ksp") version "1.4.30-1.0.0-alpha02" } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/io/ByteBufferUtil.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/io/ByteBufferUtil.kt index 0e871f951ffb9cb94e13ca8524cdf807faeb3e78..93d977d194da844aba52ac00ca7e4c86574f4d38 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/io/ByteBufferUtil.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/io/ByteBufferUtil.kt @@ -64,15 +64,15 @@ private val alphabet = charArrayOf( fun ByteBuffer.contentToString(): String { val position = position() val limit = limit() - var result = "" + val result = StringBuilder() while (hasRemaining()) { val byte = get() val upperNibble = byte.toInt() shr 4 val lowerNibble = byte.toInt() % 16 - result += alphabet[(upperNibble + 16) % 16] - result += alphabet[(lowerNibble + 16) % 16] + result.append(alphabet[(upperNibble + 16) % 16]) + result.append(alphabet[(lowerNibble + 16) % 16]) } limit(limit) position(position) - return result + return result.toString() } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/BackendInfoSerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/BackendInfoSerializer.kt index 7198339cb15404198e9e4a89feafc9acc7b61b18..23d30865d4e2622785de56f45140170fb08aa73a 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/BackendInfoSerializer.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/BackendInfoSerializer.kt @@ -11,7 +11,7 @@ package de.justjanne.libquassel.protocol.models import de.justjanne.libquassel.protocol.models.types.QtType -import de.justjanne.libquassel.protocol.util.triples +import de.justjanne.libquassel.protocol.util.collections.triples import de.justjanne.libquassel.protocol.variant.QVariantList import de.justjanne.libquassel.protocol.variant.QVariantMap import de.justjanne.libquassel.protocol.variant.QVariant_ diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/HandshakeMessage.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/HandshakeMessage.kt index 2f44ba18badc4039a84cf8bc209067ba64635f72..b6a3cf11b28d2bb85c4772467c8b08d1cdb2eea4 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/HandshakeMessage.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/HandshakeMessage.kt @@ -151,7 +151,7 @@ sealed class HandshakeMessage { /** * Storage backend configuration data */ - val setupData: QVariantMap?, + val setupData: QVariantMap, /** * Chosen authenticator backend id */ @@ -159,7 +159,7 @@ sealed class HandshakeMessage { /** * Authenticator backend configuration data */ - val authSetupData: QVariantMap? + val authSetupData: QVariantMap ) : HandshakeMessage() /** @@ -184,7 +184,7 @@ sealed class HandshakeMessage { * Identity objects created or modified after [SessionInit] will be defined * via sync updates and RPC identity creation messages. */ - val identities: QVariantList?, + val identities: List<QVariantMap>, /** * List of existing buffers at the current time. * diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/NetworkInfo.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/NetworkInfo.kt index ce580bb522fe3a9a42c67b401ed877533002dc41..efdda294f79fda6cef78e78577ec62c114054250 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/NetworkInfo.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/NetworkInfo.kt @@ -14,29 +14,29 @@ import de.justjanne.libquassel.protocol.models.ids.IdentityId import de.justjanne.libquassel.protocol.models.ids.NetworkId data class NetworkInfo( - var networkId: NetworkId = NetworkId(-1), - var networkName: String = "", - var identity: IdentityId = IdentityId(-1), - var useCustomEncodings: Boolean = false, - var codecForServer: String = "UTF_8", - var codecForEncoding: String = "UTF_8", - var codecForDecoding: String = "UTF_8", - var serverList: List<NetworkServer> = emptyList(), - var useRandomServer: Boolean = false, - var perform: List<String> = emptyList(), - var useAutoIdentify: Boolean = false, - var autoIdentifyService: String = "", - var autoIdentifyPassword: String = "", - var useSasl: Boolean = false, - var saslAccount: String = "", - var saslPassword: String = "", - var useAutoReconnect: Boolean = true, - var autoReconnectInterval: UInt = 0u, - var autoReconnectRetries: UShort = 0u, - var unlimitedReconnectRetries: Boolean = true, - var rejoinChannels: Boolean = true, - var useCustomMessageRate: Boolean = false, - var messageRateBurstSize: UInt = 0u, - var messageRateDelay: UInt = 0u, - var unlimitedMessageRate: Boolean = false + val networkId: NetworkId = NetworkId(-1), + val networkName: String = "", + val identity: IdentityId = IdentityId(-1), + val useCustomEncodings: Boolean = false, + val codecForServer: String = "UTF_8", + val codecForEncoding: String = "UTF_8", + val codecForDecoding: String = "UTF_8", + val serverList: List<NetworkServer> = emptyList(), + val useRandomServer: Boolean = false, + val perform: List<String> = emptyList(), + val useAutoIdentify: Boolean = false, + val autoIdentifyService: String = "", + val autoIdentifyPassword: String = "", + val useSasl: Boolean = false, + val saslAccount: String = "", + val saslPassword: String = "", + val useAutoReconnect: Boolean = true, + val autoReconnectInterval: UInt = 0u, + val autoReconnectRetries: UShort = 0u, + val unlimitedReconnectRetries: Boolean = true, + val rejoinChannels: Boolean = true, + val useCustomMessageRate: Boolean = false, + val messageRateBurstSize: UInt = 0u, + val messageRateDelay: UInt = 0u, + val unlimitedMessageRate: Boolean = false ) diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/ids/SignedId.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/ids/SignedId.kt index c3f53afed5dd9667c2731728faccd7375b3ab140..1b25a641fa71908c0cfb6187a685de168380849a 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/ids/SignedId.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/ids/SignedId.kt @@ -42,7 +42,6 @@ interface SignedId<T> : Serializable, Comparable<SignedId<T>> */ @Suppress("NOTHING_TO_INLINE") @JvmName("isValidId") -@Generated inline fun SignedId<SignedIdType>.isValid() = id > 0 /** @@ -50,5 +49,4 @@ inline fun SignedId<SignedIdType>.isValid() = id > 0 */ @Suppress("NOTHING_TO_INLINE") @JvmName("isValidId64") -@Generated inline fun SignedId<SignedId64Type>.isValid() = id > 0 diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/types/QuasselType.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/types/QuasselType.kt index b91ed389bd55afbff94bf08c8e9394a75e19c5ae..f34a91ee1095b91d42bdab6960a79ab85b0cdf2b 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/types/QuasselType.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/types/QuasselType.kt @@ -17,6 +17,9 @@ import de.justjanne.libquassel.protocol.serializers.quassel.BufferInfoSerializer import de.justjanne.libquassel.protocol.serializers.quassel.DccIpDetectionModeSerializer import de.justjanne.libquassel.protocol.serializers.quassel.DccPortSelectionModeSerializer import de.justjanne.libquassel.protocol.serializers.quassel.IdentityIdSerializer +import de.justjanne.libquassel.protocol.serializers.quassel.IdentitySerializer +import de.justjanne.libquassel.protocol.serializers.quassel.IrcChannelSerializer +import de.justjanne.libquassel.protocol.serializers.quassel.IrcUserSerializer import de.justjanne.libquassel.protocol.serializers.quassel.MessageSerializer import de.justjanne.libquassel.protocol.serializers.quassel.MsgIdSerializer import de.justjanne.libquassel.protocol.serializers.quassel.NetworkIdSerializer @@ -70,19 +73,19 @@ enum class QuasselType( * Type for IrcUser objects * Serialized as [de.justjanne.libquassel.protocol.variant.QVariantMap] */ - IrcUser("IrcUser"), + IrcUser("IrcUser", IrcUserSerializer), /** * Type for IrcChannel objects * Serialized as [de.justjanne.libquassel.protocol.variant.QVariantMap] */ - IrcChannel("IrcChannel"), + IrcChannel("IrcChannel", IrcChannelSerializer), /** * Type for Identity objects * Serialized as [de.justjanne.libquassel.protocol.variant.QVariantMap] */ - Identity("Identity"), + Identity("Identity", IdentitySerializer), /** * Type for [de.justjanne.libquassel.protocol.models.IdentityId] diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/SignalProxyMessageSerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/SignalProxyMessageSerializer.kt index 9b3d190dadf9294aa11ae218e3d9c4249deffa58..5727ff1eab4bcd50a26cc2a22160628440e3c325 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/SignalProxyMessageSerializer.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/SignalProxyMessageSerializer.kt @@ -47,7 +47,7 @@ object SignalProxyMessageSerializer : PrimitiveSerializer<SignalProxyMessage> { } private fun deserializeFromList(data: QVariantList): SignalProxyMessage = - when (val type = data.firstOrNull().into<Int>(0)) { + when (val type = data.firstOrNull().into(0)) { SyncSerializer.type -> SyncSerializer.deserialize(data) RpcSerializer.type -> diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/CoreSetupDataSerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/CoreSetupDataSerializer.kt index a466dc93449ba1f89f86c5b2c70afb5dc0c3ab3a..675587dc4cf049e70a9545247f52e3ce4d4f08cd 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/CoreSetupDataSerializer.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/CoreSetupDataSerializer.kt @@ -39,14 +39,14 @@ object CoreSetupDataSerializer : HandshakeSerializer<HandshakeMessage.CoreSetupD ) override fun deserialize(data: QVariantMap) = - data["SetupData"].into<QVariantMap>().let { + data["SetupData"].into<QVariantMap>().orEmpty().let { HandshakeMessage.CoreSetupData( - adminUser = it?.get("AdminUser").into(), - adminPassword = it?.get("AdminPasswd").into(), - backend = it?.get("Backend").into(), - setupData = it?.get("ConnectionProperties").into(), - authenticator = it?.get("Authenticator").into(), - authSetupData = it?.get("AuthProperties").into() + adminUser = it["AdminUser"].into(), + adminPassword = it["AdminPasswd"].into(), + backend = it["Backend"].into(), + setupData = it["ConnectionProperties"].into<QVariantMap>().orEmpty(), + authenticator = it["Authenticator"].into(), + authSetupData = it["AuthProperties"].into<QVariantMap>().orEmpty() ) } } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/SessionInitSerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/SessionInitSerializer.kt index 4e55b553eda2145d8d6a30395e687f1c556fc33c..3bde603ac38fced5d65b6066f7792ecad529fb6e 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/SessionInitSerializer.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/SessionInitSerializer.kt @@ -18,6 +18,7 @@ import de.justjanne.libquassel.protocol.models.types.QuasselType import de.justjanne.libquassel.protocol.serializers.HandshakeSerializer import de.justjanne.libquassel.protocol.variant.QVariantList import de.justjanne.libquassel.protocol.variant.QVariantMap +import de.justjanne.libquassel.protocol.variant.QVariant_ import de.justjanne.libquassel.protocol.variant.into import de.justjanne.libquassel.protocol.variant.qVariant @@ -27,23 +28,25 @@ import de.justjanne.libquassel.protocol.variant.qVariant object SessionInitSerializer : HandshakeSerializer<HandshakeMessage.SessionInit> { override val type: String = "SessionInit" - override fun serialize(data: HandshakeMessage.SessionInit) = mapOf( - "MsgType" to qVariant(type, QtType.QString), - "SessionState" to qVariant( + override fun serialize(data: HandshakeMessage.SessionInit) = mapOf<String, QVariant_>( + "MsgType" to qVariant<String>(type, QtType.QString), + "SessionState" to qVariant<QVariantMap>( mapOf( "BufferInfos" to qVariant<QVariantList>( data.bufferInfos.map { - qVariant(it, QuasselType.BufferInfo) + qVariant<BufferInfo>(it, QuasselType.BufferInfo) }, QtType.QVariantList ), "NetworkIds" to qVariant<QVariantList>( data.networkIds.map { - qVariant(it, QuasselType.NetworkId) + qVariant<NetworkId>(it, QuasselType.NetworkId) }, QtType.QVariantList ), - "Identities" to qVariant(data.identities, QtType.QVariantList), + "Identities" to qVariant<QVariantList>(data.identities.map { + qVariant<QVariantMap>(it, QuasselType.Identity) + }, QtType.QVariantList), ), QtType.QVariantMap ) @@ -57,7 +60,9 @@ object SessionInitSerializer : HandshakeSerializer<HandshakeMessage.SessionInit> networkIds = it?.get("NetworkIds").into<QVariantList>()?.mapNotNull { it.into<NetworkId>() }.orEmpty(), - identities = it?.get("Identities").into(), + identities = it?.get("Identities").into<QVariantList>()?.mapNotNull { + it.into<QVariantMap>() + }.orEmpty(), ) } } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/qt/ByteBufferSerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/qt/ByteBufferSerializer.kt index ce918fed3116d1fd10af1414463f648f257ceea8..0394c64896607e188e3e3ff94ad6a65f4a9c308d 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/qt/ByteBufferSerializer.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/qt/ByteBufferSerializer.kt @@ -12,6 +12,7 @@ package de.justjanne.libquassel.protocol.serializers.qt import de.justjanne.libquassel.protocol.features.FeatureSet import de.justjanne.libquassel.protocol.io.ChainedByteBuffer +import de.justjanne.libquassel.protocol.io.contentToString import de.justjanne.libquassel.protocol.io.copyData import de.justjanne.libquassel.protocol.serializers.PrimitiveSerializer import java.nio.ByteBuffer @@ -27,6 +28,7 @@ object ByteBufferSerializer : PrimitiveSerializer<ByteBuffer?> { if (data != null) { buffer.put(data) } + data?.rewind() } override fun deserialize(buffer: ByteBuffer, featureSet: FeatureSet): ByteBuffer? { diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QVariantSerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QVariantSerializer.kt index 0756ab3b2c02bee5a3238fd960bcb35d3d5a96cb..57a0b02a55de00a8d254dba1246bd087be3c50ed 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QVariantSerializer.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QVariantSerializer.kt @@ -33,6 +33,12 @@ object QVariantSerializer : PrimitiveSerializer<QVariant_> { BoolSerializer.serialize(buffer, false, featureSet) data.serialize(buffer, featureSet) } + is QVariant.Custom -> { + IntSerializer.serialize(buffer, QtType.UserType.id, featureSet) + BoolSerializer.serialize(buffer, false, featureSet) + StringSerializerAscii.serialize(buffer, data.type.typeName, featureSet) + data.serialize(buffer, featureSet) + } } } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/BufferInfoSerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/BufferInfoSerializer.kt index 9857ba7728d681aa0cc7c4d9ef582431085a5cf2..e21f8a5a3b5cf9842664c22ad339f5b88b00335a 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/BufferInfoSerializer.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/BufferInfoSerializer.kt @@ -14,6 +14,7 @@ import de.justjanne.bitflags.of import de.justjanne.bitflags.toBits import de.justjanne.libquassel.protocol.features.FeatureSet import de.justjanne.libquassel.protocol.io.ChainedByteBuffer +import de.justjanne.libquassel.protocol.io.contentToString import de.justjanne.libquassel.protocol.models.BufferInfo import de.justjanne.libquassel.protocol.models.flags.BufferType import de.justjanne.libquassel.protocol.serializers.PrimitiveSerializer diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/IdentitySerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/IdentitySerializer.kt new file mode 100644 index 0000000000000000000000000000000000000000..4ee18fc67670a7ab5d802f6bb0cb564ad8d5693a --- /dev/null +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/IdentitySerializer.kt @@ -0,0 +1,34 @@ +/* + * libquassel + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This Source Code Form is subject to the terms of the Mozilla Public License, + * v. 2.0. If a copy of the MPL was not distributed with this file, You can + * obtain one at https://mozilla.org/MPL/2.0/. + */ + +package de.justjanne.libquassel.protocol.serializers.quassel + +import de.justjanne.libquassel.protocol.features.FeatureSet +import de.justjanne.libquassel.protocol.io.ChainedByteBuffer +import de.justjanne.libquassel.protocol.serializers.PrimitiveSerializer +import de.justjanne.libquassel.protocol.serializers.qt.QVariantMapSerializer +import de.justjanne.libquassel.protocol.syncables.Identity +import de.justjanne.libquassel.protocol.variant.QVariantMap +import java.nio.ByteBuffer + +/** + * Serializer for [QVariantMap], with custom name for [Identity] + */ +object IdentitySerializer : PrimitiveSerializer<QVariantMap> { + + @Suppress("UNCHECKED_CAST") + override val javaType: Class<out QVariantMap> = Map::class.java as Class<QVariantMap> + + override fun serialize(buffer: ChainedByteBuffer, data: QVariantMap, featureSet: FeatureSet) = + QVariantMapSerializer.serialize(buffer, data, featureSet) + + override fun deserialize(buffer: ByteBuffer, featureSet: FeatureSet): QVariantMap = + QVariantMapSerializer.deserialize(buffer, featureSet) +} diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/IrcChannelSerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/IrcChannelSerializer.kt new file mode 100644 index 0000000000000000000000000000000000000000..45f2d5109f13f61fb6752e919c95cbb6212012fc --- /dev/null +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/IrcChannelSerializer.kt @@ -0,0 +1,34 @@ +/* + * libquassel + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This Source Code Form is subject to the terms of the Mozilla Public License, + * v. 2.0. If a copy of the MPL was not distributed with this file, You can + * obtain one at https://mozilla.org/MPL/2.0/. + */ + +package de.justjanne.libquassel.protocol.serializers.quassel + +import de.justjanne.libquassel.protocol.features.FeatureSet +import de.justjanne.libquassel.protocol.io.ChainedByteBuffer +import de.justjanne.libquassel.protocol.serializers.PrimitiveSerializer +import de.justjanne.libquassel.protocol.serializers.qt.QVariantMapSerializer +import de.justjanne.libquassel.protocol.syncables.IrcChannel +import de.justjanne.libquassel.protocol.variant.QVariantMap +import java.nio.ByteBuffer + +/** + * Serializer for [QVariantMap], with custom name for [IrcChannel] + */ +object IrcChannelSerializer : PrimitiveSerializer<QVariantMap> { + + @Suppress("UNCHECKED_CAST") + override val javaType: Class<out QVariantMap> = Map::class.java as Class<QVariantMap> + + override fun serialize(buffer: ChainedByteBuffer, data: QVariantMap, featureSet: FeatureSet) = + QVariantMapSerializer.serialize(buffer, data, featureSet) + + override fun deserialize(buffer: ByteBuffer, featureSet: FeatureSet): QVariantMap = + QVariantMapSerializer.deserialize(buffer, featureSet) +} diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/IrcUserSerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/IrcUserSerializer.kt new file mode 100644 index 0000000000000000000000000000000000000000..1e4c31ca13b57fe06ceecac8c9451bb4385b38b8 --- /dev/null +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/IrcUserSerializer.kt @@ -0,0 +1,34 @@ +/* + * libquassel + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This Source Code Form is subject to the terms of the Mozilla Public License, + * v. 2.0. If a copy of the MPL was not distributed with this file, You can + * obtain one at https://mozilla.org/MPL/2.0/. + */ + +package de.justjanne.libquassel.protocol.serializers.quassel + +import de.justjanne.libquassel.protocol.features.FeatureSet +import de.justjanne.libquassel.protocol.io.ChainedByteBuffer +import de.justjanne.libquassel.protocol.serializers.PrimitiveSerializer +import de.justjanne.libquassel.protocol.serializers.qt.QVariantMapSerializer +import de.justjanne.libquassel.protocol.syncables.IrcUser +import de.justjanne.libquassel.protocol.variant.QVariantMap +import java.nio.ByteBuffer + +/** + * Serializer for [QVariantMap], with custom name for [IrcUser] + */ +object IrcUserSerializer : PrimitiveSerializer<QVariantMap> { + + @Suppress("UNCHECKED_CAST") + override val javaType: Class<out QVariantMap> = Map::class.java as Class<QVariantMap> + + override fun serialize(buffer: ChainedByteBuffer, data: QVariantMap, featureSet: FeatureSet) = + QVariantMapSerializer.serialize(buffer, data, featureSet) + + override fun deserialize(buffer: ByteBuffer, featureSet: FeatureSet): QVariantMap = + QVariantMapSerializer.deserialize(buffer, featureSet) +} diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/HeartBeatReplySerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/HeartBeatReplySerializer.kt index 3b486d55b1d66576ba32cfff56f17031ac37f23e..b354c39190bdcc611438d71972265279fab3aaed 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/HeartBeatReplySerializer.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/HeartBeatReplySerializer.kt @@ -30,6 +30,6 @@ object HeartBeatReplySerializer : SignalProxySerializer<SignalProxyMessage.Heart ) override fun deserialize(data: QVariantList) = SignalProxyMessage.HeartBeatReply( - data[1].into(Instant.EPOCH) + data.getOrNull(1).into(Instant.EPOCH) ) } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/HeartBeatSerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/HeartBeatSerializer.kt index 07576f6042c272a263724392be9f75cf81e1dc32..9bbe2a7fdd803929b31a3e567cb1202c602fa1a4 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/HeartBeatSerializer.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/HeartBeatSerializer.kt @@ -30,6 +30,6 @@ object HeartBeatSerializer : SignalProxySerializer<SignalProxyMessage.HeartBeat> ) override fun deserialize(data: QVariantList) = SignalProxyMessage.HeartBeat( - data[1].into(Instant.EPOCH) + data.getOrNull(1).into(Instant.EPOCH) ) } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/InitDataSerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/InitDataSerializer.kt index 33e7b77e3890d792732af8904ea4326c40927357..c8799c2f88e46a566a40cf0b446dd0bea1fda049 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/InitDataSerializer.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/InitDataSerializer.kt @@ -34,8 +34,8 @@ object InitDataSerializer : SignalProxySerializer<SignalProxyMessage.InitData> { ) + data.initData.toVariantList() override fun deserialize(data: QVariantList) = SignalProxyMessage.InitData( - StringSerializerUtf8.deserializeRaw(data[1].into<ByteBuffer>()), - StringSerializerUtf8.deserializeRaw(data[2].into<ByteBuffer>()), + StringSerializerUtf8.deserializeRaw(data.getOrNull(1).into<ByteBuffer>()), + StringSerializerUtf8.deserializeRaw(data.getOrNull(2).into<ByteBuffer>()), data.drop(3).toVariantMap() ) } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/InitRequestSerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/InitRequestSerializer.kt index d31ad071d3860916eb94295ed4c8c1a171eaa821..41972b28338fa1c5daf553310817e4a3de136722 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/InitRequestSerializer.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/InitRequestSerializer.kt @@ -26,13 +26,13 @@ object InitRequestSerializer : SignalProxySerializer<SignalProxyMessage.InitRequ override val type: Int = 3 override fun serialize(data: SignalProxyMessage.InitRequest) = listOf( - qVariant(InitDataSerializer.type, QtType.Int), + qVariant(type, QtType.Int), qVariant(StringSerializerUtf8.serializeRaw(data.className), QtType.QByteArray), qVariant(StringSerializerUtf8.serializeRaw(data.objectName), QtType.QByteArray), ) override fun deserialize(data: QVariantList) = SignalProxyMessage.InitRequest( - StringSerializerUtf8.deserializeRaw(data[1].into<ByteBuffer>()), - StringSerializerUtf8.deserializeRaw(data[2].into<ByteBuffer>()) + StringSerializerUtf8.deserializeRaw(data.getOrNull(1).into<ByteBuffer>()), + StringSerializerUtf8.deserializeRaw(data.getOrNull(2).into<ByteBuffer>()) ) } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/RpcSerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/RpcSerializer.kt index 8b44ffcdc835a9a390c1f622e1209cfdc9380efb..45624f47ac8da3859f0d785fce972aed236eee67 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/RpcSerializer.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/RpcSerializer.kt @@ -26,12 +26,12 @@ object RpcSerializer : SignalProxySerializer<SignalProxyMessage.Rpc> { override val type: Int = 2 override fun serialize(data: SignalProxyMessage.Rpc) = listOf( - qVariant(SyncSerializer.type, QtType.Int), + qVariant(type, QtType.Int), qVariant(StringSerializerUtf8.serializeRaw(data.slotName), QtType.QByteArray) ) + data.params override fun deserialize(data: QVariantList) = SignalProxyMessage.Rpc( - StringSerializerUtf8.deserializeRaw(data[1].into<ByteBuffer>()), + StringSerializerUtf8.deserializeRaw(data.getOrNull(1).into<ByteBuffer>()), data.drop(2) ) } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/SyncSerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/SyncSerializer.kt index a1038fa17d772d5c995378d6cae45be31cd5bce7..f5a7e3e05ea5fc1a602ca780ae05db4c4ec900f9 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/SyncSerializer.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/SyncSerializer.kt @@ -33,9 +33,9 @@ object SyncSerializer : SignalProxySerializer<SignalProxyMessage.Sync> { ) + data.params override fun deserialize(data: QVariantList) = SignalProxyMessage.Sync( - StringSerializerUtf8.deserializeRaw(data[1].into<ByteBuffer>()), - StringSerializerUtf8.deserializeRaw(data[2].into<ByteBuffer>()), - StringSerializerUtf8.deserializeRaw(data[3].into<ByteBuffer>()), + StringSerializerUtf8.deserializeRaw(data.getOrNull(1).into<ByteBuffer>()), + StringSerializerUtf8.deserializeRaw(data.getOrNull(2).into<ByteBuffer>()), + StringSerializerUtf8.deserializeRaw(data.getOrNull(3).into<ByteBuffer>()), data.drop(4) ) } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/AliasManager.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/AliasManager.kt index 8b1e1fde9eb09ad634e06329e3c76500d4416f09..957bb118e1fe3dde37b35e8da9cc45f3960a8ebf 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/AliasManager.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/AliasManager.kt @@ -21,11 +21,12 @@ import de.justjanne.libquassel.protocol.util.update import de.justjanne.libquassel.protocol.variant.QVariantMap import de.justjanne.libquassel.protocol.variant.into import de.justjanne.libquassel.protocol.variant.qVariant -import kotlinx.coroutines.flow.MutableStateFlow open class AliasManager( - session: Session -) : SyncableObject(session, "AliasManager"), AliasManagerStub { + session: Session? = null, + state: AliasManagerState = AliasManagerState() +) : StatefulSyncableObject<AliasManagerState>(session, "AliasManager", state), + AliasManagerStub { override fun toVariantMap(): QVariantMap = mapOf( "Aliases" to qVariant( mapOf( @@ -72,7 +73,7 @@ open class AliasManager( message: String ) = state().processInput( info, - session.network(info.networkId)?.state(), + session?.network(info.networkId)?.state(), message ) @@ -82,7 +83,7 @@ open class AliasManager( previousCommands: MutableList<Command> ) = state().processInput( info, - session.network(info.networkId)?.state(), + session?.network(info.networkId)?.state(), message, previousCommands ) @@ -95,19 +96,8 @@ open class AliasManager( ) = state().expand( expansion, bufferInfo, - session.network(bufferInfo.networkId)?.state(), + session?.network(bufferInfo.networkId)?.state(), arguments, previousCommands ) - - @Suppress("NOTHING_TO_INLINE") - inline fun state() = flow().value - - @Suppress("NOTHING_TO_INLINE") - inline fun flow() = state - - @PublishedApi - internal val state = MutableStateFlow( - AliasManagerState() - ) } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/BacklogManager.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/BacklogManager.kt index d6a15b60cb1df05d211e667daf4585c0d7b6d99b..cea6cd153a3300aa5b2a9700da85e9a809cfbc6e 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/BacklogManager.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/BacklogManager.kt @@ -15,7 +15,7 @@ import de.justjanne.libquassel.protocol.variant.QVariantMap import de.justjanne.libquassel.protocol.variant.QVariant_ open class BacklogManager( - session: Session + session: Session? = null ) : SyncableObject(session, "BacklogManager"), BacklogManagerStub { override fun fromVariantMap(properties: QVariantMap) = Unit diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/BufferSyncer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/BufferSyncer.kt index ae81bcbd039a838637f0c3ccd35f2226766f0ad5..37d4cd39de93d06bdc3c87a4a07eb210a2e2cc36 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/BufferSyncer.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/BufferSyncer.kt @@ -23,17 +23,18 @@ import de.justjanne.libquassel.protocol.models.types.QtType import de.justjanne.libquassel.protocol.models.types.QuasselType import de.justjanne.libquassel.protocol.syncables.state.BufferSyncerState import de.justjanne.libquassel.protocol.syncables.stubs.BufferSyncerStub -import de.justjanne.libquassel.protocol.util.pairs +import de.justjanne.libquassel.protocol.util.collections.pairs import de.justjanne.libquassel.protocol.util.update import de.justjanne.libquassel.protocol.variant.QVariantList import de.justjanne.libquassel.protocol.variant.QVariantMap import de.justjanne.libquassel.protocol.variant.into import de.justjanne.libquassel.protocol.variant.qVariant -import kotlinx.coroutines.flow.MutableStateFlow open class BufferSyncer( - session: Session -) : SyncableObject(session, "BufferSyncer"), BufferSyncerStub { + session: Session? = null, + state: BufferSyncerState = BufferSyncerState() +) : StatefulSyncableObject<BufferSyncerState>(session, "BufferSyncer", state), + BufferSyncerStub { override fun toVariantMap() = mapOf( "Activities" to qVariant( state().activities.flatMap { (key, value) -> @@ -178,7 +179,7 @@ open class BufferSyncer( val bufferInfo = bufferInfo(buffer) if (bufferInfo != null) { - session.bufferViewManager().handleBuffer(bufferInfo, true) + session?.bufferViewManager()?.handleBuffer(bufferInfo, true) } } @@ -200,19 +201,8 @@ open class BufferSyncer( } if (oldInfo != null) { - session.bufferViewManager().handleBuffer(info) + session?.bufferViewManager()?.handleBuffer(info) } } } - - @Suppress("NOTHING_TO_INLINE") - inline fun state() = flow().value - - @Suppress("NOTHING_TO_INLINE") - inline fun flow() = state - - @PublishedApi - internal val state = MutableStateFlow( - BufferSyncerState() - ) } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/BufferViewConfig.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/BufferViewConfig.kt index 583f11995e05a86c897fe580cbd745db079ddf4c..a246f6533ee6921cb5c30551bdff0f9aaef4329b 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/BufferViewConfig.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/BufferViewConfig.kt @@ -21,19 +21,19 @@ import de.justjanne.libquassel.protocol.models.types.QtType import de.justjanne.libquassel.protocol.models.types.QuasselType import de.justjanne.libquassel.protocol.syncables.state.BufferViewConfigState import de.justjanne.libquassel.protocol.syncables.stubs.BufferViewConfigStub -import de.justjanne.libquassel.protocol.util.insert -import de.justjanne.libquassel.protocol.util.move +import de.justjanne.libquassel.protocol.util.collections.insert +import de.justjanne.libquassel.protocol.util.collections.move import de.justjanne.libquassel.protocol.util.update import de.justjanne.libquassel.protocol.variant.QVariantList import de.justjanne.libquassel.protocol.variant.QVariantMap import de.justjanne.libquassel.protocol.variant.into import de.justjanne.libquassel.protocol.variant.qVariant -import kotlinx.coroutines.flow.MutableStateFlow open class BufferViewConfig( - bufferViewId: Int, - session: Session -) : SyncableObject(session, "BufferViewConfig"), BufferViewConfigStub { + session: Session? = null, + state: BufferViewConfigState +) : StatefulSyncableObject<BufferViewConfigState>(session, "BufferViewConfig", state), + BufferViewConfigStub { override fun fromVariantMap(properties: QVariantMap) { state.update { copy( @@ -236,9 +236,14 @@ open class BufferViewConfig( info.bufferId, buffers() .asSequence() - .map(session.bufferSyncer()::bufferInfo) .withIndex() - .mapNotNull { (index, value) -> IndexedValue(index, value ?: return@mapNotNull null) } + .mapNotNull { (index, value) -> + IndexedValue( + index, + session?.bufferSyncer()?.bufferInfo(value) + ?: return@mapNotNull null + ) + } .filter { (_, value) -> value.networkId == info.networkId } .find { (_, value) -> String.CASE_INSENSITIVE_ORDER.compare(value.bufferName, info.bufferName) > 0 @@ -261,17 +266,4 @@ open class BufferViewConfig( insertBufferSorted(info) } } - - @Suppress("NOTHING_TO_INLINE") - inline fun state() = flow().value - - @Suppress("NOTHING_TO_INLINE") - inline fun flow() = state - - @PublishedApi - internal val state = MutableStateFlow( - BufferViewConfigState( - bufferViewId = bufferViewId - ) - ) } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/BufferViewManager.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/BufferViewManager.kt index dde3434bb89f38ee9382b0f67d3021667893bfbd..07f1b4898c3b40d89be37b0363794047011ae9cf 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/BufferViewManager.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/BufferViewManager.kt @@ -12,6 +12,7 @@ package de.justjanne.libquassel.protocol.syncables import de.justjanne.libquassel.protocol.models.BufferInfo import de.justjanne.libquassel.protocol.models.types.QtType +import de.justjanne.libquassel.protocol.syncables.state.BufferViewConfigState import de.justjanne.libquassel.protocol.syncables.state.BufferViewManagerState import de.justjanne.libquassel.protocol.syncables.stubs.BufferViewManagerStub import de.justjanne.libquassel.protocol.util.update @@ -20,11 +21,12 @@ import de.justjanne.libquassel.protocol.variant.QVariantMap import de.justjanne.libquassel.protocol.variant.QVariant_ import de.justjanne.libquassel.protocol.variant.into import de.justjanne.libquassel.protocol.variant.qVariant -import kotlinx.coroutines.flow.MutableStateFlow open class BufferViewManager( - session: Session -) : SyncableObject(session, "BufferViewManager"), BufferViewManagerStub { + session: Session? = null, + state: BufferViewManagerState = BufferViewManagerState() +) : StatefulSyncableObject<BufferViewManagerState>(session, "BufferViewManager", state), + BufferViewManagerStub { override fun fromVariantMap(properties: QVariantMap) { properties["BufferViewIds"].into<QVariantList>() ?.mapNotNull<QVariant_, Int>(QVariant_::into) @@ -49,8 +51,12 @@ open class BufferViewManager( return } - val config = BufferViewConfig(bufferViewConfigId, session) - session.synchronize(config) + val config = BufferViewConfig( + session, BufferViewConfigState( + bufferViewId = bufferViewConfigId + ) + ) + session?.synchronize(config) state.update { copy(bufferViewConfigs = bufferViewConfigs + Pair(bufferViewConfigId, config)) } @@ -63,15 +69,4 @@ open class BufferViewManager( bufferViewConfig.handleBuffer(info, unhide) } } - - @Suppress("NOTHING_TO_INLINE") - inline fun state() = flow().value - - @Suppress("NOTHING_TO_INLINE") - inline fun flow() = state - - @PublishedApi - internal val state = MutableStateFlow( - BufferViewManagerState() - ) } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/CertManager.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/CertManager.kt index a420f96e0a53171848b5e673d5e39a4e8fb3e759..1021105182681e88cf4cecdd7c791ec9313393fd 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/CertManager.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/CertManager.kt @@ -10,7 +10,6 @@ package de.justjanne.libquassel.protocol.syncables -import de.justjanne.libquassel.protocol.models.ids.IdentityId import de.justjanne.libquassel.protocol.models.types.QtType import de.justjanne.libquassel.protocol.serializers.qt.StringSerializerUtf8 import de.justjanne.libquassel.protocol.syncables.state.CertManagerState @@ -19,7 +18,6 @@ import de.justjanne.libquassel.protocol.util.update import de.justjanne.libquassel.protocol.variant.QVariantMap import de.justjanne.libquassel.protocol.variant.into import de.justjanne.libquassel.protocol.variant.qVariant -import kotlinx.coroutines.flow.MutableStateFlow import org.bouncycastle.cert.X509CertificateHolder import org.bouncycastle.openssl.PEMKeyPair import org.bouncycastle.openssl.PEMParser @@ -30,9 +28,10 @@ import java.security.cert.Certificate import java.security.cert.CertificateFactory open class CertManager( - identityId: IdentityId, - session: Session -) : SyncableObject(session, "CertManager"), CertManagerStub { + session: Session? = null, + state: CertManagerState +) : StatefulSyncableObject<CertManagerState>(session, "CertManager", state), + CertManagerStub { override fun fromVariantMap(properties: QVariantMap) { val privateKeyPem = properties["sslKey"].into("") val certPem = properties["sslCert"].into("") @@ -110,17 +109,4 @@ open class CertManager( fun certificate() = state().certificate fun certificatePem() = state().certificatePem - - @Suppress("NOTHING_TO_INLINE") - inline fun state() = flow().value - - @Suppress("NOTHING_TO_INLINE") - inline fun flow() = state - - @PublishedApi - internal val state = MutableStateFlow( - CertManagerState( - identityId = identityId - ) - ) } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/CoreInfo.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/CoreInfo.kt index d78c7e38317a2f6c9a8b527a41965c935d9fda8d..521179d1664164a8981bb10380d94ae9aea0e5b6 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/CoreInfo.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/CoreInfo.kt @@ -20,12 +20,13 @@ import de.justjanne.libquassel.protocol.variant.QVariantMap import de.justjanne.libquassel.protocol.variant.QVariant_ import de.justjanne.libquassel.protocol.variant.into import de.justjanne.libquassel.protocol.variant.qVariant -import kotlinx.coroutines.flow.MutableStateFlow import org.threeten.bp.Instant open class CoreInfo( - session: Session -) : SyncableObject(session, "CoreInfo"), CoreInfoStub { + session: Session? = null, + state: CoreInfoState = CoreInfoState() +) : StatefulSyncableObject<CoreInfoState>(session, "CoreInfo", state), + CoreInfoStub { override fun fromVariantMap(properties: QVariantMap) { val coreData = properties["coreData"].into<QVariantMap>().orEmpty() @@ -68,15 +69,4 @@ open class CoreInfo( fromVariantMap(data) super.setCoreData(data) } - - @Suppress("NOTHING_TO_INLINE") - inline fun state() = flow().value - - @Suppress("NOTHING_TO_INLINE") - inline fun flow() = state - - @PublishedApi - internal val state = MutableStateFlow( - CoreInfoState() - ) } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/DccConfig.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/DccConfig.kt index b199aa04309cbcfe9f8ebf04fa1707e10f91db93..0127d7c33ac93841189a07f45fbf3527769b52d9 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/DccConfig.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/DccConfig.kt @@ -20,13 +20,14 @@ import de.justjanne.libquassel.protocol.util.update import de.justjanne.libquassel.protocol.variant.QVariantMap import de.justjanne.libquassel.protocol.variant.into import de.justjanne.libquassel.protocol.variant.qVariant -import kotlinx.coroutines.flow.MutableStateFlow import java.net.InetAddress open class DccConfig( - session: Session -) : SyncableObject(session, "DccConfig"), DccConfigStub { - override fun init() { + session: Session? = null, + state: DccConfigState = DccConfigState() +) : StatefulSyncableObject<DccConfigState>(session, "DccConfig", state), + DccConfigStub { + init { renameObject("DccConfig") } @@ -140,15 +141,4 @@ open class DccConfig( fun sendTimeout() = state().sendTimeout fun usePassiveDcc() = state().usePassiveDcc fun useFastSend() = state().useFastSend - - @Suppress("NOTHING_TO_INLINE") - inline fun state() = flow().value - - @Suppress("NOTHING_TO_INLINE") - inline fun flow() = state - - @PublishedApi - internal val state = MutableStateFlow( - DccConfigState() - ) } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/HighlightRuleManager.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/HighlightRuleManager.kt index cc245854459796228fac9a660e81b09ac17318d8..a5fac7985f517ef29ba60deb9f312919e2d1fb3f 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/HighlightRuleManager.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/HighlightRuleManager.kt @@ -21,11 +21,12 @@ import de.justjanne.libquassel.protocol.variant.QVariantList import de.justjanne.libquassel.protocol.variant.QVariantMap import de.justjanne.libquassel.protocol.variant.into import de.justjanne.libquassel.protocol.variant.qVariant -import kotlinx.coroutines.flow.MutableStateFlow open class HighlightRuleManager( - session: Session -) : SyncableObject(session, "HighlightRuleManager"), HighlightRuleManagerStub { + session: Session? = null, + state: HighlightRuleManagerState = HighlightRuleManagerState() +) : StatefulSyncableObject<HighlightRuleManagerState>(session, "HighlightRuleManager", state), + HighlightRuleManagerStub { override fun fromVariantMap(properties: QVariantMap) { val highlightRules = properties["HighlightRuleList"].into<QVariantMap>().orEmpty() @@ -200,15 +201,4 @@ open class HighlightRuleManager( } super.setNicksCaseSensitive(nicksCaseSensitive) } - - @Suppress("NOTHING_TO_INLINE") - inline fun state() = flow().value - - @Suppress("NOTHING_TO_INLINE") - inline fun flow() = state - - @PublishedApi - internal val state = MutableStateFlow( - HighlightRuleManagerState() - ) } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/Identity.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/Identity.kt index 6690de8a6bb91f32384b4e13041d3244e3625ec7..5b3005168f21c2cfd408fcd36d4c509d02923b88 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/Identity.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/Identity.kt @@ -20,12 +20,13 @@ import de.justjanne.libquassel.protocol.util.update import de.justjanne.libquassel.protocol.variant.QVariantMap import de.justjanne.libquassel.protocol.variant.into import de.justjanne.libquassel.protocol.variant.qVariant -import kotlinx.coroutines.flow.MutableStateFlow open class Identity( - session: Session -) : SyncableObject(session, "Identity"), IdentityStub { - override fun init() { + session: Session? = null, + state: IdentityState = IdentityState() +) : StatefulSyncableObject<IdentityState>(session, "Identity", state), + IdentityStub { + init { renameObject(state().identifier()) } @@ -53,6 +54,7 @@ open class Identity( quitReason = properties["quitReason"].into(quitReason), ) } + renameObject(state().identifier()) } override fun toVariantMap() = mapOf( @@ -229,15 +231,4 @@ open class Identity( } super.setRealName(realName) } - - @Suppress("NOTHING_TO_INLINE") - inline fun state() = flow().value - - @Suppress("NOTHING_TO_INLINE") - inline fun flow() = state - - @PublishedApi - internal val state = MutableStateFlow( - IdentityState() - ) } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/IgnoreListManager.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/IgnoreListManager.kt new file mode 100644 index 0000000000000000000000000000000000000000..c16ba3e38980c01645a72e325486d920efc3db72 --- /dev/null +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/IgnoreListManager.kt @@ -0,0 +1,12 @@ +/* + * libquassel + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This Source Code Form is subject to the terms of the Mozilla Public License, + * v. 2.0. If a copy of the MPL was not distributed with this file, You can + * obtain one at https://mozilla.org/MPL/2.0/. + */ + +package de.justjanne.libquassel.protocol.syncables + diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/IrcChannel.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/IrcChannel.kt index 210546c54fa8c7051b3a36d7a4c999e6f43bd5c9..22b55ce65a294f33ced23123125bf8f56c5a8a8b 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/IrcChannel.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/IrcChannel.kt @@ -13,7 +13,6 @@ package de.justjanne.libquassel.protocol.syncables import de.justjanne.libquassel.protocol.models.ChannelModeType import de.justjanne.libquassel.protocol.models.ChannelModes import de.justjanne.libquassel.protocol.models.QStringList -import de.justjanne.libquassel.protocol.models.ids.NetworkId import de.justjanne.libquassel.protocol.models.types.QtType import de.justjanne.libquassel.protocol.syncables.state.IrcChannelState import de.justjanne.libquassel.protocol.syncables.stubs.IrcChannelStub @@ -22,14 +21,13 @@ import de.justjanne.libquassel.protocol.variant.QVariantMap import de.justjanne.libquassel.protocol.variant.indexed import de.justjanne.libquassel.protocol.variant.into import de.justjanne.libquassel.protocol.variant.qVariant -import kotlinx.coroutines.flow.MutableStateFlow open class IrcChannel( - name: String, - network: NetworkId, - session: Session -) : SyncableObject(session, "IrcChannel"), IrcChannelStub { - override fun init() { + session: Session? = null, + state: IrcChannelState +) : StatefulSyncableObject<IrcChannelState>(session, "IrcChannel", state), + IrcChannelStub { + init { require(name().isNotEmpty()) { "IrcChannel: channelName is empty" } @@ -76,15 +74,15 @@ open class IrcChannel( fun topic() = state().topic fun password() = state().password fun isEncrypted() = state().encrypted - fun ircUsers() = state().ircUsers(session.network(network())?.state()) + fun ircUsers() = state().ircUsers(session?.network(network())?.state()) fun userCount() = state().userModes.size fun userModes(nick: String) = state().userModes[nick] - fun hasMode(mode: Char) = state().hasMode(session.network(network())?.state(), mode) + fun hasMode(mode: Char) = state().hasMode(session?.network(network())?.state(), mode) - fun modeValue(mode: Char) = state().modeValue(session.network(network())?.state(), mode) + fun modeValue(mode: Char) = state().modeValue(session?.network(network())?.state(), mode) - fun modeValues(mode: Char) = state().modeValues(session.network(network())?.state(), mode) + fun modeValues(mode: Char) = state().modeValues(session?.network(network())?.state(), mode) fun channelModeString() = state().channelModeString() @@ -119,7 +117,7 @@ open class IrcChannel( } private fun joinIrcUsers(map: Map<String, Set<Char>>) { - val network = session.network(network()) + val network = session?.network(network()) val newNicks = map.keys - state().userModes.keys state.update { @@ -143,7 +141,7 @@ open class IrcChannel( ) override fun part(nick: String) { - val network = session.network(network()) + val network = session?.network(network()) val partingUser = network?.ircUser(nick) if (partingUser != null) { @@ -156,7 +154,7 @@ open class IrcChannel( copy(channelModes = ChannelModes()) } network.removeIrcChannel(this) - session.stopSynchronize(this) + session?.stopSynchronize(this) } } super.part(nick) @@ -199,7 +197,7 @@ open class IrcChannel( } override fun addChannelMode(mode: Char, value: String?) { - val network = session.network(network()) + val network = session?.network(network()) state.update { copy( channelModes = channelModes.run { @@ -236,7 +234,7 @@ open class IrcChannel( } override fun removeChannelMode(mode: Char, value: String?) { - val network = session.network(network()) + val network = session?.network(network()) state.update { copy( channelModes = channelModes.run { @@ -263,18 +261,4 @@ open class IrcChannel( } super.removeChannelMode(mode, value) } - - @Suppress("NOTHING_TO_INLINE") - inline fun state() = flow().value - - @Suppress("NOTHING_TO_INLINE") - inline fun flow() = state - - @PublishedApi - internal val state = MutableStateFlow( - IrcChannelState( - network = network, - name = name - ) - ) } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/IrcListHelper.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/IrcListHelper.kt index c997cb7336671e9433522085e70d99a7fb144e2b..67f1fb3a130762d3fe4cb5f2223c338e2151d137 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/IrcListHelper.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/IrcListHelper.kt @@ -15,7 +15,7 @@ import de.justjanne.libquassel.protocol.variant.QVariantMap import de.justjanne.libquassel.protocol.variant.QVariant_ open class IrcListHelper( - session: Session + session: Session? = null ) : SyncableObject(session, "IrcListHelper"), IrcListHelperStub { override fun fromVariantMap(properties: QVariantMap) = Unit override fun toVariantMap() = emptyMap<String, QVariant_>() diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/IrcUser.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/IrcUser.kt index 36b4fb20395464d126566c547dfd7393a1924ca3..514bf1cb9a4cd03b50a0970fad4024833e882a41 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/IrcUser.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/IrcUser.kt @@ -10,7 +10,6 @@ package de.justjanne.libquassel.protocol.syncables -import de.justjanne.libquassel.protocol.models.ids.NetworkId import de.justjanne.libquassel.protocol.models.types.QtType import de.justjanne.libquassel.protocol.syncables.state.IrcUserState import de.justjanne.libquassel.protocol.syncables.stubs.IrcUserStub @@ -20,20 +19,15 @@ import de.justjanne.libquassel.protocol.variant.QVariantMap import de.justjanne.libquassel.protocol.variant.indexed import de.justjanne.libquassel.protocol.variant.into import de.justjanne.libquassel.protocol.variant.qVariant -import kotlinx.coroutines.flow.MutableStateFlow import org.threeten.bp.Instant import org.threeten.bp.temporal.Temporal open class IrcUser( - hostmask: String, - network: NetworkId, - session: Session -) : SyncableObject(session, "IrcUser"), IrcUserStub { - override fun init() { - updateObjectName() - } - - private fun updateObjectName() { + session: Session? = null, + state: IrcUserState +) : StatefulSyncableObject<IrcUserState>(session, "IrcUser", state), + IrcUserStub { + init { renameObject(state().identifier()) } @@ -49,7 +43,7 @@ open class IrcUser( realName = properties["realName"].indexed(index).into(realName), account = properties["account"].indexed(index).into(account), away = properties["away"].indexed(index).into(away), - awayMessage = properties["user"].indexed(index).into(awayMessage), + awayMessage = properties["awayMessage"].indexed(index).into(awayMessage), idleTime = properties["idleTime"].indexed(index).into(idleTime), loginTime = properties["loginTime"].indexed(index).into(loginTime), server = properties["server"].indexed(index).into(server), @@ -65,6 +59,7 @@ open class IrcUser( userModes = properties["userModes"].indexed(index).into(userModes), ) } + renameObject(state().identifier()) } override fun toVariantMap() = mapOf( @@ -85,8 +80,8 @@ open class IrcUser( "suserHost" to qVariant(suserHost(), QtType.QString), "encrypted" to qVariant(encrypted(), QtType.Bool), - "channels" to qVariant(channels(), QtType.QStringList), - "userModes" to qVariant(userModes(), QtType.QString) + "channels" to qVariant(channels().toList(), QtType.QStringList), + "userModes" to qVariant(userModes().joinToString(), QtType.QString) ) override fun updateHostmask(mask: String) { @@ -126,12 +121,12 @@ open class IrcUser( } override fun setNick(nick: String) { - val network = session.network(network()) + val network = session?.network(network()) network?.ircUserNickChanged(nick(), nick) state.update { copy(nick = nick) } - updateObjectName() + renameObject(state().identifier()) super.setNick(nick) } @@ -248,13 +243,13 @@ open class IrcUser( } override fun joinChannel(channelname: String) { - val network = session.network(network()) ?: return + val network = session?.network(network()) ?: return val channel = network.newIrcChannel(channelname) joinChannel(channel) } fun partChannel(channel: IrcChannel) { - val network = session.network(network()) + val network = session?.network(network()) state.update { copy(channels = channels - channel.name()) @@ -267,7 +262,7 @@ open class IrcUser( } override fun quit() { - val network = session.network(network()) + val network = session?.network(network()) for (channel in channels()) { network?.ircChannel(channel) ?.part(nick()) @@ -276,7 +271,7 @@ open class IrcUser( copy(channels = emptySet()) } network?.removeIrcUser(this) - session.stopSynchronize(this) + session?.stopSynchronize(this) super.quit() } @@ -301,20 +296,4 @@ open class IrcUser( fun encrypted() = state().encrypted fun userModes() = state().userModes fun channels() = state().channels - - @Suppress("NOTHING_TO_INLINE") - inline fun state() = flow().value - - @Suppress("NOTHING_TO_INLINE") - inline fun flow() = state - - @PublishedApi - internal val state = MutableStateFlow( - IrcUserState( - network = network, - nick = HostmaskHelper.nick(hostmask), - user = HostmaskHelper.user(hostmask), - host = HostmaskHelper.host(hostmask) - ) - ) } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/Network.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/Network.kt index 67a9bcc826ce65326ca09f1dc75d4a71a1e6f8a2..5b00831bc7c2c4ccbc982111a4bd585e152108f1 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/Network.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/Network.kt @@ -16,16 +16,17 @@ import de.justjanne.libquassel.protocol.models.NetworkInfo import de.justjanne.libquassel.protocol.models.NetworkServer import de.justjanne.libquassel.protocol.models.QStringList import de.justjanne.libquassel.protocol.models.ids.IdentityId -import de.justjanne.libquassel.protocol.models.ids.NetworkId import de.justjanne.libquassel.protocol.models.types.QtType import de.justjanne.libquassel.protocol.models.types.QuasselType import de.justjanne.libquassel.protocol.serializers.qt.StringSerializerUtf8 +import de.justjanne.libquassel.protocol.syncables.state.IrcChannelState +import de.justjanne.libquassel.protocol.syncables.state.IrcUserState import de.justjanne.libquassel.protocol.syncables.state.NetworkState import de.justjanne.libquassel.protocol.syncables.stubs.NetworkStub -import de.justjanne.libquassel.protocol.util.indices +import de.justjanne.libquassel.protocol.util.collections.indices import de.justjanne.libquassel.protocol.util.irc.HostmaskHelper import de.justjanne.libquassel.protocol.util.irc.IrcISupport -import de.justjanne.libquassel.protocol.util.transpose +import de.justjanne.libquassel.protocol.util.collections.transpose import de.justjanne.libquassel.protocol.util.update import de.justjanne.libquassel.protocol.variant.QVariantList import de.justjanne.libquassel.protocol.variant.QVariantMap @@ -35,10 +36,11 @@ import kotlinx.coroutines.flow.MutableStateFlow import java.nio.ByteBuffer open class Network( - networkId: NetworkId, - session: Session -) : SyncableObject(session, "Network"), NetworkStub { - override fun init() { + session: Session? = null, + state: NetworkState +) : StatefulSyncableObject<NetworkState>(session, "Network", state), + NetworkStub { + init { renameObject(state().identifier()) } @@ -95,7 +97,7 @@ open class Network( .into(useCustomMessageRate), messageRateBurstSize = properties["msgRateBurstSize"] .into(messageRateBurstSize), - messageRateDelay = properties["messageRateDelay"] + messageRateDelay = properties["msgRateMessageDelay"] .into(messageRateDelay), unlimitedMessageRate = properties["unlimitedMessageRate"] .into(unlimitedMessageRate), @@ -119,47 +121,24 @@ open class Network( .orEmpty(), ircUsers = properties["IrcUsersAndChannels"].into<QVariantMap>() ?.get("Users")?.into<QVariantMap>() - ?.let { - it.indices.map { index -> - newIrcUser( - properties["nick"] - .into<QVariantList>() - ?.getOrNull(index) - .into(""), - properties, - index - ) + ?.let { user -> + user["nick"].into<QVariantList>()?.withIndex()?.map { (index, value) -> + newIrcUser(value.into(""), user, index) } } ?.associateBy { caseMapper().toLowerCase(it.nick()) } .orEmpty(), ircChannels = properties["IrcUsersAndChannels"].into<QVariantMap>() ?.get("Channels")?.into<QVariantMap>() - ?.let { - it.indices.map { index -> - newIrcChannel( - properties["name"] - .into<QVariantList>() - ?.getOrNull(index) - .into(""), - properties, - index - ) + ?.let { channel -> + channel["name"].into<QVariantList>()?.withIndex()?.map { (index, value) -> + newIrcChannel(value.into(""), channel, index) } } ?.associateBy { caseMapper().toLowerCase(it.name()) } .orEmpty() ) } - state.update { - val (prefixes, prefixModes) = determinePrefixes() - val channelModeTypes = determineChannelModeTypes() - copy( - prefixes = prefixes, - prefixModes = prefixModes, - channelModes = channelModeTypes - ) - } } override fun toVariantMap() = mapOf( @@ -199,6 +178,7 @@ open class Network( "msgRateBurstSize" to qVariant(messageRateBurstSize(), QtType.UInt), "msgRateMessageDelay" to qVariant(messageRateDelay(), QtType.UInt), "unlimitedMessageRate" to qVariant(unlimitedMessageRate(), QtType.Bool), + "skipCaps" to qVariant(skipCaps().toList(), QtType.QStringList), "Supports" to qVariant( supports().mapValues { (_, value) -> qVariant(value, QtType.QString) }, QtType.QVariantMap @@ -335,21 +315,27 @@ open class Network( properties: QVariantMap = emptyMap(), index: Int? = null ): IrcUser { - val nick = caseMapper().toLowerCase(HostmaskHelper.nick(hostMask)) + val (nick, ident, host) = HostmaskHelper.split(hostMask) val ircUser = ircUser(nick) if (ircUser != null) { return ircUser } - val user = IrcUser(hostMask, networkId(), session) - user.init() + val user = IrcUser( + session, IrcUserState( + network = networkId(), + nick = nick, + user = ident, + host = host + ) + ) if (properties.isNotEmpty()) { user.fromVariantMap(properties, index) user.initialized = true } - session.synchronize(user) + session?.synchronize(user) state.update { - copy(ircUsers = ircUsers + Pair(nick, user)) + copy(ircUsers = ircUsers + Pair(caseMapper().toLowerCase(nick), user)) } return user } @@ -364,12 +350,16 @@ open class Network( return ircChannel } - val channel = IrcChannel(name, networkId(), session) - channel.init() + val channel = IrcChannel( + session, IrcChannelState( + network = networkId(), + name = name + ) + ) if (properties.isNotEmpty()) { channel.fromVariantMap(properties, index) channel.initialized = true - session.synchronize(channel) + session?.synchronize(channel) state.update { copy(ircChannels = ircChannels + Pair(caseMapper().toLowerCase(name), channel)) } @@ -464,49 +454,6 @@ open class Network( } } - private fun determineChannelModeTypes(): Map<ChannelModeType, Set<Char>> { - return ChannelModeType.values() - .zip( - supportValue(IrcISupport.CHANMODES) - ?.split(',', limit = ChannelModeType.values().size) - ?.map(String::toSet) - .orEmpty() - ) - .toMap() - } - - private fun determinePrefixes(): Pair<List<Char>, List<Char>> { - val defaultPrefixes = listOf('~', '&', '@', '%', '+') - val defaultPrefixModes = listOf('q', 'a', 'o', 'h', 'v') - - val prefix = supportValue(IrcISupport.PREFIX) - ?: return Pair(defaultPrefixes, defaultPrefixModes) - - if (prefix.startsWith("(") && prefix.contains(")")) { - val (prefixModes, prefixes) = prefix.substringAfter('(') - .split(')', limit = 2) - .map(String::toList) - - return Pair(prefixModes, prefixes) - } else if (prefix.isBlank()) { - return Pair(defaultPrefixes, defaultPrefixModes) - } else if ((prefix.toSet() intersect defaultPrefixes.toSet()).isNotEmpty()) { - val (prefixes, prefixModes) = defaultPrefixes.zip(defaultPrefixModes) - .filter { prefix.contains(it.second) } - .unzip() - - return Pair(prefixModes, prefixes) - } else if ((prefix.toSet() intersect defaultPrefixModes.toSet()).isNotEmpty()) { - val (prefixes, prefixModes) = defaultPrefixes.zip(defaultPrefixModes) - .filter { prefix.contains(it.first) } - .unzip() - - return Pair(prefixModes, prefixes) - } - - return Pair(defaultPrefixes, defaultPrefixModes) - } - override fun setIdentity(identityId: IdentityId) { state.update { copy(identity = identity) @@ -547,8 +494,10 @@ open class Network( if (isConnected) { copy(connected = true) } else { - ircChannels.values.forEach(session::stopSynchronize) - ircUsers.values.forEach(session::stopSynchronize) + session?.let { + ircChannels.values.forEach(it::stopSynchronize) + ircUsers.values.forEach(it::stopSynchronize) + } copy( connected = isConnected, myNick = "", @@ -721,17 +670,4 @@ open class Network( } super.setCodecForDecoding(codecForDecoding) } - - @Suppress("NOTHING_TO_INLINE") - inline fun state() = flow().value - - @Suppress("NOTHING_TO_INLINE") - inline fun flow() = state - - @PublishedApi - internal val state = MutableStateFlow( - NetworkState( - networkId = networkId - ) - ) } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/NetworkConfig.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/NetworkConfig.kt index 36b4edcb5bcc444ad0c37639cdc4681995365923..76f77c4deaf71150c165f100e701e424767c34c0 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/NetworkConfig.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/NetworkConfig.kt @@ -17,12 +17,13 @@ import de.justjanne.libquassel.protocol.util.update import de.justjanne.libquassel.protocol.variant.QVariantMap import de.justjanne.libquassel.protocol.variant.into import de.justjanne.libquassel.protocol.variant.qVariant -import kotlinx.coroutines.flow.MutableStateFlow open class NetworkConfig( - session: Session -) : SyncableObject(session, "NetworkConfig"), NetworkConfigStub { - override fun init() { + session: Session? = null, + state: NetworkConfigState = NetworkConfigState() +) : StatefulSyncableObject<NetworkConfigState>(session, "NetworkConfig", state), + NetworkConfigStub { + init { renameObject("GlobalNetworkConfig") } @@ -116,15 +117,4 @@ open class NetworkConfig( } super.setStandardCtcp(enabled) } - - @Suppress("NOTHING_TO_INLINE") - inline fun state() = flow().value - - @Suppress("NOTHING_TO_INLINE") - inline fun flow() = state - - @PublishedApi - internal val state = MutableStateFlow( - NetworkConfigState() - ) } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/StatefulSyncableObject.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/StatefulSyncableObject.kt new file mode 100644 index 0000000000000000000000000000000000000000..b30b70c3259e8352af7abf3e39dab066c2007c52 --- /dev/null +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/StatefulSyncableObject.kt @@ -0,0 +1,48 @@ +/* + * libquassel + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This Source Code Form is subject to the terms of the Mozilla Public License, + * v. 2.0. If a copy of the MPL was not distributed with this file, You can + * obtain one at https://mozilla.org/MPL/2.0/. + */ + +package de.justjanne.libquassel.protocol.syncables + +import kotlinx.coroutines.flow.MutableStateFlow + +abstract class StatefulSyncableObject<T>( + session: Session?, + className: String, + state: T +) : SyncableObject(session, className) { + override fun toString(): String { + return "$className(objectName=${objectName}, state=${state()})" + } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is StatefulSyncableObject<*>) return false + if (!super.equals(other)) return false + + if (state() != other.state()) return false + + return true + } + + override fun hashCode(): Int { + var result = super.hashCode() + result = 31 * result + state().hashCode() + return result + } + + @Suppress("NOTHING_TO_INLINE") + inline fun state() = flow().value + + @Suppress("NOTHING_TO_INLINE") + inline fun flow() = state + + @PublishedApi + internal val state = MutableStateFlow(state) +} diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/SyncableObject.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/SyncableObject.kt index f3e994ad3f70ed400c327963df52a6452be5b315..fc922fa8c4557d84992e999db53fbfe31fe8f00b 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/SyncableObject.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/SyncableObject.kt @@ -13,7 +13,7 @@ package de.justjanne.libquassel.protocol.syncables import de.justjanne.libquassel.protocol.serializers.qt.StringSerializerUtf8 abstract class SyncableObject( - override var session: Session, + override var session: Session?, override val className: String ) : SyncableStub { final override var objectName: String = "" @@ -29,8 +29,8 @@ abstract class SyncableObject( objectName = newName } else if (oldName != newName) { objectName = newName - session.objectRepository.rename(this, newName) - session.objectRenamed( + session?.objectRepository?.rename(this, newName) + session?.objectRenamed( StringSerializerUtf8.serializeRaw(className), oldName, newName @@ -38,6 +38,19 @@ abstract class SyncableObject( } } - override fun init() = Unit - override fun deinit() = Unit + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is SyncableObject) return false + + if (className != other.className) return false + if (objectName != other.objectName) return false + + return true + } + + override fun hashCode(): Int { + var result = className.hashCode() + result = 31 * result + objectName.hashCode() + return result + } } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/SyncableStub.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/SyncableStub.kt index 1352dcc677570795d700bef93583a90f41feee2e..b137490f3021c528d60844da22677dbc4a56df17 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/SyncableStub.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/SyncableStub.kt @@ -20,23 +20,20 @@ interface SyncableStub { val className: String val objectName: String val initialized: Boolean - val session: Session + val session: Session? fun fromVariantMap(properties: QVariantMap) fun toVariantMap(): QVariantMap - fun init() - fun deinit() - fun sync(target: ProtocolSide, function: String, vararg arg: QVariant_) { if (initialized) { - session.sync(target, className, objectName, function, arg.toList()) + session?.sync(target, className, objectName, function, arg.toList()) } } fun rpc(target: ProtocolSide, function: String, vararg arg: QVariant_) { if (initialized) { - session.rpc(target, function, arg.toList()) + session?.rpc(target, function, arg.toList()) } } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/state/NetworkState.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/state/NetworkState.kt index c2bf06338ffc5ec7563909cee68e8c9827251a8f..6f5a7d84a5f0f845cf59bfdbc9181287f9c5690b 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/state/NetworkState.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/state/NetworkState.kt @@ -31,9 +31,6 @@ data class NetworkState( val currentServer: String = "", val connected: Boolean = false, val connectionState: ConnectionState = ConnectionState.Disconnected, - val prefixes: List<Char> = emptyList(), - val prefixModes: List<Char> = emptyList(), - val channelModes: Map<ChannelModeType, Set<Char>> = emptyMap(), val ircUsers: Map<String, IrcUser> = emptyMap(), val ircChannels: Map<String, IrcChannel> = emptyMap(), val supports: Map<String, String?> = emptyMap(), @@ -62,6 +59,17 @@ data class NetworkState( val codecForEncoding: String = "UTF_8", val codecForDecoding: String = "UTF_8" ) { + val prefixes: List<Char> + val prefixModes: List<Char> + val channelModes: Map<ChannelModeType, Set<Char>> + + init { + val (prefixes, prefixModes) = determinePrefixes() + this.prefixes = prefixes + this.prefixModes = prefixModes + this.channelModes = determineChannelModeTypes() + } + fun identifier() = "${networkId.id}" fun caseMapper() = IrcCaseMapper[supportValue(IrcISupport.CASEMAPPING)] @@ -94,4 +102,47 @@ data class NetworkState( it.value.contains(mode) }?.key } + + private fun determinePrefixes(): Pair<List<Char>, List<Char>> { + val defaultPrefixes = listOf('~', '&', '@', '%', '+') + val defaultPrefixModes = listOf('q', 'a', 'o', 'h', 'v') + + val prefix = supportValue(IrcISupport.PREFIX) + ?: return Pair(defaultPrefixes, defaultPrefixModes) + + if (prefix.startsWith("(") && prefix.contains(")")) { + val (prefixModes, prefixes) = prefix.substringAfter('(') + .split(')', limit = 2) + .map(String::toList) + + return Pair(prefixModes, prefixes) + } else if (prefix.isBlank()) { + return Pair(defaultPrefixes, defaultPrefixModes) + } else if ((prefix.toSet() intersect defaultPrefixes.toSet()).isNotEmpty()) { + val (prefixes, prefixModes) = defaultPrefixes.zip(defaultPrefixModes) + .filter { prefix.contains(it.second) } + .unzip() + + return Pair(prefixModes, prefixes) + } else if ((prefix.toSet() intersect defaultPrefixModes.toSet()).isNotEmpty()) { + val (prefixes, prefixModes) = defaultPrefixes.zip(defaultPrefixModes) + .filter { prefix.contains(it.first) } + .unzip() + + return Pair(prefixModes, prefixes) + } + + return Pair(defaultPrefixes, defaultPrefixModes) + } + + private fun determineChannelModeTypes(): Map<ChannelModeType, Set<Char>> { + return ChannelModeType.values() + .zip( + supportValue(IrcISupport.CHANMODES) + ?.split(',', limit = ChannelModeType.values().size) + ?.map(String::toSet) + .orEmpty() + ) + .toMap() + } } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/BufferSyncerStub.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/BufferSyncerStub.kt index d61c3fa7848cb68c1e00547c9b5b6e028f6865cb..f8a1955c9197039cf95a2de4af63ad9e3b2cdd47 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/BufferSyncerStub.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/BufferSyncerStub.kt @@ -140,12 +140,12 @@ interface BufferSyncerStub : SyncableStub { } @SyncedCall(target = ProtocolSide.CLIENT) - fun setBufferActivity(buffer: BufferId, count: Int) { + fun setBufferActivity(buffer: BufferId, types: Int) { sync( target = ProtocolSide.CLIENT, "setBufferActivity", qVariant(buffer, QuasselType.BufferId), - qVariant(count, QtType.Int), + qVariant(types, QtType.Int), ) } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/NetworkStub.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/NetworkStub.kt index e1e01161663a6216bb038ed2e52dde7f1d8b7935..5b54584e7340edde8e222dbcd355037dd0551e7f 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/NetworkStub.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/stubs/NetworkStub.kt @@ -350,6 +350,7 @@ interface NetworkStub : SyncableStub { qVariant(hostmask, QtType.QString), ) } + @SyncedCall(target = ProtocolSide.CLIENT) fun addIrcChannel(channel: String) { sync( diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/indices.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/collections/indices.kt similarity index 86% rename from libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/indices.kt rename to libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/collections/indices.kt index ca42d8ba0141135937e9d522d69f6a959c4da53a..1bafda73ae6bb21bae40fc05846126deeddaef32 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/indices.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/collections/indices.kt @@ -8,6 +8,6 @@ * obtain one at https://mozilla.org/MPL/2.0/. */ -package de.justjanne.libquassel.protocol.util +package de.justjanne.libquassel.protocol.util.collections inline val <K, V> Map<K, V>.indices get() = 0 until size diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/plus.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/collections/insert.kt similarity index 78% rename from libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/plus.kt rename to libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/collections/insert.kt index ff91f83412beced45fd9a64cd5da7f6b4a8e176f..4761e9dafce7399583dccf69b08f2fb80d5c1f5f 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/plus.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/collections/insert.kt @@ -8,10 +8,9 @@ * obtain one at https://mozilla.org/MPL/2.0/. */ -package de.justjanne.libquassel.protocol.util +package de.justjanne.libquassel.protocol.util.collections -@Suppress("NOTHING_TO_INLINE") -inline fun <T> List<T>.insert(value: T, pos: Int = size): List<T> { +fun <T> List<T>.insert(value: T, pos: Int = size): List<T> { return if (pos <= 0) { listOf(value) + this } else if (pos >= size) { diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/move.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/collections/move.kt similarity index 55% rename from libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/move.kt rename to libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/collections/move.kt index 63d7016493a6d695fad973ebacb02ad70e274eef..22f14917e59174e5bb19a024fe94f03426e61d8e 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/move.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/collections/move.kt @@ -8,18 +8,15 @@ * obtain one at https://mozilla.org/MPL/2.0/. */ -package de.justjanne.libquassel.protocol.util +package de.justjanne.libquassel.protocol.util.collections -@Suppress("NOTHING_TO_INLINE") -inline fun <T> List<T>.move(value: T, pos: Int = size): List<T> { +fun <T> List<T>.move(value: T, pos: Int = size): List<T> { val newPos = pos.coerceIn(0, size) val oldPos = indexOf(value) - return if (oldPos > newPos) { - remove(value).insert(value, newPos) - } else if (newPos > oldPos) { - remove(value).insert(value, newPos - 1) - } else { - this + return when { + newPos > oldPos -> remove(value).insert(value, newPos - 1) + newPos < oldPos -> remove(value).insert(value, newPos) + else -> this } } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/pairs.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/collections/pairs.kt similarity index 87% rename from libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/pairs.kt rename to libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/collections/pairs.kt index 49305be34aa19e187bb9fb54e66253fc7d7cddd5..92e0668fdd5075bb3b90067ce2f2406f659bda61 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/pairs.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/collections/pairs.kt @@ -8,7 +8,10 @@ * obtain one at https://mozilla.org/MPL/2.0/. */ -package de.justjanne.libquassel.protocol.util +package de.justjanne.libquassel.protocol.util.collections + +import org.bouncycastle.util.io.Streams +import java.util.stream.Stream /** * Returns a partitioned list of pairs diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/remove.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/collections/remove.kt similarity index 67% rename from libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/remove.kt rename to libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/collections/remove.kt index fde9dcf114ee2ecc3e9e84e22c55949ec5a72845..430ab2697e56e27b8e76c96e7b105e2d662b34aa 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/remove.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/collections/remove.kt @@ -8,7 +8,6 @@ * obtain one at https://mozilla.org/MPL/2.0/. */ -package de.justjanne.libquassel.protocol.util +package de.justjanne.libquassel.protocol.util.collections -@Suppress("NOTHING_TO_INLINE") -inline fun <T> List<T>.remove(value: T): List<T> = this.filter { it != value } +fun <T> List<T>.remove(value: T): List<T> = this.filter { it != value } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/transpose.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/collections/transpose.kt similarity index 64% rename from libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/transpose.kt rename to libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/collections/transpose.kt index c9658896cc69536a735cd9c9b59bc40b92407bea..787ecc02f23faa17eea0572126c4fbfe23fff9ff 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/transpose.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/collections/transpose.kt @@ -8,13 +8,15 @@ * obtain one at https://mozilla.org/MPL/2.0/. */ -package de.justjanne.libquassel.protocol.util +package de.justjanne.libquassel.protocol.util.collections +import de.justjanne.libquassel.protocol.models.types.QtType import de.justjanne.libquassel.protocol.variant.QVariantList import de.justjanne.libquassel.protocol.variant.QVariantMap import de.justjanne.libquassel.protocol.variant.QVariant_ +import de.justjanne.libquassel.protocol.variant.qVariant -fun List<QVariantMap>.transpose(): Map<String, QVariantList> = +fun List<QVariantMap>.transpose(): QVariantMap = flatMap { it.keys }.toSet().map { key -> - Pair(key, map { it[key] as QVariant_ }) + Pair(key, qVariant(map { it[key] as QVariant_ }, QtType.QVariantList)) }.toMap() diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/triples.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/collections/triples.kt similarity index 94% rename from libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/triples.kt rename to libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/collections/triples.kt index 36bff4e374e3328a195aa1bc54eaee8e9f5495be..16123d2c4dcb884595e7f7d2ea33fb8ebfc923f5 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/triples.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/collections/triples.kt @@ -8,7 +8,7 @@ * obtain one at https://mozilla.org/MPL/2.0/. */ -package de.justjanne.libquassel.protocol.util +package de.justjanne.libquassel.protocol.util.collections /** * Returns a partitioned list of triples diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/variant/QVariantList.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/variant/QVariantList.kt index b40f60086b3ad346c5042911f3490c9d2f0b1f07..671fecc6e84cfa9f0ebbd46618cb6e94651c03b2 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/variant/QVariantList.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/variant/QVariantList.kt @@ -10,7 +10,7 @@ package de.justjanne.libquassel.protocol.variant -import de.justjanne.libquassel.protocol.util.pairs +import de.justjanne.libquassel.protocol.util.collections.pairs /** * Simple alias for a generic QVariantList type diff --git a/libquassel-protocol/src/test/java/de/justjanne/libquassel/protocol/types/SignedIdProxy.java b/libquassel-protocol/src/test/java/de/justjanne/libquassel/protocol/types/SignedIdProxy.java new file mode 100644 index 0000000000000000000000000000000000000000..03fb4968a8254985d450dcf76c7f55f187ac3520 --- /dev/null +++ b/libquassel-protocol/src/test/java/de/justjanne/libquassel/protocol/types/SignedIdProxy.java @@ -0,0 +1,36 @@ +/* + * libquassel + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This Source Code Form is subject to the terms of the Mozilla Public License, + * v. 2.0. If a copy of the MPL was not distributed with this file, You can + * obtain one at https://mozilla.org/MPL/2.0/. + */ + +package de.justjanne.libquassel.protocol.types; + +import de.justjanne.libquassel.protocol.models.ids.SignedId; +import de.justjanne.libquassel.protocol.models.ids.SignedIdKt; + +public class SignedIdProxy { + private SignedIdProxy() { + + } + + public static boolean isValidId(SignedId<Integer> data) { + return SignedIdKt.isValidId(data); + } + + public static boolean isValidId64(SignedId<Long> data) { + return SignedIdKt.isValidId64(data); + } + + public static <T extends Number & Comparable<T>> String toString(SignedId<T> data) { + return data.toString(); + } + + public static <T extends Number & Comparable<T>> int hashCode(SignedId<T> data) { + return data.hashCode(); + } +} diff --git a/libquassel-protocol/src/test/java/de/justjanne/libquassel/protocol/util/collections/PairsProxy.java b/libquassel-protocol/src/test/java/de/justjanne/libquassel/protocol/util/collections/PairsProxy.java new file mode 100644 index 0000000000000000000000000000000000000000..f6a90844deaa8a503ab76fbf7bff0f6b6c7cca75 --- /dev/null +++ b/libquassel-protocol/src/test/java/de/justjanne/libquassel/protocol/util/collections/PairsProxy.java @@ -0,0 +1,27 @@ +/* + * libquassel + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This Source Code Form is subject to the terms of the Mozilla Public License, + * v. 2.0. If a copy of the MPL was not distributed with this file, You can + * obtain one at https://mozilla.org/MPL/2.0/. + */ + +package de.justjanne.libquassel.protocol.util.collections; + +import kotlin.jvm.functions.Function2; + +import java.util.List; + +public class PairsProxy { + private PairsProxy() { + } + + public static <T, R> List<R> call( + Iterable<T> iterable, + Function2<T, T, R> transformer + ) { + return PairsKt.pairs(iterable, transformer); + } +} diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/ClientInitAckSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/ClientInitAckSerializerTest.kt index ccd74359745a219b00ecac0b82579eeb35b1a1fd..ae5fe8e4dd800a15fc3c4c18d48f377b7475608b 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/ClientInitAckSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/ClientInitAckSerializerTest.kt @@ -23,11 +23,45 @@ import de.justjanne.libquassel.protocol.models.BackendInfo import de.justjanne.libquassel.protocol.models.HandshakeMessage import de.justjanne.libquassel.protocol.models.SetupEntry import de.justjanne.libquassel.protocol.models.types.QtType +import de.justjanne.libquassel.protocol.testutil.byteBufferOf import de.justjanne.libquassel.protocol.testutil.handshakeSerializerTest import de.justjanne.libquassel.protocol.variant.qVariant +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test +@Tag("HandshakeSerializerTest") class ClientInitAckSerializerTest { + @Test + fun testEmptyMap() = handshakeSerializerTest( + HandshakeMessage.ClientInitAck( + coreConfigured = null, + backendInfo = emptyList(), + authenticatorInfo = emptyList(), + featureSet = FeatureSet.none() + ), + byteBufferOf( + // 4 elements + 0x00u, 0x00u, 0x00u, 0x02u, + // ByteBuffer + 0x00u, 0x00u, 0x00u, 0x0Cu, + 0x00u, + // 7 bytes + 0x00u, 0x00u, 0x00u, 0x07u, + // MsgType + 0x4Du, 0x73u, 0x67u, 0x54u, 0x79u, 0x70u, 0x65u, + // String + 0x00u, 0x00u, 0x00u, 0x0Au, + 0x00u, + // 13 2-byte chars + 0x00u, 0x00u, 0x00u, 0x1Au, + // ClientInitAck + 0x00u, 0x43u, 0x00u, 0x6Cu, 0x00u, 0x69u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x49u, 0x00u, 0x6Eu, + 0x00u, 0x69u, 0x00u, 0x74u, 0x00u, 0x41u, 0x00u, 0x63u, 0x00u, 0x6Bu, + ), + featureSets = emptyList(), + serializeFeatureSet = null + ) + @Test fun testSimple() = handshakeSerializerTest( HandshakeMessage.ClientInitAck( @@ -36,7 +70,21 @@ class ClientInitAckSerializerTest { authenticatorInfo = emptyList(), featureSet = FeatureSet.none() ), - // byteBufferOf(0x00u) + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x07u, 0x4Du, 0x73u, 0x67u, + 0x54u, 0x79u, 0x70u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x1Au, 0x00u, 0x43u, 0x00u, + 0x6Cu, 0x00u, 0x69u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x49u, 0x00u, 0x6Eu, 0x00u, 0x69u, 0x00u, + 0x74u, 0x00u, 0x41u, 0x00u, 0x63u, 0x00u, 0x6Bu, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, + 0x43u, 0x6Fu, 0x72u, 0x65u, 0x46u, 0x65u, 0x61u, 0x74u, 0x75u, 0x72u, 0x65u, 0x73u, 0x00u, 0x00u, 0x00u, 0x03u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Fu, 0x53u, 0x74u, + 0x6Fu, 0x72u, 0x61u, 0x67u, 0x65u, 0x42u, 0x61u, 0x63u, 0x6Bu, 0x65u, 0x6Eu, 0x64u, 0x73u, 0x00u, 0x00u, 0x00u, + 0x09u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Du, 0x41u, + 0x75u, 0x74u, 0x68u, 0x65u, 0x6Eu, 0x74u, 0x69u, 0x63u, 0x61u, 0x74u, 0x6Fu, 0x72u, 0x00u, 0x00u, 0x00u, 0x09u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x43u, 0x6Fu, + 0x6Eu, 0x66u, 0x69u, 0x67u, 0x75u, 0x72u, 0x65u, 0x64u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Bu, 0x46u, 0x65u, 0x61u, 0x74u, 0x75u, 0x72u, 0x65u, 0x4Cu, 0x69u, + 0x73u, 0x74u, 0x00u, 0x00u, 0x00u, 0x0Bu, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + ) ) @Test @@ -145,6 +193,240 @@ class ClientInitAckSerializerTest { ), featureSet = FeatureSet.none() ), - // byteBufferOf(0x00u) + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x07u, 0x4Du, 0x73u, 0x67u, + 0x54u, 0x79u, 0x70u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x1Au, 0x00u, 0x43u, 0x00u, + 0x6Cu, 0x00u, 0x69u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x49u, 0x00u, 0x6Eu, 0x00u, 0x69u, 0x00u, + 0x74u, 0x00u, 0x41u, 0x00u, 0x63u, 0x00u, 0x6Bu, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, + 0x43u, 0x6Fu, 0x72u, 0x65u, 0x46u, 0x65u, 0x61u, 0x74u, 0x75u, 0x72u, 0x65u, 0x73u, 0x00u, 0x00u, 0x00u, 0x03u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Fu, 0x53u, 0x74u, + 0x6Fu, 0x72u, 0x61u, 0x67u, 0x65u, 0x42u, 0x61u, 0x63u, 0x6Bu, 0x65u, 0x6Eu, 0x64u, 0x73u, 0x00u, 0x00u, 0x00u, + 0x09u, 0x00u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x07u, 0x00u, + 0x00u, 0x00u, 0x12u, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x75u, 0x00u, 0x70u, 0x00u, 0x4Bu, 0x00u, + 0x65u, 0x00u, 0x79u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x0Bu, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x1Au, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x75u, 0x00u, 0x70u, 0x00u, 0x44u, 0x00u, 0x65u, + 0x00u, 0x66u, 0x00u, 0x61u, 0x00u, 0x75u, 0x00u, 0x6Cu, 0x00u, 0x74u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x08u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x12u, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, + 0x75u, 0x00u, 0x70u, 0x00u, 0x44u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x61u, 0x00u, 0x00u, 0x00u, 0x09u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x12u, 0x00u, 0x49u, 0x00u, 0x73u, 0x00u, 0x44u, 0x00u, 0x65u, + 0x00u, 0x66u, 0x00u, 0x61u, 0x00u, 0x75u, 0x00u, 0x6Cu, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x01u, + 0x00u, 0x00u, 0x00u, 0x16u, 0x00u, 0x44u, 0x00u, 0x69u, 0x00u, 0x73u, 0x00u, 0x70u, 0x00u, 0x6Cu, 0x00u, 0x61u, + 0x00u, 0x79u, 0x00u, 0x4Eu, 0x00u, 0x61u, 0x00u, 0x6Du, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, + 0x00u, 0x00u, 0x0Cu, 0x00u, 0x53u, 0x00u, 0x51u, 0x00u, 0x4Cu, 0x00u, 0x69u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, + 0x00u, 0x00u, 0x16u, 0x00u, 0x44u, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x63u, 0x00u, 0x72u, 0x00u, 0x69u, 0x00u, + 0x70u, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, + 0x02u, 0x68u, 0x00u, 0x53u, 0x00u, 0x51u, 0x00u, 0x4Cu, 0x00u, 0x69u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x20u, + 0x00u, 0x69u, 0x00u, 0x73u, 0x00u, 0x20u, 0x00u, 0x61u, 0x00u, 0x20u, 0x00u, 0x66u, 0x00u, 0x69u, 0x00u, 0x6Cu, + 0x00u, 0x65u, 0x00u, 0x2Du, 0x00u, 0x62u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x64u, 0x00u, 0x20u, + 0x00u, 0x64u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x61u, 0x00u, 0x62u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x65u, + 0x00u, 0x20u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x67u, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x20u, + 0x00u, 0x74u, 0x00u, 0x68u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x20u, 0x00u, 0x64u, 0x00u, 0x6Fu, 0x00u, 0x65u, + 0x00u, 0x73u, 0x00u, 0x20u, 0x00u, 0x6Eu, 0x00u, 0x6Fu, 0x00u, 0x74u, 0x00u, 0x20u, 0x00u, 0x72u, 0x00u, 0x65u, + 0x00u, 0x71u, 0x00u, 0x75u, 0x00u, 0x69u, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x20u, 0x00u, 0x61u, 0x00u, 0x6Eu, + 0x00u, 0x79u, 0x00u, 0x20u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x75u, 0x00u, 0x70u, 0x00u, 0x2Eu, + 0x00u, 0x20u, 0x00u, 0x49u, 0x00u, 0x74u, 0x00u, 0x20u, 0x00u, 0x69u, 0x00u, 0x73u, 0x00u, 0x20u, 0x00u, 0x73u, + 0x00u, 0x75u, 0x00u, 0x69u, 0x00u, 0x74u, 0x00u, 0x61u, 0x00u, 0x62u, 0x00u, 0x6Cu, 0x00u, 0x65u, 0x00u, 0x20u, + 0x00u, 0x66u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x20u, 0x00u, 0x73u, 0x00u, 0x6Du, 0x00u, 0x61u, 0x00u, 0x6Cu, + 0x00u, 0x6Cu, 0x00u, 0x20u, 0x00u, 0x61u, 0x00u, 0x6Eu, 0x00u, 0x64u, 0x00u, 0x20u, 0x00u, 0x6Du, 0x00u, 0x65u, + 0x00u, 0x64u, 0x00u, 0x69u, 0x00u, 0x75u, 0x00u, 0x6Du, 0x00u, 0x2Du, 0x00u, 0x73u, 0x00u, 0x69u, 0x00u, 0x7Au, + 0x00u, 0x65u, 0x00u, 0x64u, 0x00u, 0x20u, 0x00u, 0x64u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x61u, 0x00u, 0x62u, + 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x20u, 0x00u, 0x74u, 0x00u, 0x68u, 0x00u, 0x61u, + 0x00u, 0x74u, 0x00u, 0x20u, 0x00u, 0x64u, 0x00u, 0x6Fu, 0x00u, 0x20u, 0x00u, 0x6Eu, 0x00u, 0x6Fu, 0x00u, 0x74u, + 0x00u, 0x20u, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x71u, 0x00u, 0x75u, 0x00u, 0x69u, 0x00u, 0x72u, 0x00u, 0x65u, + 0x00u, 0x20u, 0x00u, 0x61u, 0x00u, 0x63u, 0x00u, 0x63u, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x20u, + 0x00u, 0x76u, 0x00u, 0x69u, 0x00u, 0x61u, 0x00u, 0x20u, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x77u, + 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x6Bu, 0x00u, 0x2Eu, 0x00u, 0x20u, 0x00u, 0x55u, 0x00u, 0x73u, 0x00u, 0x65u, + 0x00u, 0x20u, 0x00u, 0x53u, 0x00u, 0x51u, 0x00u, 0x4Cu, 0x00u, 0x69u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x20u, + 0x00u, 0x69u, 0x00u, 0x66u, 0x00u, 0x20u, 0x00u, 0x79u, 0x00u, 0x6Fu, 0x00u, 0x75u, 0x00u, 0x72u, 0x00u, 0x20u, + 0x00u, 0x51u, 0x00u, 0x75u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, 0x20u, + 0x00u, 0x43u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x20u, 0x00u, 0x73u, 0x00u, 0x68u, 0x00u, 0x6Fu, + 0x00u, 0x75u, 0x00u, 0x6Cu, 0x00u, 0x64u, 0x00u, 0x20u, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, 0x72u, + 0x00u, 0x65u, 0x00u, 0x20u, 0x00u, 0x69u, 0x00u, 0x74u, 0x00u, 0x73u, 0x00u, 0x20u, 0x00u, 0x64u, 0x00u, 0x61u, + 0x00u, 0x74u, 0x00u, 0x61u, 0x00u, 0x20u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x20u, 0x00u, 0x74u, 0x00u, 0x68u, + 0x00u, 0x65u, 0x00u, 0x20u, 0x00u, 0x73u, 0x00u, 0x61u, 0x00u, 0x6Du, 0x00u, 0x65u, 0x00u, 0x20u, 0x00u, 0x6Du, + 0x00u, 0x61u, 0x00u, 0x63u, 0x00u, 0x68u, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x20u, 0x00u, 0x69u, + 0x00u, 0x74u, 0x00u, 0x20u, 0x00u, 0x69u, 0x00u, 0x73u, 0x00u, 0x20u, 0x00u, 0x72u, 0x00u, 0x75u, 0x00u, 0x6Eu, + 0x00u, 0x6Eu, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x67u, 0x00u, 0x20u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x2Cu, + 0x00u, 0x20u, 0x00u, 0x61u, 0x00u, 0x6Eu, 0x00u, 0x64u, 0x00u, 0x20u, 0x00u, 0x69u, 0x00u, 0x66u, 0x00u, 0x20u, + 0x00u, 0x79u, 0x00u, 0x6Fu, 0x00u, 0x75u, 0x00u, 0x20u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x6Cu, 0x00u, 0x79u, + 0x00u, 0x20u, 0x00u, 0x65u, 0x00u, 0x78u, 0x00u, 0x70u, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x74u, 0x00u, 0x20u, + 0x00u, 0x61u, 0x00u, 0x20u, 0x00u, 0x66u, 0x00u, 0x65u, 0x00u, 0x77u, 0x00u, 0x20u, 0x00u, 0x75u, 0x00u, 0x73u, + 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x73u, 0x00u, 0x20u, 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, 0x20u, 0x00u, 0x75u, + 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x20u, 0x00u, 0x79u, 0x00u, 0x6Fu, 0x00u, 0x75u, 0x00u, 0x72u, 0x00u, 0x20u, + 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x2Eu, 0x00u, 0x00u, 0x00u, 0x12u, 0x00u, 0x42u, + 0x00u, 0x61u, 0x00u, 0x63u, 0x00u, 0x6Bu, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x64u, 0x00u, 0x49u, 0x00u, 0x64u, + 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x53u, 0x00u, 0x51u, 0x00u, 0x4Cu, 0x00u, + 0x69u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x07u, 0x00u, 0x00u, + 0x00u, 0x12u, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x75u, 0x00u, 0x70u, 0x00u, 0x4Bu, 0x00u, 0x65u, + 0x00u, 0x79u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x0Bu, 0x00u, 0x00u, 0x00u, 0x00u, 0x05u, 0x00u, 0x00u, 0x00u, + 0x10u, 0x00u, 0x55u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x6Eu, 0x00u, 0x61u, 0x00u, 0x6Du, 0x00u, + 0x65u, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x50u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x77u, 0x00u, + 0x6Fu, 0x00u, 0x72u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x48u, 0x00u, 0x6Fu, 0x00u, 0x73u, 0x00u, + 0x74u, 0x00u, 0x6Eu, 0x00u, 0x61u, 0x00u, 0x6Du, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x50u, 0x00u, + 0x6Fu, 0x00u, 0x72u, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x44u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, + 0x61u, 0x00u, 0x62u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x1Au, 0x00u, 0x53u, 0x00u, + 0x65u, 0x00u, 0x74u, 0x00u, 0x75u, 0x00u, 0x70u, 0x00u, 0x44u, 0x00u, 0x65u, 0x00u, 0x66u, 0x00u, 0x61u, 0x00u, + 0x75u, 0x00u, 0x6Cu, 0x00u, 0x74u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x05u, + 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x55u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x6Eu, 0x00u, 0x61u, + 0x00u, 0x6Du, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Eu, 0x00u, 0x71u, 0x00u, + 0x75u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, + 0x50u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x77u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x64u, 0x00u, + 0x00u, 0x00u, 0x0Au, 0x00u, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x48u, 0x00u, 0x6Fu, + 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x6Eu, 0x00u, 0x61u, 0x00u, 0x6Du, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, + 0x00u, 0x00u, 0x00u, 0x00u, 0x12u, 0x00u, 0x6Cu, 0x00u, 0x6Fu, 0x00u, 0x63u, 0x00u, 0x61u, 0x00u, 0x6Cu, 0x00u, + 0x68u, 0x00u, 0x6Fu, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x50u, 0x00u, 0x6Fu, 0x00u, + 0x72u, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x15u, 0x38u, 0x00u, 0x00u, 0x00u, 0x10u, + 0x00u, 0x44u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x61u, 0x00u, 0x62u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x65u, + 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Eu, 0x00u, 0x71u, 0x00u, 0x75u, 0x00u, 0x61u, 0x00u, + 0x73u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, 0x00u, 0x00u, 0x12u, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, + 0x74u, 0x00u, 0x75u, 0x00u, 0x70u, 0x00u, 0x44u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x61u, 0x00u, 0x00u, 0x00u, + 0x09u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Fu, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, + 0x55u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x6Eu, 0x00u, 0x61u, 0x00u, 0x6Du, 0x00u, 0x65u, 0x00u, + 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x55u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x72u, + 0x00u, 0x6Eu, 0x00u, 0x61u, 0x00u, 0x6Du, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, + 0x0Eu, 0x00u, 0x71u, 0x00u, 0x75u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, + 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x50u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x73u, + 0x00u, 0x77u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, + 0x10u, 0x00u, 0x50u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x77u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, + 0x64u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, + 0x00u, 0x00u, 0x10u, 0x00u, 0x48u, 0x00u, 0x6Fu, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x6Eu, 0x00u, 0x61u, 0x00u, + 0x6Du, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x48u, 0x00u, 0x6Fu, + 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x6Eu, 0x00u, 0x61u, 0x00u, 0x6Du, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, + 0x00u, 0x00u, 0x00u, 0x00u, 0x12u, 0x00u, 0x6Cu, 0x00u, 0x6Fu, 0x00u, 0x63u, 0x00u, 0x61u, 0x00u, 0x6Cu, 0x00u, + 0x68u, 0x00u, 0x6Fu, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x08u, + 0x00u, 0x50u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, + 0x08u, 0x00u, 0x50u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, + 0x15u, 0x38u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x44u, 0x00u, 0x61u, 0x00u, + 0x74u, 0x00u, 0x61u, 0x00u, 0x62u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, + 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x44u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x61u, 0x00u, 0x62u, 0x00u, 0x61u, + 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Eu, 0x00u, 0x71u, 0x00u, + 0x75u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, 0x00u, 0x00u, 0x12u, 0x00u, + 0x49u, 0x00u, 0x73u, 0x00u, 0x44u, 0x00u, 0x65u, 0x00u, 0x66u, 0x00u, 0x61u, 0x00u, 0x75u, 0x00u, 0x6Cu, 0x00u, + 0x74u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x16u, 0x00u, 0x44u, 0x00u, 0x69u, 0x00u, + 0x73u, 0x00u, 0x70u, 0x00u, 0x6Cu, 0x00u, 0x61u, 0x00u, 0x79u, 0x00u, 0x4Eu, 0x00u, 0x61u, 0x00u, 0x6Du, 0x00u, + 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x14u, 0x00u, 0x50u, 0x00u, 0x6Fu, 0x00u, 0x73u, + 0x00u, 0x74u, 0x00u, 0x67u, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x53u, 0x00u, 0x51u, 0x00u, 0x4Cu, 0x00u, 0x00u, + 0x00u, 0x16u, 0x00u, 0x44u, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x63u, 0x00u, 0x72u, 0x00u, 0x69u, 0x00u, 0x70u, + 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, + 0x36u, 0x00u, 0x50u, 0x00u, 0x6Fu, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x67u, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, + 0x53u, 0x00u, 0x51u, 0x00u, 0x4Cu, 0x00u, 0x20u, 0x00u, 0x54u, 0x00u, 0x75u, 0x00u, 0x72u, 0x00u, 0x62u, 0x00u, + 0x6Fu, 0x00u, 0x20u, 0x00u, 0x42u, 0x00u, 0x6Fu, 0x00u, 0x6Du, 0x00u, 0x62u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, + 0x20u, 0x00u, 0x48u, 0x00u, 0x44u, 0x00u, 0x21u, 0x00u, 0x00u, 0x00u, 0x12u, 0x00u, 0x42u, 0x00u, 0x61u, 0x00u, + 0x63u, 0x00u, 0x6Bu, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x64u, 0x00u, 0x49u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, + 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x14u, 0x00u, 0x50u, 0x00u, 0x6Fu, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x67u, + 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x53u, 0x00u, 0x51u, 0x00u, 0x4Cu, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, + 0x00u, 0x00u, 0x0Du, 0x41u, 0x75u, 0x74u, 0x68u, 0x65u, 0x6Eu, 0x74u, 0x69u, 0x63u, 0x61u, 0x74u, 0x6Fu, 0x72u, + 0x00u, 0x00u, 0x00u, 0x09u, 0x00u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x07u, 0x00u, 0x00u, 0x00u, 0x12u, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x75u, 0x00u, 0x70u, + 0x00u, 0x4Bu, 0x00u, 0x65u, 0x00u, 0x79u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x0Bu, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x1Au, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x75u, 0x00u, 0x70u, 0x00u, + 0x44u, 0x00u, 0x65u, 0x00u, 0x66u, 0x00u, 0x61u, 0x00u, 0x75u, 0x00u, 0x6Cu, 0x00u, 0x74u, 0x00u, 0x73u, 0x00u, + 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x12u, 0x00u, 0x53u, 0x00u, 0x65u, + 0x00u, 0x74u, 0x00u, 0x75u, 0x00u, 0x70u, 0x00u, 0x44u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x61u, 0x00u, 0x00u, + 0x00u, 0x09u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x12u, 0x00u, 0x49u, 0x00u, 0x73u, 0x00u, + 0x44u, 0x00u, 0x65u, 0x00u, 0x66u, 0x00u, 0x61u, 0x00u, 0x75u, 0x00u, 0x6Cu, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, + 0x01u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x16u, 0x00u, 0x44u, 0x00u, 0x69u, 0x00u, 0x73u, 0x00u, 0x70u, 0x00u, + 0x6Cu, 0x00u, 0x61u, 0x00u, 0x79u, 0x00u, 0x4Eu, 0x00u, 0x61u, 0x00u, 0x6Du, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, + 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x44u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x61u, 0x00u, 0x62u, + 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x16u, 0x00u, 0x44u, 0x00u, 0x65u, 0x00u, 0x73u, + 0x00u, 0x63u, 0x00u, 0x72u, 0x00u, 0x69u, 0x00u, 0x70u, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, + 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x01u, 0x10u, 0x00u, 0x44u, 0x00u, 0x6Fu, 0x00u, 0x20u, 0x00u, + 0x6Eu, 0x00u, 0x6Fu, 0x00u, 0x74u, 0x00u, 0x20u, 0x00u, 0x61u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x68u, 0x00u, + 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x63u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, + 0x20u, 0x00u, 0x61u, 0x00u, 0x67u, 0x00u, 0x61u, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, + 0x20u, 0x00u, 0x61u, 0x00u, 0x6Eu, 0x00u, 0x79u, 0x00u, 0x20u, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x6Du, 0x00u, + 0x6Fu, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x20u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x76u, 0x00u, + 0x69u, 0x00u, 0x63u, 0x00u, 0x65u, 0x00u, 0x2Cu, 0x00u, 0x20u, 0x00u, 0x62u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, + 0x20u, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x61u, 0x00u, 0x64u, 0x00u, + 0x20u, 0x00u, 0x73u, 0x00u, 0x61u, 0x00u, 0x76u, 0x00u, 0x65u, 0x00u, 0x20u, 0x00u, 0x61u, 0x00u, 0x20u, 0x00u, + 0x68u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x68u, 0x00u, 0x65u, 0x00u, 0x64u, 0x00u, 0x20u, 0x00u, 0x61u, 0x00u, + 0x6Eu, 0x00u, 0x64u, 0x00u, 0x20u, 0x00u, 0x73u, 0x00u, 0x61u, 0x00u, 0x6Cu, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, + 0x64u, 0x00u, 0x20u, 0x00u, 0x70u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x77u, 0x00u, 0x6Fu, 0x00u, + 0x72u, 0x00u, 0x64u, 0x00u, 0x20u, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x20u, 0x00u, 0x74u, 0x00u, 0x68u, 0x00u, + 0x65u, 0x00u, 0x20u, 0x00u, 0x64u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x61u, 0x00u, 0x62u, 0x00u, 0x61u, 0x00u, + 0x73u, 0x00u, 0x65u, 0x00u, 0x20u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, + 0x74u, 0x00u, 0x65u, 0x00u, 0x64u, 0x00u, 0x20u, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x20u, 0x00u, 0x74u, 0x00u, + 0x68u, 0x00u, 0x65u, 0x00u, 0x20u, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x78u, 0x00u, 0x74u, 0x00u, 0x20u, 0x00u, + 0x73u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x70u, 0x00u, 0x2Eu, 0x00u, 0x00u, 0x00u, 0x12u, 0x00u, 0x42u, 0x00u, + 0x61u, 0x00u, 0x63u, 0x00u, 0x6Bu, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x64u, 0x00u, 0x49u, 0x00u, 0x64u, 0x00u, + 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x44u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x61u, + 0x00u, 0x62u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x07u, 0x00u, 0x00u, 0x00u, 0x12u, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x75u, 0x00u, 0x70u, 0x00u, + 0x4Bu, 0x00u, 0x65u, 0x00u, 0x79u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x0Bu, 0x00u, 0x00u, 0x00u, 0x00u, 0x07u, + 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x48u, 0x00u, 0x6Fu, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x6Eu, 0x00u, 0x61u, + 0x00u, 0x6Du, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x50u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x74u, + 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x42u, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x64u, 0x00u, 0x44u, 0x00u, 0x4Eu, + 0x00u, 0x00u, 0x00u, 0x18u, 0x00u, 0x42u, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x64u, 0x00u, 0x50u, 0x00u, 0x61u, + 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x77u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x0Cu, + 0x00u, 0x42u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x44u, 0x00u, 0x4Eu, 0x00u, 0x00u, 0x00u, 0x0Cu, + 0x00u, 0x46u, 0x00u, 0x69u, 0x00u, 0x6Cu, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x00u, 0x00u, 0x18u, + 0x00u, 0x55u, 0x00u, 0x69u, 0x00u, 0x64u, 0x00u, 0x41u, 0x00u, 0x74u, 0x00u, 0x74u, 0x00u, 0x72u, 0x00u, 0x69u, + 0x00u, 0x62u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x1Au, 0x00u, 0x53u, 0x00u, 0x65u, + 0x00u, 0x74u, 0x00u, 0x75u, 0x00u, 0x70u, 0x00u, 0x44u, 0x00u, 0x65u, 0x00u, 0x66u, 0x00u, 0x61u, 0x00u, 0x75u, + 0x00u, 0x6Cu, 0x00u, 0x74u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x07u, 0x00u, + 0x00u, 0x00u, 0x10u, 0x00u, 0x48u, 0x00u, 0x6Fu, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x6Eu, 0x00u, 0x61u, 0x00u, + 0x6Du, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x20u, 0x00u, 0x6Cu, 0x00u, 0x64u, + 0x00u, 0x61u, 0x00u, 0x70u, 0x00u, 0x3Au, 0x00u, 0x2Fu, 0x00u, 0x2Fu, 0x00u, 0x6Cu, 0x00u, 0x6Fu, 0x00u, 0x63u, + 0x00u, 0x61u, 0x00u, 0x6Cu, 0x00u, 0x68u, 0x00u, 0x6Fu, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x08u, + 0x00u, 0x50u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x01u, + 0x85u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x42u, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x64u, 0x00u, 0x44u, 0x00u, + 0x4Eu, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0x00u, 0x00u, 0x00u, 0x18u, 0x00u, 0x42u, + 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x64u, 0x00u, 0x50u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x77u, + 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0x00u, + 0x00u, 0x00u, 0x0Cu, 0x00u, 0x42u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x44u, 0x00u, 0x4Eu, 0x00u, + 0x00u, 0x00u, 0x0Au, 0x00u, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x46u, 0x00u, 0x69u, + 0x00u, 0x6Cu, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0x00u, 0x00u, 0x00u, 0x18u, 0x00u, 0x55u, 0x00u, 0x69u, 0x00u, 0x64u, 0x00u, 0x41u, 0x00u, 0x74u, 0x00u, + 0x74u, 0x00u, 0x72u, 0x00u, 0x69u, 0x00u, 0x62u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, + 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x06u, 0x00u, 0x75u, 0x00u, 0x69u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x12u, + 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x75u, 0x00u, 0x70u, 0x00u, 0x44u, 0x00u, 0x61u, 0x00u, 0x74u, + 0x00u, 0x61u, 0x00u, 0x00u, 0x00u, 0x09u, 0x00u, 0x00u, 0x00u, 0x00u, 0x15u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, + 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x48u, 0x00u, 0x6Fu, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x6Eu, 0x00u, 0x61u, + 0x00u, 0x6Du, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x48u, 0x00u, + 0x6Fu, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x6Eu, 0x00u, 0x61u, 0x00u, 0x6Du, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, + 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x20u, 0x00u, 0x6Cu, 0x00u, 0x64u, 0x00u, 0x61u, 0x00u, 0x70u, 0x00u, 0x3Au, + 0x00u, 0x2Fu, 0x00u, 0x2Fu, 0x00u, 0x6Cu, 0x00u, 0x6Fu, 0x00u, 0x63u, 0x00u, 0x61u, 0x00u, 0x6Cu, 0x00u, 0x68u, + 0x00u, 0x6Fu, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, + 0x50u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x08u, + 0x00u, 0x50u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x01u, + 0x85u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x42u, 0x00u, 0x69u, 0x00u, 0x6Eu, + 0x00u, 0x64u, 0x00u, 0x44u, 0x00u, 0x4Eu, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Eu, 0x00u, + 0x42u, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x64u, 0x00u, 0x20u, 0x00u, 0x44u, 0x00u, 0x4Eu, 0x00u, 0x00u, 0x00u, + 0x0Au, 0x00u, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x18u, 0x00u, + 0x42u, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x64u, 0x00u, 0x50u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, + 0x77u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x1Au, + 0x00u, 0x42u, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x64u, 0x00u, 0x20u, 0x00u, 0x50u, 0x00u, 0x61u, 0x00u, 0x73u, + 0x00u, 0x73u, 0x00u, 0x77u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0xFFu, + 0xFFu, 0xFFu, 0xFFu, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x42u, 0x00u, 0x61u, + 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x44u, 0x00u, 0x4Eu, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, + 0x0Eu, 0x00u, 0x42u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x20u, 0x00u, 0x44u, 0x00u, 0x4Eu, 0x00u, + 0x00u, 0x00u, 0x0Au, 0x00u, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, + 0x0Cu, 0x00u, 0x46u, 0x00u, 0x69u, 0x00u, 0x6Cu, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x00u, 0x00u, + 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x46u, 0x00u, 0x69u, 0x00u, 0x6Cu, 0x00u, 0x74u, 0x00u, 0x65u, + 0x00u, 0x72u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, + 0x00u, 0x00u, 0x00u, 0x18u, 0x00u, 0x55u, 0x00u, 0x69u, 0x00u, 0x64u, 0x00u, 0x41u, 0x00u, 0x74u, 0x00u, 0x74u, + 0x00u, 0x72u, 0x00u, 0x69u, 0x00u, 0x62u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, + 0x00u, 0x00u, 0x00u, 0x00u, 0x1Au, 0x00u, 0x55u, 0x00u, 0x49u, 0x00u, 0x44u, 0x00u, 0x20u, 0x00u, 0x41u, 0x00u, + 0x74u, 0x00u, 0x74u, 0x00u, 0x72u, 0x00u, 0x69u, 0x00u, 0x62u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, + 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x06u, 0x00u, 0x75u, 0x00u, 0x69u, 0x00u, 0x64u, 0x00u, 0x00u, + 0x00u, 0x12u, 0x00u, 0x49u, 0x00u, 0x73u, 0x00u, 0x44u, 0x00u, 0x65u, 0x00u, 0x66u, 0x00u, 0x61u, 0x00u, 0x75u, + 0x00u, 0x6Cu, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x16u, 0x00u, 0x44u, + 0x00u, 0x69u, 0x00u, 0x73u, 0x00u, 0x70u, 0x00u, 0x6Cu, 0x00u, 0x61u, 0x00u, 0x79u, 0x00u, 0x4Eu, 0x00u, 0x61u, + 0x00u, 0x6Du, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x4Cu, 0x00u, + 0x44u, 0x00u, 0x41u, 0x00u, 0x50u, 0x00u, 0x00u, 0x00u, 0x16u, 0x00u, 0x44u, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, + 0x63u, 0x00u, 0x72u, 0x00u, 0x69u, 0x00u, 0x70u, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, + 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x50u, 0x00u, 0x41u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x68u, + 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x63u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x65u, + 0x00u, 0x20u, 0x00u, 0x75u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x73u, 0x00u, 0x20u, 0x00u, 0x75u, + 0x00u, 0x73u, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x67u, 0x00u, 0x20u, 0x00u, 0x61u, 0x00u, 0x6Eu, 0x00u, 0x20u, + 0x00u, 0x4Cu, 0x00u, 0x44u, 0x00u, 0x41u, 0x00u, 0x50u, 0x00u, 0x20u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x72u, + 0x00u, 0x76u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x2Eu, 0x00u, 0x00u, 0x00u, 0x12u, 0x00u, 0x42u, 0x00u, 0x61u, + 0x00u, 0x63u, 0x00u, 0x6Bu, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x64u, 0x00u, 0x49u, 0x00u, 0x64u, 0x00u, 0x00u, + 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x4Cu, 0x00u, 0x44u, 0x00u, 0x41u, 0x00u, 0x50u, 0x00u, + 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x43u, 0x6Fu, 0x6Eu, 0x66u, 0x69u, 0x67u, 0x75u, 0x72u, + 0x65u, 0x64u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, + 0x0Bu, 0x46u, 0x65u, 0x61u, 0x74u, 0x75u, 0x72u, 0x65u, 0x4Cu, 0x69u, 0x73u, 0x74u, 0x00u, 0x00u, 0x00u, 0x0Bu, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + ) ) } diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/ClientInitRejectSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/ClientInitRejectSerializerTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..faa0f21972552102c919108674342fff6abe2d7d --- /dev/null +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/ClientInitRejectSerializerTest.kt @@ -0,0 +1,104 @@ +/* + * Quasseldroid - Quassel client for Android + * + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3 as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.justjanne.libquassel.protocol.serializers.handshake + +import de.justjanne.libquassel.protocol.models.HandshakeMessage +import de.justjanne.libquassel.protocol.testutil.byteBufferOf +import de.justjanne.libquassel.protocol.testutil.handshakeSerializerTest +import org.junit.jupiter.api.Tag +import org.junit.jupiter.api.Test + +@Tag("HandshakeSerializerTest") +class ClientInitRejectSerializerTest { + @Test + fun testEmptyMap() = handshakeSerializerTest( + HandshakeMessage.ClientInitReject( + errorString = null + ), + byteBufferOf( + // 4 elements + 0x00u, 0x00u, 0x00u, 0x02u, + // ByteBuffer + 0x00u, 0x00u, 0x00u, 0x0Cu, + 0x00u, + // 7 bytes + 0x00u, 0x00u, 0x00u, 0x07u, + // MsgType + 0x4Du, 0x73u, 0x67u, 0x54u, 0x79u, 0x70u, 0x65u, + // String + 0x00u, 0x00u, 0x00u, 0x0Au, + 0x00u, + // 16 2-byte chars + 0x00u, 0x00u, 0x00u, 0x20u, + // ClientInitReject + 0x00u, 0x43u, 0x00u, 0x6Cu, 0x00u, 0x69u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x49u, 0x00u, 0x6Eu, + 0x00u, 0x69u, 0x00u, 0x74u, 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x6Au, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x74u, + ), + featureSets = emptyList(), + serializeFeatureSet = null + ) + + @Test + fun testEmpty() = handshakeSerializerTest( + HandshakeMessage.ClientInitReject( + errorString = null + ), + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x04u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x07u, 0x4Du, 0x73u, 0x67u, + 0x54u, 0x79u, 0x70u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x20u, 0x00u, 0x43u, 0x00u, + 0x6Cu, 0x00u, 0x69u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x49u, 0x00u, 0x6Eu, 0x00u, 0x69u, 0x00u, + 0x74u, 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x6Au, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, + 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x05u, 0x45u, 0x72u, 0x72u, 0x6Fu, 0x72u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, + ) + ) + + @Test + fun testSimple() = handshakeSerializerTest( + HandshakeMessage.ClientInitReject( + errorString = "hm. I've lost a machine.. literally _lost_. it responds to ping, it works completely, I just " + + "can't figure out where in my apartment it is." + ), + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x04u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x07u, 0x4Du, 0x73u, 0x67u, + 0x54u, 0x79u, 0x70u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x20u, 0x00u, 0x43u, 0x00u, + 0x6Cu, 0x00u, 0x69u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x49u, 0x00u, 0x6Eu, 0x00u, 0x69u, 0x00u, + 0x74u, 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x6Au, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, + 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x05u, 0x45u, 0x72u, 0x72u, 0x6Fu, 0x72u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, + 0x00u, 0x00u, 0x01u, 0x14u, 0x00u, 0x68u, 0x00u, 0x6Du, 0x00u, 0x2Eu, 0x00u, 0x20u, 0x00u, 0x49u, 0x00u, 0x27u, + 0x00u, 0x76u, 0x00u, 0x65u, 0x00u, 0x20u, 0x00u, 0x6Cu, 0x00u, 0x6Fu, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x20u, + 0x00u, 0x61u, 0x00u, 0x20u, 0x00u, 0x6Du, 0x00u, 0x61u, 0x00u, 0x63u, 0x00u, 0x68u, 0x00u, 0x69u, 0x00u, 0x6Eu, + 0x00u, 0x65u, 0x00u, 0x2Eu, 0x00u, 0x2Eu, 0x00u, 0x20u, 0x00u, 0x6Cu, 0x00u, 0x69u, 0x00u, 0x74u, 0x00u, 0x65u, + 0x00u, 0x72u, 0x00u, 0x61u, 0x00u, 0x6Cu, 0x00u, 0x6Cu, 0x00u, 0x79u, 0x00u, 0x20u, 0x00u, 0x5Fu, 0x00u, 0x6Cu, + 0x00u, 0x6Fu, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x5Fu, 0x00u, 0x2Eu, 0x00u, 0x20u, 0x00u, 0x69u, 0x00u, 0x74u, + 0x00u, 0x20u, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x70u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x64u, + 0x00u, 0x73u, 0x00u, 0x20u, 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, 0x20u, 0x00u, 0x70u, 0x00u, 0x69u, 0x00u, 0x6Eu, + 0x00u, 0x67u, 0x00u, 0x2Cu, 0x00u, 0x20u, 0x00u, 0x69u, 0x00u, 0x74u, 0x00u, 0x20u, 0x00u, 0x77u, 0x00u, 0x6Fu, + 0x00u, 0x72u, 0x00u, 0x6Bu, 0x00u, 0x73u, 0x00u, 0x20u, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x6Du, 0x00u, 0x70u, + 0x00u, 0x6Cu, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, 0x79u, 0x00u, 0x2Cu, 0x00u, 0x20u, + 0x00u, 0x49u, 0x00u, 0x20u, 0x00u, 0x6Au, 0x00u, 0x75u, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x20u, 0x00u, 0x63u, + 0x00u, 0x61u, 0x00u, 0x6Eu, 0x00u, 0x27u, 0x00u, 0x74u, 0x00u, 0x20u, 0x00u, 0x66u, 0x00u, 0x69u, 0x00u, 0x67u, + 0x00u, 0x75u, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x20u, 0x00u, 0x6Fu, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x20u, + 0x00u, 0x77u, 0x00u, 0x68u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x20u, 0x00u, 0x69u, 0x00u, 0x6Eu, + 0x00u, 0x20u, 0x00u, 0x6Du, 0x00u, 0x79u, 0x00u, 0x20u, 0x00u, 0x61u, 0x00u, 0x70u, 0x00u, 0x61u, 0x00u, 0x72u, + 0x00u, 0x74u, 0x00u, 0x6Du, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x20u, 0x00u, 0x69u, 0x00u, 0x74u, + 0x00u, 0x20u, 0x00u, 0x69u, 0x00u, 0x73u, 0x00u, 0x2Eu, + ) + ) +} diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/ClientInitSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/ClientInitSerializerTest.kt index 13c974c2f770749c042b4c5c6b96f8a76c0b4144..a6cc1e3b0c8c6b6f56034baca9bcce27e331feaf 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/ClientInitSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/ClientInitSerializerTest.kt @@ -22,9 +22,40 @@ import de.justjanne.libquassel.protocol.features.FeatureSet import de.justjanne.libquassel.protocol.models.HandshakeMessage import de.justjanne.libquassel.protocol.testutil.byteBufferOf import de.justjanne.libquassel.protocol.testutil.handshakeSerializerTest +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test +@Tag("HandshakeSerializerTest") class ClientInitSerializerTest { + @Test + fun testEmptyMap() = handshakeSerializerTest( + HandshakeMessage.ClientInit( + clientVersion = null, + buildDate = null, + featureSet = FeatureSet.none() + ), + byteBufferOf( + // 4 elements + 0x00u, 0x00u, 0x00u, 0x02u, + // ByteBuffer + 0x00u, 0x00u, 0x00u, 0x0Cu, + 0x00u, + // 7 bytes + 0x00u, 0x00u, 0x00u, 0x07u, + // MsgType + 0x4Du, 0x73u, 0x67u, 0x54u, 0x79u, 0x70u, 0x65u, + // String + 0x00u, 0x00u, 0x00u, 0x0Au, + 0x00u, + // 10 2-byte chars + 0x00u, 0x00u, 0x00u, 0x14u, + 0x00u, 0x43u, 0x00u, 0x6Cu, 0x00u, 0x69u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x49u, 0x00u, 0x6Eu, + 0x00u, 0x69u, 0x00u, 0x74u, + ), + featureSets = emptyList(), + serializeFeatureSet = null + ) + @Test fun testSimple() = handshakeSerializerTest( HandshakeMessage.ClientInit( @@ -70,6 +101,84 @@ class ClientInitSerializerTest { buildDate = "2020-04-27T22:21:17Z", featureSet = FeatureSet.all() ), - // byteBufferOf(0x00u) + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x07u, 0x4Du, 0x73u, 0x67u, + 0x54u, 0x79u, 0x70u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x14u, 0x00u, 0x43u, 0x00u, + 0x6Cu, 0x00u, 0x69u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x49u, 0x00u, 0x6Eu, 0x00u, 0x69u, 0x00u, + 0x74u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Du, 0x43u, 0x6Cu, 0x69u, 0x65u, 0x6Eu, 0x74u, + 0x56u, 0x65u, 0x72u, 0x73u, 0x69u, 0x6Fu, 0x6Eu, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x01u, 0x04u, + 0x00u, 0x51u, 0x00u, 0x75u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, 0x64u, + 0x00u, 0x72u, 0x00u, 0x6Fu, 0x00u, 0x69u, 0x00u, 0x64u, 0x00u, 0x20u, 0x00u, 0x3Cu, 0x00u, 0x61u, 0x00u, 0x20u, + 0x00u, 0x68u, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x66u, 0x00u, 0x3Du, 0x00u, 0x22u, 0x00u, 0x68u, 0x00u, 0x74u, + 0x00u, 0x74u, 0x00u, 0x70u, 0x00u, 0x73u, 0x00u, 0x3Au, 0x00u, 0x2Fu, 0x00u, 0x2Fu, 0x00u, 0x67u, 0x00u, 0x69u, + 0x00u, 0x74u, 0x00u, 0x2Eu, 0x00u, 0x6Bu, 0x00u, 0x75u, 0x00u, 0x73u, 0x00u, 0x63u, 0x00u, 0x68u, 0x00u, 0x6Bu, + 0x00u, 0x75u, 0x00u, 0x2Eu, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x2Fu, 0x00u, 0x6Au, 0x00u, 0x75u, 0x00u, 0x73u, + 0x00u, 0x74u, 0x00u, 0x4Au, 0x00u, 0x61u, 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x2Fu, 0x00u, 0x51u, + 0x00u, 0x75u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, 0x44u, 0x00u, 0x72u, + 0x00u, 0x6Fu, 0x00u, 0x69u, 0x00u, 0x64u, 0x00u, 0x2Du, 0x00u, 0x6Eu, 0x00u, 0x67u, 0x00u, 0x2Fu, 0x00u, 0x63u, + 0x00u, 0x6Fu, 0x00u, 0x6Du, 0x00u, 0x6Du, 0x00u, 0x69u, 0x00u, 0x74u, 0x00u, 0x2Fu, 0x00u, 0x62u, 0x00u, 0x36u, + 0x00u, 0x32u, 0x00u, 0x32u, 0x00u, 0x61u, 0x00u, 0x64u, 0x00u, 0x36u, 0x00u, 0x33u, 0x00u, 0x30u, 0x00u, 0x35u, + 0x00u, 0x36u, 0x00u, 0x62u, 0x00u, 0x36u, 0x00u, 0x30u, 0x00u, 0x35u, 0x00u, 0x34u, 0x00u, 0x62u, 0x00u, 0x30u, + 0x00u, 0x36u, 0x00u, 0x65u, 0x00u, 0x30u, 0x00u, 0x39u, 0x00u, 0x66u, 0x00u, 0x38u, 0x00u, 0x65u, 0x00u, 0x31u, + 0x00u, 0x66u, 0x00u, 0x31u, 0x00u, 0x65u, 0x00u, 0x66u, 0x00u, 0x32u, 0x00u, 0x62u, 0x00u, 0x30u, 0x00u, 0x63u, + 0x00u, 0x33u, 0x00u, 0x61u, 0x00u, 0x61u, 0x00u, 0x66u, 0x00u, 0x39u, 0x00u, 0x61u, 0x00u, 0x22u, 0x00u, 0x3Eu, + 0x00u, 0x76u, 0x00u, 0x31u, 0x00u, 0x2Eu, 0x00u, 0x33u, 0x00u, 0x2Eu, 0x00u, 0x33u, 0x00u, 0x3Cu, 0x00u, 0x2Fu, + 0x00u, 0x61u, 0x00u, 0x3Eu, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x43u, 0x6Cu, 0x69u, + 0x65u, 0x6Eu, 0x74u, 0x44u, 0x61u, 0x74u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x28u, + 0x00u, 0x32u, 0x00u, 0x30u, 0x00u, 0x32u, 0x00u, 0x30u, 0x00u, 0x2Du, 0x00u, 0x30u, 0x00u, 0x34u, 0x00u, 0x2Du, + 0x00u, 0x32u, 0x00u, 0x37u, 0x00u, 0x54u, 0x00u, 0x32u, 0x00u, 0x32u, 0x00u, 0x3Au, 0x00u, 0x32u, 0x00u, 0x31u, + 0x00u, 0x3Au, 0x00u, 0x31u, 0x00u, 0x37u, 0x00u, 0x5Au, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, + 0x08u, 0x46u, 0x65u, 0x61u, 0x74u, 0x75u, 0x72u, 0x65u, 0x73u, 0x00u, 0x00u, 0x00u, 0x03u, 0x00u, 0x00u, 0x00u, + 0xFFu, 0xFFu, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Bu, 0x46u, 0x65u, 0x61u, 0x74u, 0x75u, + 0x72u, 0x65u, 0x4Cu, 0x69u, 0x73u, 0x74u, 0x00u, 0x00u, 0x00u, 0x0Bu, 0x00u, 0x00u, 0x00u, 0x00u, 0x16u, 0x00u, + 0x00u, 0x00u, 0x2Cu, 0x00u, 0x53u, 0x00u, 0x79u, 0x00u, 0x6Eu, 0x00u, 0x63u, 0x00u, 0x68u, 0x00u, 0x72u, 0x00u, + 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x69u, 0x00u, 0x7Au, 0x00u, 0x65u, 0x00u, 0x64u, 0x00u, 0x4Du, 0x00u, 0x61u, 0x00u, + 0x72u, 0x00u, 0x6Bu, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x4Cu, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, + 0x00u, 0x00u, 0x24u, 0x00u, 0x53u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x6Cu, 0x00u, 0x41u, 0x00u, 0x75u, 0x00u, + 0x74u, 0x00u, 0x68u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x63u, 0x00u, 0x61u, 0x00u, + 0x74u, 0x00u, 0x69u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x00u, 0x00u, 0x18u, 0x00u, 0x53u, 0x00u, 0x61u, 0x00u, + 0x73u, 0x00u, 0x6Cu, 0x00u, 0x45u, 0x00u, 0x78u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x6Eu, 0x00u, + 0x61u, 0x00u, 0x6Cu, 0x00u, 0x00u, 0x00u, 0x28u, 0x00u, 0x48u, 0x00u, 0x69u, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, + 0x49u, 0x00u, 0x6Eu, 0x00u, 0x61u, 0x00u, 0x63u, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x76u, 0x00u, 0x65u, 0x00u, + 0x4Eu, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x77u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x6Bu, 0x00u, 0x73u, 0x00u, + 0x00u, 0x00u, 0x1Cu, 0x00u, 0x50u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x77u, 0x00u, 0x6Fu, 0x00u, + 0x72u, 0x00u, 0x64u, 0x00u, 0x43u, 0x00u, 0x68u, 0x00u, 0x61u, 0x00u, 0x6Eu, 0x00u, 0x67u, 0x00u, 0x65u, 0x00u, + 0x00u, 0x00u, 0x1Cu, 0x00u, 0x43u, 0x00u, 0x61u, 0x00u, 0x70u, 0x00u, 0x4Eu, 0x00u, 0x65u, 0x00u, 0x67u, 0x00u, + 0x6Fu, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, + 0x00u, 0x00u, 0x1Eu, 0x00u, 0x56u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x69u, 0x00u, 0x66u, 0x00u, 0x79u, 0x00u, + 0x53u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x76u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x53u, 0x00u, 0x53u, 0x00u, + 0x4Cu, 0x00u, 0x00u, 0x00u, 0x20u, 0x00u, 0x43u, 0x00u, 0x75u, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, + 0x6Du, 0x00u, 0x52u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x4Cu, 0x00u, 0x69u, 0x00u, 0x6Du, 0x00u, + 0x69u, 0x00u, 0x74u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x1Eu, 0x00u, 0x44u, 0x00u, 0x63u, 0x00u, 0x63u, 0x00u, + 0x46u, 0x00u, 0x69u, 0x00u, 0x6Cu, 0x00u, 0x65u, 0x00u, 0x54u, 0x00u, 0x72u, 0x00u, 0x61u, 0x00u, 0x6Eu, 0x00u, + 0x73u, 0x00u, 0x66u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x00u, 0x00u, 0x26u, 0x00u, 0x41u, 0x00u, 0x77u, 0x00u, + 0x61u, 0x00u, 0x79u, 0x00u, 0x46u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x6Du, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, + 0x54u, 0x00u, 0x69u, 0x00u, 0x6Du, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x61u, 0x00u, 0x6Du, 0x00u, + 0x70u, 0x00u, 0x00u, 0x00u, 0x1Cu, 0x00u, 0x41u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x68u, 0x00u, 0x65u, 0x00u, + 0x6Eu, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x63u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, + 0x73u, 0x00u, 0x00u, 0x00u, 0x24u, 0x00u, 0x42u, 0x00u, 0x75u, 0x00u, 0x66u, 0x00u, 0x66u, 0x00u, 0x65u, 0x00u, + 0x72u, 0x00u, 0x41u, 0x00u, 0x63u, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x76u, 0x00u, 0x69u, 0x00u, 0x74u, 0x00u, + 0x79u, 0x00u, 0x53u, 0x00u, 0x79u, 0x00u, 0x6Eu, 0x00u, 0x63u, 0x00u, 0x00u, 0x00u, 0x24u, 0x00u, 0x43u, 0x00u, + 0x6Fu, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x53u, 0x00u, 0x69u, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x48u, 0x00u, + 0x69u, 0x00u, 0x67u, 0x00u, 0x68u, 0x00u, 0x6Cu, 0x00u, 0x69u, 0x00u, 0x67u, 0x00u, 0x68u, 0x00u, 0x74u, 0x00u, + 0x73u, 0x00u, 0x00u, 0x00u, 0x1Cu, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, + 0x72u, 0x00u, 0x50u, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x66u, 0x00u, 0x69u, 0x00u, 0x78u, 0x00u, 0x65u, 0x00u, + 0x73u, 0x00u, 0x00u, 0x00u, 0x20u, 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x6Du, 0x00u, 0x6Fu, 0x00u, 0x74u, 0x00u, + 0x65u, 0x00u, 0x44u, 0x00u, 0x69u, 0x00u, 0x73u, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, + 0x65u, 0x00u, 0x63u, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x20u, 0x00u, 0x45u, 0x00u, 0x78u, 0x00u, 0x74u, 0x00u, + 0x65u, 0x00u, 0x6Eu, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x64u, 0x00u, 0x46u, 0x00u, 0x65u, 0x00u, 0x61u, 0x00u, + 0x74u, 0x00u, 0x75u, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x4Cu, 0x00u, + 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x67u, 0x00u, 0x54u, 0x00u, 0x69u, 0x00u, 0x6Du, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, + 0x18u, 0x00u, 0x52u, 0x00u, 0x69u, 0x00u, 0x63u, 0x00u, 0x68u, 0x00u, 0x4Du, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, + 0x73u, 0x00u, 0x61u, 0x00u, 0x67u, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x22u, 0x00u, 0x42u, 0x00u, + 0x61u, 0x00u, 0x63u, 0x00u, 0x6Bu, 0x00u, 0x6Cu, 0x00u, 0x6Fu, 0x00u, 0x67u, 0x00u, 0x46u, 0x00u, 0x69u, 0x00u, + 0x6Cu, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x54u, 0x00u, 0x79u, 0x00u, 0x70u, 0x00u, 0x65u, 0x00u, + 0x00u, 0x00u, 0x1Eu, 0x00u, 0x45u, 0x00u, 0x63u, 0x00u, 0x64u, 0x00u, 0x73u, 0x00u, 0x61u, 0x00u, 0x43u, 0x00u, + 0x65u, 0x00u, 0x72u, 0x00u, 0x74u, 0x00u, 0x66u, 0x00u, 0x70u, 0x00u, 0x4Bu, 0x00u, 0x65u, 0x00u, 0x79u, 0x00u, + 0x73u, 0x00u, 0x00u, 0x00u, 0x1Au, 0x00u, 0x4Cu, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x67u, 0x00u, 0x4Du, 0x00u, + 0x65u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x61u, 0x00u, 0x67u, 0x00u, 0x65u, 0x00u, 0x49u, 0x00u, 0x64u, 0x00u, + 0x00u, 0x00u, 0x1Cu, 0x00u, 0x53u, 0x00u, 0x79u, 0x00u, 0x6Eu, 0x00u, 0x63u, 0x00u, 0x65u, 0x00u, 0x64u, 0x00u, + 0x43u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x49u, 0x00u, 0x6Eu, 0x00u, 0x66u, 0x00u, 0x6Fu + ) ) } diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/ClientLoginAckSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/ClientLoginAckSerializerTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..98c61aca8bf49d092cb472fe898cd4fc0c7317e2 --- /dev/null +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/ClientLoginAckSerializerTest.kt @@ -0,0 +1,39 @@ +/* + * Quasseldroid - Quassel client for Android + * + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3 as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.justjanne.libquassel.protocol.serializers.handshake + +import de.justjanne.libquassel.protocol.models.HandshakeMessage +import de.justjanne.libquassel.protocol.testutil.byteBufferOf +import de.justjanne.libquassel.protocol.testutil.handshakeSerializerTest +import org.junit.jupiter.api.Tag +import org.junit.jupiter.api.Test + +@Tag("HandshakeSerializerTest") +class ClientLoginAckSerializerTest { + @Test + fun testSimple() = handshakeSerializerTest( + HandshakeMessage.ClientLoginAck, + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x07u, 0x4Du, 0x73u, 0x67u, + 0x54u, 0x79u, 0x70u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x1Cu, 0x00u, 0x43u, 0x00u, + 0x6Cu, 0x00u, 0x69u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x4Cu, 0x00u, 0x6Fu, 0x00u, 0x67u, 0x00u, + 0x69u, 0x00u, 0x6Eu, 0x00u, 0x41u, 0x00u, 0x63u, 0x00u, 0x6Bu, + ) + ) +} diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/ClientLoginRejectSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/ClientLoginRejectSerializerTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..823d8ccce63055326fe65b0779ae577047ade7fb --- /dev/null +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/ClientLoginRejectSerializerTest.kt @@ -0,0 +1,105 @@ +/* + * Quasseldroid - Quassel client for Android + * + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3 as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.justjanne.libquassel.protocol.serializers.handshake + +import de.justjanne.libquassel.protocol.models.HandshakeMessage +import de.justjanne.libquassel.protocol.testutil.byteBufferOf +import de.justjanne.libquassel.protocol.testutil.handshakeSerializerTest +import org.junit.jupiter.api.Tag +import org.junit.jupiter.api.Test + +@Tag("HandshakeSerializerTest") +class ClientLoginRejectSerializerTest { + @Test + fun testEmptyMap() = handshakeSerializerTest( + HandshakeMessage.ClientLoginReject( + errorString = null + ), + byteBufferOf( + // 4 elements + 0x00u, 0x00u, 0x00u, 0x02u, + // ByteBuffer + 0x00u, 0x00u, 0x00u, 0x0Cu, + 0x00u, + // 7 bytes + 0x00u, 0x00u, 0x00u, 0x07u, + // MsgType + 0x4Du, 0x73u, 0x67u, 0x54u, 0x79u, 0x70u, 0x65u, + // String + 0x00u, 0x00u, 0x00u, 0x0Au, + 0x00u, + // 17 2-byte chars + 0x00u, 0x00u, 0x00u, 0x22u, + // ClientLoginReject + 0x00u, 0x43u, 0x00u, 0x6Cu, 0x00u, 0x69u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x4Cu, 0x00u, 0x6Fu, + 0x00u, 0x67u, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x6Au, 0x00u, 0x65u, 0x00u, 0x63u, + 0x00u, 0x74u, + ), + featureSets = emptyList(), + serializeFeatureSet = null + ) + + @Test + fun testEmpty() = handshakeSerializerTest( + HandshakeMessage.ClientLoginReject( + errorString = null + ), + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x04u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x07u, 0x4Du, 0x73u, 0x67u, + 0x54u, 0x79u, 0x70u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x22u, 0x00u, 0x43u, 0x00u, + 0x6Cu, 0x00u, 0x69u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x4Cu, 0x00u, 0x6Fu, 0x00u, 0x67u, 0x00u, + 0x69u, 0x00u, 0x6Eu, 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x6Au, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x74u, 0x00u, + 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x05u, 0x45u, 0x72u, 0x72u, 0x6Fu, 0x72u, 0x00u, 0x00u, 0x00u, + 0x0Au, 0x00u, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + ) + ) + + @Test + fun testSimple() = handshakeSerializerTest( + HandshakeMessage.ClientInitReject( + errorString = "hm. I've lost a machine.. literally _lost_. it responds to ping, it works completely, I just " + + "can't figure out where in my apartment it is." + ), + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x04u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x07u, 0x4Du, 0x73u, 0x67u, + 0x54u, 0x79u, 0x70u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x20u, 0x00u, 0x43u, 0x00u, + 0x6Cu, 0x00u, 0x69u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x49u, 0x00u, 0x6Eu, 0x00u, 0x69u, 0x00u, + 0x74u, 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x6Au, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, + 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x05u, 0x45u, 0x72u, 0x72u, 0x6Fu, 0x72u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, + 0x00u, 0x00u, 0x01u, 0x14u, 0x00u, 0x68u, 0x00u, 0x6Du, 0x00u, 0x2Eu, 0x00u, 0x20u, 0x00u, 0x49u, 0x00u, 0x27u, + 0x00u, 0x76u, 0x00u, 0x65u, 0x00u, 0x20u, 0x00u, 0x6Cu, 0x00u, 0x6Fu, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x20u, + 0x00u, 0x61u, 0x00u, 0x20u, 0x00u, 0x6Du, 0x00u, 0x61u, 0x00u, 0x63u, 0x00u, 0x68u, 0x00u, 0x69u, 0x00u, 0x6Eu, + 0x00u, 0x65u, 0x00u, 0x2Eu, 0x00u, 0x2Eu, 0x00u, 0x20u, 0x00u, 0x6Cu, 0x00u, 0x69u, 0x00u, 0x74u, 0x00u, 0x65u, + 0x00u, 0x72u, 0x00u, 0x61u, 0x00u, 0x6Cu, 0x00u, 0x6Cu, 0x00u, 0x79u, 0x00u, 0x20u, 0x00u, 0x5Fu, 0x00u, 0x6Cu, + 0x00u, 0x6Fu, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x5Fu, 0x00u, 0x2Eu, 0x00u, 0x20u, 0x00u, 0x69u, 0x00u, 0x74u, + 0x00u, 0x20u, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x70u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x64u, + 0x00u, 0x73u, 0x00u, 0x20u, 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, 0x20u, 0x00u, 0x70u, 0x00u, 0x69u, 0x00u, 0x6Eu, + 0x00u, 0x67u, 0x00u, 0x2Cu, 0x00u, 0x20u, 0x00u, 0x69u, 0x00u, 0x74u, 0x00u, 0x20u, 0x00u, 0x77u, 0x00u, 0x6Fu, + 0x00u, 0x72u, 0x00u, 0x6Bu, 0x00u, 0x73u, 0x00u, 0x20u, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x6Du, 0x00u, 0x70u, + 0x00u, 0x6Cu, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, 0x79u, 0x00u, 0x2Cu, 0x00u, 0x20u, + 0x00u, 0x49u, 0x00u, 0x20u, 0x00u, 0x6Au, 0x00u, 0x75u, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x20u, 0x00u, 0x63u, + 0x00u, 0x61u, 0x00u, 0x6Eu, 0x00u, 0x27u, 0x00u, 0x74u, 0x00u, 0x20u, 0x00u, 0x66u, 0x00u, 0x69u, 0x00u, 0x67u, + 0x00u, 0x75u, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x20u, 0x00u, 0x6Fu, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x20u, + 0x00u, 0x77u, 0x00u, 0x68u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x20u, 0x00u, 0x69u, 0x00u, 0x6Eu, + 0x00u, 0x20u, 0x00u, 0x6Du, 0x00u, 0x79u, 0x00u, 0x20u, 0x00u, 0x61u, 0x00u, 0x70u, 0x00u, 0x61u, 0x00u, 0x72u, + 0x00u, 0x74u, 0x00u, 0x6Du, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x20u, 0x00u, 0x69u, 0x00u, 0x74u, + 0x00u, 0x20u, 0x00u, 0x69u, 0x00u, 0x73u, 0x00u, 0x2Eu, + ) + ) +} diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/ClientLoginSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/ClientLoginSerializerTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..a11054208ab2508987f998c9c9f79c7604836525 --- /dev/null +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/ClientLoginSerializerTest.kt @@ -0,0 +1,92 @@ +/* + * Quasseldroid - Quassel client for Android + * + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3 as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.justjanne.libquassel.protocol.serializers.handshake + +import de.justjanne.libquassel.protocol.models.HandshakeMessage +import de.justjanne.libquassel.protocol.testutil.byteBufferOf +import de.justjanne.libquassel.protocol.testutil.handshakeSerializerTest +import org.junit.jupiter.api.Tag +import org.junit.jupiter.api.Test + +@Tag("HandshakeSerializerTest") +class ClientLoginSerializerTest { + @Test + fun testEmptyMap() = handshakeSerializerTest( + HandshakeMessage.ClientLogin( + user = null, + password = null + ), + byteBufferOf( + // 4 elements + 0x00u, 0x00u, 0x00u, 0x02u, + // ByteBuffer + 0x00u, 0x00u, 0x00u, 0x0Cu, + 0x00u, + // 7 bytes + 0x00u, 0x00u, 0x00u, 0x07u, + // MsgType + 0x4Du, 0x73u, 0x67u, 0x54u, 0x79u, 0x70u, 0x65u, + // String + 0x00u, 0x00u, 0x00u, 0x0Au, + 0x00u, + // 11 2-byte chars + 0x00u, 0x00u, 0x00u, 0x16u, + 0x00u, 0x43u, 0x00u, 0x6Cu, 0x00u, 0x69u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x4Cu, 0x00u, 0x6Fu, + 0x00u, 0x67u, 0x00u, 0x69u, 0x00u, 0x6Eu, + ), + featureSets = emptyList(), + serializeFeatureSet = null + ) + + @Test + fun testSimple() = handshakeSerializerTest( + HandshakeMessage.ClientLogin( + user = "", + password = "" + ), + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x06u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x07u, 0x4Du, 0x73u, 0x67u, + 0x54u, 0x79u, 0x70u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x16u, 0x00u, 0x43u, 0x00u, + 0x6Cu, 0x00u, 0x69u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x4Cu, 0x00u, 0x6Fu, 0x00u, 0x67u, 0x00u, + 0x69u, 0x00u, 0x6Eu, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x04u, 0x55u, 0x73u, 0x65u, 0x72u, + 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, + 0x00u, 0x08u, 0x50u, 0x61u, 0x73u, 0x73u, 0x77u, 0x6Fu, 0x72u, 0x64u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, + 0x00u, 0x00u, 0x00u, + ) + ) + + @Test + fun testRealistic() = handshakeSerializerTest( + HandshakeMessage.ClientLogin( + user = "AzureDiamond", + password = "hunter2" + ), + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x06u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x07u, 0x4Du, 0x73u, 0x67u, + 0x54u, 0x79u, 0x70u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x16u, 0x00u, 0x43u, 0x00u, + 0x6Cu, 0x00u, 0x69u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x4Cu, 0x00u, 0x6Fu, 0x00u, 0x67u, 0x00u, + 0x69u, 0x00u, 0x6Eu, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x04u, 0x55u, 0x73u, 0x65u, 0x72u, + 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x18u, 0x00u, 0x41u, 0x00u, 0x7Au, 0x00u, 0x75u, 0x00u, + 0x72u, 0x00u, 0x65u, 0x00u, 0x44u, 0x00u, 0x69u, 0x00u, 0x61u, 0x00u, 0x6Du, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, + 0x64u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x08u, 0x50u, 0x61u, 0x73u, 0x73u, 0x77u, 0x6Fu, + 0x72u, 0x64u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Eu, 0x00u, 0x68u, 0x00u, 0x75u, 0x00u, + 0x6Eu, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x32u, + ) + ) +} diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/CoreSetupAckSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/CoreSetupAckSerializerTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..6d514c4ef606e79c74adaedc6e5f4035dc95bf12 --- /dev/null +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/CoreSetupAckSerializerTest.kt @@ -0,0 +1,39 @@ +/* + * Quasseldroid - Quassel client for Android + * + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3 as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.justjanne.libquassel.protocol.serializers.handshake + +import de.justjanne.libquassel.protocol.models.HandshakeMessage +import de.justjanne.libquassel.protocol.testutil.byteBufferOf +import de.justjanne.libquassel.protocol.testutil.handshakeSerializerTest +import org.junit.jupiter.api.Tag +import org.junit.jupiter.api.Test + +@Tag("HandshakeSerializerTest") +class CoreSetupAckSerializerTest { + @Test + fun testSimple() = handshakeSerializerTest( + HandshakeMessage.CoreSetupAck, + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x07u, 0x4Du, 0x73u, 0x67u, + 0x54u, 0x79u, 0x70u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x18u, 0x00u, 0x43u, 0x00u, + 0x6Fu, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x75u, 0x00u, 0x70u, 0x00u, + 0x41u, 0x00u, 0x63u, 0x00u, 0x6Bu, + ) + ) +} diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/CoreSetupDataSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/CoreSetupDataSerializerTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..0058ceaf36ce4a5c21c681f7933e907ec0cf70a9 --- /dev/null +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/CoreSetupDataSerializerTest.kt @@ -0,0 +1,205 @@ +/* + * libquassel + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This Source Code Form is subject to the terms of the Mozilla Public License, + * v. 2.0. If a copy of the MPL was not distributed with this file, You can + * obtain one at https://mozilla.org/MPL/2.0/. + */ + +package de.justjanne.libquassel.protocol.serializers.handshake + +import de.justjanne.libquassel.protocol.models.HandshakeMessage +import de.justjanne.libquassel.protocol.models.types.QtType +import de.justjanne.libquassel.protocol.testutil.byteBufferOf +import de.justjanne.libquassel.protocol.testutil.handshakeSerializerTest +import de.justjanne.libquassel.protocol.variant.qVariant +import org.junit.jupiter.api.Tag +import org.junit.jupiter.api.Test + +@Tag("HandshakeSerializerTest") +class CoreSetupDataSerializerTest { + @Test + fun testEmptyMap() = handshakeSerializerTest( + HandshakeMessage.CoreSetupData( + adminUser = null, + adminPassword = null, + backend = null, + setupData = emptyMap(), + authenticator = null, + authSetupData = emptyMap() + ), + byteBufferOf( + // 4 elements + 0x00u, 0x00u, 0x00u, 0x02u, + // ByteBuffer + 0x00u, 0x00u, 0x00u, 0x0Cu, + 0x00u, + // 7 bytes + 0x00u, 0x00u, 0x00u, 0x07u, + // MsgType + 0x4Du, 0x73u, 0x67u, 0x54u, 0x79u, 0x70u, 0x65u, + // String + 0x00u, 0x00u, 0x00u, 0x0Au, + 0x00u, + // 13 2-byte chars + 0x00u, 0x00u, 0x00u, 0x1Au, + // CoreSetupData + 0x00u, 0x43u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x75u, + 0x00u, 0x70u, 0x00u, 0x44u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x61u, + ), + featureSets = emptyList(), + serializeFeatureSet = null + ) + + @Test + fun testEmpty() = handshakeSerializerTest( + HandshakeMessage.CoreSetupData( + adminUser = null, + adminPassword = null, + backend = null, + setupData = emptyMap(), + authenticator = null, + authSetupData = emptyMap() + ), + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x04u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x07u, 0x4Du, 0x73u, 0x67u, + 0x54u, 0x79u, 0x70u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x1Au, 0x00u, 0x43u, 0x00u, + 0x6Fu, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x75u, 0x00u, 0x70u, 0x00u, + 0x44u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x61u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x09u, + 0x53u, 0x65u, 0x74u, 0x75u, 0x70u, 0x44u, 0x61u, 0x74u, 0x61u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x06u, 0x00u, 0x00u, 0x00u, 0x12u, 0x00u, 0x41u, 0x00u, 0x64u, 0x00u, 0x6Du, 0x00u, 0x69u, 0x00u, 0x6Eu, + 0x00u, 0x55u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0x00u, 0x00u, 0x00u, 0x16u, 0x00u, 0x41u, 0x00u, 0x64u, 0x00u, 0x6Du, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, + 0x50u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x77u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0x00u, 0x00u, 0x00u, 0x0Eu, 0x00u, 0x42u, 0x00u, 0x61u, 0x00u, 0x63u, 0x00u, 0x6Bu, + 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0x00u, + 0x00u, 0x00u, 0x28u, 0x00u, 0x43u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, + 0x74u, 0x00u, 0x69u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x50u, 0x00u, 0x72u, 0x00u, 0x6Fu, 0x00u, 0x70u, 0x00u, + 0x65u, 0x00u, 0x72u, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x1Au, 0x00u, 0x41u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x68u, + 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x63u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x6Fu, + 0x00u, 0x72u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0x00u, 0x00u, 0x00u, 0x1Cu, 0x00u, + 0x41u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x68u, 0x00u, 0x50u, 0x00u, 0x72u, 0x00u, 0x6Fu, 0x00u, 0x70u, 0x00u, + 0x65u, 0x00u, 0x72u, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, + ) + ) + + @Test + fun testSimple() = handshakeSerializerTest( + HandshakeMessage.CoreSetupData( + adminUser = "AzureDiamond", + adminPassword = "hunter2", + backend = "SQLite", + setupData = emptyMap(), + authenticator = "Database", + authSetupData = emptyMap() + ), + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x04u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x07u, 0x4Du, 0x73u, 0x67u, + 0x54u, 0x79u, 0x70u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x1Au, 0x00u, 0x43u, 0x00u, + 0x6Fu, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x75u, 0x00u, 0x70u, 0x00u, + 0x44u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x61u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x09u, + 0x53u, 0x65u, 0x74u, 0x75u, 0x70u, 0x44u, 0x61u, 0x74u, 0x61u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x06u, 0x00u, 0x00u, 0x00u, 0x12u, 0x00u, 0x41u, 0x00u, 0x64u, 0x00u, 0x6Du, 0x00u, 0x69u, 0x00u, 0x6Eu, + 0x00u, 0x55u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, + 0x18u, 0x00u, 0x41u, 0x00u, 0x7Au, 0x00u, 0x75u, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x44u, 0x00u, 0x69u, 0x00u, + 0x61u, 0x00u, 0x6Du, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x16u, 0x00u, 0x41u, 0x00u, + 0x64u, 0x00u, 0x6Du, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x50u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, + 0x77u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Eu, 0x00u, 0x68u, 0x00u, 0x75u, + 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x32u, 0x00u, 0x00u, 0x00u, 0x0Eu, 0x00u, 0x42u, + 0x00u, 0x61u, 0x00u, 0x63u, 0x00u, 0x6Bu, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x0Au, + 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x53u, 0x00u, 0x51u, 0x00u, 0x4Cu, 0x00u, 0x69u, 0x00u, 0x74u, 0x00u, + 0x65u, 0x00u, 0x00u, 0x00u, 0x28u, 0x00u, 0x43u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, + 0x63u, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x50u, 0x00u, 0x72u, 0x00u, 0x6Fu, 0x00u, + 0x70u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, + 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x1Au, 0x00u, 0x41u, 0x00u, 0x75u, 0x00u, 0x74u, + 0x00u, 0x68u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x63u, 0x00u, 0x61u, 0x00u, 0x74u, + 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x44u, 0x00u, + 0x61u, 0x00u, 0x74u, 0x00u, 0x61u, 0x00u, 0x62u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, + 0x1Cu, 0x00u, 0x41u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x68u, 0x00u, 0x50u, 0x00u, 0x72u, 0x00u, 0x6Fu, 0x00u, + 0x70u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, + 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + ) + ) + + @Test + fun testRealistic() = handshakeSerializerTest( + HandshakeMessage.CoreSetupData( + adminUser = "AzureDiamond", + adminPassword = "hunter2", + backend = "PostgreSQL", + setupData = mapOf( + "Username" to qVariant("quassel", QtType.QString), + "Password" to qVariant<String?>(null, QtType.QString), + "Hostname" to qVariant("localhost", QtType.QString), + "Port" to qVariant(5432, QtType.Int), + "Database" to qVariant("quassel", QtType.QString), + ), + authenticator = "LDAP", + authSetupData = mapOf( + "Hostname" to qVariant("ldap://localhost", QtType.QString), + "Port" to qVariant(389, QtType.Int), + "BindDN" to qVariant<String?>(null, QtType.QString), + "BindPassword" to qVariant<String?>(null, QtType.QString), + "BaseDN" to qVariant<String?>(null, QtType.QString), + "Filter" to qVariant<String?>(null, QtType.QString), + "UidAttribute" to qVariant("uid", QtType.QString), + ) + ), + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x04u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x07u, 0x4Du, 0x73u, 0x67u, + 0x54u, 0x79u, 0x70u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x1Au, 0x00u, 0x43u, 0x00u, + 0x6Fu, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x75u, 0x00u, 0x70u, 0x00u, + 0x44u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x61u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x09u, + 0x53u, 0x65u, 0x74u, 0x75u, 0x70u, 0x44u, 0x61u, 0x74u, 0x61u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x06u, 0x00u, 0x00u, 0x00u, 0x12u, 0x00u, 0x41u, 0x00u, 0x64u, 0x00u, 0x6Du, 0x00u, 0x69u, 0x00u, 0x6Eu, + 0x00u, 0x55u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, + 0x18u, 0x00u, 0x41u, 0x00u, 0x7Au, 0x00u, 0x75u, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x44u, 0x00u, 0x69u, 0x00u, + 0x61u, 0x00u, 0x6Du, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x16u, 0x00u, 0x41u, 0x00u, + 0x64u, 0x00u, 0x6Du, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x50u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, + 0x77u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Eu, 0x00u, 0x68u, 0x00u, 0x75u, + 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x32u, 0x00u, 0x00u, 0x00u, 0x0Eu, 0x00u, 0x42u, + 0x00u, 0x61u, 0x00u, 0x63u, 0x00u, 0x6Bu, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x0Au, + 0x00u, 0x00u, 0x00u, 0x00u, 0x14u, 0x00u, 0x50u, 0x00u, 0x6Fu, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x67u, 0x00u, + 0x72u, 0x00u, 0x65u, 0x00u, 0x53u, 0x00u, 0x51u, 0x00u, 0x4Cu, 0x00u, 0x00u, 0x00u, 0x28u, 0x00u, 0x43u, 0x00u, + 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x6Fu, 0x00u, + 0x6Eu, 0x00u, 0x50u, 0x00u, 0x72u, 0x00u, 0x6Fu, 0x00u, 0x70u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x74u, 0x00u, + 0x69u, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x05u, 0x00u, 0x00u, + 0x00u, 0x10u, 0x00u, 0x55u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x6Eu, 0x00u, 0x61u, 0x00u, 0x6Du, + 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Eu, 0x00u, 0x71u, 0x00u, 0x75u, 0x00u, + 0x61u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x50u, 0x00u, + 0x61u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x77u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, + 0x0Au, 0x00u, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x48u, 0x00u, 0x6Fu, 0x00u, 0x73u, + 0x00u, 0x74u, 0x00u, 0x6Eu, 0x00u, 0x61u, 0x00u, 0x6Du, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, + 0x00u, 0x00u, 0x12u, 0x00u, 0x6Cu, 0x00u, 0x6Fu, 0x00u, 0x63u, 0x00u, 0x61u, 0x00u, 0x6Cu, 0x00u, 0x68u, 0x00u, + 0x6Fu, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x50u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, + 0x74u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x15u, 0x38u, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x44u, + 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x61u, 0x00u, 0x62u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x00u, + 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Eu, 0x00u, 0x71u, 0x00u, 0x75u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, + 0x73u, 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, 0x00u, 0x00u, 0x1Au, 0x00u, 0x41u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, + 0x68u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x63u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, + 0x6Fu, 0x00u, 0x72u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x4Cu, 0x00u, 0x44u, + 0x00u, 0x41u, 0x00u, 0x50u, 0x00u, 0x00u, 0x00u, 0x1Cu, 0x00u, 0x41u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x68u, + 0x00u, 0x50u, 0x00u, 0x72u, 0x00u, 0x6Fu, 0x00u, 0x70u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x74u, 0x00u, 0x69u, + 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x07u, 0x00u, 0x00u, 0x00u, + 0x10u, 0x00u, 0x48u, 0x00u, 0x6Fu, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x6Eu, 0x00u, 0x61u, 0x00u, 0x6Du, 0x00u, + 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x20u, 0x00u, 0x6Cu, 0x00u, 0x64u, 0x00u, 0x61u, + 0x00u, 0x70u, 0x00u, 0x3Au, 0x00u, 0x2Fu, 0x00u, 0x2Fu, 0x00u, 0x6Cu, 0x00u, 0x6Fu, 0x00u, 0x63u, 0x00u, 0x61u, + 0x00u, 0x6Cu, 0x00u, 0x68u, 0x00u, 0x6Fu, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x50u, + 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x01u, 0x85u, 0x00u, + 0x00u, 0x00u, 0x0Cu, 0x00u, 0x42u, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x64u, 0x00u, 0x44u, 0x00u, 0x4Eu, 0x00u, + 0x00u, 0x00u, 0x0Au, 0x00u, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0x00u, 0x00u, 0x00u, 0x18u, 0x00u, 0x42u, 0x00u, 0x69u, + 0x00u, 0x6Eu, 0x00u, 0x64u, 0x00u, 0x50u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x77u, 0x00u, 0x6Fu, + 0x00u, 0x72u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0x00u, 0x00u, 0x00u, + 0x0Cu, 0x00u, 0x42u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x44u, 0x00u, 0x4Eu, 0x00u, 0x00u, 0x00u, + 0x0Au, 0x00u, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x46u, 0x00u, 0x69u, 0x00u, 0x6Cu, + 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0x00u, + 0x00u, 0x00u, 0x18u, 0x00u, 0x55u, 0x00u, 0x69u, 0x00u, 0x64u, 0x00u, 0x41u, 0x00u, 0x74u, 0x00u, 0x74u, 0x00u, + 0x72u, 0x00u, 0x69u, 0x00u, 0x62u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, + 0x00u, 0x00u, 0x00u, 0x06u, 0x00u, 0x75u, 0x00u, 0x69u, 0x00u, 0x64u, + ) + ) +} diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/CoreSetupRejectSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/CoreSetupRejectSerializerTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..5ad89bf831a808e9bdb64fc941872a2184b27688 --- /dev/null +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/CoreSetupRejectSerializerTest.kt @@ -0,0 +1,104 @@ +/* + * Quasseldroid - Quassel client for Android + * + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3 as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.justjanne.libquassel.protocol.serializers.handshake + +import de.justjanne.libquassel.protocol.models.HandshakeMessage +import de.justjanne.libquassel.protocol.testutil.byteBufferOf +import de.justjanne.libquassel.protocol.testutil.handshakeSerializerTest +import org.junit.jupiter.api.Tag +import org.junit.jupiter.api.Test + +@Tag("HandshakeSerializerTest") +class CoreSetupRejectSerializerTest { + @Test + fun testEmptyMap() = handshakeSerializerTest( + HandshakeMessage.CoreSetupReject( + errorString = null + ), + byteBufferOf( + // 4 elements + 0x00u, 0x00u, 0x00u, 0x02u, + // ByteBuffer + 0x00u, 0x00u, 0x00u, 0x0Cu, + 0x00u, + // 7 bytes + 0x00u, 0x00u, 0x00u, 0x07u, + // MsgType + 0x4Du, 0x73u, 0x67u, 0x54u, 0x79u, 0x70u, 0x65u, + // String + 0x00u, 0x00u, 0x00u, 0x0Au, + 0x00u, + // 15 2-byte chars + 0x00u, 0x00u, 0x00u, 0x1Eu, + // CoreSetupReject + 0x00u, 0x43u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x75u, + 0x00u, 0x70u, 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x6Au, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x74u, + ), + featureSets = emptyList(), + serializeFeatureSet = null + ) + + @Test + fun testEmpty() = handshakeSerializerTest( + HandshakeMessage.CoreSetupReject( + errorString = null + ), + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x04u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x07u, 0x4Du, 0x73u, 0x67u, + 0x54u, 0x79u, 0x70u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x1Eu, 0x00u, 0x43u, 0x00u, + 0x6Fu, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x75u, 0x00u, 0x70u, 0x00u, + 0x52u, 0x00u, 0x65u, 0x00u, 0x6Au, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, + 0x00u, 0x00u, 0x00u, 0x05u, 0x45u, 0x72u, 0x72u, 0x6Fu, 0x72u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0xFFu, 0xFFu, + 0xFFu, 0xFFu, + ) + ) + + @Test + fun testSimple() = handshakeSerializerTest( + HandshakeMessage.CoreSetupReject( + errorString = "hm. I've lost a machine.. literally _lost_. it responds to ping, it works completely, I just " + + "can't figure out where in my apartment it is." + ), + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x04u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x07u, 0x4Du, 0x73u, 0x67u, + 0x54u, 0x79u, 0x70u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x1Eu, 0x00u, 0x43u, 0x00u, + 0x6Fu, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x75u, 0x00u, 0x70u, 0x00u, + 0x52u, 0x00u, 0x65u, 0x00u, 0x6Au, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, + 0x00u, 0x00u, 0x00u, 0x05u, 0x45u, 0x72u, 0x72u, 0x6Fu, 0x72u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, + 0x01u, 0x14u, 0x00u, 0x68u, 0x00u, 0x6Du, 0x00u, 0x2Eu, 0x00u, 0x20u, 0x00u, 0x49u, 0x00u, 0x27u, 0x00u, 0x76u, + 0x00u, 0x65u, 0x00u, 0x20u, 0x00u, 0x6Cu, 0x00u, 0x6Fu, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x20u, 0x00u, 0x61u, + 0x00u, 0x20u, 0x00u, 0x6Du, 0x00u, 0x61u, 0x00u, 0x63u, 0x00u, 0x68u, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x65u, + 0x00u, 0x2Eu, 0x00u, 0x2Eu, 0x00u, 0x20u, 0x00u, 0x6Cu, 0x00u, 0x69u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x72u, + 0x00u, 0x61u, 0x00u, 0x6Cu, 0x00u, 0x6Cu, 0x00u, 0x79u, 0x00u, 0x20u, 0x00u, 0x5Fu, 0x00u, 0x6Cu, 0x00u, 0x6Fu, + 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x5Fu, 0x00u, 0x2Eu, 0x00u, 0x20u, 0x00u, 0x69u, 0x00u, 0x74u, 0x00u, 0x20u, + 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x70u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x64u, 0x00u, 0x73u, + 0x00u, 0x20u, 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, 0x20u, 0x00u, 0x70u, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x67u, + 0x00u, 0x2Cu, 0x00u, 0x20u, 0x00u, 0x69u, 0x00u, 0x74u, 0x00u, 0x20u, 0x00u, 0x77u, 0x00u, 0x6Fu, 0x00u, 0x72u, + 0x00u, 0x6Bu, 0x00u, 0x73u, 0x00u, 0x20u, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x6Du, 0x00u, 0x70u, 0x00u, 0x6Cu, + 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, 0x79u, 0x00u, 0x2Cu, 0x00u, 0x20u, 0x00u, 0x49u, + 0x00u, 0x20u, 0x00u, 0x6Au, 0x00u, 0x75u, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x20u, 0x00u, 0x63u, 0x00u, 0x61u, + 0x00u, 0x6Eu, 0x00u, 0x27u, 0x00u, 0x74u, 0x00u, 0x20u, 0x00u, 0x66u, 0x00u, 0x69u, 0x00u, 0x67u, 0x00u, 0x75u, + 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x20u, 0x00u, 0x6Fu, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x20u, 0x00u, 0x77u, + 0x00u, 0x68u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x20u, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x20u, + 0x00u, 0x6Du, 0x00u, 0x79u, 0x00u, 0x20u, 0x00u, 0x61u, 0x00u, 0x70u, 0x00u, 0x61u, 0x00u, 0x72u, 0x00u, 0x74u, + 0x00u, 0x6Du, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x20u, 0x00u, 0x69u, 0x00u, 0x74u, 0x00u, 0x20u, + 0x00u, 0x69u, 0x00u, 0x73u, 0x00u, 0x2Eu, + ) + ) +} diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/SessionInitSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/SessionInitSerializerTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..a4c7a222295738f00896182d2bd766c523180490 --- /dev/null +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/SessionInitSerializerTest.kt @@ -0,0 +1,209 @@ +/* + * Quasseldroid - Quassel client for Android + * + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3 as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.justjanne.libquassel.protocol.serializers.handshake + +import de.justjanne.bitflags.of +import de.justjanne.libquassel.protocol.models.BufferInfo +import de.justjanne.libquassel.protocol.models.HandshakeMessage +import de.justjanne.libquassel.protocol.models.flags.BufferType +import de.justjanne.libquassel.protocol.models.ids.BufferId +import de.justjanne.libquassel.protocol.models.ids.IdentityId +import de.justjanne.libquassel.protocol.models.ids.NetworkId +import de.justjanne.libquassel.protocol.syncables.Identity +import de.justjanne.libquassel.protocol.syncables.state.IdentityState +import de.justjanne.libquassel.protocol.testutil.byteBufferOf +import de.justjanne.libquassel.protocol.testutil.handshakeSerializerTest +import org.junit.jupiter.api.Tag +import org.junit.jupiter.api.Test + +@Tag("HandshakeSerializerTest") +class SessionInitSerializerTest { + + @Test + fun testEmptyMap() = handshakeSerializerTest( + HandshakeMessage.SessionInit( + identities = emptyList(), + bufferInfos = emptyList(), + networkIds = emptyList() + ), + byteBufferOf( + // 4 elements + 0x00u, 0x00u, 0x00u, 0x02u, + // ByteBuffer + 0x00u, 0x00u, 0x00u, 0x0Cu, + 0x00u, + // 7 bytes + 0x00u, 0x00u, 0x00u, 0x07u, + // MsgType + 0x4Du, 0x73u, 0x67u, 0x54u, 0x79u, 0x70u, 0x65u, + // String + 0x00u, 0x00u, 0x00u, 0x0Au, + 0x00u, + // 11 2-byte chars + 0x00u, 0x00u, 0x00u, 0x16u, + 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x69u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x49u, + 0x00u, 0x6Eu, 0x00u, 0x69u, 0x00u, 0x74u, + ), + featureSets = emptyList(), + serializeFeatureSet = null + ) + + @Test + fun testSimple() = handshakeSerializerTest( + HandshakeMessage.SessionInit( + identities = emptyList(), + bufferInfos = emptyList(), + networkIds = emptyList() + ), + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x04u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x07u, 0x4Du, 0x73u, 0x67u, + 0x54u, 0x79u, 0x70u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x16u, 0x00u, 0x53u, 0x00u, + 0x65u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x69u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x49u, 0x00u, 0x6Eu, 0x00u, + 0x69u, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x53u, 0x65u, 0x73u, 0x73u, + 0x69u, 0x6Fu, 0x6Eu, 0x53u, 0x74u, 0x61u, 0x74u, 0x65u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x03u, 0x00u, 0x00u, 0x00u, 0x16u, 0x00u, 0x42u, 0x00u, 0x75u, 0x00u, 0x66u, 0x00u, 0x66u, 0x00u, 0x65u, 0x00u, + 0x72u, 0x00u, 0x49u, 0x00u, 0x6Eu, 0x00u, 0x66u, 0x00u, 0x6Fu, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x09u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x14u, 0x00u, 0x4Eu, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x77u, + 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x6Bu, 0x00u, 0x49u, 0x00u, 0x64u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x09u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x14u, 0x00u, 0x49u, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, + 0x6Eu, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, + 0x09u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + ) + ) + + @Test + fun testRealistic() = handshakeSerializerTest( + HandshakeMessage.SessionInit( + identities = listOf( + Identity( + state = IdentityState( + identityId = IdentityId(1) + ) + ).toVariantMap() + ), + bufferInfos = listOf( + BufferInfo( + networkId = NetworkId(4), + bufferId = BufferId(1337), + bufferName = "#quassel", + type = BufferType.of(BufferType.Channel), + ) + ), + networkIds = listOf( + NetworkId(4) + ) + ), + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x04u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x07u, 0x4Du, 0x73u, 0x67u, + 0x54u, 0x79u, 0x70u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x16u, 0x00u, 0x53u, 0x00u, + 0x65u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x69u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x49u, 0x00u, 0x6Eu, 0x00u, + 0x69u, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x53u, 0x65u, 0x73u, 0x73u, + 0x69u, 0x6Fu, 0x6Eu, 0x53u, 0x74u, 0x61u, 0x74u, 0x65u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x03u, 0x00u, 0x00u, 0x00u, 0x16u, 0x00u, 0x42u, 0x00u, 0x75u, 0x00u, 0x66u, 0x00u, 0x66u, 0x00u, 0x65u, 0x00u, + 0x72u, 0x00u, 0x49u, 0x00u, 0x6Eu, 0x00u, 0x66u, 0x00u, 0x6Fu, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x09u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x7Fu, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Bu, 0x42u, 0x75u, 0x66u, + 0x66u, 0x65u, 0x72u, 0x49u, 0x6Eu, 0x66u, 0x6Fu, 0x00u, 0x00u, 0x00u, 0x05u, 0x39u, 0x00u, 0x00u, 0x00u, 0x04u, + 0x00u, 0x02u, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0x00u, 0x00u, 0x00u, 0x08u, 0x23u, 0x71u, 0x75u, 0x61u, 0x73u, 0x73u, + 0x65u, 0x6Cu, 0x00u, 0x00u, 0x00u, 0x14u, 0x00u, 0x4Eu, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x77u, 0x00u, 0x6Fu, + 0x00u, 0x72u, 0x00u, 0x6Bu, 0x00u, 0x49u, 0x00u, 0x64u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x09u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x7Fu, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x4Eu, 0x65u, 0x74u, 0x77u, + 0x6Fu, 0x72u, 0x6Bu, 0x49u, 0x64u, 0x00u, 0x00u, 0x00u, 0x00u, 0x04u, 0x00u, 0x00u, 0x00u, 0x14u, 0x00u, 0x49u, + 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x65u, + 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x09u, 0x00u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x7Fu, 0x00u, + 0x00u, 0x00u, 0x00u, 0x09u, 0x49u, 0x64u, 0x65u, 0x6Eu, 0x74u, 0x69u, 0x74u, 0x79u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x13u, 0x00u, 0x00u, 0x00u, 0x14u, 0x00u, 0x69u, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, + 0x69u, 0x00u, 0x74u, 0x00u, 0x79u, 0x00u, 0x49u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x7Fu, 0x00u, 0x00u, 0x00u, + 0x00u, 0x0Bu, 0x49u, 0x64u, 0x65u, 0x6Eu, 0x74u, 0x69u, 0x74u, 0x79u, 0x49u, 0x64u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x01u, 0x00u, 0x00u, 0x00u, 0x18u, 0x00u, 0x69u, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, + 0x69u, 0x00u, 0x74u, 0x00u, 0x79u, 0x00u, 0x4Eu, 0x00u, 0x61u, 0x00u, 0x6Du, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, + 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Eu, 0x00u, 0x3Cu, 0x00u, 0x65u, 0x00u, 0x6Du, 0x00u, 0x70u, 0x00u, 0x74u, + 0x00u, 0x79u, 0x00u, 0x3Eu, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x61u, 0x00u, 0x6Cu, + 0x00u, 0x4Eu, 0x00u, 0x61u, 0x00u, 0x6Du, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x6Eu, 0x00u, 0x69u, 0x00u, 0x63u, 0x00u, 0x6Bu, 0x00u, 0x73u, 0x00u, + 0x00u, 0x00u, 0x0Bu, 0x00u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x0Eu, 0x00u, 0x71u, 0x00u, 0x75u, + 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x61u, + 0x00u, 0x77u, 0x00u, 0x61u, 0x00u, 0x79u, 0x00u, 0x4Eu, 0x00u, 0x69u, 0x00u, 0x63u, 0x00u, 0x6Bu, 0x00u, 0x00u, + 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x1Eu, 0x00u, 0x61u, 0x00u, 0x77u, 0x00u, + 0x61u, 0x00u, 0x79u, 0x00u, 0x4Eu, 0x00u, 0x69u, 0x00u, 0x63u, 0x00u, 0x6Bu, 0x00u, 0x45u, 0x00u, 0x6Eu, 0x00u, + 0x61u, 0x00u, 0x62u, 0x00u, 0x6Cu, 0x00u, 0x65u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x14u, 0x00u, 0x61u, 0x00u, 0x77u, 0x00u, 0x61u, 0x00u, 0x79u, 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, + 0x61u, 0x00u, 0x73u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x1Au, + 0x00u, 0x47u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x20u, 0x00u, 0x66u, 0x00u, 0x69u, 0x00u, 0x73u, + 0x00u, 0x68u, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x67u, 0x00u, 0x2Eu, 0x00u, 0x00u, 0x00u, 0x22u, 0x00u, 0x61u, + 0x00u, 0x77u, 0x00u, 0x61u, 0x00u, 0x79u, 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x6Fu, + 0x00u, 0x6Eu, 0x00u, 0x45u, 0x00u, 0x6Eu, 0x00u, 0x61u, 0x00u, 0x62u, 0x00u, 0x6Cu, 0x00u, 0x65u, 0x00u, 0x64u, + 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x1Eu, 0x00u, 0x61u, 0x00u, 0x75u, 0x00u, 0x74u, + 0x00u, 0x6Fu, 0x00u, 0x41u, 0x00u, 0x77u, 0x00u, 0x61u, 0x00u, 0x79u, 0x00u, 0x45u, 0x00u, 0x6Eu, 0x00u, 0x61u, + 0x00u, 0x62u, 0x00u, 0x6Cu, 0x00u, 0x65u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x18u, 0x00u, 0x61u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, 0x41u, 0x00u, 0x77u, 0x00u, 0x61u, + 0x00u, 0x79u, 0x00u, 0x54u, 0x00u, 0x69u, 0x00u, 0x6Du, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x1Cu, 0x00u, 0x61u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, + 0x41u, 0x00u, 0x77u, 0x00u, 0x61u, 0x00u, 0x79u, 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, + 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x3Cu, 0x00u, 0x4Eu, 0x00u, 0x6Fu, + 0x00u, 0x74u, 0x00u, 0x20u, 0x00u, 0x68u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x2Eu, 0x00u, 0x20u, + 0x00u, 0x4Eu, 0x00u, 0x6Fu, 0x00u, 0x20u, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x61u, 0x00u, 0x6Cu, 0x00u, 0x6Cu, + 0x00u, 0x79u, 0x00u, 0x2Eu, 0x00u, 0x20u, 0x00u, 0x6Eu, 0x00u, 0x6Fu, 0x00u, 0x74u, 0x00u, 0x20u, 0x00u, 0x68u, + 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x21u, 0x00u, 0x00u, 0x00u, 0x2Au, 0x00u, 0x61u, 0x00u, 0x75u, + 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, 0x41u, 0x00u, 0x77u, 0x00u, 0x61u, 0x00u, 0x79u, 0x00u, 0x52u, 0x00u, 0x65u, + 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x45u, 0x00u, 0x6Eu, 0x00u, 0x61u, 0x00u, 0x62u, + 0x00u, 0x6Cu, 0x00u, 0x65u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x22u, + 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x61u, 0x00u, 0x63u, 0x00u, 0x68u, 0x00u, 0x41u, 0x00u, 0x77u, + 0x00u, 0x61u, 0x00u, 0x79u, 0x00u, 0x45u, 0x00u, 0x6Eu, 0x00u, 0x61u, 0x00u, 0x62u, 0x00u, 0x6Cu, 0x00u, 0x65u, + 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x20u, 0x00u, 0x64u, 0x00u, 0x65u, + 0x00u, 0x74u, 0x00u, 0x61u, 0x00u, 0x63u, 0x00u, 0x68u, 0x00u, 0x41u, 0x00u, 0x77u, 0x00u, 0x61u, 0x00u, 0x79u, + 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x00u, 0x00u, 0x0Au, + 0x00u, 0x00u, 0x00u, 0x00u, 0x74u, 0x00u, 0x41u, 0x00u, 0x6Cu, 0x00u, 0x6Cu, 0x00u, 0x20u, 0x00u, 0x51u, 0x00u, + 0x75u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, 0x20u, 0x00u, 0x63u, 0x00u, + 0x6Cu, 0x00u, 0x69u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x73u, 0x00u, 0x20u, 0x00u, 0x76u, 0x00u, + 0x61u, 0x00u, 0x6Eu, 0x00u, 0x69u, 0x00u, 0x73u, 0x00u, 0x68u, 0x00u, 0x65u, 0x00u, 0x64u, 0x00u, 0x20u, 0x00u, + 0x66u, 0x00u, 0x72u, 0x00u, 0x6Fu, 0x00u, 0x6Du, 0x00u, 0x20u, 0x00u, 0x74u, 0x00u, 0x68u, 0x00u, 0x65u, 0x00u, + 0x20u, 0x00u, 0x66u, 0x00u, 0x61u, 0x00u, 0x63u, 0x00u, 0x65u, 0x00u, 0x20u, 0x00u, 0x6Fu, 0x00u, 0x66u, 0x00u, + 0x20u, 0x00u, 0x74u, 0x00u, 0x68u, 0x00u, 0x65u, 0x00u, 0x20u, 0x00u, 0x65u, 0x00u, 0x61u, 0x00u, 0x72u, 0x00u, + 0x74u, 0x00u, 0x68u, 0x00u, 0x2Eu, 0x00u, 0x2Eu, 0x00u, 0x2Eu, 0x00u, 0x00u, 0x00u, 0x2Eu, 0x00u, 0x64u, 0x00u, + 0x65u, 0x00u, 0x74u, 0x00u, 0x61u, 0x00u, 0x63u, 0x00u, 0x68u, 0x00u, 0x41u, 0x00u, 0x77u, 0x00u, 0x61u, 0x00u, + 0x79u, 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x45u, 0x00u, + 0x6Eu, 0x00u, 0x61u, 0x00u, 0x62u, 0x00u, 0x6Cu, 0x00u, 0x65u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x69u, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, + 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Eu, 0x00u, 0x71u, 0x00u, 0x75u, 0x00u, 0x61u, 0x00u, 0x73u, + 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, 0x00u, 0x00u, 0x14u, 0x00u, 0x6Bu, 0x00u, 0x69u, 0x00u, 0x63u, + 0x00u, 0x6Bu, 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x00u, + 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x34u, 0x00u, 0x4Bu, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x64u, 0x00u, + 0x65u, 0x00u, 0x72u, 0x00u, 0x67u, 0x00u, 0x61u, 0x00u, 0x72u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, + 0x20u, 0x00u, 0x69u, 0x00u, 0x73u, 0x00u, 0x20u, 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, + 0x77u, 0x00u, 0x68u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x21u, 0x00u, 0x00u, 0x00u, 0x14u, 0x00u, + 0x70u, 0x00u, 0x61u, 0x00u, 0x72u, 0x00u, 0x74u, 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, + 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x68u, 0x00u, 0x68u, 0x00u, 0x74u, + 0x00u, 0x74u, 0x00u, 0x70u, 0x00u, 0x3Au, 0x00u, 0x2Fu, 0x00u, 0x2Fu, 0x00u, 0x71u, 0x00u, 0x75u, 0x00u, 0x61u, + 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, 0x2Du, 0x00u, 0x69u, 0x00u, 0x72u, 0x00u, 0x63u, + 0x00u, 0x2Eu, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x67u, 0x00u, 0x20u, 0x00u, 0x2Du, 0x00u, 0x20u, 0x00u, 0x43u, + 0x00u, 0x68u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x20u, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x6Du, 0x00u, 0x66u, + 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x74u, 0x00u, 0x61u, 0x00u, 0x62u, 0x00u, 0x6Cu, 0x00u, 0x79u, 0x00u, 0x2Eu, + 0x00u, 0x20u, 0x00u, 0x41u, 0x00u, 0x6Eu, 0x00u, 0x79u, 0x00u, 0x77u, 0x00u, 0x68u, 0x00u, 0x65u, 0x00u, 0x72u, + 0x00u, 0x65u, 0x00u, 0x2Eu, 0x00u, 0x00u, 0x00u, 0x14u, 0x00u, 0x71u, 0x00u, 0x75u, 0x00u, 0x69u, 0x00u, 0x74u, + 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x00u, 0x00u, 0x0Au, + 0x00u, 0x00u, 0x00u, 0x00u, 0x68u, 0x00u, 0x68u, 0x00u, 0x74u, 0x00u, 0x74u, 0x00u, 0x70u, 0x00u, 0x3Au, 0x00u, + 0x2Fu, 0x00u, 0x2Fu, 0x00u, 0x71u, 0x00u, 0x75u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, + 0x6Cu, 0x00u, 0x2Du, 0x00u, 0x69u, 0x00u, 0x72u, 0x00u, 0x63u, 0x00u, 0x2Eu, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, + 0x67u, 0x00u, 0x20u, 0x00u, 0x2Du, 0x00u, 0x20u, 0x00u, 0x43u, 0x00u, 0x68u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, + 0x20u, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x6Du, 0x00u, 0x66u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x74u, 0x00u, + 0x61u, 0x00u, 0x62u, 0x00u, 0x6Cu, 0x00u, 0x79u, 0x00u, 0x2Eu, 0x00u, 0x20u, 0x00u, 0x41u, 0x00u, 0x6Eu, 0x00u, + 0x79u, 0x00u, 0x77u, 0x00u, 0x68u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x2Eu, + ) + ) +} diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/BoolSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/BoolSerializerTest.kt index 21a99551c6201f10459d26e2b667cc7697afd2b9..263495ae37cc52d2e8c34a90fad8147355df1be8 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/BoolSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/BoolSerializerTest.kt @@ -22,8 +22,10 @@ import de.justjanne.libquassel.protocol.models.types.QtType import de.justjanne.libquassel.protocol.testutil.byteBufferOf import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test +@Tag("QtSerializerTest") class BoolSerializerTest { @Test fun testIsRegistered() { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/ByteBufferSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/ByteBufferSerializerTest.kt index 20917e596e2c744a6fe9c0667e8364d0bac15763..f013a3f8773754f030d5ec3741cc06523d48af58 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/ByteBufferSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/ByteBufferSerializerTest.kt @@ -23,9 +23,11 @@ import de.justjanne.libquassel.protocol.testutil.byteBufferOf import de.justjanne.libquassel.protocol.testutil.matchers.ByteBufferMatcher import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test import java.nio.ByteBuffer +@Tag("QtSerializerTest") class ByteBufferSerializerTest { @Test fun testIsRegistered() { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/ByteSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/ByteSerializerTest.kt index 28548e966f9cf15edac050a2a8fb6f010640d008..4c2e45edfc636482ab1021f396b40ecbb39fbc82 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/ByteSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/ByteSerializerTest.kt @@ -22,9 +22,11 @@ import de.justjanne.libquassel.protocol.models.types.QtType import de.justjanne.libquassel.protocol.testutil.byteBufferOf import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test import kotlin.experimental.inv +@Tag("QtSerializerTest") class ByteSerializerTest { @Test fun testIsRegistered() { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/DoubleSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/DoubleSerializerTest.kt index f3dc9afc086ae86d5b8efb9afef4b748720e4c18..d6ddd7f759ccebbe549fb7810536f05309b55de9 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/DoubleSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/DoubleSerializerTest.kt @@ -22,8 +22,10 @@ import de.justjanne.libquassel.protocol.models.types.QtType import de.justjanne.libquassel.protocol.testutil.byteBufferOf import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test +@Tag("QtSerializerTest") class DoubleSerializerTest { @Test fun testIsRegistered() { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/FloatSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/FloatSerializerTest.kt index 7b6b445be4ce52ae51597b05387ae8c4687f5fc2..da67e26a70cb6a81d97979ae6e0b1ff82ef682dc 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/FloatSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/FloatSerializerTest.kt @@ -22,8 +22,10 @@ import de.justjanne.libquassel.protocol.models.types.QtType import de.justjanne.libquassel.protocol.testutil.byteBufferOf import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test +@Tag("QtSerializerTest") class FloatSerializerTest { @Test fun testIsRegistered() { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/HandshakeMapSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/HandshakeMapSerializerTest.kt index 108d4f544c8cc5c554784822cd25640b42c1efb9..6fa8545ef566db9c0a7754ae4604256467412337 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/HandshakeMapSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/HandshakeMapSerializerTest.kt @@ -24,8 +24,10 @@ import de.justjanne.libquassel.protocol.testutil.matchers.MapMatcher import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest import de.justjanne.libquassel.protocol.variant.qVariant import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test +@Tag("QtSerializerTest") class HandshakeMapSerializerTest { @Test fun testIsRegistered() { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/IntSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/IntSerializerTest.kt index 913163533d98f43a7434cf905691952617c81cdb..33e7ff2f39cdb4c6ebd9c07cb331f1aa57215703 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/IntSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/IntSerializerTest.kt @@ -22,8 +22,10 @@ import de.justjanne.libquassel.protocol.models.types.QtType import de.justjanne.libquassel.protocol.testutil.byteBufferOf import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test +@Tag("QtSerializerTest") class IntSerializerTest { @Test fun testIsRegistered() { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/LongSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/LongSerializerTest.kt index ea5455a6d47002d3a30980b9f8a6be6233f91ee7..e237b819c6286ed314c68e9f491600a3ba8f65fa 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/LongSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/LongSerializerTest.kt @@ -22,8 +22,10 @@ import de.justjanne.libquassel.protocol.models.types.QtType import de.justjanne.libquassel.protocol.testutil.byteBufferOf import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test +@Tag("QtSerializerTest") class LongSerializerTest { @Test fun testIsRegistered() { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QCharSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QCharSerializerTest.kt index 4fa348e859d58e0af99b4ede03c56fdef84ab2b5..e1be2e522600fe6c4903d40f11c3a61e95b494b2 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QCharSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QCharSerializerTest.kt @@ -23,8 +23,10 @@ import de.justjanne.libquassel.protocol.testutil.byteBufferOf import de.justjanne.libquassel.protocol.testutil.matchers.BomMatcherChar import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test +@Tag("QtSerializerTest") class QCharSerializerTest { @Test fun testIsRegistered() { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QDateSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QDateSerializerTest.kt index 02a3b23f21f45c36c18a671a8c11f92ac9dd1ab8..6331aab43ebf5e925a080f0450befd960a889e0c 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QDateSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QDateSerializerTest.kt @@ -23,10 +23,12 @@ import de.justjanne.libquassel.protocol.testutil.byteBufferOf import de.justjanne.libquassel.protocol.testutil.matchers.TemporalMatcher import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test import org.threeten.bp.LocalDate import org.threeten.bp.Month +@Tag("QtSerializerTest") class QDateSerializerTest { @Test fun testIsRegistered() { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QDateTimeSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QDateTimeSerializerTest.kt index 872359bc70c170eb657312152625eabdf07b3504..7e5b6c976f1d2f2886c3469548e44f0f54f1614f 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QDateTimeSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QDateTimeSerializerTest.kt @@ -23,6 +23,7 @@ import de.justjanne.libquassel.protocol.testutil.byteBufferOf import de.justjanne.libquassel.protocol.testutil.matchers.TemporalMatcher import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test import org.junit.jupiter.api.assertThrows import org.threeten.bp.Instant @@ -33,6 +34,7 @@ import org.threeten.bp.ZoneOffset import org.threeten.bp.chrono.JapaneseDate import org.threeten.bp.temporal.Temporal +@Tag("QtSerializerTest") class QDateTimeSerializerTest { @Test fun testIsRegistered() { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QTimeSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QTimeSerializerTest.kt index 22a12aa29e89aba9f20b5c3e69afe917b898f8da..b324361e4a1a2955b645b90223b05410d97dc0ba 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QTimeSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QTimeSerializerTest.kt @@ -23,9 +23,11 @@ import de.justjanne.libquassel.protocol.testutil.byteBufferOf import de.justjanne.libquassel.protocol.testutil.matchers.TemporalMatcher import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test import org.threeten.bp.LocalTime +@Tag("QtSerializerTest") class QTimeSerializerTest { @Test fun testIsRegistered() { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QVariantListSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QVariantListSerializerTest.kt index 68cf64602a6232b77296dd3bcc9f2470ff5fbe2c..f8234b81095583d357665e4450872caf0949202f 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QVariantListSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QVariantListSerializerTest.kt @@ -24,8 +24,10 @@ import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest import de.justjanne.libquassel.protocol.variant.QVariantList import de.justjanne.libquassel.protocol.variant.qVariant import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test +@Tag("QtSerializerTest") class QVariantListSerializerTest { @Test fun testIsRegistered() { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QVariantMapSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QVariantMapSerializerTest.kt index 5f3b816514d9a0eb6122a5fd24bca016d08bafd3..f868d0794126a2edcd5f65342d03880ffd42e8e0 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QVariantMapSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QVariantMapSerializerTest.kt @@ -25,8 +25,10 @@ import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest import de.justjanne.libquassel.protocol.variant.QVariantMap import de.justjanne.libquassel.protocol.variant.qVariant import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test +@Tag("QtSerializerTest") class QVariantMapSerializerTest { @Test fun testIsRegistered() { @@ -51,106 +53,12 @@ class QVariantMapSerializerTest { "Password" to qVariant("hunter2", QtType.QString) ), byteBufferOf( - 0x00, - 0x00, - 0x00, - 0x02, - 0x00, - 0x00, - 0x00, - 0x10, - 0x00, - 0x55, - 0x00, - 0x73, - 0x00, - 0x65, - 0x00, - 0x72, - 0x00, - 0x6E, - 0x00, - 0x61, - 0x00, - 0x6D, - 0x00, - 0x65, - 0x00, - 0x00, - 0x00, - 0x0A, - 0x00, - 0x00, - 0x00, - 0x00, - 0x18, - 0x00, - 0x41, - 0x00, - 0x7A, - 0x00, - 0x75, - 0x00, - 0x72, - 0x00, - 0x65, - 0x00, - 0x44, - 0x00, - 0x69, - 0x00, - 0x61, - 0x00, - 0x6D, - 0x00, - 0x6F, - 0x00, - 0x6E, - 0x00, - 0x64, - 0x00, - 0x00, - 0x00, - 0x10, - 0x00, - 0x50, - 0x00, - 0x61, - 0x00, - 0x73, - 0x00, - 0x73, - 0x00, - 0x77, - 0x00, - 0x6F, - 0x00, - 0x72, - 0x00, - 0x64, - 0x00, - 0x00, - 0x00, - 0x0A, - 0x00, - 0x00, - 0x00, - 0x00, - 0x0E, - 0x00, - 0x68, - 0x00, - 0x75, - 0x00, - 0x6E, - 0x00, - 0x74, - 0x00, - 0x65, - 0x00, - 0x72, - 0x00, - 0x32 + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x10, 0x00, 0x55, 0x00, 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, + 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x41, 0x00, 0x7A, 0x00, + 0x75, 0x00, 0x72, 0x00, 0x65, 0x00, 0x44, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x64, + 0x00, 0x00, 0x00, 0x10, 0x00, 0x50, 0x00, 0x61, 0x00, 0x73, 0x00, 0x73, 0x00, 0x77, 0x00, 0x6F, 0x00, 0x72, 0x00, + 0x64, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x68, 0x00, 0x75, 0x00, 0x6E, 0x00, 0x74, 0x00, + 0x65, 0x00, 0x72, 0x00, 0x32 ), ::MapMatcher ) diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QVariantSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QVariantSerializerTest.kt index 832f9cc9e5a130e320f7bb0a143a00bd4039cc18..123d8c7e212b5ace3766831b1da9d613fb251249 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QVariantSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QVariantSerializerTest.kt @@ -24,9 +24,11 @@ import de.justjanne.libquassel.protocol.serializers.NoSerializerForTypeException import de.justjanne.libquassel.protocol.testutil.byteBufferOf import de.justjanne.libquassel.protocol.variant.QVariant_ import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test import org.junit.jupiter.api.assertThrows +@Tag("QtSerializerTest") class QVariantSerializerTest { @Test fun testIsRegistered() { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/ShortSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/ShortSerializerTest.kt index ddd083390a85c0364e990fac9e3a8ecfddfc88ab..83e8a60e2a19a5f0abb4b162ba96696e566b211d 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/ShortSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/ShortSerializerTest.kt @@ -22,9 +22,11 @@ import de.justjanne.libquassel.protocol.models.types.QtType import de.justjanne.libquassel.protocol.testutil.byteBufferOf import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test import kotlin.experimental.inv +@Tag("QtSerializerTest") class ShortSerializerTest { @Test fun testIsRegistered() { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/StringSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/StringSerializerTest.kt index 35b65a2f52a99687e92894d3f34305dcb3fb3585..c9fb9391daae197a7dc115fff565b32bf4f3723d 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/StringSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/StringSerializerTest.kt @@ -28,8 +28,10 @@ import de.justjanne.libquassel.protocol.testutil.testPrimitiveSerializerVariant import de.justjanne.libquassel.protocol.util.withRewind import org.hamcrest.MatcherAssert.assertThat import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test +@Tag("QtSerializerTest") class StringSerializerTest { @Test fun testIsRegistered() { @@ -39,6 +41,13 @@ class StringSerializerTest { ) } + @Test + fun testEmpty() { + assertEquals("", StringSerializerAscii.deserializeRaw(null)) + assertEquals("", StringSerializerUtf8.deserializeRaw(null)) + assertEquals("", StringSerializerUtf16.deserializeRaw(null)) + } + @Test fun testBigListOfNaughtyStrings() { this::class.java.getResourceAsStream("/blns.txt")!!.bufferedReader(Charsets.UTF_8).forEachLine { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/UByteSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/UByteSerializerTest.kt index 7f388a60f70b031078911d8d3fcaff77466fcc79..12f13f2fcf256bee87bea3159084cc3f53d9d850 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/UByteSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/UByteSerializerTest.kt @@ -22,8 +22,10 @@ import de.justjanne.libquassel.protocol.models.types.QtType import de.justjanne.libquassel.protocol.testutil.byteBufferOf import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test +@Tag("QtSerializerTest") class UByteSerializerTest { @Test fun testIsRegistered() { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/UIntSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/UIntSerializerTest.kt index 843ca87030663daa72461f9125b60dfb63f4ac71..7203cb37e277c4bd9fe672f6402cc3b37737c626 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/UIntSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/UIntSerializerTest.kt @@ -22,8 +22,10 @@ import de.justjanne.libquassel.protocol.models.types.QtType import de.justjanne.libquassel.protocol.testutil.byteBufferOf import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test +@Tag("QtSerializerTest") class UIntSerializerTest { @Test fun testIsRegistered() { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/ULongSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/ULongSerializerTest.kt index 071663b09d533d4611139bbe3e9999b87b54adce..6a2ea0733b7340deefb7fdc69c67eaa7e8bd6d07 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/ULongSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/ULongSerializerTest.kt @@ -22,8 +22,10 @@ import de.justjanne.libquassel.protocol.models.types.QtType import de.justjanne.libquassel.protocol.testutil.byteBufferOf import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test +@Tag("QtSerializerTest") class ULongSerializerTest { @Test fun testIsRegistered() { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/UShortSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/UShortSerializerTest.kt index daf61becefa3f22241fb75e3d756bfc2fa18b842..5804e37cf7d0a7f761e2120b58058be558e18933 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/UShortSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/UShortSerializerTest.kt @@ -13,8 +13,10 @@ import de.justjanne.libquassel.protocol.models.types.QtType import de.justjanne.libquassel.protocol.testutil.byteBufferOf import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test +@Tag("QtSerializerTest") class UShortSerializerTest { @Test fun testIsRegistered() { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/UuidSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/UuidSerializerTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..61da42012b487f45a3d5e76ad6f55da394c475c9 --- /dev/null +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/UuidSerializerTest.kt @@ -0,0 +1,47 @@ +/* + * Quasseldroid - Quassel client for Android + * + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3 as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.justjanne.libquassel.protocol.serializers.qt + +import de.justjanne.libquassel.protocol.models.types.QtType +import de.justjanne.libquassel.protocol.testutil.byteBufferOf +import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag +import org.junit.jupiter.api.Test +import java.util.UUID + +@Tag("QtSerializerTest") +class UuidSerializerTest { + @Test + fun testIsRegistered() { + assertEquals( + UuidSerializer, + QtType.Uuid.serializer<UUID>(), + ) + } + + @Test + fun testSimple() = primitiveSerializerTest( + UuidSerializer, + UUID.fromString("e4335bb0-ceef-4b9f-8ceb-be19b4da34fd"), + byteBufferOf( + 0xE4u, 0x33u, 0x5Bu, 0xB0u, 0xCEu, 0xEFu, 0x4Bu, 0x9Fu, 0x8Cu, 0xEBu, 0xBEu, 0x19u, 0xB4u, 0xDAu, 0x34u, 0xFDu, + ) + ) +} diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/VoidSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/VoidSerializerTest.kt index cccac8525c09ebd885f9589c1e12190477b6a9d8..37848c8c424b3fb91eefbda5f9ec2d96705511a6 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/VoidSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/VoidSerializerTest.kt @@ -22,8 +22,10 @@ import de.justjanne.libquassel.protocol.models.types.QtType import de.justjanne.libquassel.protocol.testutil.byteBufferOf import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test +@Tag("QtSerializerTest") class VoidSerializerTest { @Test fun testIsRegistered() { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/BufferIdSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/BufferIdSerializerTest.kt index 5a8ef9bab9144c72be1a07544c2893337c8a2cc3..0f5bb9c0e9135e0077058d4e570df6ea8bb01612 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/BufferIdSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/BufferIdSerializerTest.kt @@ -23,8 +23,10 @@ import de.justjanne.libquassel.protocol.models.types.QuasselType import de.justjanne.libquassel.protocol.testutil.byteBufferOf import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test +@Tag("QuasselSerializerTest") class BufferIdSerializerTest { @Test fun testIsRegistered() { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/BufferInfoSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/BufferInfoSerializerTest.kt index 7860f42d41cffa31ccb79cb353b282ed571445f5..474846a85f1eba5dceeb125f535f848c478f99e3 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/BufferInfoSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/BufferInfoSerializerTest.kt @@ -28,8 +28,10 @@ import de.justjanne.libquassel.protocol.models.types.QuasselType import de.justjanne.libquassel.protocol.testutil.byteBufferOf import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test +@Tag("QuasselSerializerTest") class BufferInfoSerializerTest { @Test fun testIsRegistered() { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/DccIpDetectionModeSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/DccIpDetectionModeSerializerTest.kt index 474287231a4cf71cf6b8f3188ad82885685e49fb..674caa757dc200bde44b22a5b575c4bff84dd8aa 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/DccIpDetectionModeSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/DccIpDetectionModeSerializerTest.kt @@ -23,8 +23,10 @@ import de.justjanne.libquassel.protocol.models.types.QuasselType import de.justjanne.libquassel.protocol.testutil.byteBufferOf import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test +@Tag("QuasselSerializerTest") class DccIpDetectionModeSerializerTest { @Test fun testIsRegistered() { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/DccPortSelectionModeSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/DccPortSelectionModeSerializerTest.kt index 0d8dbc5ec078f944641ed9e2a1f0c288d65beb65..f4789306f325d33da406bca2266bdb4108e9bea4 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/DccPortSelectionModeSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/DccPortSelectionModeSerializerTest.kt @@ -23,8 +23,10 @@ import de.justjanne.libquassel.protocol.models.types.QuasselType import de.justjanne.libquassel.protocol.testutil.byteBufferOf import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test +@Tag("QuasselSerializerTest") class DccPortSelectionModeSerializerTest { @Test fun testIsRegistered() { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/IdentityIdSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/IdentityIdSerializerTest.kt index 2b2d56e7b84caa18aa6e37bbc5184c337ea1504e..a18554a87deb0a6e2702a1b581f57256781e0056 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/IdentityIdSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/IdentityIdSerializerTest.kt @@ -23,8 +23,10 @@ import de.justjanne.libquassel.protocol.models.types.QuasselType import de.justjanne.libquassel.protocol.testutil.byteBufferOf import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test +@Tag("QuasselSerializerTest") class IdentityIdSerializerTest { @Test fun testIsRegistered() { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/IrcChannelSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/IrcChannelSerializerTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..ee8cabc7d27218c95302f3a58f82158f9afc1139 --- /dev/null +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/IrcChannelSerializerTest.kt @@ -0,0 +1,84 @@ +/* + * Quasseldroid - Quassel client for Android + * + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3 as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.justjanne.libquassel.protocol.serializers.quassel + +import de.justjanne.libquassel.protocol.models.ids.NetworkId +import de.justjanne.libquassel.protocol.models.types.QuasselType +import de.justjanne.libquassel.protocol.syncables.IrcChannel +import de.justjanne.libquassel.protocol.syncables.state.IrcChannelState +import de.justjanne.libquassel.protocol.testutil.byteBufferOf +import de.justjanne.libquassel.protocol.testutil.matchers.MapMatcher +import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest +import de.justjanne.libquassel.protocol.variant.QVariantMap +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag +import org.junit.jupiter.api.Test + +@Tag("QuasselSerializerTest") +class IrcChannelSerializerTest { + @Test + fun testIsRegistered() { + assertEquals( + IrcChannelSerializer, + QuasselType.IrcChannel.serializer<QVariantMap>(), + ) + } + + @Test + fun testEmptyMap() = primitiveSerializerTest( + IrcChannelSerializer, + emptyMap(), + byteBufferOf( + // no elements + 0x00u, 0x00u, 0x00u, 0x00u, + ), + featureSets = emptyList(), + serializeFeatureSet = null + ) + + @Test + fun testNormal() = primitiveSerializerTest( + IrcChannelSerializer, + IrcChannel( + state = IrcChannelState( + network = NetworkId(4), + name = "#quassel" + ) + ).toVariantMap(), + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x06u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x6Eu, 0x00u, 0x61u, 0x00u, 0x6Du, 0x00u, 0x65u, + 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x23u, 0x00u, 0x71u, 0x00u, 0x75u, 0x00u, + 0x61u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x74u, 0x00u, + 0x6Fu, 0x00u, 0x70u, 0x00u, 0x69u, 0x00u, 0x63u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x70u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x77u, 0x00u, 0x6Fu, + 0x00u, 0x72u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x12u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x63u, 0x00u, 0x72u, 0x00u, 0x79u, 0x00u, 0x70u, 0x00u, 0x74u, 0x00u, + 0x65u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x12u, 0x00u, 0x43u, 0x00u, + 0x68u, 0x00u, 0x61u, 0x00u, 0x6Eu, 0x00u, 0x4Du, 0x00u, 0x6Fu, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, + 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x04u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x41u, 0x00u, 0x00u, + 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x42u, 0x00u, 0x00u, 0x00u, + 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x43u, 0x00u, 0x00u, 0x00u, 0x08u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x44u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x12u, 0x00u, 0x55u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x72u, + 0x00u, 0x4Du, 0x00u, 0x6Fu, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x00u, + ), + matcher = ::MapMatcher + ) +} diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/IrcUserSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/IrcUserSerializerTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..c8e246c8fbbae1369182daa061f4e1eafb2b1458 --- /dev/null +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/IrcUserSerializerTest.kt @@ -0,0 +1,110 @@ +/* + * Quasseldroid - Quassel client for Android + * + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3 as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.justjanne.libquassel.protocol.serializers.quassel + +import de.justjanne.libquassel.protocol.models.ids.NetworkId +import de.justjanne.libquassel.protocol.models.types.QuasselType +import de.justjanne.libquassel.protocol.syncables.IrcUser +import de.justjanne.libquassel.protocol.syncables.state.IrcUserState +import de.justjanne.libquassel.protocol.testutil.byteBufferOf +import de.justjanne.libquassel.protocol.testutil.matchers.MapMatcher +import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest +import de.justjanne.libquassel.protocol.variant.QVariantMap +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag +import org.junit.jupiter.api.Test + +@Tag("QuasselSerializerTest") +class IrcUserSerializerTest { + @Test + fun testIsRegistered() { + assertEquals( + IrcUserSerializer, + QuasselType.IrcUser.serializer<QVariantMap>(), + ) + } + + @Test + fun testEmptyMap() = primitiveSerializerTest( + IrcUserSerializer, + emptyMap(), + byteBufferOf( + // no elements + 0x00u, 0x00u, 0x00u, 0x00u, + ), + featureSets = emptyList(), + serializeFeatureSet = null + ) + + @Test + fun testNormal() = primitiveSerializerTest( + IrcUserSerializer, + IrcUser( + state = IrcUserState( + network = NetworkId(4), + nick = "AzureDiamond", + user = "~azure", + host = "127.0.0.1" + ) + ).toVariantMap(), + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x12u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x6Eu, 0x00u, 0x69u, 0x00u, 0x63u, 0x00u, 0x6Bu, + 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x18u, 0x00u, 0x41u, 0x00u, 0x7Au, 0x00u, 0x75u, 0x00u, + 0x72u, 0x00u, 0x65u, 0x00u, 0x44u, 0x00u, 0x69u, 0x00u, 0x61u, 0x00u, 0x6Du, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, + 0x64u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x75u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x00u, 0x00u, + 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x7Eu, 0x00u, 0x61u, 0x00u, 0x7Au, 0x00u, 0x75u, 0x00u, 0x72u, + 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x68u, 0x00u, 0x6Fu, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x00u, + 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x12u, 0x00u, 0x31u, 0x00u, 0x32u, 0x00u, 0x37u, 0x00u, 0x2Eu, 0x00u, + 0x30u, 0x00u, 0x2Eu, 0x00u, 0x30u, 0x00u, 0x2Eu, 0x00u, 0x31u, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x72u, 0x00u, + 0x65u, 0x00u, 0x61u, 0x00u, 0x6Cu, 0x00u, 0x4Eu, 0x00u, 0x61u, 0x00u, 0x6Du, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, + 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Eu, 0x00u, 0x61u, 0x00u, 0x63u, 0x00u, 0x63u, + 0x00u, 0x6Fu, 0x00u, 0x75u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x61u, 0x00u, 0x77u, 0x00u, 0x61u, 0x00u, 0x79u, 0x00u, 0x00u, 0x00u, + 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x16u, 0x00u, 0x61u, 0x00u, 0x77u, 0x00u, 0x61u, 0x00u, 0x79u, 0x00u, + 0x4Du, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x61u, 0x00u, 0x67u, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, + 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x69u, 0x00u, 0x64u, 0x00u, 0x6Cu, + 0x00u, 0x65u, 0x00u, 0x54u, 0x00u, 0x69u, 0x00u, 0x6Du, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x00u, + 0x25u, 0x3Du, 0x8Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x12u, 0x00u, 0x6Cu, 0x00u, 0x6Fu, + 0x00u, 0x67u, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x54u, 0x00u, 0x69u, 0x00u, 0x6Du, 0x00u, 0x65u, 0x00u, 0x00u, + 0x00u, 0x10u, 0x00u, 0x00u, 0x25u, 0x3Du, 0x8Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x0Cu, + 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x76u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x00u, 0x00u, 0x0Au, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x16u, 0x00u, 0x69u, 0x00u, 0x72u, 0x00u, 0x63u, 0x00u, + 0x4Fu, 0x00u, 0x70u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, + 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x1Eu, 0x00u, 0x6Cu, 0x00u, 0x61u, + 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x41u, 0x00u, 0x77u, 0x00u, 0x61u, 0x00u, 0x79u, 0x00u, 0x4Du, 0x00u, 0x65u, + 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x61u, 0x00u, 0x67u, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x26u, 0x00u, 0x6Cu, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, + 0x41u, 0x00u, 0x77u, 0x00u, 0x61u, 0x00u, 0x79u, 0x00u, 0x4Du, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, + 0x61u, 0x00u, 0x67u, 0x00u, 0x65u, 0x00u, 0x54u, 0x00u, 0x69u, 0x00u, 0x6Du, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, + 0x10u, 0x00u, 0x00u, 0x25u, 0x3Du, 0x8Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x22u, 0x00u, + 0x77u, 0x00u, 0x68u, 0x00u, 0x6Fu, 0x00u, 0x69u, 0x00u, 0x73u, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, + 0x76u, 0x00u, 0x69u, 0x00u, 0x63u, 0x00u, 0x65u, 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x70u, 0x00u, 0x6Cu, 0x00u, + 0x79u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x12u, 0x00u, 0x73u, + 0x00u, 0x75u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x48u, 0x00u, 0x6Fu, 0x00u, 0x73u, 0x00u, 0x74u, + 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x12u, 0x00u, 0x65u, 0x00u, + 0x6Eu, 0x00u, 0x63u, 0x00u, 0x72u, 0x00u, 0x79u, 0x00u, 0x70u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x64u, 0x00u, + 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x63u, 0x00u, 0x68u, 0x00u, 0x61u, 0x00u, + 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x0Bu, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x12u, 0x00u, 0x75u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x4Du, + 0x00u, 0x6Fu, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, + ), + matcher = ::MapMatcher + ) +} diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/MessageSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/MessageSerializerTest.kt index e9d770dbccafa2a371e62e76871ac0a708ff561f..13918e834038309d1625d8b65a0792ef4ece3636 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/MessageSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/MessageSerializerTest.kt @@ -34,9 +34,11 @@ import de.justjanne.libquassel.protocol.models.types.QuasselType import de.justjanne.libquassel.protocol.testutil.byteBufferOf import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test import org.threeten.bp.Instant +@Tag("QuasselSerializerTest") class MessageSerializerTest { @Test fun testIsRegistered() { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/MsgIdSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/MsgIdSerializerTest.kt index 03b58bc6aaa137ff401bb3217bf1be0e7b34225d..0457be795f45114d373e40454e3fd1b7a4ef555b 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/MsgIdSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/MsgIdSerializerTest.kt @@ -24,8 +24,10 @@ import de.justjanne.libquassel.protocol.models.types.QuasselType import de.justjanne.libquassel.protocol.testutil.byteBufferOf import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test +@Tag("QuasselSerializerTest") class MsgIdSerializerTest { @Test fun testIsRegistered() { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/NetworkIdSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/NetworkIdSerializerTest.kt index 33e9f220eea4590c2ee84b1252b85eadbb02ac0e..2b90d5b9764764bd0e17a27c38c417d52d032d8b 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/NetworkIdSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/NetworkIdSerializerTest.kt @@ -23,8 +23,10 @@ import de.justjanne.libquassel.protocol.models.types.QuasselType import de.justjanne.libquassel.protocol.testutil.byteBufferOf import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test +@Tag("QuasselSerializerTest") class NetworkIdSerializerTest { @Test fun testIsRegistered() { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/NetworkInfoSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/NetworkInfoSerializerTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..9f28cd6e4113e5508964e6dea59860d13141c057 --- /dev/null +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/NetworkInfoSerializerTest.kt @@ -0,0 +1,130 @@ +/* + * Quasseldroid - Quassel client for Android + * + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3 as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.justjanne.libquassel.protocol.serializers.quassel + +import de.justjanne.libquassel.protocol.models.NetworkInfo +import de.justjanne.libquassel.protocol.models.ids.NetworkId +import de.justjanne.libquassel.protocol.models.types.QuasselType +import de.justjanne.libquassel.protocol.testutil.byteBufferOf +import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag +import org.junit.jupiter.api.Test + +@Tag("QuasselSerializerTest") +class NetworkInfoSerializerTest { + @Test + fun testIsRegistered() { + assertEquals( + NetworkInfoSerializer, + QuasselType.NetworkInfo.serializer<NetworkInfo>(), + ) + } + + @Test + fun testEmptyMap() = primitiveSerializerTest( + NetworkInfoSerializer, + NetworkInfo(), + byteBufferOf( + // no elements + 0x00u, 0x00u, 0x00u, 0x00u, + ), + featureSets = emptyList(), + serializeFeatureSet = null + ) + + @Test + fun testNormal() = primitiveSerializerTest( + NetworkInfoSerializer, + NetworkInfo( + networkId = NetworkId(4), + ), + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x19u, 0x00u, 0x00u, 0x00u, 0x12u, 0x00u, 0x4Eu, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x77u, + 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x6Bu, 0x00u, 0x49u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x7Fu, 0x00u, 0x00u, + 0x00u, 0x00u, 0x0Au, 0x4Eu, 0x65u, 0x74u, 0x77u, 0x6Fu, 0x72u, 0x6Bu, 0x49u, 0x64u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x04u, 0x00u, 0x00u, 0x00u, 0x16u, 0x00u, 0x4Eu, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x77u, 0x00u, 0x6Fu, 0x00u, + 0x72u, 0x00u, 0x6Bu, 0x00u, 0x4Eu, 0x00u, 0x61u, 0x00u, 0x6Du, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x49u, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x6Eu, + 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x74u, 0x00u, 0x79u, 0x00u, 0x00u, 0x00u, 0x7Fu, 0x00u, 0x00u, 0x00u, 0x00u, + 0x0Bu, 0x49u, 0x64u, 0x65u, 0x6Eu, 0x74u, 0x69u, 0x74u, 0x79u, 0x49u, 0x64u, 0x00u, 0xFFu, 0xFFu, 0xFFu, 0xFFu, + 0x00u, 0x00u, 0x00u, 0x24u, 0x00u, 0x55u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x43u, 0x00u, 0x75u, 0x00u, 0x73u, + 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, 0x6Du, 0x00u, 0x45u, 0x00u, 0x6Eu, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x64u, + 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x67u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x1Cu, 0x00u, 0x43u, 0x00u, 0x6Fu, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x46u, 0x00u, 0x6Fu, + 0x00u, 0x72u, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x76u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x00u, + 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x05u, 0x55u, 0x54u, 0x46u, 0x5Fu, 0x38u, 0x00u, 0x00u, 0x00u, 0x20u, + 0x00u, 0x43u, 0x00u, 0x6Fu, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x46u, 0x00u, 0x6Fu, 0x00u, 0x72u, + 0x00u, 0x45u, 0x00u, 0x6Eu, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x64u, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x67u, + 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x05u, 0x55u, 0x54u, 0x46u, 0x5Fu, 0x38u, 0x00u, 0x00u, + 0x00u, 0x20u, 0x00u, 0x43u, 0x00u, 0x6Fu, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x46u, 0x00u, 0x6Fu, + 0x00u, 0x72u, 0x00u, 0x44u, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x64u, 0x00u, 0x69u, 0x00u, 0x6Eu, + 0x00u, 0x67u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x05u, 0x55u, 0x54u, 0x46u, 0x5Fu, 0x38u, + 0x00u, 0x00u, 0x00u, 0x14u, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x76u, 0x00u, 0x65u, 0x00u, 0x72u, + 0x00u, 0x4Cu, 0x00u, 0x69u, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x09u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x1Eu, 0x00u, 0x55u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x52u, 0x00u, 0x61u, 0x00u, + 0x6Eu, 0x00u, 0x64u, 0x00u, 0x6Fu, 0x00u, 0x6Du, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x76u, 0x00u, + 0x65u, 0x00u, 0x72u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Eu, 0x00u, 0x50u, 0x00u, + 0x65u, 0x00u, 0x72u, 0x00u, 0x66u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x6Du, 0x00u, 0x00u, 0x00u, 0x0Bu, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x1Eu, 0x00u, 0x55u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x41u, + 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, 0x49u, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, + 0x00u, 0x69u, 0x00u, 0x66u, 0x00u, 0x79u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x26u, + 0x00u, 0x41u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, 0x49u, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x6Eu, + 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x66u, 0x00u, 0x79u, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x76u, + 0x00u, 0x69u, 0x00u, 0x63u, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x28u, 0x00u, 0x41u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, 0x49u, 0x00u, 0x64u, 0x00u, + 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x66u, 0x00u, 0x79u, 0x00u, 0x50u, 0x00u, 0x61u, 0x00u, + 0x73u, 0x00u, 0x73u, 0x00u, 0x77u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Eu, 0x00u, 0x55u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x53u, + 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x6Cu, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x16u, + 0x00u, 0x53u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x6Cu, 0x00u, 0x41u, 0x00u, 0x63u, 0x00u, 0x63u, 0x00u, 0x6Fu, + 0x00u, 0x75u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x18u, 0x00u, 0x53u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x6Cu, 0x00u, 0x50u, 0x00u, 0x61u, 0x00u, + 0x73u, 0x00u, 0x73u, 0x00u, 0x77u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x20u, 0x00u, 0x55u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x41u, + 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, + 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x01u, 0x00u, 0x00u, + 0x00u, 0x2Au, 0x00u, 0x41u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x63u, + 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x74u, 0x00u, 0x49u, 0x00u, 0x6Eu, + 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x76u, 0x00u, 0x61u, 0x00u, 0x6Cu, 0x00u, 0x00u, 0x00u, 0x03u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x28u, 0x00u, 0x41u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, + 0x6Fu, 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, + 0x63u, 0x00u, 0x74u, 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x72u, 0x00u, 0x69u, 0x00u, 0x65u, 0x00u, + 0x73u, 0x00u, 0x00u, 0x00u, 0x85u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x32u, 0x00u, 0x55u, 0x00u, 0x6Eu, + 0x00u, 0x6Cu, 0x00u, 0x69u, 0x00u, 0x6Du, 0x00u, 0x69u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x64u, 0x00u, 0x52u, + 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x74u, + 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x72u, 0x00u, 0x69u, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x00u, + 0x00u, 0x01u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x1Cu, 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x6Au, 0x00u, 0x6Fu, + 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x43u, 0x00u, 0x68u, 0x00u, 0x61u, 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, + 0x00u, 0x6Cu, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x28u, 0x00u, 0x55u, + 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x43u, 0x00u, 0x75u, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, 0x6Du, + 0x00u, 0x4Du, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x61u, 0x00u, 0x67u, 0x00u, 0x65u, 0x00u, 0x52u, + 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x28u, + 0x00u, 0x4Du, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x61u, 0x00u, 0x67u, 0x00u, 0x65u, 0x00u, 0x52u, + 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x42u, 0x00u, 0x75u, 0x00u, 0x72u, 0x00u, 0x73u, 0x00u, 0x74u, + 0x00u, 0x53u, 0x00u, 0x69u, 0x00u, 0x7Au, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x03u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x20u, 0x00u, 0x4Du, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x61u, 0x00u, + 0x67u, 0x00u, 0x65u, 0x00u, 0x52u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x44u, 0x00u, 0x65u, 0x00u, + 0x6Cu, 0x00u, 0x61u, 0x00u, 0x79u, 0x00u, 0x00u, 0x00u, 0x03u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x28u, 0x00u, 0x55u, 0x00u, 0x6Eu, 0x00u, 0x6Cu, 0x00u, 0x69u, 0x00u, 0x6Du, 0x00u, 0x69u, 0x00u, 0x74u, + 0x00u, 0x65u, 0x00u, 0x64u, 0x00u, 0x4Du, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x61u, 0x00u, 0x67u, + 0x00u, 0x65u, 0x00u, 0x52u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, + ) + ) +} diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/PeerPtrSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/PeerPtrSerializerTest.kt index 9659e02b4f5cc3baf61d3eee1726d3ca7ee900e8..79ae4f890d1880e7d8a7c8f9a55e9a9e09fb2b91 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/PeerPtrSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/PeerPtrSerializerTest.kt @@ -23,8 +23,10 @@ import de.justjanne.libquassel.protocol.models.types.QuasselType import de.justjanne.libquassel.protocol.testutil.byteBufferOf import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test +@Tag("QuasselSerializerTest") class PeerPtrSerializerTest { @Test fun testIsRegistered() { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/QHostAddressSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/QHostAddressSerializerTest.kt index d93835680288d13248e80156f7c5518751b5fff5..b39640d1fcfe72aead8da37490135d98ce523839 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/QHostAddressSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/quassel/QHostAddressSerializerTest.kt @@ -22,11 +22,13 @@ import de.justjanne.libquassel.protocol.models.types.QuasselType import de.justjanne.libquassel.protocol.testutil.byteBufferOf import de.justjanne.libquassel.protocol.testutil.primitiveSerializerTest import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test import java.net.Inet4Address import java.net.Inet6Address import java.net.InetAddress +@Tag("QuasselSerializerTest") class QHostAddressSerializerTest { @Test fun testIsRegistered() { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/HeartBeatReplySerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/HeartBeatReplySerializerTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..025272bbbad3f9db7f9e2ae0112d7d4c31f4b931 --- /dev/null +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/HeartBeatReplySerializerTest.kt @@ -0,0 +1,69 @@ +/* + * Quasseldroid - Quassel client for Android + * + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3 as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.justjanne.libquassel.protocol.serializers.signalproxy + +import de.justjanne.libquassel.protocol.models.SignalProxyMessage +import de.justjanne.libquassel.protocol.testutil.byteBufferOf +import de.justjanne.libquassel.protocol.testutil.signalProxySerializerTest +import org.junit.jupiter.api.Tag +import org.junit.jupiter.api.Test +import org.threeten.bp.Instant + +@Tag("SignalProxySerializerTest") +class HeartBeatReplySerializerTest { + @Test + fun testEmptyMap() = signalProxySerializerTest( + SignalProxyMessage.HeartBeatReply( + Instant.EPOCH + ), + byteBufferOf( + // 4 elements + 0x00u, 0x00u, 0x00u, 0x01u, + // int + 0x00u, 0x00u, 0x00u, 0x02u, + 0x00u, + // HeartBeatReply + 0x00u, 0x00u, 0x00u, 0x06u, + ), + featureSets = emptyList(), + serializeFeatureSet = null + ) + + @Test + fun testSimple() = signalProxySerializerTest( + SignalProxyMessage.HeartBeatReply( + Instant.EPOCH + ), + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x00u, 0x06u, 0x00u, 0x00u, 0x00u, + 0x10u, 0x00u, 0x00u, 0x25u, 0x3Du, 0x8Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x02u, + ) + ) + + @Test + fun testRealistic() = signalProxySerializerTest( + SignalProxyMessage.HeartBeatReply( + Instant.ofEpochMilli(1614520296337) + ), + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x00u, 0x06u, 0x00u, 0x00u, 0x00u, + 0x10u, 0x00u, 0x00u, 0x25u, 0x86u, 0x8Au, 0x02u, 0xF9u, 0x5Bu, 0x91u, 0x02u, + ) + ) +} diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/HeartBeatSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/HeartBeatSerializerTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..188393b3b0ebdfdc0ec6fb42d5a12a8950188205 --- /dev/null +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/HeartBeatSerializerTest.kt @@ -0,0 +1,69 @@ +/* + * Quasseldroid - Quassel client for Android + * + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3 as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.justjanne.libquassel.protocol.serializers.signalproxy + +import de.justjanne.libquassel.protocol.models.SignalProxyMessage +import de.justjanne.libquassel.protocol.testutil.byteBufferOf +import de.justjanne.libquassel.protocol.testutil.signalProxySerializerTest +import org.junit.jupiter.api.Tag +import org.junit.jupiter.api.Test +import org.threeten.bp.Instant + +@Tag("SignalProxySerializerTest") +class HeartBeatSerializerTest { + @Test + fun testEmptyMap() = signalProxySerializerTest( + SignalProxyMessage.HeartBeat( + Instant.EPOCH + ), + byteBufferOf( + // 4 elements + 0x00u, 0x00u, 0x00u, 0x01u, + // int + 0x00u, 0x00u, 0x00u, 0x02u, + 0x00u, + // HeartBeat + 0x00u, 0x00u, 0x00u, 0x05u, + ), + featureSets = emptyList(), + serializeFeatureSet = null + ) + + @Test + fun testSimple() = signalProxySerializerTest( + SignalProxyMessage.HeartBeat( + Instant.EPOCH + ), + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x00u, 0x05u, 0x00u, 0x00u, 0x00u, + 0x10u, 0x00u, 0x00u, 0x25u, 0x3Du, 0x8Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x02u, + ) + ) + + @Test + fun testRealistic() = signalProxySerializerTest( + SignalProxyMessage.HeartBeat( + Instant.ofEpochMilli(1614520296337) + ), + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x00u, 0x05u, 0x00u, 0x00u, 0x00u, + 0x10u, 0x00u, 0x00u, 0x25u, 0x86u, 0x8Au, 0x02u, 0xF9u, 0x5Bu, 0x91u, 0x02u, + ) + ) +} diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/InitDataSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/InitDataSerializerTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..593f24824a0d373281191b3a409eedf67d97f433 --- /dev/null +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/InitDataSerializerTest.kt @@ -0,0 +1,183 @@ +/* + * Quasseldroid - Quassel client for Android + * + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3 as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.justjanne.libquassel.protocol.serializers.signalproxy + +import de.justjanne.libquassel.protocol.models.SignalProxyMessage +import de.justjanne.libquassel.protocol.models.ids.NetworkId +import de.justjanne.libquassel.protocol.syncables.Network +import de.justjanne.libquassel.protocol.syncables.state.NetworkState +import de.justjanne.libquassel.protocol.testutil.byteBufferOf +import de.justjanne.libquassel.protocol.testutil.signalProxySerializerTest +import org.junit.jupiter.api.Tag +import org.junit.jupiter.api.Test + +@Tag("SignalProxySerializerTest") +class InitDataSerializerTest { + @Test + fun testEmptyMap() = signalProxySerializerTest( + SignalProxyMessage.InitData( + className = "", + objectName = "", + initData = emptyMap() + ), + byteBufferOf( + // 4 elements + 0x00u, 0x00u, 0x00u, 0x01u, + // int + 0x00u, 0x00u, 0x00u, 0x02u, + 0x00u, + // Rpc + 0x00u, 0x00u, 0x00u, 0x04u, + ), + featureSets = emptyList(), + serializeFeatureSet = null + ) + + @Test + fun testSimple() = signalProxySerializerTest( + SignalProxyMessage.InitData( + className = "", + objectName = "", + initData = emptyMap() + ), + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x03u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x00u, 0x04u, 0x00u, 0x00u, 0x00u, + 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + ) + ) + + @Test + fun testRealistic() { + signalProxySerializerTest( + SignalProxyMessage.InitData( + className = "Network", + objectName = "4", + initData = Network( + state = NetworkState( + networkId = NetworkId(4) + ) + ).toVariantMap() + ), + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x45u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x00u, 0x04u, 0x00u, 0x00u, 0x00u, + 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x07u, 0x4Eu, 0x65u, 0x74u, 0x77u, 0x6Fu, 0x72u, 0x6Bu, 0x00u, 0x00u, 0x00u, + 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x01u, 0x34u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x16u, + 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x77u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x6Bu, 0x00u, 0x4Eu, + 0x00u, 0x61u, 0x00u, 0x6Du, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x22u, 0x00u, + 0x3Cu, 0x00u, 0x6Eu, 0x00u, 0x6Fu, 0x00u, 0x74u, 0x00u, 0x20u, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x69u, 0x00u, + 0x74u, 0x00u, 0x69u, 0x00u, 0x61u, 0x00u, 0x6Cu, 0x00u, 0x69u, 0x00u, 0x7Au, 0x00u, 0x65u, 0x00u, 0x64u, 0x00u, + 0x3Eu, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x1Au, 0x00u, 0x63u, 0x00u, 0x75u, 0x00u, 0x72u, + 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x76u, + 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x6Du, 0x00u, 0x79u, 0x00u, 0x4Eu, 0x00u, 0x69u, 0x00u, 0x63u, + 0x00u, 0x6Bu, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, + 0x00u, 0x00u, 0x00u, 0x0Eu, 0x00u, 0x6Cu, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x63u, + 0x00u, 0x79u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, + 0x00u, 0x00u, 0x00u, 0x1Cu, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x46u, + 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x76u, 0x00u, 0x65u, 0x00u, 0x72u, + 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x05u, 0x55u, 0x54u, 0x46u, 0x5Fu, 0x38u, 0x00u, 0x00u, + 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x20u, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, + 0x63u, 0x00u, 0x46u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x45u, 0x00u, 0x6Eu, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, + 0x64u, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x67u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x05u, + 0x55u, 0x54u, 0x46u, 0x5Fu, 0x38u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x20u, 0x00u, 0x63u, + 0x00u, 0x6Fu, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x46u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x44u, + 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x64u, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x67u, 0x00u, 0x00u, + 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x05u, 0x55u, 0x54u, 0x46u, 0x5Fu, 0x38u, 0x00u, 0x00u, 0x00u, 0x0Au, + 0x00u, 0x00u, 0x00u, 0x00u, 0x14u, 0x00u, 0x69u, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, + 0x69u, 0x00u, 0x74u, 0x00u, 0x79u, 0x00u, 0x49u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x7Fu, 0x00u, 0x00u, 0x00u, + 0x00u, 0x0Bu, 0x49u, 0x64u, 0x65u, 0x6Eu, 0x74u, 0x69u, 0x74u, 0x79u, 0x49u, 0x64u, 0x00u, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x16u, 0x00u, 0x69u, 0x00u, 0x73u, 0x00u, 0x43u, + 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x64u, + 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x1Eu, 0x00u, + 0x63u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, + 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x53u, 0x00u, 0x74u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, + 0x02u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x1Eu, 0x00u, + 0x75u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x52u, 0x00u, 0x61u, 0x00u, 0x6Eu, 0x00u, 0x64u, 0x00u, 0x6Fu, 0x00u, + 0x6Du, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x76u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x00u, 0x00u, + 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Eu, 0x00u, 0x70u, 0x00u, 0x65u, + 0x00u, 0x72u, 0x00u, 0x66u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x6Du, 0x00u, 0x00u, 0x00u, 0x0Bu, 0x00u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x1Eu, 0x00u, 0x75u, 0x00u, 0x73u, + 0x00u, 0x65u, 0x00u, 0x41u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, 0x49u, 0x00u, 0x64u, 0x00u, 0x65u, + 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x66u, 0x00u, 0x79u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x26u, 0x00u, 0x61u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, + 0x6Fu, 0x00u, 0x49u, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x66u, 0x00u, + 0x79u, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x76u, 0x00u, 0x69u, 0x00u, 0x63u, 0x00u, 0x65u, 0x00u, + 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, + 0x28u, 0x00u, 0x61u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, 0x49u, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, + 0x6Eu, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x66u, 0x00u, 0x79u, 0x00u, 0x50u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, + 0x73u, 0x00u, 0x77u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Eu, 0x00u, 0x75u, 0x00u, 0x73u, 0x00u, + 0x65u, 0x00u, 0x53u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x6Cu, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x16u, 0x00u, 0x73u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x6Cu, + 0x00u, 0x41u, 0x00u, 0x63u, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x75u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x00u, + 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x18u, + 0x00u, 0x73u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x6Cu, 0x00u, 0x50u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x73u, + 0x00u, 0x77u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x20u, 0x00u, 0x75u, 0x00u, 0x73u, 0x00u, 0x65u, + 0x00u, 0x41u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x6Fu, + 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x2Au, 0x00u, 0x61u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, + 0x6Fu, 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, + 0x63u, 0x00u, 0x74u, 0x00u, 0x49u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x76u, 0x00u, + 0x61u, 0x00u, 0x6Cu, 0x00u, 0x00u, 0x00u, 0x03u, 0x00u, 0x00u, 0x00u, 0x00u, 0x3Cu, 0x00u, 0x00u, 0x00u, 0x0Au, + 0x00u, 0x00u, 0x00u, 0x00u, 0x28u, 0x00u, 0x61u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, 0x52u, 0x00u, + 0x65u, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x74u, 0x00u, + 0x52u, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x72u, 0x00u, 0x69u, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, + 0x85u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x32u, 0x00u, 0x75u, 0x00u, + 0x6Eu, 0x00u, 0x6Cu, 0x00u, 0x69u, 0x00u, 0x6Du, 0x00u, 0x69u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x64u, 0x00u, + 0x52u, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, + 0x74u, 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x72u, 0x00u, 0x69u, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, + 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x1Cu, 0x00u, 0x72u, + 0x00u, 0x65u, 0x00u, 0x6Au, 0x00u, 0x6Fu, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x43u, 0x00u, 0x68u, 0x00u, 0x61u, + 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x28u, 0x00u, 0x75u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, + 0x43u, 0x00u, 0x75u, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, 0x6Du, 0x00u, 0x4Du, 0x00u, 0x65u, 0x00u, + 0x73u, 0x00u, 0x73u, 0x00u, 0x61u, 0x00u, 0x67u, 0x00u, 0x65u, 0x00u, 0x52u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, + 0x65u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x20u, + 0x00u, 0x6Du, 0x00u, 0x73u, 0x00u, 0x67u, 0x00u, 0x52u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x42u, + 0x00u, 0x75u, 0x00u, 0x72u, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x53u, 0x00u, 0x69u, 0x00u, 0x7Au, 0x00u, 0x65u, + 0x00u, 0x00u, 0x00u, 0x03u, 0x00u, 0x00u, 0x00u, 0x00u, 0x05u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, + 0x00u, 0x26u, 0x00u, 0x6Du, 0x00u, 0x73u, 0x00u, 0x67u, 0x00u, 0x52u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x65u, + 0x00u, 0x4Du, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x61u, 0x00u, 0x67u, 0x00u, 0x65u, 0x00u, 0x44u, + 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, 0x61u, 0x00u, 0x79u, 0x00u, 0x00u, 0x00u, 0x03u, 0x00u, 0x00u, 0x00u, 0x08u, + 0x98u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x28u, 0x00u, 0x75u, 0x00u, 0x6Eu, 0x00u, 0x6Cu, + 0x00u, 0x69u, 0x00u, 0x6Du, 0x00u, 0x69u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x64u, 0x00u, 0x4Du, 0x00u, 0x65u, + 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x61u, 0x00u, 0x67u, 0x00u, 0x65u, 0x00u, 0x52u, 0x00u, 0x61u, 0x00u, 0x74u, + 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, + 0x10u, 0x00u, 0x73u, 0x00u, 0x6Bu, 0x00u, 0x69u, 0x00u, 0x70u, 0x00u, 0x43u, 0x00u, 0x61u, 0x00u, 0x70u, 0x00u, + 0x73u, 0x00u, 0x00u, 0x00u, 0x0Bu, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, + 0x00u, 0x00u, 0x10u, 0x00u, 0x53u, 0x00u, 0x75u, 0x00u, 0x70u, 0x00u, 0x70u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, + 0x74u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, + 0x00u, 0x00u, 0x00u, 0x00u, 0x14u, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x76u, 0x00u, 0x65u, 0x00u, + 0x72u, 0x00u, 0x4Cu, 0x00u, 0x69u, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x09u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x43u, 0x00u, 0x61u, 0x00u, + 0x70u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, + 0x00u, 0x00u, 0x00u, 0x00u, 0x16u, 0x00u, 0x43u, 0x00u, 0x61u, 0x00u, 0x70u, 0x00u, 0x73u, 0x00u, 0x45u, 0x00u, + 0x6Eu, 0x00u, 0x61u, 0x00u, 0x62u, 0x00u, 0x6Cu, 0x00u, 0x65u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x09u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x26u, 0x00u, 0x49u, 0x00u, + 0x72u, 0x00u, 0x63u, 0x00u, 0x55u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x73u, 0x00u, 0x41u, 0x00u, + 0x6Eu, 0x00u, 0x64u, 0x00u, 0x43u, 0x00u, 0x68u, 0x00u, 0x61u, 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, + 0x6Cu, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x0Au, + 0x00u, 0x55u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x43u, 0x00u, 0x68u, 0x00u, 0x61u, 0x00u, 0x6Eu, 0x00u, + 0x6Eu, 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + ) + ) + } +} diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/InitRequestSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/InitRequestSerializerTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..b2c52a2464ec424424d0b89f79c05f4eb7c93ba6 --- /dev/null +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/InitRequestSerializerTest.kt @@ -0,0 +1,74 @@ +/* + * Quasseldroid - Quassel client for Android + * + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3 as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.justjanne.libquassel.protocol.serializers.signalproxy + +import de.justjanne.libquassel.protocol.models.SignalProxyMessage +import de.justjanne.libquassel.protocol.testutil.byteBufferOf +import de.justjanne.libquassel.protocol.testutil.signalProxySerializerTest +import org.junit.jupiter.api.Tag +import org.junit.jupiter.api.Test + +@Tag("SignalProxySerializerTest") +class InitRequestSerializerTest { + @Test + fun testEmptyMap() = signalProxySerializerTest( + SignalProxyMessage.InitRequest( + className = "", + objectName = "" + ), + byteBufferOf( + // 4 elements + 0x00u, 0x00u, 0x00u, 0x01u, + // int + 0x00u, 0x00u, 0x00u, 0x02u, + 0x00u, + // Rpc + 0x00u, 0x00u, 0x00u, 0x03u, + ), + featureSets = emptyList(), + serializeFeatureSet = null + ) + + @Test + fun testSimple() = signalProxySerializerTest( + SignalProxyMessage.InitRequest( + className = "", + objectName = "" + ), + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x03u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x00u, 0x03u, 0x00u, 0x00u, 0x00u, + 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + ) + ) + + @Test + fun testRealistic() { + signalProxySerializerTest( + SignalProxyMessage.InitRequest( + className = "Network", + objectName = "4" + ), + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x03u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x00u, 0x03u, 0x00u, 0x00u, 0x00u, + 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x07u, 0x4Eu, 0x65u, 0x74u, 0x77u, 0x6Fu, 0x72u, 0x6Bu, 0x00u, 0x00u, 0x00u, + 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x01u, 0x34u, + ) + ) + } +} diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/RpcSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/RpcSerializerTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..7dbd8d73d7485cf0af5efb1cfec8b1658204eaeb --- /dev/null +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/RpcSerializerTest.kt @@ -0,0 +1,90 @@ +/* + * Quasseldroid - Quassel client for Android + * + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3 as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.justjanne.libquassel.protocol.serializers.signalproxy + +import de.justjanne.libquassel.protocol.models.SignalProxyMessage +import de.justjanne.libquassel.protocol.models.types.QtType +import de.justjanne.libquassel.protocol.models.types.QuasselType +import de.justjanne.libquassel.protocol.testutil.byteBufferOf +import de.justjanne.libquassel.protocol.testutil.signalProxySerializerTest +import de.justjanne.libquassel.protocol.variant.QVariant_ +import de.justjanne.libquassel.protocol.variant.qVariant +import org.junit.jupiter.api.Tag +import org.junit.jupiter.api.Test + +@Tag("SignalProxySerializerTest") +class RpcSerializerTest { + @Test + fun testEmptyMap() = signalProxySerializerTest( + SignalProxyMessage.Rpc( + slotName = "", + params = emptyList() + ), + byteBufferOf( + // 4 elements + 0x00u, 0x00u, 0x00u, 0x01u, + // int + 0x00u, 0x00u, 0x00u, 0x02u, + 0x00u, + // Rpc + 0x00u, 0x00u, 0x00u, 0x02u, + ), + featureSets = emptyList(), + serializeFeatureSet = null + ) + + @Test + fun testSimple() = signalProxySerializerTest( + SignalProxyMessage.Rpc( + slotName = "", + params = emptyList() + ), + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, + 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + ) + ) + + @Test + fun testRealistic() { + signalProxySerializerTest( + SignalProxyMessage.Rpc( + slotName = "2createIdentity(Identity,QVariantMap)", + params = listOf( + qVariant( + emptyMap(), + QuasselType.Identity + ), + qVariant( + emptyMap<String, QVariant_>(), + QtType.QVariantMap + ) + ) + ), + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x04u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, + 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x25u, 0x32u, 0x63u, 0x72u, 0x65u, 0x61u, 0x74u, 0x65u, 0x49u, 0x64u, 0x65u, + 0x6Eu, 0x74u, 0x69u, 0x74u, 0x79u, 0x28u, 0x49u, 0x64u, 0x65u, 0x6Eu, 0x74u, 0x69u, 0x74u, 0x79u, 0x2Cu, 0x51u, + 0x56u, 0x61u, 0x72u, 0x69u, 0x61u, 0x6Eu, 0x74u, 0x4Du, 0x61u, 0x70u, 0x29u, 0x00u, 0x00u, 0x00u, 0x7Fu, 0x00u, + 0x00u, 0x00u, 0x00u, 0x09u, 0x49u, 0x64u, 0x65u, 0x6Eu, 0x74u, 0x69u, 0x74u, 0x79u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + ) + ) + } +} diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/SyncSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/SyncSerializerTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..4e934dc66880bca35b5b5aff2703ddbeea6eb453 --- /dev/null +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/SyncSerializerTest.kt @@ -0,0 +1,187 @@ +/* + * Quasseldroid - Quassel client for Android + * + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3 as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.justjanne.libquassel.protocol.serializers.signalproxy + +import de.justjanne.libquassel.protocol.models.SignalProxyMessage +import de.justjanne.libquassel.protocol.models.ids.NetworkId +import de.justjanne.libquassel.protocol.models.types.QtType +import de.justjanne.libquassel.protocol.syncables.Network +import de.justjanne.libquassel.protocol.syncables.state.NetworkState +import de.justjanne.libquassel.protocol.testutil.byteBufferOf +import de.justjanne.libquassel.protocol.testutil.signalProxySerializerTest +import de.justjanne.libquassel.protocol.variant.qVariant +import org.junit.jupiter.api.Tag +import org.junit.jupiter.api.Test + +@Tag("SignalProxySerializerTest") +class SyncSerializerTest { + @Test + fun testEmptyMap() = signalProxySerializerTest( + SignalProxyMessage.Sync( + className = "", + objectName = "", + slotName = "", + params = emptyList() + ), + byteBufferOf( + // 4 elements + 0x00u, 0x00u, 0x00u, 0x01u, + // int + 0x00u, 0x00u, 0x00u, 0x02u, + 0x00u, + // Sync + 0x00u, 0x00u, 0x00u, 0x01u, + ), + featureSets = emptyList(), + serializeFeatureSet = null + ) + + @Test + fun testSimple() = signalProxySerializerTest( + SignalProxyMessage.Sync( + className = "", + objectName = "", + slotName = "", + params = emptyList() + ), + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x04u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, + 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + ) + ) + + @Test + fun testRealistic() { + + signalProxySerializerTest( + SignalProxyMessage.Sync( + className = "Network", + objectName = "4", + slotName = "update", + params = listOf( + qVariant( + Network( + state = NetworkState( + networkId = NetworkId(4) + ) + ).toVariantMap(), + QtType.QVariantMap + ) + ) + ), + byteBufferOf( + 0x00u, 0x00u, 0x00u, 0x05u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, + 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x07u, 0x4Eu, 0x65u, 0x74u, 0x77u, 0x6Fu, 0x72u, 0x6Bu, 0x00u, 0x00u, 0x00u, + 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x01u, 0x34u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x06u, + 0x75u, 0x70u, 0x64u, 0x61u, 0x74u, 0x65u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x21u, 0x00u, + 0x00u, 0x00u, 0x16u, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x77u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, + 0x6Bu, 0x00u, 0x4Eu, 0x00u, 0x61u, 0x00u, 0x6Du, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, + 0x00u, 0x22u, 0x00u, 0x3Cu, 0x00u, 0x6Eu, 0x00u, 0x6Fu, 0x00u, 0x74u, 0x00u, 0x20u, 0x00u, 0x69u, 0x00u, 0x6Eu, + 0x00u, 0x69u, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x61u, 0x00u, 0x6Cu, 0x00u, 0x69u, 0x00u, 0x7Au, 0x00u, 0x65u, + 0x00u, 0x64u, 0x00u, 0x3Eu, 0x00u, 0x00u, 0x00u, 0x1Au, 0x00u, 0x63u, 0x00u, 0x75u, 0x00u, 0x72u, 0x00u, 0x72u, + 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x76u, 0x00u, 0x65u, + 0x00u, 0x72u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, + 0x6Du, 0x00u, 0x79u, 0x00u, 0x4Eu, 0x00u, 0x69u, 0x00u, 0x63u, 0x00u, 0x6Bu, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Eu, 0x00u, 0x6Cu, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x65u, + 0x00u, 0x6Eu, 0x00u, 0x63u, 0x00u, 0x79u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x1Cu, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x46u, 0x00u, + 0x6Fu, 0x00u, 0x72u, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x76u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, + 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x05u, 0x55u, 0x54u, 0x46u, 0x5Fu, 0x38u, 0x00u, 0x00u, 0x00u, + 0x20u, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x46u, 0x00u, 0x6Fu, 0x00u, + 0x72u, 0x00u, 0x45u, 0x00u, 0x6Eu, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x64u, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, + 0x67u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x05u, 0x55u, 0x54u, 0x46u, 0x5Fu, 0x38u, 0x00u, + 0x00u, 0x00u, 0x20u, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x46u, 0x00u, + 0x6Fu, 0x00u, 0x72u, 0x00u, 0x44u, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x64u, 0x00u, 0x69u, 0x00u, + 0x6Eu, 0x00u, 0x67u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x05u, 0x55u, 0x54u, 0x46u, 0x5Fu, + 0x38u, 0x00u, 0x00u, 0x00u, 0x14u, 0x00u, 0x69u, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, + 0x69u, 0x00u, 0x74u, 0x00u, 0x79u, 0x00u, 0x49u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x7Fu, 0x00u, 0x00u, 0x00u, + 0x00u, 0x0Bu, 0x49u, 0x64u, 0x65u, 0x6Eu, 0x74u, 0x69u, 0x74u, 0x79u, 0x49u, 0x64u, 0x00u, 0xFFu, 0xFFu, 0xFFu, + 0xFFu, 0x00u, 0x00u, 0x00u, 0x16u, 0x00u, 0x69u, 0x00u, 0x73u, 0x00u, 0x43u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, + 0x6Eu, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x1Eu, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, + 0x63u, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x53u, 0x00u, 0x74u, 0x00u, 0x61u, 0x00u, + 0x74u, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x1Eu, + 0x00u, 0x75u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x52u, 0x00u, 0x61u, 0x00u, 0x6Eu, 0x00u, 0x64u, 0x00u, 0x6Fu, + 0x00u, 0x6Du, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x76u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x00u, + 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Eu, 0x00u, 0x70u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x66u, + 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x6Du, 0x00u, 0x00u, 0x00u, 0x0Bu, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x1Eu, 0x00u, 0x75u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x41u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, + 0x6Fu, 0x00u, 0x49u, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x66u, 0x00u, + 0x79u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x26u, 0x00u, 0x61u, 0x00u, 0x75u, 0x00u, + 0x74u, 0x00u, 0x6Fu, 0x00u, 0x49u, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, + 0x66u, 0x00u, 0x79u, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x76u, 0x00u, 0x69u, 0x00u, 0x63u, 0x00u, + 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x28u, 0x00u, 0x61u, + 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, 0x49u, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, + 0x00u, 0x69u, 0x00u, 0x66u, 0x00u, 0x79u, 0x00u, 0x50u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x77u, + 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x0Eu, 0x00u, 0x75u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x53u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, + 0x6Cu, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x16u, 0x00u, 0x73u, 0x00u, 0x61u, 0x00u, + 0x73u, 0x00u, 0x6Cu, 0x00u, 0x41u, 0x00u, 0x63u, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x75u, 0x00u, 0x6Eu, 0x00u, + 0x74u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x18u, 0x00u, 0x73u, + 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x6Cu, 0x00u, 0x50u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x77u, + 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x20u, 0x00u, 0x75u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x41u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, + 0x6Fu, 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, + 0x63u, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x2Au, 0x00u, 0x61u, 0x00u, + 0x75u, 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, + 0x6Eu, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x74u, 0x00u, 0x49u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, + 0x72u, 0x00u, 0x76u, 0x00u, 0x61u, 0x00u, 0x6Cu, 0x00u, 0x00u, 0x00u, 0x03u, 0x00u, 0x00u, 0x00u, 0x00u, 0x3Cu, + 0x00u, 0x00u, 0x00u, 0x28u, 0x00u, 0x61u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, 0x52u, 0x00u, 0x65u, + 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x74u, 0x00u, 0x52u, + 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x72u, 0x00u, 0x69u, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x85u, + 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x32u, 0x00u, 0x75u, 0x00u, 0x6Eu, 0x00u, 0x6Cu, 0x00u, 0x69u, 0x00u, + 0x6Du, 0x00u, 0x69u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x64u, 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, + 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x74u, 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, + 0x74u, 0x00u, 0x72u, 0x00u, 0x69u, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x1Cu, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x6Au, 0x00u, 0x6Fu, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, + 0x43u, 0x00u, 0x68u, 0x00u, 0x61u, 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, 0x73u, 0x00u, + 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x28u, 0x00u, 0x75u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, + 0x43u, 0x00u, 0x75u, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, 0x6Du, 0x00u, 0x4Du, 0x00u, 0x65u, 0x00u, + 0x73u, 0x00u, 0x73u, 0x00u, 0x61u, 0x00u, 0x67u, 0x00u, 0x65u, 0x00u, 0x52u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, + 0x65u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x20u, 0x00u, 0x6Du, 0x00u, 0x73u, 0x00u, + 0x67u, 0x00u, 0x52u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x42u, 0x00u, 0x75u, 0x00u, 0x72u, 0x00u, + 0x73u, 0x00u, 0x74u, 0x00u, 0x53u, 0x00u, 0x69u, 0x00u, 0x7Au, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x03u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x05u, 0x00u, 0x00u, 0x00u, 0x26u, 0x00u, 0x6Du, 0x00u, 0x73u, 0x00u, 0x67u, 0x00u, 0x52u, + 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x4Du, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x61u, + 0x00u, 0x67u, 0x00u, 0x65u, 0x00u, 0x44u, 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, 0x61u, 0x00u, 0x79u, 0x00u, 0x00u, + 0x00u, 0x03u, 0x00u, 0x00u, 0x00u, 0x08u, 0x98u, 0x00u, 0x00u, 0x00u, 0x28u, 0x00u, 0x75u, 0x00u, 0x6Eu, 0x00u, + 0x6Cu, 0x00u, 0x69u, 0x00u, 0x6Du, 0x00u, 0x69u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x64u, 0x00u, 0x4Du, 0x00u, + 0x65u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x61u, 0x00u, 0x67u, 0x00u, 0x65u, 0x00u, 0x52u, 0x00u, 0x61u, 0x00u, + 0x74u, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x73u, 0x00u, + 0x6Bu, 0x00u, 0x69u, 0x00u, 0x70u, 0x00u, 0x43u, 0x00u, 0x61u, 0x00u, 0x70u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, + 0x0Bu, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x53u, 0x00u, 0x75u, 0x00u, 0x70u, + 0x00u, 0x70u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x74u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x14u, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x76u, 0x00u, + 0x65u, 0x00u, 0x72u, 0x00u, 0x4Cu, 0x00u, 0x69u, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x09u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x43u, 0x00u, 0x61u, 0x00u, 0x70u, 0x00u, 0x73u, + 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x16u, 0x00u, 0x43u, 0x00u, + 0x61u, 0x00u, 0x70u, 0x00u, 0x73u, 0x00u, 0x45u, 0x00u, 0x6Eu, 0x00u, 0x61u, 0x00u, 0x62u, 0x00u, 0x6Cu, 0x00u, + 0x65u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x09u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x26u, + 0x00u, 0x49u, 0x00u, 0x72u, 0x00u, 0x63u, 0x00u, 0x55u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x73u, + 0x00u, 0x41u, 0x00u, 0x6Eu, 0x00u, 0x64u, 0x00u, 0x43u, 0x00u, 0x68u, 0x00u, 0x61u, 0x00u, 0x6Eu, 0x00u, 0x6Eu, + 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, + 0x00u, 0x00u, 0x0Au, 0x00u, 0x55u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, + 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x43u, 0x00u, 0x68u, 0x00u, 0x61u, + 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x00u, + ) + ) + } +} diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/syncables/NetworkTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/syncables/NetworkTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..75226e037500c1077c0e20330b48cfa348fd0215 --- /dev/null +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/syncables/NetworkTest.kt @@ -0,0 +1,104 @@ +/* + * libquassel + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This Source Code Form is subject to the terms of the Mozilla Public License, + * v. 2.0. If a copy of the MPL was not distributed with this file, You can + * obtain one at https://mozilla.org/MPL/2.0/. + */ + +package de.justjanne.libquassel.protocol.syncables + +import de.justjanne.libquassel.protocol.models.NetworkServer +import de.justjanne.libquassel.protocol.models.ids.IdentityId +import de.justjanne.libquassel.protocol.models.ids.NetworkId +import de.justjanne.libquassel.protocol.syncables.state.NetworkState +import de.justjanne.libquassel.protocol.testutil.nextEnum +import de.justjanne.libquassel.protocol.testutil.nextIrcChannel +import de.justjanne.libquassel.protocol.testutil.nextIrcUser +import de.justjanne.libquassel.protocol.testutil.nextString +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test +import kotlin.random.Random +import kotlin.random.nextUInt + +class NetworkTest { + @Test + fun testSerialization() { + val random = Random(1337) + val networkId = NetworkId(random.nextInt()) + val expected = random.nextNetwork(networkId) + + val actual = Network(state = NetworkState(networkId = networkId)).apply { + fromVariantMap(Network(state = expected).toVariantMap()) + }.state() + + assertEquals(expected, actual) + } +} + +fun Random.nextNetwork(networkId: NetworkId) = NetworkState( + networkId = networkId, + identity = IdentityId(nextInt()), + myNick = nextString(), + latency = nextInt(), + networkName = nextString(), + currentServer = nextString(), + connected = nextBoolean(), + connectionState = nextEnum(), + ircUsers = List(nextInt(20)) { + nextIrcUser(networkId) + }.associateBy(IrcUser::nick), + ircChannels = List(nextInt(20)) { + nextIrcChannel(networkId) + }.associateBy(IrcChannel::name), + supports = List(nextInt(20)) { + nextString() to nextString() + }.toMap(), + caps = List(nextInt(20)) { + nextString() to nextString() + }.toMap(), + capsEnabled = List(nextInt(20)) { + nextString() + }.toSet(), + serverList = List(nextInt(20)) { + nextNetworkServer() + }, + useRandomServer = nextBoolean(), + perform = List(nextInt(20)) { + nextString() + }, + useAutoIdentify = nextBoolean(), + autoIdentifyService = nextString(), + autoIdentifyPassword = nextString(), + useSasl = nextBoolean(), + saslAccount = nextString(), + saslPassword = nextString(), + useAutoReconnect = nextBoolean(), + autoReconnectInterval = nextUInt(), + autoReconnectRetries = nextUInt(UShort.MAX_VALUE.toUInt()).toUShort(), + unlimitedReconnectRetries = nextBoolean(), + rejoinChannels = nextBoolean(), + useCustomMessageRate = nextBoolean(), + messageRateBurstSize = nextUInt(), + messageRateDelay = nextUInt(), + codecForServer = nextString(), + codecForEncoding = nextString(), + codecForDecoding = nextString() +) + +fun Random.nextNetworkServer() = NetworkServer( + host = nextString(), + port = nextUInt(), + password = nextString(), + useSsl = nextBoolean(), + sslVerify = nextBoolean(), + sslVersion = nextInt(), + useProxy = nextBoolean(), + proxyType = nextEnum(), + proxyHost = nextString(), + proxyPort = nextUInt(), + proxyUser = nextString(), + proxyPass = nextString() +) diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/Random.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/Random.kt new file mode 100644 index 0000000000000000000000000000000000000000..29f8612e7f54ebada674d6422a23867948c78269 --- /dev/null +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/Random.kt @@ -0,0 +1,75 @@ +/* + * libquassel + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This Source Code Form is subject to the terms of the Mozilla Public License, + * v. 2.0. If a copy of the MPL was not distributed with this file, You can + * obtain one at https://mozilla.org/MPL/2.0/. + */ + +package de.justjanne.libquassel.protocol.testutil + +import de.justjanne.libquassel.protocol.models.ids.NetworkId +import de.justjanne.libquassel.protocol.syncables.IrcChannel +import de.justjanne.libquassel.protocol.syncables.IrcUser +import de.justjanne.libquassel.protocol.syncables.state.IrcChannelState +import de.justjanne.libquassel.protocol.syncables.state.IrcUserState +import org.threeten.bp.Instant +import java.util.EnumSet +import java.util.UUID +import kotlin.random.Random + +fun Random.nextString(): String { + return UUID(nextLong(), nextLong()).toString() +} + +fun <T> Random.nextOf(elements: Collection<T>): T { + val index = nextInt(elements.size) + return elements.drop(index).first() +} + +fun <T> Random.nextOf(vararg elements: T): T { + return nextOf(elements.toList()) +} + +inline fun <reified T: Enum<T>> Random.nextEnum(): T { + return nextOf(EnumSet.allOf(T::class.java).toList()) +} + +fun Random.nextInstant(): Instant = Instant.ofEpochMilli(nextLong()) + +fun Random.nextIrcUser( + networkId: NetworkId = NetworkId(nextInt()) +) = IrcUser( + state = IrcUserState( + network = networkId, + nick = nextString(), + user = nextString(), + host = nextString(), + realName = nextString(), + account = nextString(), + away = nextBoolean(), + awayMessage = nextString(), + idleTime = nextInstant(), + loginTime = nextInstant(), + server = nextString(), + ircOperator = nextString(), + lastAwayMessageTime = nextInstant(), + whoisServiceReply = nextString(), + suserHost = nextString(), + encrypted = nextBoolean() + ) +) + +fun Random.nextIrcChannel( + networkId: NetworkId = NetworkId(nextInt()) +) = IrcChannel( + state = IrcChannelState( + network = networkId, + name = nextString(), + topic = nextString(), + password = nextString(), + encrypted = nextBoolean() + ) +) diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/handshakeSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/handshakeSerializerTest.kt index 85266a82f33623848dae6a6a61e2622d25a8d7d4..d20a0e266cab9f3262416caf2b13143b74217eaf 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/handshakeSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/handshakeSerializerTest.kt @@ -19,6 +19,7 @@ package de.justjanne.libquassel.protocol.testutil import de.justjanne.libquassel.protocol.features.FeatureSet +import de.justjanne.libquassel.protocol.io.contentToString import de.justjanne.libquassel.protocol.io.useChainedByteBuffer import de.justjanne.libquassel.protocol.models.HandshakeMessage import de.justjanne.libquassel.protocol.serializers.HandshakeMessageSerializer @@ -26,8 +27,10 @@ import de.justjanne.libquassel.protocol.testutil.matchers.ByteBufferMatcher import de.justjanne.libquassel.protocol.util.withRewind import org.hamcrest.Matcher import org.hamcrest.MatcherAssert.assertThat +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertTrue import java.nio.ByteBuffer -import kotlin.test.assertEquals inline fun <reified T : HandshakeMessage> handshakeSerializerTest( value: T, @@ -43,7 +46,7 @@ inline fun <reified T : HandshakeMessage> handshakeSerializerTest( if (matcher != null) { assertThat(after, matcher(value)) } else { - assertEquals(after, value) + assertEquals(value, after) } } if (serializeFeatureSet != null) { @@ -61,9 +64,10 @@ inline fun <reified T : HandshakeMessage> handshakeSerializerTest( HandshakeMessageSerializer.serialize(it, value, featureSet) }, featureSet - ) as? T + ) + assertEquals(T::class.java, after::class.java) if (matcher != null) { - assertThat(after, matcher(value)) + assertThat(after as? T, matcher(value)) } else { assertEquals(value, after) } diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/signalProxySerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/signalProxySerializerTest.kt index 782d6a5232351b73d05ae7ac88e4c6743cd2b8ec..8c64d8f8ca8e6d9e03561b6c9825d75c4b863192 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/signalProxySerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/signalProxySerializerTest.kt @@ -19,6 +19,7 @@ package de.justjanne.libquassel.protocol.testutil import de.justjanne.libquassel.protocol.features.FeatureSet +import de.justjanne.libquassel.protocol.io.contentToString import de.justjanne.libquassel.protocol.io.useChainedByteBuffer import de.justjanne.libquassel.protocol.models.SignalProxyMessage import de.justjanne.libquassel.protocol.serializers.SignalProxyMessageSerializer @@ -26,8 +27,8 @@ import de.justjanne.libquassel.protocol.testutil.matchers.ByteBufferMatcher import de.justjanne.libquassel.protocol.util.withRewind import org.hamcrest.Matcher import org.hamcrest.MatcherAssert.assertThat +import org.junit.jupiter.api.Assertions.assertEquals import java.nio.ByteBuffer -import kotlin.test.assertEquals inline fun <reified T : SignalProxyMessage> signalProxySerializerTest( value: T, @@ -43,7 +44,7 @@ inline fun <reified T : SignalProxyMessage> signalProxySerializerTest( if (matcher != null) { assertThat(after, matcher(value)) } else { - assertEquals(after, value) + assertEquals(value, after) } } if (serializeFeatureSet != null) { @@ -59,11 +60,15 @@ inline fun <reified T : SignalProxyMessage> signalProxySerializerTest( val after = SignalProxyMessageSerializer.deserialize( useChainedByteBuffer { SignalProxyMessageSerializer.serialize(it, value, featureSet) + if (encoded == null) { + println(it.toBuffer().contentToString()) + } }, featureSet - ) as? T + ) + assertEquals(T::class.java, after::class.java) if (matcher != null) { - assertThat(after, matcher(value)) + assertThat(after as? T, matcher(value)) } else { assertEquals(value, after) } diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/testPrimitiveSerializerDirect.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/testPrimitiveSerializerDirect.kt index 186c429f0cc8fb344835fffa20410583fd02d099..7c9709d1e38820ed38f908c1cb3002a8db97f596 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/testPrimitiveSerializerDirect.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/testPrimitiveSerializerDirect.kt @@ -35,7 +35,6 @@ fun <T> testPrimitiveSerializerDirect( val buffer = ChainedByteBuffer(limit = 16384) serializer.serialize(buffer, data, featureSet) val result = buffer.toBuffer() - println(result.contentToString()) val after = serializer.deserialize(result, featureSet) assertEquals(0, result.remaining()) if (matcher != null) { diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/types/SignedIdTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/types/SignedIdTest.kt index 63c9b25e7d71161e70336a71de8704208a38da14..66bdb6d8be3824fbb64206c65f701b4334aa4f29 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/types/SignedIdTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/types/SignedIdTest.kt @@ -33,33 +33,121 @@ class SignedIdTest { @Test fun testNegativeOne() { assertFalse(BufferId(-1).isValid()) + assertFalse(SignedIdProxy.isValidId(BufferId(-1))) assertFalse(IdentityId(-1).isValid()) + assertFalse(SignedIdProxy.isValidId(IdentityId(-1))) assertFalse(MsgId(-1).isValid()) + assertFalse(SignedIdProxy.isValidId64(MsgId(-1))) assertFalse(NetworkId(-1).isValid()) + assertFalse(SignedIdProxy.isValidId(NetworkId(-1))) + + assertEquals("BufferId(-1)", BufferId(-1).toString()) + assertEquals("BufferId(-1)", SignedIdProxy.toString(BufferId(-1))) + assertEquals("IdentityId(-1)", IdentityId(-1).toString()) + assertEquals("IdentityId(-1)", SignedIdProxy.toString(IdentityId(-1))) + assertEquals("MsgId(-1)", MsgId(-1).toString()) + assertEquals("MsgId(-1)", SignedIdProxy.toString(MsgId(-1))) + assertEquals("NetworkId(-1)", NetworkId(-1).toString()) + assertEquals("NetworkId(-1)", SignedIdProxy.toString(NetworkId(-1))) + + assertEquals((-1).hashCode(), BufferId(-1).hashCode()) + assertEquals((-1).hashCode(), SignedIdProxy.hashCode(BufferId(-1))) + assertEquals((-1).hashCode(), IdentityId(-1).hashCode()) + assertEquals((-1).hashCode(), SignedIdProxy.hashCode(IdentityId(-1))) + assertEquals((-1L).hashCode(), MsgId(-1).hashCode()) + assertEquals((-1L).hashCode(), SignedIdProxy.hashCode(MsgId(-1))) + assertEquals((-1).hashCode(), NetworkId(-1).hashCode()) + assertEquals((-1).hashCode(), SignedIdProxy.hashCode(NetworkId(-1))) } @Test fun testZero() { assertFalse(BufferId(0).isValid()) + assertFalse(SignedIdProxy.isValidId(BufferId(0))) assertFalse(IdentityId(0).isValid()) + assertFalse(SignedIdProxy.isValidId(IdentityId(0))) assertFalse(MsgId(0).isValid()) + assertFalse(SignedIdProxy.isValidId64(MsgId(0))) assertFalse(NetworkId(0).isValid()) + assertFalse(SignedIdProxy.isValidId(NetworkId(0))) + + assertEquals("BufferId(0)", BufferId(0).toString()) + assertEquals("BufferId(0)", SignedIdProxy.toString(BufferId(0))) + assertEquals("IdentityId(0)", IdentityId(0).toString()) + assertEquals("IdentityId(0)", SignedIdProxy.toString(IdentityId(0))) + assertEquals("MsgId(0)", MsgId(0).toString()) + assertEquals("MsgId(0)", SignedIdProxy.toString(MsgId(0))) + assertEquals("NetworkId(0)", NetworkId(0).toString()) + assertEquals("NetworkId(0)", SignedIdProxy.toString(NetworkId(0))) + + assertEquals(0.hashCode(), BufferId(0).hashCode()) + assertEquals(0.hashCode(), SignedIdProxy.hashCode(BufferId(0))) + assertEquals(0.hashCode(), IdentityId(0).hashCode()) + assertEquals(0.hashCode(), SignedIdProxy.hashCode(IdentityId(0))) + assertEquals(0.hashCode(), MsgId(0).hashCode()) + assertEquals(0.hashCode(), SignedIdProxy.hashCode(MsgId(0))) + assertEquals(0.hashCode(), NetworkId(0).hashCode()) + assertEquals(0.hashCode(), SignedIdProxy.hashCode(NetworkId(0))) } @Test fun testMinimal() { assertFalse(BufferId(Int.MIN_VALUE).isValid()) + assertFalse(SignedIdProxy.isValidId(BufferId(Int.MIN_VALUE))) assertFalse(IdentityId(Int.MIN_VALUE).isValid()) + assertFalse(SignedIdProxy.isValidId(IdentityId(Int.MIN_VALUE))) assertFalse(MsgId(Long.MIN_VALUE).isValid()) + assertFalse(SignedIdProxy.isValidId64(MsgId(Long.MIN_VALUE))) assertFalse(NetworkId(Int.MIN_VALUE).isValid()) + assertFalse(SignedIdProxy.isValidId(NetworkId(Int.MIN_VALUE))) + + assertEquals("BufferId(-2147483648)", BufferId(Int.MIN_VALUE).toString()) + assertEquals("BufferId(-2147483648)", SignedIdProxy.toString(BufferId(Int.MIN_VALUE))) + assertEquals("IdentityId(-2147483648)", IdentityId(Int.MIN_VALUE).toString()) + assertEquals("IdentityId(-2147483648)", SignedIdProxy.toString(IdentityId(Int.MIN_VALUE))) + assertEquals("MsgId(-9223372036854775808)", MsgId(Long.MIN_VALUE).toString()) + assertEquals("MsgId(-9223372036854775808)", SignedIdProxy.toString(MsgId(Long.MIN_VALUE))) + assertEquals("NetworkId(-2147483648)", NetworkId(Int.MIN_VALUE).toString()) + assertEquals("NetworkId(-2147483648)", SignedIdProxy.toString(NetworkId(Int.MIN_VALUE))) + + assertEquals(Int.MIN_VALUE.hashCode(), BufferId(Int.MIN_VALUE).hashCode()) + assertEquals(Int.MIN_VALUE.hashCode(), SignedIdProxy.hashCode(BufferId(Int.MIN_VALUE))) + assertEquals(Int.MIN_VALUE.hashCode(), IdentityId(Int.MIN_VALUE).hashCode()) + assertEquals(Int.MIN_VALUE.hashCode(), SignedIdProxy.hashCode(IdentityId(Int.MIN_VALUE))) + assertEquals(Long.MIN_VALUE.hashCode(), MsgId(Long.MIN_VALUE).hashCode()) + assertEquals(Long.MIN_VALUE.hashCode(), SignedIdProxy.hashCode(MsgId(Long.MIN_VALUE))) + assertEquals(Int.MIN_VALUE.hashCode(), NetworkId(Int.MIN_VALUE).hashCode()) + assertEquals(Int.MIN_VALUE.hashCode(), SignedIdProxy.hashCode(NetworkId(Int.MIN_VALUE))) } @Test fun testMaximum() { assertTrue(BufferId(Int.MAX_VALUE).isValid()) + assertTrue(SignedIdProxy.isValidId(BufferId(Int.MAX_VALUE))) assertTrue(IdentityId(Int.MAX_VALUE).isValid()) + assertTrue(SignedIdProxy.isValidId(IdentityId(Int.MAX_VALUE))) assertTrue(MsgId(Long.MAX_VALUE).isValid()) + assertTrue(SignedIdProxy.isValidId64(MsgId(Long.MAX_VALUE))) assertTrue(NetworkId(Int.MAX_VALUE).isValid()) + assertTrue(SignedIdProxy.isValidId(NetworkId(Int.MAX_VALUE))) + + assertEquals("BufferId(2147483647)", BufferId(Int.MAX_VALUE).toString()) + assertEquals("BufferId(2147483647)", SignedIdProxy.toString(BufferId(Int.MAX_VALUE))) + assertEquals("IdentityId(2147483647)", IdentityId(Int.MAX_VALUE).toString()) + assertEquals("IdentityId(2147483647)", SignedIdProxy.toString(IdentityId(Int.MAX_VALUE))) + assertEquals("MsgId(9223372036854775807)", MsgId(Long.MAX_VALUE).toString()) + assertEquals("MsgId(9223372036854775807)", SignedIdProxy.toString(MsgId(Long.MAX_VALUE))) + assertEquals("NetworkId(2147483647)", NetworkId(Int.MAX_VALUE).toString()) + assertEquals("NetworkId(2147483647)", SignedIdProxy.toString(NetworkId(Int.MAX_VALUE))) + + assertEquals(Int.MAX_VALUE.hashCode(), BufferId(Int.MAX_VALUE).hashCode()) + assertEquals(Int.MAX_VALUE.hashCode(), SignedIdProxy.hashCode(BufferId(Int.MAX_VALUE))) + assertEquals(Int.MAX_VALUE.hashCode(), IdentityId(Int.MAX_VALUE).hashCode()) + assertEquals(Int.MAX_VALUE.hashCode(), SignedIdProxy.hashCode(IdentityId(Int.MAX_VALUE))) + assertEquals(Long.MAX_VALUE.hashCode(), MsgId(Long.MAX_VALUE).hashCode()) + assertEquals(Long.MAX_VALUE.hashCode(), SignedIdProxy.hashCode(MsgId(Long.MAX_VALUE))) + assertEquals(Int.MAX_VALUE.hashCode(), NetworkId(Int.MAX_VALUE).hashCode()) + assertEquals(Int.MAX_VALUE.hashCode(), SignedIdProxy.hashCode(NetworkId(Int.MAX_VALUE))) } @Test diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/util/collections/InsertTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/util/collections/InsertTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..b35d4aab7e9a87110ed7a7f53c94c2c6a3405430 --- /dev/null +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/util/collections/InsertTest.kt @@ -0,0 +1,66 @@ +/* + * libquassel + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This Source Code Form is subject to the terms of the Mozilla Public License, + * v. 2.0. If a copy of the MPL was not distributed with this file, You can + * obtain one at https://mozilla.org/MPL/2.0/. + */ + +package de.justjanne.libquassel.protocol.util.collections + +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test + +class InsertTest { + @Test + fun whenListIsEmptyReturnsSingletonList() { + for (i in -1024..1024) { + assertEquals( + listOf(7), + emptyList<Int>().insert(7, i) + ) + } + } + + @Test + fun prependsForNegativeOrNull() { + for (i in -1024..0) { + assertEquals( + listOf(7, 1, 2, 3), + listOf(1, 2, 3).insert(7, i) + ) + } + } + + @Test + fun appendsForOutOfBounds() { + for (i in 3..1024) { + assertEquals( + listOf(1, 2, 3, 7), + listOf(1, 2, 3).insert(7, i) + ) + } + } + + @Test + fun appendsForNoParameter() { + assertEquals( + listOf(1, 2, 3, 7), + listOf(1, 2, 3).insert(7) + ) + } + + @Test + fun isEquivalentToMutableAdd() { + for (i in -1024..1024) { + val before = listOf(1, 2, 3, 4, 5).shuffled() + val afterMutable = before.toMutableList().apply { + add(i.coerceIn(0..before.size), 7) + } + val afterImmutable = before.insert(7, i) + assertEquals(afterMutable, afterImmutable) + } + } +} diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/util/collections/MoveTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/util/collections/MoveTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..5b16a3b54bcafdc70138f4c68f3f2a3f6d0112df --- /dev/null +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/util/collections/MoveTest.kt @@ -0,0 +1,55 @@ +/* + * libquassel + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This Source Code Form is subject to the terms of the Mozilla Public License, + * v. 2.0. If a copy of the MPL was not distributed with this file, You can + * obtain one at https://mozilla.org/MPL/2.0/. + */ + +package de.justjanne.libquassel.protocol.util.collections + +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test + +class MoveTest { + @Test + fun appendsForOutOfBounds() { + for (i in 6..1024) { + assertEquals( + listOf(1, 2, 3, 4, 5, 7), + listOf(1, 2, 7, 3, 4, 5).move(7, i) + ) + } + } + + @Test + fun appendsForNoParameter() { + assertEquals( + listOf(1, 2, 3, 4, 5, 7), + listOf(1, 2, 7, 3, 4, 5).move(7) + ) + } + + @Test + fun prependsForNegativeOrNull() { + for (i in -1024..0) { + assertEquals( + listOf(7, 1, 2, 3, 4, 5), + listOf(1, 2, 7, 3, 4, 5).move(7, i) + ) + } + } + + @Test + fun noopIfUnchanged() { + for (i in 0..1024) { + val data = listOf(1, 2, 3, 4, 5, 7).shuffled() + assertEquals( + data, + data.move(7, data.indexOf(7)) + ) + } + } +} diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/util/collections/PairsTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/util/collections/PairsTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..0b86745b8dca4b0fe372951d153a6e782fd79226 --- /dev/null +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/util/collections/PairsTest.kt @@ -0,0 +1,54 @@ +/* + * libquassel + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This Source Code Form is subject to the terms of the Mozilla Public License, + * v. 2.0. If a copy of the MPL was not distributed with this file, You can + * obtain one at https://mozilla.org/MPL/2.0/. + */ + +package de.justjanne.libquassel.protocol.util.collections + +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test + +class PairsTest { + @Test + fun testFunctionality() { + val list = (0 until 1024).map { + Pair(Math.random(), Math.random()) + } + assertEquals( + list, + PairsProxy.call( + list.flatMap { listOf(it.first, it.second) }, + ::Pair + ) + ) + assertEquals( + list, + list.flatMap { listOf(it.first, it.second) }.pairs() + ) + } + + @Test + fun testMalformedPairs() { + val list = (0 until 1024).map { + Pair(Math.random(), Math.random()) + } + assertEquals( + list.subList(0, 256), + PairsProxy.call( + list.flatMap { listOf(it.first, it.second) } + .subList(0, 513), + ::Pair + ) + ) + assertEquals( + list.subList(0, 256), + list.flatMap { listOf(it.first, it.second) } + .subList(0, 513).pairs() + ) + } +} diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/util/collections/RemoveTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/util/collections/RemoveTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..98285c40e6f38ea4e8163b5182ea09525195f057 --- /dev/null +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/util/collections/RemoveTest.kt @@ -0,0 +1,28 @@ +/* + * libquassel + * Copyright (c) 2021 Janne Mareike Koschinski + * Copyright (c) 2021 The Quassel Project + * + * This Source Code Form is subject to the terms of the Mozilla Public License, + * v. 2.0. If a copy of the MPL was not distributed with this file, You can + * obtain one at https://mozilla.org/MPL/2.0/. + */ + +package de.justjanne.libquassel.protocol.util.collections + +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test + +class RemoveTest { + @Test + fun isEquivalentToMutableRemove() { + for (i in -1024..1024) { + val before = listOf(1, 2, 3, 4, 5).shuffled() + val afterMutable = before.toMutableList().apply { + remove(i) + } + val afterImmutable = before.remove(i) + assertEquals(afterMutable, afterImmutable) + } + } +} diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/util/expansion/ExpansionTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/util/expansion/ExpansionTest.kt index 1e640e5f7711ddb20df1177542c7507732d81b70..142a896d47e9b538edf76a5907549016dcdd1d3a 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/util/expansion/ExpansionTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/util/expansion/ExpansionTest.kt @@ -10,8 +10,8 @@ package de.justjanne.libquassel.protocol.util.expansion +import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test -import kotlin.test.assertEquals class ExpansionTest { @Test diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/util/expression/ExpressionMatchTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/util/expression/ExpressionMatchTest.kt index a485e5a33a74747638830c145a23b3aeaef42037..faa0547d12cbdf9762a1fad1df07f4ea8d2af11f 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/util/expression/ExpressionMatchTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/util/expression/ExpressionMatchTest.kt @@ -90,11 +90,6 @@ class ExpressionMatchTest { @Test fun matchMultiPhrase() { - val emptyMatch = - ExpressionMatch( - "\n\n", - ExpressionMatch.MatchMode.MatchMultiPhrase, false - ) // Simple phrases, case-insensitive val simpleMatch = ExpressionMatch( "test\nOther ", @@ -118,9 +113,6 @@ class ExpressionMatchTest { false ) - println(simpleMatch.positiveRegex) - println(simpleMatch.negativeRegex) - // Assert valid and not empty assertFalse(simpleMatch.isEmpty()) assertFalse(simpleMatchCS.isEmpty()) @@ -430,7 +422,6 @@ class ExpressionMatchTest { ExpressionMatch.MatchMode.MatchWildcard, caseSensitive = false ) - println(mask1.positiveRegex) assertTrue(mask1.match("coolguy!ab@127.0.0.1")) assertTrue(mask1.match("cooldud3!~bc@127.0.0.1")) assertFalse(mask1.match("coolguy!ab@127.0.0.5")) @@ -441,7 +432,6 @@ class ExpressionMatchTest { ExpressionMatch.MatchMode.MatchWildcard, caseSensitive = false ) - println(mask2.positiveRegex) assertTrue(mask2.match("coolguy!ab@127.0.0.1")) assertTrue(mask2.match("cooldud3!~bc@127.0.0.1")) assertTrue(mask2.match("cool132!ab@example.com")) @@ -453,7 +443,6 @@ class ExpressionMatchTest { ExpressionMatch.MatchMode.MatchWildcard, caseSensitive = false ) - println(mask3.positiveRegex) assertTrue(mask3.match("cool!guyab@127.0.0.1")) assertTrue(mask3.match("cool!~dudebc@127.0.0.1")) assertTrue(mask3.match("cool!312ab@example.com")) @@ -468,7 +457,6 @@ class ExpressionMatchTest { ExpressionMatch.MatchMode.MatchWildcard, caseSensitive = false ) - println(mask4.positiveRegex) assertTrue(mask4.match("cool[guy]!guy@127.0.0.1")) assertTrue(mask4.match("cool[guy]!a@example.com")) assertFalse(mask4.match("coolg!ab@127.0.0.1"))