@@ -665,6 +665,76 @@ func TestSummarizeAlignToFrom(t *testing.T) {
665
665
testSummarize ("AlignToFrom" , input , outputMax [1 ], "45s" , "max" , true , t )
666
666
}
667
667
668
+ func TestSummarizeLargeIntervalTimestamps (t * testing.T ) {
669
+
670
+ // This test is specifically testing the timestamp behavior, so we don't need real values.
671
+ // However, we do need a lot of datapoints to trigger the bug we are regression testing against.
672
+ inputInterval := uint32 (10 )
673
+ numTimestamps := uint32 (89 * 24 * 60 * 60 ) / inputInterval
674
+ startTime := uint32 (1464637518 )
675
+ endTime := startTime + numTimestamps * inputInterval
676
+
677
+ inputDps := make ([]schema.Point , 0 , numTimestamps )
678
+
679
+ for i := uint32 (0 ); i < numTimestamps ; i ++ {
680
+ inputDps = append (inputDps , schema.Point {Val : 0 , Ts : startTime + i * inputInterval })
681
+ }
682
+
683
+ outputInterval := uint32 (30 * 24 * 60 * 60 )
684
+
685
+ // alignToFrom = false - starting timestamp is a multiple of `outputInterval`
686
+ unalignedStart := startTime - (startTime % outputInterval )
687
+ var unalignedExpected = []schema.Point {
688
+ {Val : 0 , Ts : unalignedStart },
689
+ {Val : 0 , Ts : unalignedStart + outputInterval },
690
+ {Val : 0 , Ts : unalignedStart + 2 * outputInterval },
691
+ {Val : 0 , Ts : unalignedStart + 3 * outputInterval },
692
+ }
693
+
694
+ // alignToFrom = true - starting timestamp is unchanged from input
695
+ var alignedExpected = []schema.Point {
696
+ {Val : 0 , Ts : startTime },
697
+ {Val : 0 , Ts : startTime + outputInterval },
698
+ {Val : 0 , Ts : startTime + 2 * outputInterval },
699
+ }
700
+
701
+ input := []models.Series {
702
+ {
703
+ Target : "align" ,
704
+ QueryPatt : "align" ,
705
+ QueryFrom : startTime ,
706
+ QueryTo : endTime ,
707
+ Interval : inputInterval ,
708
+ Datapoints : getCopy (inputDps ),
709
+ },
710
+ }
711
+ outputSum := [][]models.Series {
712
+ {
713
+ {
714
+ Target : "summarize(align, \" 30d\" , \" sum\" )" ,
715
+ QueryPatt : "summarize(align, \" 30d\" , \" sum\" )" ,
716
+ QueryFrom : startTime ,
717
+ QueryTo : endTime ,
718
+ Interval : outputInterval ,
719
+ Datapoints : getCopy (unalignedExpected ),
720
+ },
721
+ },
722
+ {
723
+ {
724
+ Target : "summarize(align, \" 30d\" , \" sum\" , true)" ,
725
+ QueryPatt : "summarize(align, \" 30d\" , \" sum\" , true)" ,
726
+ QueryFrom : startTime ,
727
+ QueryTo : endTime ,
728
+ Interval : outputInterval ,
729
+ Datapoints : getCopy (alignedExpected ),
730
+ },
731
+ },
732
+ }
733
+
734
+ testSummarize ("LongIntervals" , input , outputSum [0 ], "30d" , "sum" , false , t )
735
+ testSummarize ("LongIntervals" , input , outputSum [1 ], "30d" , "sum" , true , t )
736
+ }
737
+
668
738
func testSummarize (name string , in []models.Series , out []models.Series , intervalString , fn string , alignToFrom bool , t * testing.T ) {
669
739
f := NewSummarize ()
670
740
@@ -689,7 +759,7 @@ func testSummarize(name string, in []models.Series, out []models.Series, interva
689
759
t .Fatalf ("case %q (%q, %q, %t): expected target %q, got %q" , name , intervalString , fn , alignToFrom , exp .Target , got .Target )
690
760
}
691
761
if len (got .Datapoints ) != len (exp .Datapoints ) {
692
- t .Fatalf ("case %q (%q, %q, %t): len output expected %# v, got %# v" , name , intervalString , fn , alignToFrom , (exp .Datapoints ), (got .Datapoints ))
762
+ t .Fatalf ("case %q (%q, %q, %t): len output expected %v, got %v" , name , intervalString , fn , alignToFrom , (exp .Datapoints ), (got .Datapoints ))
693
763
}
694
764
for j , p := range exp .Datapoints {
695
765
bothNaN := math .IsNaN (p .Val ) && math .IsNaN (got .Datapoints [j ].Val )
0 commit comments