Fix Samples.Less() sorting method.

Change-Id: I337b7e6452674360f43f268c85fe7f31dee18044
This commit is contained in:
Julius Volz 2014-03-14 16:50:31 +01:00
parent bb957bc145
commit f91d98c93e
2 changed files with 131 additions and 0 deletions

View File

@ -47,6 +47,8 @@ func (s Samples) Less(i, j int) bool {
switch { switch {
case s[i].Metric.Before(s[j].Metric): case s[i].Metric.Before(s[j].Metric):
return true return true
case s[j].Metric.Before(s[i].Metric):
return false
case s[i].Timestamp.Before(s[j].Timestamp): case s[i].Timestamp.Before(s[j].Timestamp):
return true return true
default: default:

129
model/sample_test.go Normal file
View File

@ -0,0 +1,129 @@
// Copyright 2013 Prometheus Team
// Licensed 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 model
import (
"sort"
"testing"
)
func TestSamplesSort(t *testing.T) {
input := Samples{
&Sample{
// Fingerprint: 7658840550047852795
Metric: Metric{
MetricNameLabel: "B",
},
Timestamp: 1,
},
&Sample{
// Fingerprint: 7658840550047852795
Metric: Metric{
MetricNameLabel: "B",
},
Timestamp: 2,
},
&Sample{
// Fingerprint: 13206712341014817019
Metric: Metric{
MetricNameLabel: "A",
},
Timestamp: 1,
},
&Sample{
// Fingerprint: 13206712341014817019
Metric: Metric{
MetricNameLabel: "A",
},
Timestamp: 2,
},
&Sample{
// Fingerprint: 2110968759080888571
Metric: Metric{
MetricNameLabel: "C",
},
Timestamp: 1,
},
&Sample{
// Fingerprint: 2110968759080888571
Metric: Metric{
MetricNameLabel: "C",
},
Timestamp: 2,
},
}
expected := Samples{
&Sample{
// Fingerprint: 2110968759080888571
Metric: Metric{
MetricNameLabel: "C",
},
Timestamp: 1,
},
&Sample{
// Fingerprint: 2110968759080888571
Metric: Metric{
MetricNameLabel: "C",
},
Timestamp: 2,
},
&Sample{
// Fingerprint: 7658840550047852795
Metric: Metric{
MetricNameLabel: "B",
},
Timestamp: 1,
},
&Sample{
// Fingerprint: 7658840550047852795
Metric: Metric{
MetricNameLabel: "B",
},
Timestamp: 2,
},
&Sample{
// Fingerprint: 13206712341014817019
Metric: Metric{
MetricNameLabel: "A",
},
Timestamp: 1,
},
&Sample{
// Fingerprint: 13206712341014817019
Metric: Metric{
MetricNameLabel: "A",
},
Timestamp: 2,
},
}
sort.Sort(input)
for i, actual := range input {
actualFp := Fingerprint{}
actualFp.LoadFromMetric(actual.Metric)
expectedFp := Fingerprint{}
expectedFp.LoadFromMetric(expected[i].Metric)
if !actualFp.Equal(&expectedFp) {
t.Fatalf("%d. Incorrect fingerprint. Got %s; want %s", i, actualFp, expectedFp)
}
if actual.Timestamp != expected[i].Timestamp {
t.Fatalf("%d. Incorrect timestamp. Got %s; want %s", i, actual.Timestamp, expected[i].Timestamp)
}
}
}