@@ -22,6 +22,7 @@ import (
2222 "github.com/sensu/sensu-go/backend/store/cache"
2323 storev2 "github.com/sensu/sensu-go/backend/store/v2"
2424 "github.com/sensu/sensu-go/backend/store/v2/storetest"
25+ "github.com/sensu/sensu-go/testing/mockbus"
2526 "github.com/sensu/sensu-go/testing/mockstore"
2627)
2728
@@ -304,8 +305,8 @@ func TestCheckTTL(t *testing.T) {
304305func TestCreateFailedCheckEventWithTTLStatus (t * testing.T ) {
305306 // Test that TTL status is properly handled when creating failed check events
306307 tests := []struct {
307- name string
308- ttlStatus int32
308+ name string
309+ ttlStatus int32
309310 expectedStatus uint32
310311 description string
311312 }{
@@ -365,6 +366,91 @@ func TestCreateFailedCheckEventWithTTLStatus(t *testing.T) {
365366 }
366367}
367368
369+ func TestHandleFailureSilencing (t * testing.T ) {
370+ tests := []struct {
371+ name string
372+ silencedEntries []corev2.Resource
373+ expectSilenced bool
374+ expectedIDs []string
375+ }{
376+ {
377+ name : "TTL failure event is not silenced when no matching silence entries" ,
378+ expectSilenced : false ,
379+ },
380+ {
381+ name : "TTL failure event is silenced by entity subscription" ,
382+ silencedEntries : []corev2.Resource {
383+ corev2 .FixtureSilenced ("entity:foo:*" ),
384+ },
385+ expectSilenced : true ,
386+ expectedIDs : []string {"entity:foo:*" },
387+ },
388+ {
389+ name : "TTL failure event is silenced by check name" ,
390+ silencedEntries : []corev2.Resource {
391+ corev2 .FixtureSilenced ("*:check_cpu" ),
392+ },
393+ expectSilenced : true ,
394+ expectedIDs : []string {"*:check_cpu" },
395+ },
396+ {
397+ name : "TTL failure event is silenced by entity+check" ,
398+ silencedEntries : []corev2.Resource {
399+ corev2 .FixtureSilenced ("entity:foo:check_cpu" ),
400+ },
401+ expectSilenced : true ,
402+ expectedIDs : []string {"entity:foo:check_cpu" },
403+ },
404+ }
405+ for _ , tt := range tests {
406+ t .Run (tt .name , func (t * testing.T ) {
407+ event := corev2 .FixtureEvent ("foo" , "check_cpu" )
408+ event .Check .Ttl = 60
409+ event .Check .Executed = time .Now ().Add (- 120 * time .Second ).Unix ()
410+
411+ eventStore := & mockstore.MockStore {}
412+ eventStore .On ("GetEventByEntityCheck" , mock .Anything , "foo" , "check_cpu" ).Return (event , nil )
413+ eventStore .On ("UpdateEvent" , mock .Anything ).Return (event , (* corev2 .Event )(nil ), nil )
414+
415+ bus := & mockbus.MockBus {}
416+ bus .On ("Publish" , messaging .TopicEvent , mock .Anything ).Return (nil )
417+
418+ silencedCache := cache .NewFromResources (tt .silencedEntries , false )
419+
420+ ctx := context .WithValue (context .Background (), corev2 .NamespaceKey , "default" )
421+ e := & Eventd {
422+ eventStore : eventStore ,
423+ bus : bus ,
424+ silencedCache : silencedCache ,
425+ ctx : ctx ,
426+ errChan : make (chan error , 1 ),
427+ Logger : NoopLogger {},
428+ }
429+
430+ err := e .handleFailure (ctx , event )
431+ require .NoError (t , err )
432+
433+ // Verify the event was published
434+ bus .AssertCalled (t , "Publish" , messaging .TopicEvent , mock .Anything )
435+
436+ // Get the event that was passed to UpdateEvent
437+ calls := eventStore .Calls
438+ for _ , call := range calls {
439+ if call .Method == "UpdateEvent" {
440+ publishedEvent := call .Arguments [0 ].(* corev2.Event )
441+ if tt .expectSilenced {
442+ assert .True (t , publishedEvent .Check .IsSilenced , "event should be silenced" )
443+ assert .Equal (t , tt .expectedIDs , publishedEvent .Check .Silenced )
444+ } else {
445+ assert .False (t , publishedEvent .Check .IsSilenced , "event should not be silenced" )
446+ assert .Empty (t , publishedEvent .Check .Silenced )
447+ }
448+ }
449+ }
450+ })
451+ }
452+ }
453+
368454func TestBuryConditions (t * testing.T ) {
369455 tests := []struct {
370456 name string
0 commit comments