Skip to content
Snippets Groups Projects
Commit 2334aa5a authored by Sören Henning's avatar Sören Henning
Browse files

Merge branch 'main' into Replace-GSON

parents 96445dcb 93a3eb26
Branches
No related tags found
1 merge request!292Replace GSON with Jackson ObjectMapper
Pipeline #12761 passed
Showing
with 276 additions and 6 deletions
...@@ -32,7 +32,7 @@ dependencies { ...@@ -32,7 +32,7 @@ dependencies {
testImplementation 'io.quarkus:quarkus-junit5' testImplementation 'io.quarkus:quarkus-junit5'
testImplementation 'io.quarkus:quarkus-test-kubernetes-client' testImplementation 'io.quarkus:quarkus-test-kubernetes-client'
//testImplementation 'io.rest-assured:rest-assured' //testImplementation 'io.rest-assured:rest-assured'
testImplementation 'com.github.tomakehurst:wiremock-jre8:2.33.2' testImplementation 'com.github.tomakehurst:wiremock-jre8:2.35.0'
testImplementation 'org.junit-pioneer:junit-pioneer:1.5.0' testImplementation 'org.junit-pioneer:junit-pioneer:1.5.0'
testImplementation "org.mockito.kotlin:mockito-kotlin:4.0.0" testImplementation "org.mockito.kotlin:mockito-kotlin:4.0.0"
} }
......
...@@ -48,7 +48,8 @@ class KubernetesBenchmarkDeployment( ...@@ -48,7 +48,8 @@ class KubernetesBenchmarkDeployment(
/** /**
* Setup a [KubernetesBenchmark] using the [TopicManager] and the [K8sManager]: * Setup a [KubernetesBenchmark] using the [TopicManager] and the [K8sManager]:
* - Create the needed topics. * - Create the needed topics.
* - Deploy the needed resources. * - Deploy the needed [KubernetesResource]s (deployment order: SUT resources, loadgenerator resources;
* No guaranteed order of files inside configmaps).
*/ */
override fun setup() { override fun setup() {
val rolloutManager = RolloutManager(rolloutMode, client) val rolloutManager = RolloutManager(rolloutMode, client)
...@@ -71,13 +72,14 @@ class KubernetesBenchmarkDeployment( ...@@ -71,13 +72,14 @@ class KubernetesBenchmarkDeployment(
* Tears down a [KubernetesBenchmark]: * Tears down a [KubernetesBenchmark]:
* - Reset the Kafka Lag Exporter. * - Reset the Kafka Lag Exporter.
* - Remove the used topics. * - Remove the used topics.
* - Remove the [KubernetesResource]s. * - Remove the [KubernetesResource]s (removal order: loadgenerator resources, SUT resources;
* No guaranteed order of files inside configmaps).
*/ */
override fun teardown() { override fun teardown() {
val podCleaner = ResourceByLabelHandler(client) val podCleaner = ResourceByLabelHandler(client)
loadGenResources.forEach { kubernetesManager.remove(it, false) } loadGenResources.reversed().forEach { kubernetesManager.remove(it, false) }
loadGenAfterActions.forEach { it.exec(client = client) } loadGenAfterActions.forEach { it.exec(client = client) }
appResources.forEach { kubernetesManager.remove(it,false) } appResources.reversed().forEach { kubernetesManager.remove(it,false) }
sutAfterActions.forEach { it.exec(client = client) } sutAfterActions.forEach { it.exec(client = client) }
if (this.topics.isNotEmpty()) { if (this.topics.isNotEmpty()) {
kafkaController.removeTopics(this.topics.map { topic -> topic.name }) kafkaController.removeTopics(this.topics.map { topic -> topic.name })
......
package rocks.theodolite.kubernetes
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory
import io.fabric8.kubernetes.api.model.ConfigMap
import io.fabric8.kubernetes.api.model.Service
import io.fabric8.kubernetes.api.model.apps.Deployment
import io.fabric8.kubernetes.client.Watcher
import io.fabric8.kubernetes.client.WatcherException
import io.fabric8.kubernetes.client.server.mock.KubernetesServer
import io.quarkus.test.junit.QuarkusTest
import io.quarkus.test.kubernetes.client.KubernetesTestServer
import io.quarkus.test.kubernetes.client.WithKubernetesTestServer
import mu.KotlinLogging
import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import rocks.theodolite.kubernetes.model.KubernetesBenchmark
private val logger = KotlinLogging.logger {}
@QuarkusTest
@WithKubernetesTestServer()
class BenchmarkResourceTeardownTest {
@KubernetesTestServer
private lateinit var server: KubernetesServer
private val objectMapper: ObjectMapper = ObjectMapper(YAMLFactory())
val addedOrder: MutableList<String> = mutableListOf()
val deletedOrder: MutableList<String> = mutableListOf()
@BeforeEach
fun setUp() {
server.before()
server.client.resources(Deployment::class.java).watch(object : Watcher<Deployment> {
override fun eventReceived(p0: Watcher.Action?, p1: Deployment?) {
if (p0 != null && p1 != null) {
if (p0.name == "ADDED") {
addedOrder.add(p1.metadata.name)
} else if (p0.name == "DELETED") {
deletedOrder.add(p1.metadata.name)
}
}
}
override fun onClose(p0: WatcherException?) {
logger.info { p0 }
}
})
server.client.resources(Service::class.java).watch(object : Watcher<Service> {
override fun eventReceived(p0: Watcher.Action?, p1: Service?) {
if (p0 != null && p1 != null) {
if (p0.name == "ADDED") {
addedOrder.add(p1.metadata.name)
} else if (p0.name == "DELETED") {
deletedOrder.add(p1.metadata.name)
}
}
}
override fun onClose(p0: WatcherException?) {
logger.info { p0 }
}
})
}
@AfterEach
fun tearDown() {
server.after()
addedOrder.clear()
deletedOrder.clear()
}
fun setupResources(benchmarkPath: String): BenchmarkDeployment {
val benchmark: KubernetesBenchmark =
objectMapper.readValue(javaClass.getResourceAsStream(benchmarkPath), KubernetesBenchmark::class.java)
val sut1ConfigMap = objectMapper.readValue(
javaClass.getResourceAsStream("/resource-teardown-test-files/sut-configmap-1.yaml"),
ConfigMap::class.java
)
server.client.configMaps().createOrReplace(sut1ConfigMap)
val sut2ConfigMap = objectMapper.readValue(
javaClass.getResourceAsStream("/resource-teardown-test-files/sut-configmap-2.yaml"),
ConfigMap::class.java
)
server.client.configMaps().createOrReplace(sut2ConfigMap)
val loadgenConfigMap = objectMapper.readValue(
javaClass.getResourceAsStream("/resource-teardown-test-files/load-generator-configmap.yaml"),
ConfigMap::class.java
)
server.client.configMaps().createOrReplace(loadgenConfigMap)
return KubernetesBenchmarkDeploymentBuilder(benchmark, server.client).buildDeployment(
0,
emptyList(),
1,
emptyList(),
emptyList(),
2,
2,
false
)
}
@Test
fun testFullFilesProperties() {
// Make sure lists are cleared for the current test.
assertTrue(addedOrder.size == 0)
assertTrue(deletedOrder.size == 0)
// Setup
val benchmarkDeployment =
setupResources("/resource-teardown-test-files/example-benchmark-full-files-property.yaml")
// Run code of interest
benchmarkDeployment.setup()
benchmarkDeployment.teardown()
// Assertions
assertTrue(addedOrder.size > 0)
assertTrue(deletedOrder.size > 0)
assertTrue(addedOrder == deletedOrder.reversed())
}
@Test
fun testPartialFilesProperties() {
// Make sure lists are cleared for the current test.
assertTrue(addedOrder.size == 0)
assertTrue(deletedOrder.size == 0)
// Setup
val benchmarkDeployment =
setupResources("/resource-teardown-test-files/example-benchmark-partial-files-property.yaml")
// Run code of interest
benchmarkDeployment.setup()
benchmarkDeployment.teardown()
// Assertions
assertTrue(addedOrder.size > 0)
assertTrue(deletedOrder.size > 0)
assertTrue(addedOrder == deletedOrder.reversed())
}
@Test
fun testNoFilesProperties() {
// Make sure lists are cleared for the current test.
assertTrue(addedOrder.size == 0)
assertTrue(deletedOrder.size == 0)
// Setup
val benchmarkDeployment =
setupResources("/resource-teardown-test-files/example-benchmark-no-files-property.yaml")
// Run code of interest
benchmarkDeployment.setup()
benchmarkDeployment.teardown()
// Assertions
assertTrue(addedOrder.size > 0)
assertTrue(deletedOrder.size > 0)
assertTrue(addedOrder == deletedOrder.reversed())
}
}
name: example-benchmark-full-files-property
waitForResourcesEnabled: false
sut:
beforeActions: []
afterActions: []
resources:
- configMap:
name: "sut-configmap-1"
files:
- "sut-file-1.yaml"
- "sut-file-2.yaml"
- configMap:
name: "sut-configmap-2"
files:
- "sut-file-3.yaml"
loadGenerator:
beforeActions: []
afterActions: []
resources:
- configMap:
name: "load-generator-configmap"
files:
- "load-generator-file-1.yaml"
- "load-generator-file-2.yaml"
name: example-benchmark-no-files-property
waitForResourcesEnabled: false
sut:
beforeActions: []
afterActions: []
resources:
- configMap:
name: "sut-configmap-1"
- configMap:
name: "sut-configmap-2"
loadGenerator:
beforeActions: []
afterActions: []
resources:
- configMap:
name: "load-generator-configmap"
name: example-benchmark-partial-files-property
waitForResourcesEnabled: false
sut:
beforeActions: []
afterActions: []
resources:
- configMap:
name: "sut-configmap-1"
- configMap:
name: "sut-configmap-2"
files:
- "sut-file-3.yaml"
loadGenerator:
beforeActions: []
afterActions: []
resources:
- configMap:
name: "load-generator-configmap"
files:
- "load-generator-file-2.yaml"
kind: ConfigMap
metadata:
name: load-generator-configmap
data:
load-generator-file-1.yaml: |
kind: Deployment
metadata:
name: load-generator-file-1
load-generator-file-2.yaml: |
kind: Service
metadata:
name: load-generator-file-2
kind: ConfigMap
metadata:
name: sut-configmap-1
data:
sut-file-1.yaml: |
kind: Deployment
metadata:
name: sut-file-1
sut-file-2.yaml: |
kind: Service
metadata:
name: sut-file-2
kind: ConfigMap
metadata:
name: sut-configmap-2
data:
sut-file-3.yaml: |
kind: Deployment
metadata:
name: sut-file-3
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment