Traverse all pages of muted tests on Teamcity (KTI-326)
incomplete list of remotely muted tests was causing re-muting of tests that were not fetched
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
package org.jetbrains.kotlin.test.mutes
|
package org.jetbrains.kotlin.test.mutes
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode
|
||||||
import com.fasterxml.jackson.module.kotlin.treeToValue
|
import com.fasterxml.jackson.module.kotlin.treeToValue
|
||||||
import khttp.DEFAULT_TIMEOUT
|
import khttp.DEFAULT_TIMEOUT
|
||||||
import khttp.responses.Response
|
import khttp.responses.Response
|
||||||
@@ -14,20 +15,39 @@ private val authUser = object : Authorization {
|
|||||||
|
|
||||||
|
|
||||||
internal fun getMutedTestsOnTeamcityForRootProject(rootScopeId: String): List<MuteTestJson> {
|
internal fun getMutedTestsOnTeamcityForRootProject(rootScopeId: String): List<MuteTestJson> {
|
||||||
val params = mapOf(
|
val requestHref = "/app/rest/mutes"
|
||||||
|
val requestParams = mapOf(
|
||||||
"locator" to "project:(id:$rootScopeId)",
|
"locator" to "project:(id:$rootScopeId)",
|
||||||
"fields" to "mute(id,assignment(text),scope(project(id),buildTypes(buildType(id))),target(tests(test(name))),resolution)"
|
"fields" to "mute(id,assignment(text),scope(project(id),buildTypes(buildType(id))),target(tests(test(name))),resolution),nextHref"
|
||||||
)
|
)
|
||||||
|
val jsonResponses = traverseAll(requestHref, requestParams)
|
||||||
|
|
||||||
val response = khttp.get("$buildServerUrl/app/rest/mutes", headers, params, auth = authUser)
|
val alreadyMutedTestsOnTeamCity = jsonResponses.flatMap {
|
||||||
checkResponseAndLog(response)
|
it.get("mute").filter { jn -> jn.get("assignment").get("text").textValue().startsWith(TAG) }
|
||||||
|
}
|
||||||
val alreadyMutedTestsOnTeamCity = jsonObjectMapper.readTree(response.text).get("mute")
|
|
||||||
.filter { jn -> jn.get("assignment").get("text").textValue().startsWith(TAG) }
|
|
||||||
|
|
||||||
return alreadyMutedTestsOnTeamCity.mapNotNull { jsonObjectMapper.treeToValue<MuteTestJson>(it) }
|
return alreadyMutedTestsOnTeamCity.mapNotNull { jsonObjectMapper.treeToValue<MuteTestJson>(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun traverseAll(requestHref: String, requestParams: Map<String, String>): List<JsonNode> {
|
||||||
|
val jsonResponses = mutableListOf<JsonNode>()
|
||||||
|
|
||||||
|
fun request(url: String, params: Map<String, String>): String {
|
||||||
|
val currentResponse = khttp.get(url, headers, params, auth = authUser)
|
||||||
|
checkResponseAndLog(currentResponse)
|
||||||
|
val currentJsonResponse = jsonObjectMapper.readTree(currentResponse.text)
|
||||||
|
jsonResponses.add(currentJsonResponse)
|
||||||
|
return currentJsonResponse.get("nextHref")?.textValue() ?: ""
|
||||||
|
}
|
||||||
|
|
||||||
|
var nextHref = request("$buildServerUrl$requestHref", requestParams)
|
||||||
|
while (!nextHref.isBlank()) {
|
||||||
|
nextHref = request("$buildServerUrl$nextHref", emptyMap())
|
||||||
|
}
|
||||||
|
|
||||||
|
return jsonResponses
|
||||||
|
}
|
||||||
|
|
||||||
internal fun uploadMutedTests(uploadMap: Map<String, MuteTestJson>) {
|
internal fun uploadMutedTests(uploadMap: Map<String, MuteTestJson>) {
|
||||||
for ((_, muteTestJson) in uploadMap) {
|
for ((_, muteTestJson) in uploadMap) {
|
||||||
val response = khttp.post(
|
val response = khttp.post(
|
||||||
|
|||||||
Reference in New Issue
Block a user