Add a test case to detect regression on issue fixed by PR #39.

Related issue is #38. Time to start expanding functional test coverage since
the integration tests missed this.
This commit is contained in:
Will Rouesnel 2016-11-29 02:12:51 +11:00
parent 8f3088611b
commit 3ead0f9aff
3 changed files with 91 additions and 1 deletions

View File

@ -21,7 +21,7 @@ vet:
go vet .
test:
go test -v .
go test -v -cover .
test-integration: postgres_exporter postgres_exporter_integration_test
tests/test-smoke ./postgres_exporter ./postgres_exporter_integration_test

View File

@ -508,6 +508,9 @@ func makeDescMap(pgVersion semver.Version, metricMaps map[string]map[string]Colu
// Force to discard if not compatible.
if columnMapping.supportedVersions != nil {
if !columnMapping.supportedVersions(pgVersion) {
// It's very useful to be able to see what columns are being
// rejected.
log.Debugln(columnName, "is being forced to discard due to version incompatibility.")
thisMap[columnName] = MetricMap{
discard: true,
conversion: func(in interface{}) (float64, bool) {

87
postgres_exporter_test.go Normal file
View File

@ -0,0 +1,87 @@
// +build !integration
package main
import (
"testing"
. "gopkg.in/check.v1"
"github.com/blang/semver"
)
// Hook up gocheck into the "go test" runner.
func Test(t *testing.T) { TestingT(t) }
type FunctionalSuite struct{
e *Exporter
}
var _ = Suite(&FunctionalSuite{})
func (s *FunctionalSuite) SetUpSuite(c *C) {
}
func (s *FunctionalSuite) TestSemanticVersionColumnDiscard(c *C) {
testMetricMap := map[string]map[string]ColumnMapping{
"test_namespace" : map[string]ColumnMapping{
"metric_which_stays" : {COUNTER, "This metric should not be eliminated", nil, nil},
"metric_which_discards" : {COUNTER, "This metric should be forced to DISCARD", nil, nil},
},
}
{
// No metrics should be eliminated
resultMap := makeDescMap(semver.MustParse("0.0.1"), testMetricMap)
c.Check(
resultMap["test_namespace"].columnMappings["metric_which_stays"].discard,
Equals,
false,
)
c.Check(
resultMap["test_namespace"].columnMappings["metric_which_discards"].discard,
Equals,
false,
)
}
{
// Update the map so the discard metric should be eliminated
discardable_metric := testMetricMap["test_namespace"]["metric_which_discards"]
discardable_metric.supportedVersions = semver.MustParseRange(">0.0.1")
testMetricMap["test_namespace"]["metric_which_discards"] = discardable_metric
// Discard metric should be discarded
resultMap := makeDescMap(semver.MustParse("0.0.1"), testMetricMap)
c.Check(
resultMap["test_namespace"].columnMappings["metric_which_stays"].discard,
Equals,
false,
)
c.Check(
resultMap["test_namespace"].columnMappings["metric_which_discards"].discard,
Equals,
true,
)
}
{
// Update the map so the discard metric should be kept but has a version
discardable_metric := testMetricMap["test_namespace"]["metric_which_discards"]
discardable_metric.supportedVersions = semver.MustParseRange(">0.0.1")
testMetricMap["test_namespace"]["metric_which_discards"] = discardable_metric
// Discard metric should be discarded
resultMap := makeDescMap(semver.MustParse("0.0.2"), testMetricMap)
c.Check(
resultMap["test_namespace"].columnMappings["metric_which_stays"].discard,
Equals,
false,
)
c.Check(
resultMap["test_namespace"].columnMappings["metric_which_discards"].discard,
Equals,
false,
)
}
}