mirror of https://github.com/usbharu/Hideout.git
test: HttpSignatureHeaderCheckerのテストを追加
This commit is contained in:
parent
cbd8fe610e
commit
1bdb19db45
|
@ -0,0 +1,110 @@
|
||||||
|
package dev.usbharu.hideout.core.infrastructure.springframework.httpsignature
|
||||||
|
|
||||||
|
import dev.usbharu.hideout.application.config.ApplicationConfig
|
||||||
|
import dev.usbharu.hideout.util.Base64Util
|
||||||
|
import org.intellij.lang.annotations.Language
|
||||||
|
import org.junit.jupiter.api.Assertions.assertDoesNotThrow
|
||||||
|
import org.junit.jupiter.api.Test
|
||||||
|
import org.junit.jupiter.api.assertThrows
|
||||||
|
import java.net.URI
|
||||||
|
import java.security.MessageDigest
|
||||||
|
import java.time.ZonedDateTime
|
||||||
|
import java.time.format.DateTimeFormatter
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
class HttpSignatureHeaderCheckerTest {
|
||||||
|
|
||||||
|
val format = DateTimeFormatter.ofPattern("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.US)
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `checkDate 未来はダメ`() {
|
||||||
|
val httpSignatureHeaderChecker =
|
||||||
|
HttpSignatureHeaderChecker(ApplicationConfig(URI.create("http://example.com").toURL()))
|
||||||
|
|
||||||
|
val s = ZonedDateTime.now().plusDays(1).format(format)
|
||||||
|
|
||||||
|
assertThrows<IllegalArgumentException> {
|
||||||
|
httpSignatureHeaderChecker.checkDate(s)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `checkDate 過去はOK`() {
|
||||||
|
val httpSignatureHeaderChecker =
|
||||||
|
HttpSignatureHeaderChecker(ApplicationConfig(URI.create("http://example.com").toURL()))
|
||||||
|
|
||||||
|
val s = ZonedDateTime.now().minusHours(1).format(format)
|
||||||
|
|
||||||
|
assertDoesNotThrow {
|
||||||
|
httpSignatureHeaderChecker.checkDate(s)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `checkDate 86400秒以上昔はダメ`() {
|
||||||
|
val httpSignatureHeaderChecker =
|
||||||
|
HttpSignatureHeaderChecker(ApplicationConfig(URI.create("http://example.com").toURL()))
|
||||||
|
|
||||||
|
val s = ZonedDateTime.now().minusSeconds(86401).format(format)
|
||||||
|
|
||||||
|
assertThrows<IllegalArgumentException> {
|
||||||
|
httpSignatureHeaderChecker.checkDate(s)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `checkHost 大文字小文字の違いはセーフ`() {
|
||||||
|
val httpSignatureHeaderChecker =
|
||||||
|
HttpSignatureHeaderChecker(ApplicationConfig(URI.create("https://example.com").toURL()))
|
||||||
|
|
||||||
|
assertDoesNotThrow {
|
||||||
|
httpSignatureHeaderChecker.checkHost("example.com")
|
||||||
|
httpSignatureHeaderChecker.checkHost("EXAMPLE.COM")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `checkHost サブドメインはダメ`() {
|
||||||
|
val httpSignatureHeaderChecker =
|
||||||
|
HttpSignatureHeaderChecker(ApplicationConfig(URI.create("https://example.com").toURL()))
|
||||||
|
|
||||||
|
assertThrows<IllegalArgumentException> {
|
||||||
|
httpSignatureHeaderChecker.checkHost("follower.example.com")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `checkDigest リクエストボディが同じなら何もしない`() {
|
||||||
|
val httpSignatureHeaderChecker =
|
||||||
|
HttpSignatureHeaderChecker(ApplicationConfig(URI.create("https://example.com").toURL()))
|
||||||
|
|
||||||
|
|
||||||
|
val sha256 = MessageDigest.getInstance("SHA-256")
|
||||||
|
|
||||||
|
@Language("JSON") val requestBody = """{"@context":"","type":"hoge"}"""
|
||||||
|
|
||||||
|
val digest = Base64Util.encode(sha256.digest(requestBody.toByteArray()))
|
||||||
|
|
||||||
|
assertDoesNotThrow {
|
||||||
|
httpSignatureHeaderChecker.checkDigest(requestBody.toByteArray(), digest)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `checkDigest リクエストボディがちょっとでも違うとダメ`() {
|
||||||
|
val httpSignatureHeaderChecker =
|
||||||
|
HttpSignatureHeaderChecker(ApplicationConfig(URI.create("https://example.com").toURL()))
|
||||||
|
|
||||||
|
|
||||||
|
val sha256 = MessageDigest.getInstance("SHA-256")
|
||||||
|
|
||||||
|
@Language("JSON") val requestBody = """{"type":"hoge","@context":""}"""
|
||||||
|
@Language("JSON") val requestBody2 = """{"@context":"","type":"hoge"}"""
|
||||||
|
val digest = Base64Util.encode(sha256.digest(requestBody.toByteArray()))
|
||||||
|
|
||||||
|
assertThrows<IllegalArgumentException> {
|
||||||
|
httpSignatureHeaderChecker.checkDigest(requestBody2.toByteArray(), digest)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue