mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-15 20:29:52 +01:00
Replace khttp test library with a fork that is available on maven central
This commit is contained in:
@@ -2,7 +2,11 @@ package org.briarproject.briar.headless
|
||||
|
||||
import io.javalin.Javalin
|
||||
import io.javalin.core.util.Header.AUTHORIZATION
|
||||
import khttp.responses.Response
|
||||
import okhttp3.MediaType.Companion.toMediaType
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.RequestBody.Companion.toRequestBody
|
||||
import okhttp3.Response
|
||||
import org.briarproject.bramble.BrambleCoreEagerSingletons
|
||||
import org.briarproject.bramble.api.crypto.CryptoComponent
|
||||
import org.briarproject.briar.BriarCoreEagerSingletons
|
||||
@@ -22,6 +26,7 @@ abstract class IntegrationTest {
|
||||
|
||||
private val dataDir = File("tmp")
|
||||
|
||||
private val client: OkHttpClient = OkHttpClient()
|
||||
protected lateinit var api: Javalin
|
||||
protected lateinit var crypto: CryptoComponent
|
||||
protected lateinit var testDataCreator: TestDataCreator
|
||||
@@ -48,34 +53,55 @@ abstract class IntegrationTest {
|
||||
dataDir.deleteRecursively()
|
||||
}
|
||||
|
||||
protected fun get(url: String): Response {
|
||||
return khttp.get(url, getAuthTokenHeader(token))
|
||||
protected fun get(url: String, authToken: String = token): Response {
|
||||
val request: Request = Request.Builder()
|
||||
.url(url)
|
||||
.header(AUTHORIZATION, "Bearer $authToken")
|
||||
.build()
|
||||
return client.newCall(request).execute()
|
||||
}
|
||||
|
||||
protected fun getWithWrongToken(url: String): Response {
|
||||
return khttp.get(url, getAuthTokenHeader("wrongToken"))
|
||||
return get(url, "wrongToken")
|
||||
}
|
||||
|
||||
protected fun post(url: String, data: String): Response {
|
||||
return khttp.post(url, getAuthTokenHeader(token), data = data)
|
||||
protected fun post(url: String, data: String, authToken: String = token): Response {
|
||||
val json = "application/json; charset=utf-8".toMediaType()
|
||||
val body = data.toRequestBody(json)
|
||||
val request: Request = Request.Builder()
|
||||
.url(url)
|
||||
.header(AUTHORIZATION, "Bearer $authToken")
|
||||
.post(body)
|
||||
.build()
|
||||
return client.newCall(request).execute()
|
||||
}
|
||||
|
||||
protected fun postWithWrongToken(url: String): Response {
|
||||
return khttp.post(url, getAuthTokenHeader("wrongToken"), data = "")
|
||||
return post(url, data = "", authToken = "wrongToken")
|
||||
}
|
||||
|
||||
protected fun delete(url: String): Response {
|
||||
return khttp.delete(url, getAuthTokenHeader(token))
|
||||
protected fun delete(url: String, authToken: String = token): Response {
|
||||
val request: Request = Request.Builder()
|
||||
.url(url)
|
||||
.header(AUTHORIZATION, "Bearer $authToken")
|
||||
.delete()
|
||||
.build()
|
||||
return client.newCall(request).execute()
|
||||
}
|
||||
|
||||
protected fun delete(url: String, data: String): Response {
|
||||
return khttp.delete(url, getAuthTokenHeader(token), data = data)
|
||||
protected fun delete(url: String, data: String, authToken: String = token): Response {
|
||||
val json = "application/json; charset=utf-8".toMediaType()
|
||||
val body = data.toRequestBody(json)
|
||||
val request: Request = Request.Builder()
|
||||
.url(url)
|
||||
.header(AUTHORIZATION, "Bearer $authToken")
|
||||
.delete(body)
|
||||
.build()
|
||||
return client.newCall(request).execute()
|
||||
}
|
||||
|
||||
protected fun deleteWithWrongToken(url: String): Response {
|
||||
return khttp.delete(url, getAuthTokenHeader("wrongToken"))
|
||||
return delete(url, authToken = "wrongToken")
|
||||
}
|
||||
|
||||
private fun getAuthTokenHeader(token: String) = mapOf(Pair(AUTHORIZATION, "Bearer $token"))
|
||||
|
||||
}
|
||||
|
||||
@@ -1,26 +1,39 @@
|
||||
package org.briarproject.briar.headless.contact
|
||||
|
||||
import okhttp3.Response
|
||||
import org.briarproject.bramble.api.contact.HandshakeLinkConstants.BASE32_LINK_BYTES
|
||||
import org.briarproject.briar.headless.IntegrationTest
|
||||
import org.briarproject.briar.headless.url
|
||||
import org.briarproject.briar.test.BriarTestUtils.getRealHandshakeLink
|
||||
import org.json.JSONArray
|
||||
import org.json.JSONObject
|
||||
import org.junit.jupiter.api.Assertions.assertEquals
|
||||
import org.junit.jupiter.api.Assertions.assertTrue
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
class ContactControllerIntegrationTest : IntegrationTest() {
|
||||
|
||||
/**
|
||||
* Can only be called once.
|
||||
*/
|
||||
private val Response.jsonArray: JSONArray get() = JSONArray(body?.use { it.string() })
|
||||
|
||||
/**
|
||||
* Can only be called once.
|
||||
*/
|
||||
private val Response.jsonObject: JSONObject get() = JSONObject(body?.use { it.string() })
|
||||
|
||||
@Test
|
||||
fun `returning list of contacts needs authentication token`() {
|
||||
val response = getWithWrongToken("$url/contacts")
|
||||
assertEquals(401, response.statusCode)
|
||||
assertEquals(401, response.code)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `returns list of contacts`() {
|
||||
// retrieve empty list of contacts
|
||||
var response = get("$url/contacts")
|
||||
assertEquals(200, response.statusCode)
|
||||
assertEquals(200, response.code)
|
||||
assertEquals(0, response.jsonArray.length())
|
||||
|
||||
// add one test contact
|
||||
@@ -29,9 +42,10 @@ class ContactControllerIntegrationTest : IntegrationTest() {
|
||||
|
||||
// retrieve list with one test contact
|
||||
response = get("$url/contacts")
|
||||
assertEquals(200, response.statusCode)
|
||||
assertEquals(1, response.jsonArray.length())
|
||||
val contact = response.jsonArray.getJSONObject(0)
|
||||
assertEquals(200, response.code)
|
||||
val jsonArray = response.jsonArray
|
||||
assertEquals(1, jsonArray.length())
|
||||
val contact = jsonArray.getJSONObject(0)
|
||||
val author = contact.getJSONObject("author")
|
||||
assertEquals(testContactName, author.getString("name"))
|
||||
}
|
||||
@@ -39,7 +53,7 @@ class ContactControllerIntegrationTest : IntegrationTest() {
|
||||
@Test
|
||||
fun `returns own handshake link`() {
|
||||
val response = get("$url/contacts/add/link")
|
||||
assertEquals(200, response.statusCode)
|
||||
assertEquals(200, response.code)
|
||||
val link = response.jsonObject.getString("link")
|
||||
assertTrue(link.startsWith("briar://"))
|
||||
assertEquals(BASE32_LINK_BYTES + 8, link.length)
|
||||
@@ -48,14 +62,14 @@ class ContactControllerIntegrationTest : IntegrationTest() {
|
||||
@Test
|
||||
fun `returning own handshake link needs authentication token`() {
|
||||
val response = getWithWrongToken("$url/contacts/add/link")
|
||||
assertEquals(401, response.statusCode)
|
||||
assertEquals(401, response.code)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `returns list of pending contacts`() {
|
||||
// retrieve empty list of pending contacts
|
||||
var response = get("$url/contacts/add/pending")
|
||||
assertEquals(200, response.statusCode)
|
||||
assertEquals(200, response.code)
|
||||
assertEquals(0, response.jsonArray.length())
|
||||
|
||||
// add one pending contact
|
||||
@@ -65,37 +79,38 @@ class ContactControllerIntegrationTest : IntegrationTest() {
|
||||
"alias": "$alias"
|
||||
}"""
|
||||
response = post("$url/contacts/add/pending", json)
|
||||
assertEquals(200, response.statusCode)
|
||||
assertEquals(200, response.code)
|
||||
|
||||
// get added contact as only list item
|
||||
response = get("$url/contacts/add/pending")
|
||||
assertEquals(200, response.statusCode)
|
||||
assertEquals(1, response.jsonArray.length())
|
||||
val jsonObject = response.jsonArray.getJSONObject(0)
|
||||
assertEquals(200, response.code)
|
||||
val jsonArray = response.jsonArray
|
||||
assertEquals(1, jsonArray.length())
|
||||
val jsonObject = jsonArray.getJSONObject(0)
|
||||
assertEquals(alias, jsonObject.getJSONObject("pendingContact").getString("alias"))
|
||||
|
||||
// remove pending contact again
|
||||
val idString = jsonObject.getJSONObject("pendingContact").getString("pendingContactId")
|
||||
val deleteJson = """{"pendingContactId": "$idString"}"""
|
||||
response = delete("$url/contacts/add/pending", deleteJson)
|
||||
assertEquals(200, response.statusCode)
|
||||
response = delete("$url/contacts/add/pending", data = deleteJson)
|
||||
assertEquals(200, response.code)
|
||||
|
||||
// list of pending contacts should be empty now
|
||||
response = get("$url/contacts/add/pending")
|
||||
assertEquals(200, response.statusCode)
|
||||
assertEquals(200, response.code)
|
||||
assertEquals(0, response.jsonArray.length())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `returning list of pending contacts needs authentication token`() {
|
||||
val response = getWithWrongToken("$url/contacts/add/pending")
|
||||
assertEquals(401, response.statusCode)
|
||||
assertEquals(401, response.code)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `adding a pending contact needs authentication token`() {
|
||||
val response = postWithWrongToken("$url/contacts/add/pending")
|
||||
assertEquals(401, response.statusCode)
|
||||
assertEquals(401, response.code)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -106,7 +121,7 @@ class ContactControllerIntegrationTest : IntegrationTest() {
|
||||
"alias": "$alias"
|
||||
}"""
|
||||
val response = post("$url/contacts/add/pending", json)
|
||||
assertEquals(400, response.statusCode)
|
||||
assertEquals(400, response.code)
|
||||
assertEquals("INVALID_LINK", response.jsonObject.getString("error"))
|
||||
}
|
||||
|
||||
@@ -118,7 +133,7 @@ class ContactControllerIntegrationTest : IntegrationTest() {
|
||||
"alias": "$alias"
|
||||
}"""
|
||||
val response = post("$url/contacts/add/pending", json)
|
||||
assertEquals(400, response.statusCode)
|
||||
assertEquals(400, response.code)
|
||||
assertEquals("INVALID_PUBLIC_KEY", response.jsonObject.getString("error"))
|
||||
}
|
||||
|
||||
@@ -130,36 +145,37 @@ class ContactControllerIntegrationTest : IntegrationTest() {
|
||||
"alias": "$alias"
|
||||
}"""
|
||||
var response = post("$url/contacts/add/pending", json)
|
||||
assertEquals(200, response.statusCode)
|
||||
assertEquals(200, response.code)
|
||||
|
||||
val pendingContactId = response.jsonObject.getString("pendingContactId")
|
||||
|
||||
response = post("$url/contacts/add/pending", json)
|
||||
assertEquals(403, response.statusCode)
|
||||
assertEquals("PENDING_EXISTS", response.jsonObject.getString("error"))
|
||||
assertEquals(pendingContactId, response.jsonObject.getString("pendingContactId"))
|
||||
assertEquals(alias, response.jsonObject.getString("pendingContactAlias"))
|
||||
assertEquals(403, response.code)
|
||||
val jsonObject = response.jsonObject
|
||||
assertEquals("PENDING_EXISTS", jsonObject.getString("error"))
|
||||
assertEquals(pendingContactId, jsonObject.getString("pendingContactId"))
|
||||
assertEquals(alias, jsonObject.getString("pendingContactAlias"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `removing a pending contact needs authentication token`() {
|
||||
val response = deleteWithWrongToken("$url/contacts/add/pending")
|
||||
assertEquals(401, response.statusCode)
|
||||
assertEquals(401, response.code)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `deleting a contact needs authentication token`() {
|
||||
val response = deleteWithWrongToken("$url/contacts/1")
|
||||
assertEquals(401, response.statusCode)
|
||||
assertEquals(401, response.code)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `deleting real and non-existing contact`() {
|
||||
var response = delete("$url/contacts/1")
|
||||
assertEquals(200, response.statusCode)
|
||||
assertEquals(200, response.code)
|
||||
|
||||
response = delete("$url/contacts/1")
|
||||
assertEquals(404, response.statusCode)
|
||||
assertEquals(404, response.code)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user