@@ -853,3 +853,71 @@ routes:
853
853
}
854
854
}
855
855
}
856
+
857
+ func TestRouteID (t * testing.T ) {
858
+ in := `
859
+ receiver: 'notify-def'
860
+
861
+ routes:
862
+ - matchers: ['{owner="team-A"}', '{level!="critical"}']
863
+ receiver: 'notify-D'
864
+ group_by: [...]
865
+ continue: true
866
+ - matchers: ['{owner="team-A"}', '{level!="critical"}']
867
+ receiver: 'notify-A'
868
+ routes:
869
+ - matchers: ['{env="testing"}', '{baz!~".*quux"}']
870
+ receiver: 'notify-testing'
871
+ group_by: [...]
872
+ - match:
873
+ env: "production"
874
+ receiver: 'notify-productionA'
875
+ group_wait: 1m
876
+ continue: true
877
+ - matchers: [ env=~"produ.*", job=~".*"]
878
+ receiver: 'notify-productionB'
879
+ group_wait: 30s
880
+ group_interval: 5m
881
+ repeat_interval: 1h
882
+ group_by: ['job']
883
+ - match_re:
884
+ owner: 'team-(B|C)'
885
+ group_by: ['foo', 'bar']
886
+ group_wait: 2m
887
+ receiver: 'notify-BC'
888
+ - matchers: [group_by="role"]
889
+ group_by: ['role']
890
+ routes:
891
+ - matchers: ['{env="testing"}']
892
+ receiver: 'notify-testing'
893
+ routes:
894
+ - matchers: [wait="long"]
895
+ group_wait: 2m
896
+ `
897
+
898
+ var ctree config.Route
899
+ if err := yaml .UnmarshalStrict ([]byte (in ), & ctree ); err != nil {
900
+ t .Fatal (err )
901
+ }
902
+ tree := NewRoute (& ctree , nil )
903
+
904
+ expected := []string {
905
+ "{}" ,
906
+ "{}/{level!=\" critical\" ,owner=\" team-A\" }/0" ,
907
+ "{}/{level!=\" critical\" ,owner=\" team-A\" }/1" ,
908
+ "{}/{level!=\" critical\" ,owner=\" team-A\" }/{baz!~\" .*quux\" ,env=\" testing\" }/0" ,
909
+ "{}/{level!=\" critical\" ,owner=\" team-A\" }/{env=\" production\" }/1" ,
910
+ "{}/{level!=\" critical\" ,owner=\" team-A\" }/{env=~\" produ.*\" ,job=~\" .*\" }/2" ,
911
+ "{}/{owner=~\" ^(?:team-(B|C))$\" }/2" ,
912
+ "{}/{group_by=\" role\" }/3" ,
913
+ "{}/{group_by=\" role\" }/{env=\" testing\" }/0" ,
914
+ "{}/{group_by=\" role\" }/{env=\" testing\" }/{wait=\" long\" }/0" ,
915
+ }
916
+
917
+ var got []string
918
+ tree .Walk (func (r * Route ) {
919
+ got = append (got , r .ID ())
920
+ })
921
+
922
+ require .ElementsMatch (t , got , expected )
923
+ }
0 commit comments