blob: 283b21ae19bb8ac0b4e4e685d06c1e2f44935876 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to you under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jmeter.visualizers.backend.influxdb
import io.mockk.mockk
import io.mockk.verify
import io.mockk.verifyOrder
import org.apache.jmeter.samplers.SampleResult
import org.apache.jmeter.visualizers.backend.BackendListenerContext
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.fail
class InfluxDBRawBackendListenerClientTest {
val sut = InfluxDBRawBackendListenerClient()
private val defaultContext = BackendListenerContext(sut.getDefaultParameters())
private fun createOkSample(): SampleResult {
val t = 1600123456789
return SampleResult.createTestSample(t - 100, t).apply {
latency = 42
connectTime = 7
sampleLabel = "myLabel"
threadName = "myThread"
setResponseOK()
}
}
@Test
fun `Default parameters contain minimum required options`() {
val actualKeys = sut.getDefaultParameters()
.getArgumentsAsMap()
.keys
val expectedKeys = setOf(
"influxdbMetricsSender", "influxdbUrl",
"influxdbToken", "measurement"
)
if (!actualKeys.containsAll(expectedKeys)) {
fail("Default arguments $actualKeys should include all keys of $expectedKeys")
}
}
@Test
fun `Provided args are used during setup`() {
sut.setupTest(defaultContext)
assertEquals("jmeter", sut.measurement, ".measurement")
assertEquals(
HttpMetricsSender::class.java,
sut.influxDBMetricsManager::class.java,
".influxDBMetricsManager.class"
)
}
@Test
fun `OK sample data is mapped correctly to InfluxDB tags and fields`() {
val okSample = createOkSample()
assertEquals(
"status=ok,transaction=myLabel,threadName=myThread",
InfluxDBRawBackendListenerClient.createTags(okSample),
"createTags($okSample)"
)
assertEquals(
"duration=100,ttfb=42,connectTime=7",
InfluxDBRawBackendListenerClient.createFields(okSample),
"createFields($okSample)"
)
}
@Test
fun `Failed sample data is mapped correctly to InfluxDB tags and fields`() {
val koSample = SampleResult().apply {
sampleLabel = "myLabel"
threadName = "myThread"
}
assertEquals(
"status=ko,transaction=myLabel,threadName=myThread",
InfluxDBRawBackendListenerClient.createTags(koSample),
"createTags($koSample)"
)
}
@Test
fun `Upon handling sample result data is added to influxDBMetricsManager and written`() {
val mockSender = mockk<InfluxdbMetricsSender>(relaxed = true)
val sut = InfluxDBRawBackendListenerClient(mockSender)
sut.handleSampleResults(listOf(createOkSample()), defaultContext)
verifyOrder {
mockSender.addMetric(any(), any(), any(), any())
mockSender.writeAndSendMetrics()
}
}
@Test
fun `teardownTest calls destroy on influxDBMetricsManager`() {
val mockSender = mockk<InfluxdbMetricsSender>(relaxed = true)
val sut = InfluxDBRawBackendListenerClient(mockSender)
sut.teardownTest(defaultContext)
verify(exactly = 1) {
mockSender.destroy()
}
}
}