@@ -127,7 +127,7 @@ func initSched(sc conf.SystemConfProvider, c conf.RuleConfProvider, startTime ti
127127 return s , err
128128}
129129
130- func testSched (t * testing.T , st * schedTest , cluster cluster.Cluster ) (s * Schedule ) {
130+ func testSched (t * testing.T , sysConf * conf. SystemConf , st * schedTest , cluster cluster.Cluster ) (s * Schedule ) {
131131 ts := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
132132 var req opentsdb.Request
133133 if err := json .NewDecoder (r .Body ).Decode (& req ); err != nil {
@@ -164,8 +164,12 @@ func testSched(t *testing.T, st *schedTest, cluster cluster.Cluster) (s *Schedul
164164 }
165165
166166 time .Sleep (time .Millisecond * 250 )
167- sysConf := & conf.SystemConf {CheckFrequency : conf.Duration {Duration : time .Minute * 5 }, DefaultRunEvery : 1 , UnknownThreshold : 5 , MinGroupSize : 5 , OpenTSDBConf : conf.OpenTSDBConf {Host : u .Host , ResponseLimit : 1 << 20 }}
168- s , _ = initSched (sysConf , c , time .Date (1900 , 0 , 0 , 0 , 0 , 0 , 0 , time .UTC ), cluster ) //pretend we've been running for a while
167+ if sysConf == nil {
168+ sysConf = & conf.SystemConf {CheckFrequency : conf.Duration {Duration : time .Minute * 5 }, DefaultRunEvery : 1 , UnknownThreshold : 5 , MinGroupSize : 5 , OpenTSDBConf : conf.OpenTSDBConf {Host : u .Host , ResponseLimit : 1 << 20 }}
169+ } else {
170+ sysConf .OpenTSDBConf .Host = u .Host
171+ }
172+ s , _ = initSched (sysConf , c , time .Date (1900 , 0 , 0 , 0 , 0 , 0 , 0 , time .UTC ), cluster )
169173 for ak , time := range st .touched {
170174 s .DataAccess .State ().TouchAlertKey (ak , time )
171175 }
@@ -213,7 +217,7 @@ var window5Min = `"9.467277e+08", "9.46728e+08"`
213217
214218func TestCrit (t * testing.T ) {
215219 defer setup ()()
216- s := testSched (t , & schedTest {
220+ s := testSched (t , nil , & schedTest {
217221 conf : `alert a {
218222 crit = avg(q("avg:m{a=b}", "5m", "")) > 0
219223 }` ,
@@ -237,7 +241,7 @@ func TestCrit(t *testing.T) {
237241
238242func TestClusterEnabledFollover_AlertRun (t * testing.T ) {
239243 defer setup ()()
240- s := testSched (t , & schedTest {
244+ s := testSched (t , nil , & schedTest {
241245 conf : `alert a {
242246 crit = avg(q("avg:m{a=b}", "5m", "")) > 0
243247 }` ,
@@ -261,7 +265,7 @@ func TestClusterEnabledFollover_AlertRun(t *testing.T) {
261265
262266func TestBandDisableUnjoined (t * testing.T ) {
263267 defer setup ()()
264- testSched (t , & schedTest {
268+ testSched (t , nil , & schedTest {
265269 conf : `alert a {
266270 $sum = "sum:m{a=*}"
267271 $band = band($sum, "1m", "1h", 1)
@@ -288,7 +292,7 @@ func TestBandDisableUnjoined(t *testing.T) {
288292
289293func TestCount (t * testing.T ) {
290294 defer setup ()()
291- testSched (t , & schedTest {
295+ testSched (t , nil , & schedTest {
292296 conf : `alert a {
293297 crit = count("sum:m{a=*}", "5m", "") != 2
294298 }` ,
@@ -311,7 +315,7 @@ func TestCount(t *testing.T) {
311315
312316func TestUnknown (t * testing.T ) {
313317 defer setup ()()
314- testSched (t , & schedTest {
318+ testSched (t , nil , & schedTest {
315319 conf : `alert a {
316320 crit = avg(q("avg:m{a=*}", "5m", "")) > 0
317321 }` ,
@@ -328,9 +332,39 @@ func TestUnknown(t *testing.T) {
328332 }, nil )
329333}
330334
335+ func TestDelayedUnknown (t * testing.T ) {
336+ defer setup ()()
337+ testSched (
338+ t ,
339+ & conf.SystemConf {
340+ CheckFrequency : conf.Duration {Duration : time .Minute * 5 },
341+ DefaultRunEvery : 1 ,
342+ UnknownThreshold : 5 ,
343+ MinGroupSize : 5 ,
344+ ProblemRunsToUnknown : 2 ,
345+ OpenTSDBConf : conf.OpenTSDBConf {ResponseLimit : 1 << 20 },
346+ },
347+ & schedTest {
348+ conf : `alert a {
349+ crit = avg(q("avg:m{a=*}", "5m", "")) > 0
350+ }` ,
351+ queries : map [string ]opentsdb.ResponseSet {
352+ `q("avg:m{a=*}", ` + window5Min + `)` : {},
353+ },
354+ state : map [schedState ]bool {
355+ {"a{a=d}" , "unknown" }: true ,
356+ },
357+ touched : map [models.AlertKey ]time.Time {
358+ "a{a=b}" : queryTime .Add (- 10 * time .Minute ),
359+ "a{a=c}" : queryTime .Add (- 12 * time .Minute ),
360+ "a{a=d}" : queryTime .Add (- 15 * time .Minute ),
361+ },
362+ }, nil )
363+ }
364+
331365func TestUnknown_HalfFreq (t * testing.T ) {
332366 defer setup ()()
333- testSched (t , & schedTest {
367+ testSched (t , nil , & schedTest {
334368 conf : `alert a {
335369 crit = avg(q("avg:m{a=*}", "5m", "")) > 0
336370 runEvery = 2
@@ -351,7 +385,7 @@ func TestUnknown_HalfFreq(t *testing.T) {
351385func TestUnknown_WithError (t * testing.T ) {
352386 defer setup ()()
353387
354- s := testSched (t , & schedTest {
388+ s := testSched (t , nil , & schedTest {
355389 conf : `alert a {
356390 crit = avg(q("avg:m{a=*}", "5m", "")) > 0
357391 }` ,
@@ -371,7 +405,7 @@ func TestUnknown_WithError(t *testing.T) {
371405
372406func TestRename (t * testing.T ) {
373407 defer setup ()()
374- testSched (t , & schedTest {
408+ testSched (t , nil , & schedTest {
375409 conf : `
376410 alert ping.host {
377411
@@ -425,7 +459,7 @@ func TestRename(t *testing.T) {
425459
426460func TestUnknownsAreNormal (t * testing.T ) {
427461 defer setup ()()
428- testSched (t , & schedTest {
462+ testSched (t , nil , & schedTest {
429463 conf : `alert a {
430464 unknownIsNormal = true
431465 crit = avg(q("avg:m{a=*}", "5m", "")) > 0
0 commit comments