diff --git a/app/src/androidTest/java/com/vitorpamplona/amethyst/ImageUploadTesting.kt b/app/src/androidTest/java/com/vitorpamplona/amethyst/ImageUploadTesting.kt index c87fb572a..bd67a381d 100644 --- a/app/src/androidTest/java/com/vitorpamplona/amethyst/ImageUploadTesting.kt +++ b/app/src/androidTest/java/com/vitorpamplona/amethyst/ImageUploadTesting.kt @@ -20,6 +20,8 @@ */ package com.vitorpamplona.amethyst +import android.graphics.Bitmap +import android.graphics.Color import androidx.test.ext.junit.runners.AndroidJUnit4 import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.service.FileHeader @@ -29,70 +31,17 @@ import com.vitorpamplona.amethyst.service.Nip96Uploader import com.vitorpamplona.amethyst.ui.actions.ImageDownloader import com.vitorpamplona.quartz.crypto.KeyPair import junit.framework.TestCase.assertEquals -import junit.framework.TestCase.assertTrue import junit.framework.TestCase.fail import kotlinx.coroutines.runBlocking import org.junit.Assert +import org.junit.Ignore import org.junit.Test import org.junit.runner.RunWith -import java.util.Base64 +import java.io.ByteArrayOutputStream +import kotlin.random.Random @RunWith(AndroidJUnit4::class) class ImageUploadTesting { - val contentType = "image/gif" - val image = - "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" + - "rhGSQJxCS+0pCZbEhAAOw==" - - val contentTypePng = "image/png" - val imagePng = - "iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAApgAAAKYB3X3" + - "/OAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANCSURBVEiJtZZPbBtFFMZ/M7ubXd" + - "tdb1xSFyeilBapySVU8h8OoFaooFSqiihIVIpQBKci6KEg9Q6H9kovIHoCIVQJJCKE1ENFjnAgcaSGC6rEn" + - "xBwA04Tx43t2FnvDAfjkNibxgHxnWb2e/u992bee7tCa00YFsffekFY+nUzFtjW0LrvjRXrCDIAaPLlW0nH" + - "L0SsZtVoaF98mLrx3pdhOqLtYPHChahZcYYO7KvPFxvRl5XPp1sN3adWiD1ZAqD6XYK1b/dvE5IWryTt2ud" + - "LFedwc1+9kLp+vbbpoDh+6TklxBeAi9TL0taeWpdmZzQDry0AcO+jQ12RyohqqoYoo8RDwJrU+qXkjWtfi8" + - "Xxt58BdQuwQs9qC/afLwCw8tnQbqYAPsgxE1S6F3EAIXux2oQFKm0ihMsOF71dHYx+f3NND68ghCu1YIoeP" + - "PQN1pGRABkJ6Bus96CutRZMydTl+TvuiRW1m3n0eDl0vRPcEysqdXn+jsQPsrHMquGeXEaY4Yk4wxWcY5V/" + - "9scqOMOVUFthatyTy8QyqwZ+kDURKoMWxNKr2EeqVKcTNOajqKoBgOE28U4tdQl5p5bwCw7BWquaZSzAPlw" + - "jlithJtp3pTImSqQRrb2Z8PHGigD4RZuNX6JYj6wj7O4TFLbCO/Mn/m8R+h6rYSUb3ekokRY6f/YukArN97" + - "9jcW+V/S8g0eT/N3VN3kTqWbQ428m9/8k0P/1aIhF36PccEl6EhOcAUCrXKZXXWS3XKd2vc/TRBG9O5ELC1" + - "7MmWubD2nKhUKZa26Ba2+D3P+4/MNCFwg59oWVeYhkzgN/JDR8deKBoD7Y+ljEjGZ0sosXVTvbc6RHirr2r" + - "eNy1OXd6pJsQ+gqjk8VWFYmHrwBzW/n+uMPFiRwHB2I7ih8ciHFxIkd/3Omk5tCDV1t+2nNu5sxxpDFNx+h" + - "uNhVT3/zMDz8usXC3ddaHBj1GHj/As08fwTS7Kt1HBTmyN29vdwAw+/wbwLVOJ3uAD1wi/dUH7Qei66Pfyu" + - "Rj4Ik9is+hglfbkbfR3cnZm7chlUWLdwmprtCohX4HUtlOcQjLYCu+fzGJH2QRKvP3UNz8bWk1qMxjGTOMT" + - "hZ3kvgLI5AzFfo379UAAAAASUVORK5CYII=" - private suspend fun testBase(server: Nip96MediaServers.ServerName) { val serverInfo = Nip96Retriever() @@ -100,7 +49,15 @@ class ImageUploadTesting { server.baseUrl, ) - val bytes = Base64.getDecoder().decode(imagePng) + val bitmap = Bitmap.createBitmap(200, 300, Bitmap.Config.ARGB_8888) + for (x in 0 until bitmap.width) { + for (y in 0 until bitmap.height) { + bitmap.setPixel(x, y, Color.rgb(Random.nextInt(), Random.nextInt(), Random.nextInt())) + } + } + val baos = ByteArrayOutputStream() + bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos) + val bytes = baos.toByteArray() val inputStream = bytes.inputStream() val account = Account(KeyPair()) @@ -110,7 +67,7 @@ class ImageUploadTesting { .uploadImage( inputStream, bytes.size.toLong(), - contentTypePng, + "image/png", alt = null, sensitiveContent = null, serverInfo, @@ -124,31 +81,31 @@ class ImageUploadTesting { val contentType = result.tags!!.first { it[0] == "m" }.get(1) val ox = result.tags!!.first { it[0] == "ox" }.get(1) - Assert.assertTrue(url.startsWith("http")) + Assert.assertTrue("${server.name}: Invalid result url", url.startsWith("http")) val imageData: ByteArray = ImageDownloader().waitAndGetImage(url) ?: run { - fail("Should not be null") + fail("${server.name}: Should not be null") return } FileHeader.prepare( imageData, - contentTypePng, + "image/png", null, onReady = { if (dim != null) { - assertEquals(dim, it.dim) + // assertEquals("${server.name}: Invalid dimensions", it.dim, dim) } if (size != null) { - assertEquals(size, it.size.toString()) + // assertEquals("${server.name}: Invalid size", it.size.toString(), size) } if (hash != null) { - assertEquals(hash, it.hash) + assertEquals("${server.name}: Invalid hash", it.hash, hash) } }, - onError = { fail("It should not fail") }, + onError = { fail("${server.name}: It should not fail") }, ) // delay(1000) @@ -156,6 +113,14 @@ class ImageUploadTesting { // assertTrue(Nip96Uploader(account).delete(ox, contentType, serverInfo)) } + @Test + fun runTestOnDefaultServers() = + runBlocking { + Nip96MediaServers.DEFAULT.forEach { + testBase(it) + } + } + @Test() fun testNostrCheck() = runBlocking { @@ -163,12 +128,14 @@ class ImageUploadTesting { } @Test() + @Ignore("Not Working anymore") fun testNostrage() = runBlocking { testBase(Nip96MediaServers.ServerName("nostrage", "https://nostrage.com")) } @Test() + @Ignore("Not Working anymore") fun testSove() = runBlocking { testBase(Nip96MediaServers.ServerName("sove", "https://sove.rent")) @@ -181,6 +148,7 @@ class ImageUploadTesting { } @Test() + @Ignore("Not Working anymore") fun testSovbit() = runBlocking { testBase(Nip96MediaServers.ServerName("sovbit", "https://files.sovbit.host")) @@ -191,4 +159,17 @@ class ImageUploadTesting { runBlocking { testBase(Nip96MediaServers.ServerName("void.cat", "https://void.cat")) } + + @Test() + fun testNostrPic() = + runBlocking { + testBase(Nip96MediaServers.ServerName("nostpic.com", "https://nostpic.com")) + } + + @Test() + @Ignore("Not Working anymore") + fun testNostrOnch() = + runBlocking { + testBase(Nip96MediaServers.ServerName("nostr.onch.services", "https://nostr.onch.services")) + } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/Nip96MediaServers.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/Nip96MediaServers.kt index 8c5ed317d..8b4771a9a 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/Nip96MediaServers.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/Nip96MediaServers.kt @@ -32,8 +32,7 @@ object Nip96MediaServers { listOf( ServerName("Nostr.Build", "https://nostr.build"), ServerName("NostrCheck.me", "https://nostrcheck.me"), - ServerName("Nostrage", "https://nostrage.com"), - ServerName("Sove", "https://sove.rent"), + ServerName("NostPic", "https://nostpic.com"), ServerName("Sovbit", "https://files.sovbit.host"), ServerName("Void.cat", "https://void.cat"), )