diff --git a/storage/remote/read.go b/storage/remote/read.go index 09529192fb..1a88e6685c 100644 --- a/storage/remote/read.go +++ b/storage/remote/read.go @@ -151,11 +151,11 @@ type concreteSeriesSet struct { func (c *concreteSeriesSet) Next() bool { c.cur++ - return c.cur < len(c.series) + return c.cur-1 < len(c.series) } func (c *concreteSeriesSet) At() storage.Series { - return c.series[c.cur] + return c.series[c.cur-1] } func (c *concreteSeriesSet) Err() error { diff --git a/storage/remote/read_test.go b/storage/remote/read_test.go index 596ced5616..6b71afcdbb 100644 --- a/storage/remote/read_test.go +++ b/storage/remote/read_test.go @@ -20,6 +20,8 @@ import ( "github.com/prometheus/common/model" "github.com/prometheus/prometheus/pkg/labels" + "github.com/prometheus/prometheus/prompb" + "github.com/prometheus/prometheus/storage" ) func mustNewLabelMatcher(mt labels.MatchType, name, val string) *labels.Matcher { @@ -92,3 +94,32 @@ func TestAddExternalLabels(t *testing.T) { } } } + +func TestConcreteSeriesSet(t *testing.T) { + series1 := &concreteSeries{ + labels: labels.FromStrings("foo", "bar"), + samples: []*prompb.Sample{&prompb.Sample{Value: 1, Timestamp: 2}}, + } + series2 := &concreteSeries{ + labels: labels.FromStrings("foo", "baz"), + samples: []*prompb.Sample{&prompb.Sample{Value: 3, Timestamp: 4}}, + } + c := &concreteSeriesSet{ + series: []storage.Series{series1, series2}, + } + if !c.Next() { + t.Fatalf("Expected Next() to be true.") + } + if c.At() != series1 { + t.Fatalf("Unexpected series returned.") + } + if !c.Next() { + t.Fatalf("Expected Next() to be true.") + } + if c.At() != series2 { + t.Fatalf("Unexpected series returned.") + } + if c.Next() { + t.Fatalf("Expected Next() to be false.") + } +}