blob: 067e3d1972beca057bac9814805ea34b3ba18cfb [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.graphite
import org.apache.commons.pool2.impl.GenericKeyedObjectPool
import spock.lang.Specification
class TextGraphiteMetricsSenderSpec extends Specification {
def sut = new TextGraphiteMetricsSender()
def "new sender has no metrics"() {
expect:
sut.metrics.isEmpty()
}
def "adding metric to sender creates correct MetricTuple"() {
given:
def expectedName = "prefix-contextName.metricName"
def expectedTS = 1000000
def expectedVal = "value"
sut.setup("host", 1024, "prefix-")
when:
sut.addMetric(expectedTS, "contextName", "metricName", expectedVal)
then:
def actualMetrics = sut.metrics
actualMetrics.size() == 1
def actualMetric = actualMetrics.get(0)
actualMetric.name == expectedName
actualMetric.timestamp == expectedTS
actualMetric.value == expectedVal
}
def "writeAndSendMetrics does not attempt connection if there's nothing to send"() {
given:
sut.setup("non-existant-host", 1024, "prefix-")
when:
sut.writeAndSendMetrics()
then:
sut.metrics.isEmpty()
noExceptionThrown()
}
def "writeAndSendMetrics connects and sends if there's something to send, dropping metrics on connection failure, without throwing exceptions"() {
given:
SocketConnectionInfos socketConnInfoMock = Mock()
GenericKeyedObjectPool<SocketConnectionInfos, SocketOutputStream> objectPoolStub = Mock()
sut.setup(socketConnInfoMock, objectPoolStub, "prefix-")
sut.addMetric(1, "contextName", "metricName", "val")
when:
sut.writeAndSendMetrics()
then:
1 * objectPoolStub.borrowObject(socketConnInfoMock)
sut.metrics.isEmpty()
noExceptionThrown()
}
def "destroy closes outputStreamPool"() {
given:
GenericKeyedObjectPool<SocketConnectionInfos, SocketOutputStream> objectPoolStub = Mock()
sut.setup(Mock(SocketConnectionInfos), objectPoolStub, "prefix-")
sut.addMetric(1, "contextName", "metricName", "val")
when:
sut.destroy()
then:
1 * objectPoolStub.close()
// TODO: should destroy also set metrics to null or are we relying on the original reference to be removed after destroy is called?
sut.metrics.size() == 1
noExceptionThrown()
}
}