diff --git a/amethyst/src/test/java/com/vitorpamplona/amethyst/SplitterTest.kt b/amethyst/src/test/java/com/vitorpamplona/amethyst/SplitterTest.kt index a3561eb32..c62d39b2e 100644 --- a/amethyst/src/test/java/com/vitorpamplona/amethyst/SplitterTest.kt +++ b/amethyst/src/test/java/com/vitorpamplona/amethyst/SplitterTest.kt @@ -28,7 +28,7 @@ import io.mockk.impl.annotations.SpyK import io.mockk.mockk import io.mockk.mockkStatic import io.mockk.unmockkAll -import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.test.runTest import org.junit.After import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse @@ -54,7 +54,7 @@ class SplitterTest { @Test fun testSplit() = - runBlocking { + runTest { val vitor = mySplitBuilder.addItem("Vitor") assertEquals(1f, mySplitBuilder.items[vitor].percentage, 0.01f) diff --git a/quartz/build.gradle.kts b/quartz/build.gradle.kts index c88dbde63..664ef157f 100644 --- a/quartz/build.gradle.kts +++ b/quartz/build.gradle.kts @@ -117,6 +117,7 @@ kotlin { commonTest { dependencies { implementation(libs.kotlin.test) + implementation(libs.kotlinx.coroutines.test) } } @@ -148,6 +149,7 @@ kotlin { dependsOn(commonTest.get()) dependencies { implementation(libs.kotlin.test) + implementation(libs.kotlinx.coroutines.test) } } @@ -201,6 +203,7 @@ kotlin { implementation(libs.androidx.core) implementation(libs.androidx.junit) implementation(libs.androidx.espresso.core) + implementation(libs.kotlinx.coroutines.test) } } diff --git a/quartz/src/androidInstrumentedTest/kotlin/com/vitorpamplona/quartz/nip19Bech32/NIP19EmbedTests.kt b/quartz/src/androidInstrumentedTest/kotlin/com/vitorpamplona/quartz/nip19Bech32/NIP19EmbedTests.kt index eaa681d54..64c5236a1 100644 --- a/quartz/src/androidInstrumentedTest/kotlin/com/vitorpamplona/quartz/nip19Bech32/NIP19EmbedTests.kt +++ b/quartz/src/androidInstrumentedTest/kotlin/com/vitorpamplona/quartz/nip19Bech32/NIP19EmbedTests.kt @@ -31,7 +31,7 @@ import com.vitorpamplona.quartz.nip19Bech32.entities.NEmbed import com.vitorpamplona.quartz.utils.Hex import junit.framework.TestCase.assertNotNull import junit.framework.TestCase.assertTrue -import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.test.runTest import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith @@ -39,109 +39,102 @@ import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) class NIP19EmbedTests { @Test - fun testEmbedKind1Event() { - val signer = - NostrSignerInternal( - KeyPair(Hex.decode("e8e7197ccc53c9ed4cf9b1c8dce085475fa1ffdd71f2c14e44fe23d0bdf77598")), - ) + fun testEmbedKind1Event() = + runTest { + val signer = + NostrSignerInternal( + KeyPair(Hex.decode("e8e7197ccc53c9ed4cf9b1c8dce085475fa1ffdd71f2c14e44fe23d0bdf77598")), + ) - val textNote: TextNoteEvent = - runBlocking { + val textNote = signer.sign( TextNoteEvent.build("I like this. It could solve the ninvite problem in #1062, and it seems like it could be applied very broadly to limit the spread of events that shouldn't stand on their own or need to be private. The one question I have is how long are these embeds? If it's 50 lines of text, that breaks the human readable (or at least parseable) requirement of kind 1s. Also, encoding json in a tlv is silly, we should at least use the tlv to reduce the payload size."), ) - } - assertNotNull(textNote) + assertNotNull(textNote) - val bech32 = NEmbed.create(textNote) + val bech32 = NEmbed.create(textNote) - println(bech32) + println(bech32) - val decodedNote = (Nip19Parser.uriToRoute(bech32)?.entity as NEmbed).event + val decodedNote = (Nip19Parser.uriToRoute(bech32)?.entity as NEmbed).event - assertTrue(decodedNote.verify()) + assertTrue(decodedNote.verify()) - assertEquals(textNote.toJson(), decodedNote.toJson()) - } + assertEquals(textNote.toJson(), decodedNote.toJson()) + } @Test - fun testVisionPrescriptionEmbedEvent() { - val signer = - NostrSignerInternal( - KeyPair(Hex.decode("e8e7197ccc53c9ed4cf9b1c8dce085475fa1ffdd71f2c14e44fe23d0bdf77598")), - ) + fun testVisionPrescriptionEmbedEvent() = + runTest { + val signer = + NostrSignerInternal( + KeyPair(Hex.decode("e8e7197ccc53c9ed4cf9b1c8dce085475fa1ffdd71f2c14e44fe23d0bdf77598")), + ) - val eyeglassesPrescriptionEvent = - runBlocking { - signer.sign(FhirResourceEvent.build(visionPrescriptionFhir)) - } + val eyeglassesPrescriptionEvent = signer.sign(FhirResourceEvent.build(visionPrescriptionFhir)) - assertNotNull(eyeglassesPrescriptionEvent) + assertNotNull(eyeglassesPrescriptionEvent) - val bech32 = NEmbed.create(eyeglassesPrescriptionEvent) + val bech32 = NEmbed.create(eyeglassesPrescriptionEvent) - println(eyeglassesPrescriptionEvent.toJson()) - println(bech32) + println(eyeglassesPrescriptionEvent.toJson()) + println(bech32) - val decodedNote = (Nip19Parser.uriToRoute(bech32)?.entity as NEmbed).event + val decodedNote = (Nip19Parser.uriToRoute(bech32)?.entity as NEmbed).event - assertTrue(decodedNote.verify()) + assertTrue(decodedNote.verify()) - assertEquals(eyeglassesPrescriptionEvent.toJson(), decodedNote.toJson()) - } + assertEquals(eyeglassesPrescriptionEvent.toJson(), decodedNote.toJson()) + } @Test - fun testVisionPrescriptionBundleEmbedEvent() { - val signer = - NostrSignerInternal( - KeyPair(Hex.decode("e8e7197ccc53c9ed4cf9b1c8dce085475fa1ffdd71f2c14e44fe23d0bdf77598")), - ) + fun testVisionPrescriptionBundleEmbedEvent() = + runTest { + val signer = + NostrSignerInternal( + KeyPair(Hex.decode("e8e7197ccc53c9ed4cf9b1c8dce085475fa1ffdd71f2c14e44fe23d0bdf77598")), + ) - val eyeglassesPrescriptionEvent = - runBlocking { - signer.sign(FhirResourceEvent.build(visionPrescriptionBundle)) - } + val eyeglassesPrescriptionEvent = signer.sign(FhirResourceEvent.build(visionPrescriptionBundle)) - assertNotNull(eyeglassesPrescriptionEvent) + assertNotNull(eyeglassesPrescriptionEvent) - val bech32 = NEmbed.create(eyeglassesPrescriptionEvent) + val bech32 = NEmbed.create(eyeglassesPrescriptionEvent) - println(eyeglassesPrescriptionEvent.toJson()) - println(bech32) + println(eyeglassesPrescriptionEvent.toJson()) + println(bech32) - val decodedNote = (Nip19Parser.uriToRoute(bech32)?.entity as NEmbed).event + val decodedNote = (Nip19Parser.uriToRoute(bech32)?.entity as NEmbed).event - assertTrue(decodedNote.verify()) + assertTrue(decodedNote.verify()) - assertEquals(eyeglassesPrescriptionEvent.toJson(), decodedNote.toJson()) - } + assertEquals(eyeglassesPrescriptionEvent.toJson(), decodedNote.toJson()) + } @Test - fun testVisionPrescriptionBundle2EmbedEvent() { - val signer = - NostrSignerInternal( - KeyPair(decodePrivateKeyAsHexOrNull("nsec1arn3jlxv20y76n8ek8ydecy9ga06rl7aw8evznjylc3ap00hwkvqx4vvy6")!!.hexToByteArray()), - ) + fun testVisionPrescriptionBundle2EmbedEvent() = + runTest { + val signer = + NostrSignerInternal( + KeyPair(decodePrivateKeyAsHexOrNull("nsec1arn3jlxv20y76n8ek8ydecy9ga06rl7aw8evznjylc3ap00hwkvqx4vvy6")!!.hexToByteArray()), + ) - val eyeglassesPrescriptionEvent = - runBlocking { - signer.sign(FhirResourceEvent.build(visionPrescriptionBundle2)) - } + val eyeglassesPrescriptionEvent = signer.sign(FhirResourceEvent.build(visionPrescriptionBundle2)) - assertNotNull(eyeglassesPrescriptionEvent) + assertNotNull(eyeglassesPrescriptionEvent) - val bech32 = NEmbed.create(eyeglassesPrescriptionEvent) + val bech32 = NEmbed.create(eyeglassesPrescriptionEvent) - println(eyeglassesPrescriptionEvent.toJson()) - println(bech32) + println(eyeglassesPrescriptionEvent.toJson()) + println(bech32) - val decodedNote = (Nip19Parser.uriToRoute(bech32)?.entity as NEmbed).event + val decodedNote = (Nip19Parser.uriToRoute(bech32)?.entity as NEmbed).event - assertTrue(decodedNote.verify()) + assertTrue(decodedNote.verify()) - assertEquals(eyeglassesPrescriptionEvent.toJson(), decodedNote.toJson()) - } + assertEquals(eyeglassesPrescriptionEvent.toJson(), decodedNote.toJson()) + } @Test fun testTimsNembed() { diff --git a/quartz/src/androidInstrumentedTest/kotlin/com/vitorpamplona/quartz/nip46RemoteSigner/Nip46Test.kt b/quartz/src/androidInstrumentedTest/kotlin/com/vitorpamplona/quartz/nip46RemoteSigner/Nip46Test.kt index 720b47e1a..d27a0e9aa 100644 --- a/quartz/src/androidInstrumentedTest/kotlin/com/vitorpamplona/quartz/nip46RemoteSigner/Nip46Test.kt +++ b/quartz/src/androidInstrumentedTest/kotlin/com/vitorpamplona/quartz/nip46RemoteSigner/Nip46Test.kt @@ -27,7 +27,7 @@ import com.vitorpamplona.quartz.nip01Core.signers.EventTemplate import com.vitorpamplona.quartz.nip01Core.signers.NostrSignerInternal import com.vitorpamplona.quartz.nip10Notes.TextNoteEvent import com.vitorpamplona.quartz.utils.TimeUtils -import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.test.runTest import org.junit.Assert.assertEquals import org.junit.Ignore import org.junit.Test @@ -65,7 +65,7 @@ internal class Nip46Test { @Test fun signEncoder() = - runBlocking { + runTest { val expected = BunkerRequestSign(event = dummyEvent) val actual = encodeDecodeEvent(expected) @@ -76,7 +76,7 @@ internal class Nip46Test { @Test fun connectEncoder() = - runBlocking { + runTest { val expected = BunkerRequestConnect(remoteKey = remoteKey.pubKey) val actual = encodeDecodeEvent(expected) @@ -86,7 +86,7 @@ internal class Nip46Test { @Test fun pingEncoder() = - runBlocking { + runTest { val expected = BunkerRequestPing() val actual = encodeDecodeEvent(expected) @@ -96,7 +96,7 @@ internal class Nip46Test { @Test fun getPubkeyEncoder() = - runBlocking { + runTest { val expected = BunkerRequestGetPublicKey() val actual = encodeDecodeEvent(expected) @@ -106,7 +106,7 @@ internal class Nip46Test { @Test fun getRelaysEncoder() = - runBlocking { + runTest { val expected = BunkerRequestGetRelays() val actual = encodeDecodeEvent(expected) @@ -116,7 +116,7 @@ internal class Nip46Test { @Test fun testNip04Encrypt() = - runBlocking { + runTest { val expected = BunkerRequestNip04Encrypt(pubKey = peer.pubKey, message = "Test") val actual = encodeDecodeEvent(expected) @@ -128,7 +128,7 @@ internal class Nip46Test { @Test fun testNip44Encrypt() = - runBlocking { + runTest { val expected = BunkerRequestNip44Encrypt(pubKey = peer.pubKey, message = "Test") val actual = encodeDecodeEvent(expected) @@ -140,7 +140,7 @@ internal class Nip46Test { @Test fun testNip04Decrypt() = - runBlocking { + runTest { val expected = BunkerRequestNip04Decrypt(pubKey = peer.pubKey, ciphertext = "Test") val actual = encodeDecodeEvent(expected) @@ -152,7 +152,7 @@ internal class Nip46Test { @Test fun testNip44Decrypt() = - runBlocking { + runTest { val expected = BunkerRequestNip44Decrypt(pubKey = peer.pubKey, ciphertext = "Test") val actual = encodeDecodeEvent(expected) @@ -166,7 +166,7 @@ internal class Nip46Test { @Test fun testAckResponse() = - runBlocking { + runTest { val expected = BunkerResponseAck() val actual = encodeDecodeEvent(expected) @@ -177,7 +177,7 @@ internal class Nip46Test { @Test fun testPongResponse() = - runBlocking { + runTest { val expected = BunkerResponsePong() val actual = encodeDecodeEvent(expected) @@ -188,7 +188,7 @@ internal class Nip46Test { @Test fun testErrorResponse() = - runBlocking { + runTest { val expected = BunkerResponseError(error = "Error") val actual = encodeDecodeEvent(expected) @@ -199,7 +199,7 @@ internal class Nip46Test { @Test fun testEventResponse() = - runBlocking { + runTest { val expected = BunkerResponseEvent(event = dummyEventSigned) val actual = encodeDecodeEvent(expected) @@ -211,7 +211,7 @@ internal class Nip46Test { @Test fun testPubkeyResponse() = - runBlocking { + runTest { val expected = BunkerResponsePublicKey(pubkey = peer.pubKey) val actual = encodeDecodeEvent(expected) @@ -223,7 +223,7 @@ internal class Nip46Test { @Test fun testRelaysResponse() = - runBlocking { + runTest { val expected = BunkerResponseGetRelays(relays = mapOf("url" to ReadWrite(true, false))) val actual = encodeDecodeEvent(expected) @@ -236,7 +236,7 @@ internal class Nip46Test { @Test @Ignore("Impossible to recreate the class since there are no hints on the json") fun testDecryptResponse() = - runBlocking { + runTest { val expected = BunkerResponseDecrypt(plaintext = "Test") val actual = encodeDecodeEvent(expected) @@ -249,7 +249,7 @@ internal class Nip46Test { @Test @Ignore("Impossible to recreate the class since there are no hints on the json") fun testEncryptResponse() = - runBlocking { + runTest { val expected = BunkerResponseEncrypt(ciphertext = "Test") val actual = encodeDecodeEvent(expected) diff --git a/quartz/src/androidInstrumentedTest/kotlin/com/vitorpamplona/quartz/nip57Zaps/PrivateZapTests.kt b/quartz/src/androidInstrumentedTest/kotlin/com/vitorpamplona/quartz/nip57Zaps/PrivateZapTests.kt index c121ff9e7..907281c0a 100644 --- a/quartz/src/androidInstrumentedTest/kotlin/com/vitorpamplona/quartz/nip57Zaps/PrivateZapTests.kt +++ b/quartz/src/androidInstrumentedTest/kotlin/com/vitorpamplona/quartz/nip57Zaps/PrivateZapTests.kt @@ -31,17 +31,18 @@ import com.vitorpamplona.quartz.nip57Zaps.PrivateZapEncryption.Companion.createE import com.vitorpamplona.quartz.utils.Hex import junit.framework.TestCase.assertNotNull import junit.framework.TestCase.fail -import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.test.runTest import org.junit.Test import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) class PrivateZapTests { @Test - fun testPollZap() { - val poll = - OptimizedJsonMapper.fromJson( - """{ + fun testPollZap() = + runTest { + val poll = + OptimizedJsonMapper.fromJson( + """{ "content": "New poll \n\n #zappoll", "created_at": 1682440713, "id": "16291ba452bb0786a4bf5c278d38de73c96b58c056ed75c5ea466b0795197288", @@ -81,17 +82,16 @@ class PrivateZapTests { ] } """, - ) + ) - val loggedIn = - NostrSignerInternal( - KeyPair( - Hex.decode("e8e7197ccc53c9ed4cf9b1c8dce085475fa1ffdd71f2c14e44fe23d0bdf77598"), - ), - ) + val loggedIn = + NostrSignerInternal( + KeyPair( + Hex.decode("e8e7197ccc53c9ed4cf9b1c8dce085475fa1ffdd71f2c14e44fe23d0bdf77598"), + ), + ) - val privateZapRequest = - runBlocking { + val privateZapRequest = LnZapRequestEvent.create( zappedEvent = poll, relays = setOf(RelayUrlNormalizer.normalize("wss://relay.damus.io/")), @@ -101,31 +101,31 @@ class PrivateZapTests { zapType = LnZapEvent.ZapType.PRIVATE, toUserPubHex = null, ) + + val recepientPK = privateZapRequest.zappedAuthor().firstOrNull() + val recepientPost = privateZapRequest.zappedPost().firstOrNull() + + if (recepientPK != null && recepientPost != null) { + val privateKey = + createEncryptionPrivateKey( + loggedIn.keyPair.privKey!!.toHexKey(), + recepientPost, + privateZapRequest.createdAt, + ) + val decodedPrivateZap = PrivateZapRequestBuilder().decryptAnonTag(privateZapRequest.getAnonTag(), privateKey, recepientPK) + + assertNotNull(decodedPrivateZap) + } else { + fail("Should not be null") } - - val recepientPK = privateZapRequest.zappedAuthor().firstOrNull() - val recepientPost = privateZapRequest.zappedPost().firstOrNull() - - if (recepientPK != null && recepientPost != null) { - val privateKey = - createEncryptionPrivateKey( - loggedIn.keyPair.privKey!!.toHexKey(), - recepientPost, - privateZapRequest.createdAt, - ) - val decodedPrivateZap = PrivateZapRequestBuilder().decryptAnonTag(privateZapRequest.getAnonTag(), privateKey, recepientPK) - - assertNotNull(decodedPrivateZap) - } else { - fail("Should not be null") } - } @Test - fun testKind1PrivateZap() { - val textNote = - Event.fromJson( - """{ + fun testKind1PrivateZap() = + runTest { + val textNote = + Event.fromJson( + """{ "content": "Testing copied author. \n\nnostr:npub1gcxzte5zlkncx26j68ez60fzkvtkm9e0vrwdcvsjakxf9mu9qewqlfnj5z", "created_at": 1682369982, "id": "c757e1371d715c711ec9ef9740a3df6475d64b3d0af45ffcbfca08d273baf1c1", @@ -143,15 +143,14 @@ class PrivateZapTests { ] } """, - ) + ) - val loggedIn = - NostrSignerInternal( - KeyPair(Hex.decode("e8e7197ccc53c9ed4cf9b1c8dce085475fa1ffdd71f2c14e44fe23d0bdf77598")), - ) + val loggedIn = + NostrSignerInternal( + KeyPair(Hex.decode("e8e7197ccc53c9ed4cf9b1c8dce085475fa1ffdd71f2c14e44fe23d0bdf77598")), + ) - val privateZapRequest = - runBlocking { + val privateZapRequest = LnZapRequestEvent.create( zappedEvent = textNote, relays = @@ -166,23 +165,22 @@ class PrivateZapTests { zapType = LnZapEvent.ZapType.PRIVATE, toUserPubHex = null, ) + + val recepientPK = privateZapRequest.zappedAuthor().firstOrNull() + val recepientPost = privateZapRequest.zappedPost().firstOrNull() + + if (recepientPK != null && recepientPost != null) { + val privateKey = + createEncryptionPrivateKey( + loggedIn.keyPair.privKey!!.toHexKey(), + recepientPost, + privateZapRequest.createdAt, + ) + val decodedPrivateZap = PrivateZapRequestBuilder().decryptAnonTag(privateZapRequest.getAnonTag(), privateKey, recepientPK) + + assertNotNull(decodedPrivateZap) + } else { + fail("Should not be null") } - - val recepientPK = privateZapRequest.zappedAuthor().firstOrNull() - val recepientPost = privateZapRequest.zappedPost().firstOrNull() - - if (recepientPK != null && recepientPost != null) { - val privateKey = - createEncryptionPrivateKey( - loggedIn.keyPair.privKey!!.toHexKey(), - recepientPost, - privateZapRequest.createdAt, - ) - val decodedPrivateZap = PrivateZapRequestBuilder().decryptAnonTag(privateZapRequest.getAnonTag(), privateKey, recepientPK) - - assertNotNull(decodedPrivateZap) - } else { - fail("Should not be null") } - } } diff --git a/quartz/src/androidInstrumentedTest/kotlin/com/vitorpamplona/quartz/nip59GiftWraps/GiftWrapEventTest.kt b/quartz/src/androidInstrumentedTest/kotlin/com/vitorpamplona/quartz/nip59GiftWraps/GiftWrapEventTest.kt index 2c3cc1d4a..3eb486262 100644 --- a/quartz/src/androidInstrumentedTest/kotlin/com/vitorpamplona/quartz/nip59GiftWraps/GiftWrapEventTest.kt +++ b/quartz/src/androidInstrumentedTest/kotlin/com/vitorpamplona/quartz/nip59GiftWraps/GiftWrapEventTest.kt @@ -34,7 +34,7 @@ import com.vitorpamplona.quartz.nip17Dm.messages.ChatMessageEvent import com.vitorpamplona.quartz.nip59Giftwrap.seals.SealedRumorEvent import com.vitorpamplona.quartz.nip59Giftwrap.wraps.GiftWrapEvent import com.vitorpamplona.quartz.utils.Hex -import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.test.runTest import org.junit.Assert.assertEquals import org.junit.Assert.assertNotEquals import org.junit.Assert.assertNotNull @@ -47,7 +47,7 @@ import org.junit.runner.RunWith class GiftWrapEventTest { @Test() fun testNip17Utils() = - runBlocking { + runTest { val sender = NostrSignerInternal(KeyPair()) val receiver = NostrSignerInternal(KeyPair()) val message = "Hola, que tal?" @@ -88,7 +88,7 @@ class GiftWrapEventTest { @Test() fun testNip17UtilsForGroups() = - runBlocking { + runTest { val sender = NostrSignerInternal(KeyPair()) val receiver1 = NostrSignerInternal(KeyPair()) val receiver2 = NostrSignerInternal(KeyPair()) @@ -142,7 +142,7 @@ class GiftWrapEventTest { @Test() fun testInternalsSimpleMessage() = - runBlocking { + runTest { val sender = NostrSignerInternal(KeyPair()) val receiver = NostrSignerInternal(KeyPair()) @@ -259,7 +259,7 @@ class GiftWrapEventTest { @Test() fun testInternalsGroupMessage() = - runBlocking { + runTest { val sender = NostrSignerInternal(KeyPair()) val receiverA = NostrSignerInternal(KeyPair()) val receiverB = NostrSignerInternal(KeyPair()) @@ -446,174 +446,164 @@ class GiftWrapEventTest { } @Test - fun testCaseFromAmethyst1() { - val json = - """ - { - "content":"{\"ciphertext\":\"AaTN5Mt7AOeMosjHeLfai89kmvW/qJ7W2VMttAwuh6hwRGV+ylJhpDbdVRhVmkCotbDjBgS6xioLrSDcdSngFOiVMHS5dTAP0MkQv09aZlBh/NgdmyfHHd24YlHPkDuF5Yb4Vmz7kq/vmjsNZvDrTen3TG2DcEoTV9GKexdMEqyBA4LsB2DLnWfpvOi0olDkGjPGSteTaU1nCdOtN8knoEKumrxwevvbygKphorvKX/j3ojMMb0AceJM6Cr6TRIvSsQnKGEv5V8qbC/uIrQoH3N108Fd/2SY2MWuyLKRnuak9F/w82MV13elq8ngyjcktLYM5yrPg5nrxZlyJsV8D7V/g/bvhoL+UmWe0XoCR5LXzy77SfIkgA1ePKEfGp5sD2CVIzXt9zHdFwGxAKZuyB4qwrRaAFrS2xx+Bw4nnEmF6V9NhfheSCmGzTILuTePx4ubvnYw/j8Hmqd6UvM3DBNnlJ3D6po0blirfWvMe/ea+Em4CMXfq8Iq+7r4gRx8azADygKeJ+C89GTBEvS9EvgrXCVfTMVTcFc44YAZhekOqYY1BOZgfxIV4gUiJfpMMd4B9MQv/tmnewrpTsq1reSQQcEW/mXT2cnMeCZbAIJSPg8usZ30QlrH+np+YSzFKWYDP1kThcV0ElEE2Ne8KaUUFIRE5KmhBQc/qtORefCpne5s7V7J5vLjT5rinsDzzENB1XVlmY1Icx42raP5tGAL1gOK5gRHLvtcgFQR3WcDRYaNqELiYxx41j9w9lz5e00Ttla255rZkb760KSLaBFBss6wYGiYCabVgtBNpkExpCFPPEd5eAZa5rNK2QrnojYsdxEnlicF6A+zSChLy/TbzxYwyQywDfoF9F8kBakPZkAhsciQViCii2KlieRq4OgJFZGndmnS82hyPqsoJIm22vWr1iqMvSBHo/9cLj/r+lfmGVOdgM62JHckPZjOLS0QWIb9gQiT+zXZG22+eZElMYbGXVpR1dyMaQtde8ivEVVLas6kMCVKaDTHEFglaCBXjJ3RNJv73HsG1kb0rMmOj8ltbBakjHpv7M59amavuu6SReYt\",\"nonce\":\"6anNjUdNwW6MNfoKzRZcz1R09N1h8G4L\",\"v\":1}", - "created_at":1690660515, - "id":"d90739741c2f5a8c1a03aab5dc219c0b708ed6b0566044495731cd0307cf19a5", - "kind":1059, - "pubkey":"a79b7162f8ebb9c9f7aa65a48977ab7f32aa097520bc543e4d625812154ff6af", - "sig":"9b012504e779632a2a1f55562fa9a85f8ae6245cbc149b83d25b2971249053abc77f65cc068e5d025b871d743678265fede70de4eaf5af642e675a5b6210077d", - "tags":[ - [ - "p", - "c55f0b0cb4dd180dd4395867b28dd4c208b709144a69fb7c31a46c369a5ad1c6" - ] - ] - } - """.trimIndent() - - val rumor: Event = - runBlocking { - val privateKey = "de6152a85a0dea3b09a08a6f8139a314d498a7b52f7e5c28858b64270abd4c70" - unwrapUnsealRumor(json, privateKey) - } - - assertNotNull(rumor) - assertEquals("Hola, que tal?", rumor.content) - } - - @Test - fun testCaseFromAmethyst2() { - val json = - """ - { - "content":"{\"ciphertext\":\"Zb0ZNYAcDG5y7BiCWgbxY/i7rN7TxPwr3Oaste6em4VcetuenaMu2SyH6OuCCxxmIa7kFennJD8ZCrev0086azsPNutl9I6OCoOfDQb2GoFaLoJAkE/FuW0uEoEJuN72KsKj05HEjOM6nqL2KiW0pxTCNmlGpweMwpXQdm2ItWkybNpq8+b4NJUDee2czBUd9Kr2ELbPISTYzA17z1IzPXGQw8c73NL+QX9I/QZjM/agqX2x5q11SU52xiRyVd9zHf7TMctZI4QEsqDB6xi54D1bAeZlMhVdcpQRpGDfqRz3KXFlhB3Bwdc8GLgY0aLTn6tJs4qrHP3mQkxFYk0mju0afoc0rloMEUHcBVtM18S9OrTPqfmSqFTQsjaT8g+PkmeiLBo1sXsMCS62w0abSZD9OzQtciMz70ZpcWoLjx5f8panjFClvg4tJ8czMURIHM/IFS1uKAUHBArGN8QpCw8MXQBblpyLDiEkFcSX334Zdps0OIw4z328JSdeejyRh4ks+NHDt9FcjC4iicEqfEh8OTkXuKqEAVkRyfAioNQxWQPnXDzMX0Q+BXvKzBA7NaEBDpbV36H/KnrpBBQwokV9/Byb6Seh3g6GSqRAWD3U6Nk2aBMXkD0xY8vnIqMckBeYHxn8BW7k1FdXFC9lE5xCxWZHkmksJ4f0NVaF37O6d8qOe6RK7bfUeF8/SouJEu+eEX1f4KCMboslwkdk8QA8bThGcRGn8GQBMrPKrpZwHYNyyH8jwt9pywigXJejRLDDnDp3FH/3dbZy5CfuNH6KGydf/O5xx1r316so1UPO1mL5LHJUFZVIaMaMMUsgq12gpI0lLEh5NJPpsi9e3ibkzEZGf7FlAJjJQURbQ8xacN7R+w3GWKbJNHiQbUZ2lXo6fwz33t0DrSqEW970yWPHlqxcpd27EI+qqb5IqfklQZ3RObZZBhzDvImaCPG+U7SmgLhPxnilpGjd5lw/ttiqJhPG9mYFMf1eJXSG+Q9VVkGzN7jxXYtx0q0WGjVq98ZGv5RSnF1d9+QVGCd1fiPS3rsaWdYWly8l0y2quYObJ6Mv3Wh3\",\"nonce\":\"/Q2UTTjVZthm/atcCuDjU1e4reF+ZSgZ\",\"v\":1}", - "created_at":1690660515, - "id":"087d9627d63135a5050758a69222e566c86702e930c9905f0b93ccd6bebeca3f", - "kind":1059, - "pubkey":"e59c00796ae2aa9077fc8bcd57fe8d32c0fc363f7c8b93d055c70804ffff3772", - "sig":"807cb641c314ca6910aaeefadcf87d859137520be1039eb40e39832ed59d456fdd800c5f88bba09e1b395ee90c66d5330847bdd010b63be9919bf091adbc2c2a", - "tags":[ - [ - "p", - "f85f315c06aaf19c2b30a96ca80d9644720655ee8d3ec43b84657a7c98f36a23" + fun testCaseFromAmethyst1() = + runTest { + val json = + """ + { + "content":"{\"ciphertext\":\"AaTN5Mt7AOeMosjHeLfai89kmvW/qJ7W2VMttAwuh6hwRGV+ylJhpDbdVRhVmkCotbDjBgS6xioLrSDcdSngFOiVMHS5dTAP0MkQv09aZlBh/NgdmyfHHd24YlHPkDuF5Yb4Vmz7kq/vmjsNZvDrTen3TG2DcEoTV9GKexdMEqyBA4LsB2DLnWfpvOi0olDkGjPGSteTaU1nCdOtN8knoEKumrxwevvbygKphorvKX/j3ojMMb0AceJM6Cr6TRIvSsQnKGEv5V8qbC/uIrQoH3N108Fd/2SY2MWuyLKRnuak9F/w82MV13elq8ngyjcktLYM5yrPg5nrxZlyJsV8D7V/g/bvhoL+UmWe0XoCR5LXzy77SfIkgA1ePKEfGp5sD2CVIzXt9zHdFwGxAKZuyB4qwrRaAFrS2xx+Bw4nnEmF6V9NhfheSCmGzTILuTePx4ubvnYw/j8Hmqd6UvM3DBNnlJ3D6po0blirfWvMe/ea+Em4CMXfq8Iq+7r4gRx8azADygKeJ+C89GTBEvS9EvgrXCVfTMVTcFc44YAZhekOqYY1BOZgfxIV4gUiJfpMMd4B9MQv/tmnewrpTsq1reSQQcEW/mXT2cnMeCZbAIJSPg8usZ30QlrH+np+YSzFKWYDP1kThcV0ElEE2Ne8KaUUFIRE5KmhBQc/qtORefCpne5s7V7J5vLjT5rinsDzzENB1XVlmY1Icx42raP5tGAL1gOK5gRHLvtcgFQR3WcDRYaNqELiYxx41j9w9lz5e00Ttla255rZkb760KSLaBFBss6wYGiYCabVgtBNpkExpCFPPEd5eAZa5rNK2QrnojYsdxEnlicF6A+zSChLy/TbzxYwyQywDfoF9F8kBakPZkAhsciQViCii2KlieRq4OgJFZGndmnS82hyPqsoJIm22vWr1iqMvSBHo/9cLj/r+lfmGVOdgM62JHckPZjOLS0QWIb9gQiT+zXZG22+eZElMYbGXVpR1dyMaQtde8ivEVVLas6kMCVKaDTHEFglaCBXjJ3RNJv73HsG1kb0rMmOj8ltbBakjHpv7M59amavuu6SReYt\",\"nonce\":\"6anNjUdNwW6MNfoKzRZcz1R09N1h8G4L\",\"v\":1}", + "created_at":1690660515, + "id":"d90739741c2f5a8c1a03aab5dc219c0b708ed6b0566044495731cd0307cf19a5", + "kind":1059, + "pubkey":"a79b7162f8ebb9c9f7aa65a48977ab7f32aa097520bc543e4d625812154ff6af", + "sig":"9b012504e779632a2a1f55562fa9a85f8ae6245cbc149b83d25b2971249053abc77f65cc068e5d025b871d743678265fede70de4eaf5af642e675a5b6210077d", + "tags":[ + [ + "p", + "c55f0b0cb4dd180dd4395867b28dd4c208b709144a69fb7c31a46c369a5ad1c6" + ] ] - ] - } - """.trimIndent() + } + """.trimIndent() - val privateKey = "409ff7654141eaa16cd2161fe5bd127aeaef71f270c67587474b78998a8e3533" + val privateKey = "de6152a85a0dea3b09a08a6f8139a314d498a7b52f7e5c28858b64270abd4c70" + val rumor = unwrapUnsealRumor(json, privateKey) - val rumor: Event = - runBlocking { - unwrapUnsealRumor(json, privateKey) - } - - assertNotNull(rumor) - assertEquals("Hola, que tal?", rumor.content) - } + assertNotNull(rumor) + assertEquals("Hola, que tal?", rumor.content) + } @Test - fun testDecryptFromCoracle() { - val json = - """ - { - "content": "{\"ciphertext\":\"fo0/Ywyfu86cXKoOOeFFlMRv+LYM6GJUL+F/J4ARv6EcAufOZP46vimlurPBLPjNgzuGemGjlTFfC3vtq84AqIsqFo3dqKunq8Vp+mmubvxIQUDzOGYvM0WE/XOiW5LEe3U3Vq399Dq07xRpXELcp4EZxGyu4Fowv2Ppb4SKpH8g+9N3z2+bwYcSxBvI6SrL+hgmVMrRlgvsUHN1d53ni9ehRseBqrLj/DqyyEiygsKm6vnEZAPKnl1MrBaVOBZmGsyjAa/G4SBVVmk78sW7xWWvo4cV+C22FluDWUOdj/bYabH4aR4scnBX3GLYqfLuzGnuQlRNsb5unXVX41+39uXzROrmNP6iYVyYxy5tfoyN7PPZ4osoKpLDUGldmXHD6RjMcAFuou4hXt2JlTPmXpj/x8qInXId5mkmU4nTGiasvsCIpJljbCujwCjbjLTcD4QrjuhMdtSsAzjT0CDv5Lmc632eKRYtDu/9B+lkqBBkp7amhzbqp8suNTnybkvbGFQQGEQnsLfNJw/GGopAuthfi8zkTgUZR/LxFR7ZKAX73G+5PQSDSjPuGH/dQEnsFo45zsh1Xro8SfUQBsPphbX2GS31Lwu5vA30O922T4UiWuU+EdNgZR0JankQ5NPgvr1uS56C3v84VwdrNWQUCwC4eYJl4Mb/OdpEy9qwsisisppq6uuzxmxd1qx3JfocnGsvB7h2g2sG+0lyZADDSobOEZEKHaBP3w+dRcJW9D95EmzPym9GO0n+33OfqFQbda7G0rzUWfPDV0gXIuZcKs/HmDqepgIZN8FG7JhRBeAv0bCbKQACre0c8tzVEn5yCYemltScdKop3pC/r6gH50jRhAlFAiIKx8R+XwuMmJRqOcH4WfkpZlfVU85/I0XJOCHWKk6BnJi/NPP9zYiZiJe+5LecqMUVjtO0YAlv138+U/3FIT/anQ4H5bjVWBZmajwf\",\"nonce\":\"Mv70S6jgrs4D1rlqV9b5DddiymGAcVVe\",\"v\":1}", - "created_at": 1690528373, - "id": "6b108e4236c3c338236ee589388ce0f91f921e1532ae52e75d1d2add6f8e691a", - "kind": 1059, - "pubkey": "627dc0248335e2bf9adac14be9494139ebbeb12c422d7df5b0e3cd72d04c209c", - "sig": "be11da487196db298e4ffb7a03e74176c37441c88b39c95b518fadce6fd02f23c58b2c435ca38c24d512713935ab719dae80bf952267630809e1f84be8e95174", - "tags": [ - [ - "p", - "e7764a227c12ac1ef2db79ae180392c90903b2cec1e37f5c1a4afed38117185e" - ] - ], - "seenOn": [ - "wss://relay.damus.io/" - ] - } - """.trimIndent() + fun testCaseFromAmethyst2() = + runTest { + val json = + """ + { + "content":"{\"ciphertext\":\"Zb0ZNYAcDG5y7BiCWgbxY/i7rN7TxPwr3Oaste6em4VcetuenaMu2SyH6OuCCxxmIa7kFennJD8ZCrev0086azsPNutl9I6OCoOfDQb2GoFaLoJAkE/FuW0uEoEJuN72KsKj05HEjOM6nqL2KiW0pxTCNmlGpweMwpXQdm2ItWkybNpq8+b4NJUDee2czBUd9Kr2ELbPISTYzA17z1IzPXGQw8c73NL+QX9I/QZjM/agqX2x5q11SU52xiRyVd9zHf7TMctZI4QEsqDB6xi54D1bAeZlMhVdcpQRpGDfqRz3KXFlhB3Bwdc8GLgY0aLTn6tJs4qrHP3mQkxFYk0mju0afoc0rloMEUHcBVtM18S9OrTPqfmSqFTQsjaT8g+PkmeiLBo1sXsMCS62w0abSZD9OzQtciMz70ZpcWoLjx5f8panjFClvg4tJ8czMURIHM/IFS1uKAUHBArGN8QpCw8MXQBblpyLDiEkFcSX334Zdps0OIw4z328JSdeejyRh4ks+NHDt9FcjC4iicEqfEh8OTkXuKqEAVkRyfAioNQxWQPnXDzMX0Q+BXvKzBA7NaEBDpbV36H/KnrpBBQwokV9/Byb6Seh3g6GSqRAWD3U6Nk2aBMXkD0xY8vnIqMckBeYHxn8BW7k1FdXFC9lE5xCxWZHkmksJ4f0NVaF37O6d8qOe6RK7bfUeF8/SouJEu+eEX1f4KCMboslwkdk8QA8bThGcRGn8GQBMrPKrpZwHYNyyH8jwt9pywigXJejRLDDnDp3FH/3dbZy5CfuNH6KGydf/O5xx1r316so1UPO1mL5LHJUFZVIaMaMMUsgq12gpI0lLEh5NJPpsi9e3ibkzEZGf7FlAJjJQURbQ8xacN7R+w3GWKbJNHiQbUZ2lXo6fwz33t0DrSqEW970yWPHlqxcpd27EI+qqb5IqfklQZ3RObZZBhzDvImaCPG+U7SmgLhPxnilpGjd5lw/ttiqJhPG9mYFMf1eJXSG+Q9VVkGzN7jxXYtx0q0WGjVq98ZGv5RSnF1d9+QVGCd1fiPS3rsaWdYWly8l0y2quYObJ6Mv3Wh3\",\"nonce\":\"/Q2UTTjVZthm/atcCuDjU1e4reF+ZSgZ\",\"v\":1}", + "created_at":1690660515, + "id":"087d9627d63135a5050758a69222e566c86702e930c9905f0b93ccd6bebeca3f", + "kind":1059, + "pubkey":"e59c00796ae2aa9077fc8bcd57fe8d32c0fc363f7c8b93d055c70804ffff3772", + "sig":"807cb641c314ca6910aaeefadcf87d859137520be1039eb40e39832ed59d456fdd800c5f88bba09e1b395ee90c66d5330847bdd010b63be9919bf091adbc2c2a", + "tags":[ + [ + "p", + "f85f315c06aaf19c2b30a96ca80d9644720655ee8d3ec43b84657a7c98f36a23" + ] + ] + } + """.trimIndent() - val privateKey = "09e0051fdf5fdd9dd7a54713583006442cbdbf87bdcdab1a402f26e527d56771" + val privateKey = "409ff7654141eaa16cd2161fe5bd127aeaef71f270c67587474b78998a8e3533" - val rumor: Event = - runBlocking { - unwrapUnsealRumor(json, privateKey) - } + val rumor = unwrapUnsealRumor(json, privateKey) - assertNotNull(rumor) - assertEquals("test", rumor.content) - } + assertNotNull(rumor) + assertEquals("Hola, que tal?", rumor.content) + } @Test - fun testFromCoracle2() { - val json = - """ - { - "content": "{\"ciphertext\":\"Hn/dHo/I8Qk6QWWAiKyo/SfKJqQfHdV0O5tMmgqMyfHrsFoDY6IhGQP2EgCJ/6HsNQyO/8EMAmLW8w0PbDKlBKYGKGpaMwCA6B1r0rLjvu+149RJZuggRNm9rd7tNVNkNs38iqt1KYD++bohePm52q+VhAQikbX2gTONV82ROwZylAg9vjvMnYkDt45g6N97s9FRB6V7YMiUEtJnneMixa6klucpUuenQ4569tyt5vnUMD2VNhKYCc2jit2hf7k0DIhvZrVC3OdopUvxIuYYWr3r7XpuEB3HJ6Ji3ajHPzgGeFcItBR7uKZ9s6XU34F3keyZbxrv3yWHFM5NrOctAdZexSGpqWRW93M0KZUAp9HgQh3YzMLl8xt0mcrVywCgjU6Kx8IwkI0bjPU+Am8acY3cItted6hZQ4Vy1xFITdKVfPWDl3Ab59iBg9+IkY5C31wqsKPgPVVycwQE6UpaGW74gy3qZshwyoo01owvEIbVvrSJWXH7EUVvndDPvUbo+f+EVa84IEwVjPmY2oR7VsxVfqRBdmPg23OSw/9rzVybmruqaQHd3xrTTEcnG0qBc/ugCXsiuILTeScOovEnqIlKKK3KB36jMtdScdJB+b4YrzJInY1AvqU7IAgqe0vmo1LdbMtj7kjuxkXJhhQsunAbTvPigTrsOfJ08P9l7r/95kpxudgagEaW7XAjYVfLphseJT3Iy1IuQEyG5sshQ+pl/CYvkGide7ykHwm9pjSBVkD9Mdcn5X6lSnLNJEcwY43pz43r6Kq3L09qneILY3DSKyQ16Zcu1MiAMAM5r6JGvpAHqcMmixi9ORuiryjteTmY4L0vI7b3W/0RSUblXxUrb8IpeysBrFmiKJBgCoU0r/D/8tgR+Eewyp1qxKI4SfKG5GFH40zZ2oVvKyoHAR4x1oVDp/MttcnxkzAsCFL6QuJC9A/vImjsumpmYB/EChcZCOAsfqkuzH4VSjZx\",\"nonce\":\"K537d+7m5tUcXZfkr3Qk2J2G86vdBMmY\",\"v\":1}", - "created_at": 1690655012, - "id": "c4f97c6332b0a63912c44c9e1f8c7b23581dc67a8489ec1522ec205fea7133db", - "kind": 1059, - "pubkey": "8def03a22b1039256a3883d46c7ccd5562f61743100db401344284547de7ec61", - "sig": "25dcf24bdda99c04abc72274d9f7a30538a4a00a70ac4b39db4082b73823979858df93cd649c25edfb759857eac46ed70bb9ad0598f2e011d733a5a382bc4def", - "tags": [ - [ - "p", - "e7764a227c12ac1ef2db79ae180392c90903b2cec1e37f5c1a4afed38117185e" - ] - ] - } - """.trimIndent() + fun testDecryptFromCoracle() = + runTest { + val json = + """ + { + "content": "{\"ciphertext\":\"fo0/Ywyfu86cXKoOOeFFlMRv+LYM6GJUL+F/J4ARv6EcAufOZP46vimlurPBLPjNgzuGemGjlTFfC3vtq84AqIsqFo3dqKunq8Vp+mmubvxIQUDzOGYvM0WE/XOiW5LEe3U3Vq399Dq07xRpXELcp4EZxGyu4Fowv2Ppb4SKpH8g+9N3z2+bwYcSxBvI6SrL+hgmVMrRlgvsUHN1d53ni9ehRseBqrLj/DqyyEiygsKm6vnEZAPKnl1MrBaVOBZmGsyjAa/G4SBVVmk78sW7xWWvo4cV+C22FluDWUOdj/bYabH4aR4scnBX3GLYqfLuzGnuQlRNsb5unXVX41+39uXzROrmNP6iYVyYxy5tfoyN7PPZ4osoKpLDUGldmXHD6RjMcAFuou4hXt2JlTPmXpj/x8qInXId5mkmU4nTGiasvsCIpJljbCujwCjbjLTcD4QrjuhMdtSsAzjT0CDv5Lmc632eKRYtDu/9B+lkqBBkp7amhzbqp8suNTnybkvbGFQQGEQnsLfNJw/GGopAuthfi8zkTgUZR/LxFR7ZKAX73G+5PQSDSjPuGH/dQEnsFo45zsh1Xro8SfUQBsPphbX2GS31Lwu5vA30O922T4UiWuU+EdNgZR0JankQ5NPgvr1uS56C3v84VwdrNWQUCwC4eYJl4Mb/OdpEy9qwsisisppq6uuzxmxd1qx3JfocnGsvB7h2g2sG+0lyZADDSobOEZEKHaBP3w+dRcJW9D95EmzPym9GO0n+33OfqFQbda7G0rzUWfPDV0gXIuZcKs/HmDqepgIZN8FG7JhRBeAv0bCbKQACre0c8tzVEn5yCYemltScdKop3pC/r6gH50jRhAlFAiIKx8R+XwuMmJRqOcH4WfkpZlfVU85/I0XJOCHWKk6BnJi/NPP9zYiZiJe+5LecqMUVjtO0YAlv138+U/3FIT/anQ4H5bjVWBZmajwf\",\"nonce\":\"Mv70S6jgrs4D1rlqV9b5DddiymGAcVVe\",\"v\":1}", + "created_at": 1690528373, + "id": "6b108e4236c3c338236ee589388ce0f91f921e1532ae52e75d1d2add6f8e691a", + "kind": 1059, + "pubkey": "627dc0248335e2bf9adac14be9494139ebbeb12c422d7df5b0e3cd72d04c209c", + "sig": "be11da487196db298e4ffb7a03e74176c37441c88b39c95b518fadce6fd02f23c58b2c435ca38c24d512713935ab719dae80bf952267630809e1f84be8e95174", + "tags": [ + [ + "p", + "e7764a227c12ac1ef2db79ae180392c90903b2cec1e37f5c1a4afed38117185e" + ] + ], + "seenOn": [ + "wss://relay.damus.io/" + ] + } + """.trimIndent() - val privateKey = "09e0051fdf5fdd9dd7a54713583006442cbdbf87bdcdab1a402f26e527d56771" + val privateKey = "09e0051fdf5fdd9dd7a54713583006442cbdbf87bdcdab1a402f26e527d56771" - val rumor = - runBlocking { - unwrapUnsealRumor(json, privateKey) - } + val rumor: Event = unwrapUnsealRumor(json, privateKey) - assertEquals("asdfasdfasdf", rumor.content) - assertEquals(1690659269L, rumor.createdAt) - assertEquals("827ba09d32ab81d62c60f657b350198c8aaba84372dab9ad3f4f6b8b7274b707", rumor.id) - assertEquals(14, rumor.kind) - assertEquals("subject", rumor.tags.firstOrNull()?.get(0)) - assertEquals("test", rumor.tags.firstOrNull()?.get(1)) - } + assertNotNull(rumor) + assertEquals("test", rumor.content) + } @Test - fun testFromCoracle3() { - val json = - """ - { - "content": "{\"ciphertext\":\"PGCodiacmCB/sClw0C6DQRpP/XIfNAKCVZdKLQpOqytgbFryhs9Z+cPldq2FajXzxs3jQsF7/EVQyWpuV8pXetvFT9tvzjg4Xcm7ZcooLUnAeAo2xZNcJontN4cGubuDqKuXy5n59yXP1fIxfnJxRTRRdCZ2edhsKeNR5NSByUi+StjV10rnfHt8AhZCpiXiZ/giTOsC4wdaeONPgMzMeljaJWLvl6n11VjmXhkx1mXIQt43CNB1hIqO3p89Mbd9p+nlLrOsR+Xs0TB4DCh4XTPbvgf7B7Z+PgOfl3GZfJy9x6TciLcF4E3Ba1zrPe4f79czCIEiJ1yrIKrzzYvv+it35DZQ8fgveFXpyHnNL29hml8PNjyOsFbCHVYLMGw88evI5PijOcpe1TtdoioX8kX5kVEQSKJXuoSjTorvbRPCgGzaa1m0J0uTpzri5VD22a/Jh2CcAnubg6w4JDdUWCogdSV3NqiJllo7ZF7WnZ3apPdRD23MEfphVBJrcLBUNlmwajnY5IvVTKTkZOP50r9dBapvMWXIo6M6zhy/5vVWJz57863pelYCRG4upaXZuNK9sMBtbiphxmFR83i8RML8KN8Q391Cd/xBN7TxJNo5p2YU25VeGZUAmHY8DYlMQDm8Br0nStAXp3T+DzTRL8FTECa8DJV+KTAPoCxqhv3B28Ehr0XAP75CsHoLU00G48cR7h3vQ0CnfKh6KXU6nnDA5OWfpMYpirACCpsnpSD0OaCQ3gkQp3zZNMS3HcOpnPK/IY7R0esbzgAkvNhkyxaIfPDdf+eRUSOA9+2Ji28MwjjY8Dw3SLdUqCOzIDjQeR/T5oNmaQJm3lZ8G0FxxC6ejD4VJX/NI/x+STeB9jWHWmHZvqKzV6JHNh6qmZb6TKSIPOHpafWFoeJFOmiiigf46sju9vRXmVEAx59HXWnvnvCBNJg877yCMulB6xyQuSdVDuotQU4tQZwCKedTHJ6GqjesM98UlJrDtdWQURwwW1qc7N8tS6PukmUVEf0jmbIWVIBmUlkcVuiSs1g1h1kjt8c4MnGTz3CSgpOd1MqxLrl9WwrTqM+YnE+yeZYUjFoewyKZIQ==\",\"nonce\":\"OdCZczJiUGR4bOGIElQ4UUH4dQmG5U/3\",\"v\":1}", - "kind": 1059, - "created_at": 1690772945, - "pubkey": "e01475e87896800b7285eb0daf263c59f811c8fc5bc8daa105d2c98b6d7c4952", - "tags": [ - [ - "p", - "b08d8857a92b4d6aa580ff55cc3c18c4edf313c83388c34abc118621f74f1a78" - ] - ], - "id": "d9fc85ece892ce45ffa737b3ddc0f8b752623181d75363b966191f8c03d2debe", - "sig": "1b20416b83f4b5b8eead11e29c185f46b5e76d1960e4505210ddd00f7a6973cc11268f52a8989e3799b774d5f3a55db95bed4d66a1b6e88ab54becec5c771c17" - } - """.trimIndent() + fun testFromCoracle2() = + runTest { + val json = + """ + { + "content": "{\"ciphertext\":\"Hn/dHo/I8Qk6QWWAiKyo/SfKJqQfHdV0O5tMmgqMyfHrsFoDY6IhGQP2EgCJ/6HsNQyO/8EMAmLW8w0PbDKlBKYGKGpaMwCA6B1r0rLjvu+149RJZuggRNm9rd7tNVNkNs38iqt1KYD++bohePm52q+VhAQikbX2gTONV82ROwZylAg9vjvMnYkDt45g6N97s9FRB6V7YMiUEtJnneMixa6klucpUuenQ4569tyt5vnUMD2VNhKYCc2jit2hf7k0DIhvZrVC3OdopUvxIuYYWr3r7XpuEB3HJ6Ji3ajHPzgGeFcItBR7uKZ9s6XU34F3keyZbxrv3yWHFM5NrOctAdZexSGpqWRW93M0KZUAp9HgQh3YzMLl8xt0mcrVywCgjU6Kx8IwkI0bjPU+Am8acY3cItted6hZQ4Vy1xFITdKVfPWDl3Ab59iBg9+IkY5C31wqsKPgPVVycwQE6UpaGW74gy3qZshwyoo01owvEIbVvrSJWXH7EUVvndDPvUbo+f+EVa84IEwVjPmY2oR7VsxVfqRBdmPg23OSw/9rzVybmruqaQHd3xrTTEcnG0qBc/ugCXsiuILTeScOovEnqIlKKK3KB36jMtdScdJB+b4YrzJInY1AvqU7IAgqe0vmo1LdbMtj7kjuxkXJhhQsunAbTvPigTrsOfJ08P9l7r/95kpxudgagEaW7XAjYVfLphseJT3Iy1IuQEyG5sshQ+pl/CYvkGide7ykHwm9pjSBVkD9Mdcn5X6lSnLNJEcwY43pz43r6Kq3L09qneILY3DSKyQ16Zcu1MiAMAM5r6JGvpAHqcMmixi9ORuiryjteTmY4L0vI7b3W/0RSUblXxUrb8IpeysBrFmiKJBgCoU0r/D/8tgR+Eewyp1qxKI4SfKG5GFH40zZ2oVvKyoHAR4x1oVDp/MttcnxkzAsCFL6QuJC9A/vImjsumpmYB/EChcZCOAsfqkuzH4VSjZx\",\"nonce\":\"K537d+7m5tUcXZfkr3Qk2J2G86vdBMmY\",\"v\":1}", + "created_at": 1690655012, + "id": "c4f97c6332b0a63912c44c9e1f8c7b23581dc67a8489ec1522ec205fea7133db", + "kind": 1059, + "pubkey": "8def03a22b1039256a3883d46c7ccd5562f61743100db401344284547de7ec61", + "sig": "25dcf24bdda99c04abc72274d9f7a30538a4a00a70ac4b39db4082b73823979858df93cd649c25edfb759857eac46ed70bb9ad0598f2e011d733a5a382bc4def", + "tags": [ + [ + "p", + "e7764a227c12ac1ef2db79ae180392c90903b2cec1e37f5c1a4afed38117185e" + ] + ] + } + """.trimIndent() - val privateKey = "7dd22cafc512c0bc363a259f6dcda515b13ae3351066d7976fd0bb79cbd0d700" + val privateKey = "09e0051fdf5fdd9dd7a54713583006442cbdbf87bdcdab1a402f26e527d56771" - val rumor = - runBlocking { - unwrapUnsealRumor(json, privateKey) - } + val rumor = unwrapUnsealRumor(json, privateKey) - assertEquals("8d1a56008d4e31dae2fb8bef36b3efea519eff75f57033107e2aa16702466ef2", rumor.id) - assertEquals("Howdy", rumor.content) - assertEquals(1690833960L, rumor.createdAt) - assertEquals(14, rumor.kind) - assertEquals("p", rumor.tags.firstOrNull()?.get(0)) - assertEquals( - "b08d8857a92b4d6aa580ff55cc3c18c4edf313c83388c34abc118621f74f1a78", - rumor.tags.firstOrNull()?.get(1), - ) - assertEquals("subject", rumor.tags.getOrNull(1)?.get(0)) - assertEquals("Stuff", rumor.tags.getOrNull(1)?.get(1)) - } + assertEquals("asdfasdfasdf", rumor.content) + assertEquals(1690659269L, rumor.createdAt) + assertEquals("827ba09d32ab81d62c60f657b350198c8aaba84372dab9ad3f4f6b8b7274b707", rumor.id) + assertEquals(14, rumor.kind) + assertEquals("subject", rumor.tags.firstOrNull()?.get(0)) + assertEquals("test", rumor.tags.firstOrNull()?.get(1)) + } + + @Test + fun testFromCoracle3() = + runTest { + val json = + """ + { + "content": "{\"ciphertext\":\"PGCodiacmCB/sClw0C6DQRpP/XIfNAKCVZdKLQpOqytgbFryhs9Z+cPldq2FajXzxs3jQsF7/EVQyWpuV8pXetvFT9tvzjg4Xcm7ZcooLUnAeAo2xZNcJontN4cGubuDqKuXy5n59yXP1fIxfnJxRTRRdCZ2edhsKeNR5NSByUi+StjV10rnfHt8AhZCpiXiZ/giTOsC4wdaeONPgMzMeljaJWLvl6n11VjmXhkx1mXIQt43CNB1hIqO3p89Mbd9p+nlLrOsR+Xs0TB4DCh4XTPbvgf7B7Z+PgOfl3GZfJy9x6TciLcF4E3Ba1zrPe4f79czCIEiJ1yrIKrzzYvv+it35DZQ8fgveFXpyHnNL29hml8PNjyOsFbCHVYLMGw88evI5PijOcpe1TtdoioX8kX5kVEQSKJXuoSjTorvbRPCgGzaa1m0J0uTpzri5VD22a/Jh2CcAnubg6w4JDdUWCogdSV3NqiJllo7ZF7WnZ3apPdRD23MEfphVBJrcLBUNlmwajnY5IvVTKTkZOP50r9dBapvMWXIo6M6zhy/5vVWJz57863pelYCRG4upaXZuNK9sMBtbiphxmFR83i8RML8KN8Q391Cd/xBN7TxJNo5p2YU25VeGZUAmHY8DYlMQDm8Br0nStAXp3T+DzTRL8FTECa8DJV+KTAPoCxqhv3B28Ehr0XAP75CsHoLU00G48cR7h3vQ0CnfKh6KXU6nnDA5OWfpMYpirACCpsnpSD0OaCQ3gkQp3zZNMS3HcOpnPK/IY7R0esbzgAkvNhkyxaIfPDdf+eRUSOA9+2Ji28MwjjY8Dw3SLdUqCOzIDjQeR/T5oNmaQJm3lZ8G0FxxC6ejD4VJX/NI/x+STeB9jWHWmHZvqKzV6JHNh6qmZb6TKSIPOHpafWFoeJFOmiiigf46sju9vRXmVEAx59HXWnvnvCBNJg877yCMulB6xyQuSdVDuotQU4tQZwCKedTHJ6GqjesM98UlJrDtdWQURwwW1qc7N8tS6PukmUVEf0jmbIWVIBmUlkcVuiSs1g1h1kjt8c4MnGTz3CSgpOd1MqxLrl9WwrTqM+YnE+yeZYUjFoewyKZIQ==\",\"nonce\":\"OdCZczJiUGR4bOGIElQ4UUH4dQmG5U/3\",\"v\":1}", + "kind": 1059, + "created_at": 1690772945, + "pubkey": "e01475e87896800b7285eb0daf263c59f811c8fc5bc8daa105d2c98b6d7c4952", + "tags": [ + [ + "p", + "b08d8857a92b4d6aa580ff55cc3c18c4edf313c83388c34abc118621f74f1a78" + ] + ], + "id": "d9fc85ece892ce45ffa737b3ddc0f8b752623181d75363b966191f8c03d2debe", + "sig": "1b20416b83f4b5b8eead11e29c185f46b5e76d1960e4505210ddd00f7a6973cc11268f52a8989e3799b774d5f3a55db95bed4d66a1b6e88ab54becec5c771c17" + } + """.trimIndent() + + val privateKey = "7dd22cafc512c0bc363a259f6dcda515b13ae3351066d7976fd0bb79cbd0d700" + + val rumor = unwrapUnsealRumor(json, privateKey) + + assertEquals("8d1a56008d4e31dae2fb8bef36b3efea519eff75f57033107e2aa16702466ef2", rumor.id) + assertEquals("Howdy", rumor.content) + assertEquals(1690833960L, rumor.createdAt) + assertEquals(14, rumor.kind) + assertEquals("p", rumor.tags.firstOrNull()?.get(0)) + assertEquals( + "b08d8857a92b4d6aa580ff55cc3c18c4edf313c83388c34abc118621f74f1a78", + rumor.tags.firstOrNull()?.get(1), + ) + assertEquals("subject", rumor.tags.getOrNull(1)?.get(0)) + assertEquals("Stuff", rumor.tags.getOrNull(1)?.get(1)) + } suspend fun unwrapUnsealRumor( json: String, @@ -659,7 +649,7 @@ class GiftWrapEventTest { wrap.checkSignature() val event = - runBlocking { + runTest { wrap.unwrapThrowing(receiversPrivateKey) } diff --git a/quartz/src/commonTest/kotlin/com/vitorpamplona/quartz/nip05DnsIdentifiers/Nip05Test.kt b/quartz/src/commonTest/kotlin/com/vitorpamplona/quartz/nip05DnsIdentifiers/Nip05Test.kt index d5b55b61a..dc480e4bf 100644 --- a/quartz/src/commonTest/kotlin/com/vitorpamplona/quartz/nip05DnsIdentifiers/Nip05Test.kt +++ b/quartz/src/commonTest/kotlin/com/vitorpamplona/quartz/nip05DnsIdentifiers/Nip05Test.kt @@ -20,7 +20,7 @@ */ package com.vitorpamplona.quartz.nip05DnsIdentifiers -import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.test.runTest import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertNull @@ -36,7 +36,7 @@ class Nip05Test { @Test fun `test with matching case on user name`() = - runBlocking { + runTest { // Set-up val userNameToTest = ALL_UPPER_CASE_USER_NAME val expectedPubKey = "ca29c211f1c72d5b6622268ff43d2288ea2b2cb5b9aa196ff9f1704fc914b71b" @@ -51,7 +51,7 @@ class Nip05Test { @Test fun `test with NOT matching case on user name`() = - runBlocking { + runTest { // Set-up val expectedPubKey = "ca29c211f1c72d5b6622268ff43d2288ea2b2cb5b9aa196ff9f1704fc914b71b" val nostrJson = "{ \"names\": { \"$ALL_UPPER_CASE_USER_NAME\": \"$expectedPubKey\" }}" diff --git a/quartz/src/commonTest/kotlin/com/vitorpamplona/quartz/nip51Lists/bookmarkList/BookmarkListEventTest.kt b/quartz/src/commonTest/kotlin/com/vitorpamplona/quartz/nip51Lists/bookmarkList/BookmarkListEventTest.kt index 549253cf2..1ad77dfcb 100644 --- a/quartz/src/commonTest/kotlin/com/vitorpamplona/quartz/nip51Lists/bookmarkList/BookmarkListEventTest.kt +++ b/quartz/src/commonTest/kotlin/com/vitorpamplona/quartz/nip51Lists/bookmarkList/BookmarkListEventTest.kt @@ -23,7 +23,7 @@ package com.vitorpamplona.quartz.nip51Lists.bookmarkList import com.vitorpamplona.quartz.nip01Core.signers.NostrSignerInternal import com.vitorpamplona.quartz.nip51Lists.bookmarkList.tags.EventBookmark import com.vitorpamplona.quartz.utils.nsecToKeyPair -import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.test.runTest import kotlin.test.Test import kotlin.test.assertFalse import kotlin.test.assertTrue @@ -33,7 +33,7 @@ class BookmarkListEventTest { @Test fun publicTagsPreservedWhenRemovingFromPrivateBookmarks() = - runBlocking { + runTest { // Create a test event bookmark val testEventId = "a".repeat(64) val testBookmark = EventBookmark(testEventId) @@ -84,7 +84,7 @@ class BookmarkListEventTest { @Test fun publicTagsRemovedWhenRemovingFromPublicBookmarks() = - runBlocking { + runTest { // Create a test event bookmark val testEventId = "b".repeat(64) val testBookmark = EventBookmark(testEventId) diff --git a/quartz/src/jvmAndroidTest/kotlin/com/vitorpamplona/quartz/nip01Core/relay/NostrClientSendAndWaitTest.kt b/quartz/src/jvmAndroidTest/kotlin/com/vitorpamplona/quartz/nip01Core/relay/NostrClientSendAndWaitTest.kt index 037fed402..479e8658c 100644 --- a/quartz/src/jvmAndroidTest/kotlin/com/vitorpamplona/quartz/nip01Core/relay/NostrClientSendAndWaitTest.kt +++ b/quartz/src/jvmAndroidTest/kotlin/com/vitorpamplona/quartz/nip01Core/relay/NostrClientSendAndWaitTest.kt @@ -30,14 +30,14 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.cancel -import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.test.runTest import kotlin.test.Test import kotlin.test.assertEquals class NostrClientSendAndWaitTest : BaseNostrClientTest() { @Test fun testSendAndWaitForResponse() = - runBlocking { + runTest { val appScope = CoroutineScope(Dispatchers.Default + SupervisorJob()) val client = NostrClient(socketBuilder, appScope)