SubwayTooter-Android-App/app/src/androidTest/java/jp/juggler/subwaytooter/TestTootInstance.kt

109 lines
3.9 KiB
Kotlin

package jp.juggler.subwaytooter
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.runner.AndroidJUnit4
import jp.juggler.subwaytooter.api.TootApiCallback
import jp.juggler.subwaytooter.api.TootApiClient
import jp.juggler.subwaytooter.api.entity.Host
import jp.juggler.subwaytooter.api.entity.TootInstance
import jp.juggler.subwaytooter.table.SavedAccount
import jp.juggler.subwaytooter.util.SimpleHttpClientImpl
import jp.juggler.util.LogCategory
import jp.juggler.util.MySslSocketFactory
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withContext
import okhttp3.ConnectionSpec
import okhttp3.OkHttpClient
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertNull
import org.junit.Test
import org.junit.runner.RunWith
import java.util.*
import java.util.concurrent.TimeUnit
@RunWith(AndroidJUnit4::class)
class TestTootInstance {
companion object {
private val log = LogCategory("TestTootInstance")
// val cookieJar = JavaNetCookieJar(CookieManager().apply {
// setCookiePolicy(CookiePolicy.ACCEPT_ALL)
// CookieHandler.setDefault(this)
// })
private val okHttp = OkHttpClient.Builder()
.connectTimeout(60.toLong(), TimeUnit.SECONDS)
.readTimeout(60.toLong(), TimeUnit.SECONDS)
.writeTimeout(60.toLong(), TimeUnit.SECONDS)
.pingInterval(10, TimeUnit.SECONDS)
.connectionSpecs(
Collections.singletonList(
ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
.allEnabledCipherSuites()
.allEnabledTlsVersions()
.build()
)
)
.sslSocketFactory(MySslSocketFactory, MySslSocketFactory.trustManager)
.build()
private val dummyClientCallback = object : TootApiCallback {
override val isApiCancelled: Boolean = false
override suspend fun publishApiProgress(s: String) {
log.d("apiProgress: $s")
}
override suspend fun publishApiProgressRatio(value: Int, max: Int) {
log.d("apiProgressRatio: $value/$max")
}
}
private val appContext = InstrumentationRegistry.getInstrumentation().targetContext!!
val client = TootApiClient(
context = appContext,
httpClient = SimpleHttpClientImpl(appContext, okHttp),
callback = dummyClientCallback
)
}
/*
TootInstance.get() はアカウントを指定する場合とホストを指定する場合がある
ホスト指定とアカウント指定、 MastodonとMisskey で試す
*/
@Test
fun testWithoutAccount() {
runBlocking {
withContext(Dispatchers.IO) {
suspend fun a(host: Host) {
val (ti, ri) = TootInstance.getEx(client, hostArg = host)
assertNotNull(ti)
assertNull(ri?.error)
ti!!.run { log.d("$instanceType $uri $version") }
}
a(Host.parse("mastodon.juggler.jp"))
a(Host.parse("misskey.io"))
}
}
}
@Test
fun testWithAccount() {
runBlocking {
withContext(Dispatchers.IO) {
suspend fun a(account: SavedAccount) {
val (ti, ri) = TootInstance.getEx(client, account = account)
assertNull(ri?.error)
assertNotNull(ti)
ti!!.run { log.d("${account.acct} $instanceType $uri $version") }
}
a(SavedAccount(45, "tateisu@mastodon.juggler.jp"))
a(SavedAccount(45, "tateisu@misskey.io", misskeyVersion = 12))
}
}
}
}