Skip to content

Commit

Permalink
Add a test case to detect regression on issue fixed by PR #39.
Browse files Browse the repository at this point in the history
Related issue is #38. Time to start expanding functional test coverage since
the integration tests missed this.
  • Loading branch information
wrouesnel committed Nov 28, 2016
1 parent 8f30886 commit 3ead0f9
Show file tree
Hide file tree
Showing 3 changed files with 91 additions and 1 deletion.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
3 changes: 3 additions & 0 deletions postgres_exporter.go
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
87 changes: 87 additions & 0 deletions postgres_exporter_test.go
Original file line number Diff line number Diff line change
@@ -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,
)
}
}

0 comments on commit 3ead0f9

Please sign in to comment.