diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 24946eef6..94e7e1e13 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -29,23 +29,23 @@ }, { "ImportPath": "github.com/prometheus/client_golang/extraction", - "Comment": "0.3.1", - "Rev": "f688948916633c167d810a9548d4b775da43b0b0" + "Comment": "0.3.2", + "Rev": "1cf6d4b964951c63779ba7513c57fe389b609014" }, { "ImportPath": "github.com/prometheus/client_golang/model", - "Comment": "0.3.1", - "Rev": "f688948916633c167d810a9548d4b775da43b0b0" + "Comment": "0.3.2", + "Rev": "1cf6d4b964951c63779ba7513c57fe389b609014" }, { "ImportPath": "github.com/prometheus/client_golang/prometheus", - "Comment": "0.3.1", - "Rev": "f688948916633c167d810a9548d4b775da43b0b0" + "Comment": "0.3.2", + "Rev": "1cf6d4b964951c63779ba7513c57fe389b609014" }, { "ImportPath": "github.com/prometheus/client_golang/text", - "Comment": "0.3.1", - "Rev": "f688948916633c167d810a9548d4b775da43b0b0" + "Comment": "0.3.2", + "Rev": "1cf6d4b964951c63779ba7513c57fe389b609014" }, { "ImportPath": "github.com/prometheus/client_model/go", diff --git a/Godeps/_workspace/src/github.com/prometheus/client_golang/model/metric.go b/Godeps/_workspace/src/github.com/prometheus/client_golang/model/metric.go index 48210ab8b..32f9d7fbc 100644 --- a/Godeps/_workspace/src/github.com/prometheus/client_golang/model/metric.go +++ b/Godeps/_workspace/src/github.com/prometheus/client_golang/model/metric.go @@ -101,7 +101,7 @@ type COWMetric struct { // Set sets a label name in the wrapped Metric to a given value and copies the // Metric initially, if it is not already a copy. -func (m COWMetric) Set(ln LabelName, lv LabelValue) { +func (m *COWMetric) Set(ln LabelName, lv LabelValue) { m.doCOW() m.Metric[ln] = lv } diff --git a/Godeps/_workspace/src/github.com/prometheus/client_golang/model/metric_test.go b/Godeps/_workspace/src/github.com/prometheus/client_golang/model/metric_test.go index f4cd6ee2b..d51b1842f 100644 --- a/Godeps/_workspace/src/github.com/prometheus/client_golang/model/metric_test.go +++ b/Godeps/_workspace/src/github.com/prometheus/client_golang/model/metric_test.go @@ -70,3 +70,52 @@ func BenchmarkMetric(b *testing.B) { testMetric(b) } } + +func TestCOWMetric(t *testing.T) { + testMetric := Metric{ + "to_delete": "test1", + "to_change": "test2", + } + + scenarios := []struct { + fn func(*COWMetric) + out Metric + }{ + { + fn: func(cm *COWMetric) { + cm.Delete("to_delete") + }, + out: Metric{ + "to_change": "test2", + }, + }, + { + fn: func(cm *COWMetric) { + cm.Set("to_change", "changed") + }, + out: Metric{ + "to_delete": "test1", + "to_change": "changed", + }, + }, + } + + for i, s := range scenarios { + orig := testMetric.Clone() + cm := &COWMetric{ + Metric: orig, + } + + s.fn(cm) + + // Test that the original metric was not modified. + if !orig.Equal(testMetric) { + t.Fatalf("%d. original metric changed; expected %v, got %v", i, testMetric, orig) + } + + // Test that the new metric has the right changes. + if !cm.Metric.Equal(s.out) { + t.Fatalf("%d. copied metric doesn't contain expected changes; expected %v, got %v", i, s.out, cm.Metric) + } + } +}