|
|
|
@ -2,6 +2,7 @@ package definitions |
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
|
"encoding/json" |
|
|
|
|
"errors" |
|
|
|
|
"io/ioutil" |
|
|
|
|
"strings" |
|
|
|
|
"testing" |
|
|
|
@ -405,6 +406,283 @@ email_configs: |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func Test_ConfigUnmashaling(t *testing.T) { |
|
|
|
|
for _, tc := range []struct { |
|
|
|
|
desc, input string |
|
|
|
|
err error |
|
|
|
|
}{ |
|
|
|
|
{ |
|
|
|
|
desc: "empty mute time name should error", |
|
|
|
|
err: errors.New("missing name in mute time interval"), |
|
|
|
|
input: ` |
|
|
|
|
{ |
|
|
|
|
"route": { |
|
|
|
|
"receiver": "grafana-default-email" |
|
|
|
|
}, |
|
|
|
|
"mute_time_intervals": [ |
|
|
|
|
{ |
|
|
|
|
"name": "", |
|
|
|
|
"time_intervals": [ |
|
|
|
|
{ |
|
|
|
|
"times": [ |
|
|
|
|
{ |
|
|
|
|
"start_time": "00:00", |
|
|
|
|
"end_time": "12:00" |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
], |
|
|
|
|
"templates": null, |
|
|
|
|
"receivers": [ |
|
|
|
|
{ |
|
|
|
|
"name": "grafana-default-email", |
|
|
|
|
"grafana_managed_receiver_configs": [ |
|
|
|
|
{ |
|
|
|
|
"uid": "uxwfZvtnz", |
|
|
|
|
"name": "email receiver", |
|
|
|
|
"type": "email", |
|
|
|
|
"disableResolveMessage": false, |
|
|
|
|
"settings": { |
|
|
|
|
"addresses": "<example@email.com>" |
|
|
|
|
}, |
|
|
|
|
"secureFields": {} |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
`, |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
desc: "not unique mute time names should error", |
|
|
|
|
err: errors.New("mute time interval \"test1\" is not unique"), |
|
|
|
|
input: ` |
|
|
|
|
{ |
|
|
|
|
"route": { |
|
|
|
|
"receiver": "grafana-default-email" |
|
|
|
|
}, |
|
|
|
|
"mute_time_intervals": [ |
|
|
|
|
{ |
|
|
|
|
"name": "test1", |
|
|
|
|
"time_intervals": [ |
|
|
|
|
{ |
|
|
|
|
"times": [ |
|
|
|
|
{ |
|
|
|
|
"start_time": "00:00", |
|
|
|
|
"end_time": "12:00" |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
"name": "test1", |
|
|
|
|
"time_intervals": [ |
|
|
|
|
{ |
|
|
|
|
"times": [ |
|
|
|
|
{ |
|
|
|
|
"start_time": "00:00", |
|
|
|
|
"end_time": "12:00" |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
], |
|
|
|
|
"templates": null, |
|
|
|
|
"receivers": [ |
|
|
|
|
{ |
|
|
|
|
"name": "grafana-default-email", |
|
|
|
|
"grafana_managed_receiver_configs": [ |
|
|
|
|
{ |
|
|
|
|
"uid": "uxwfZvtnz", |
|
|
|
|
"name": "email receiver", |
|
|
|
|
"type": "email", |
|
|
|
|
"disableResolveMessage": false, |
|
|
|
|
"settings": { |
|
|
|
|
"addresses": "<example@email.com>" |
|
|
|
|
}, |
|
|
|
|
"secureFields": {} |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
`, |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
desc: "mute time intervals on root route should error", |
|
|
|
|
err: errors.New("root route must not have any mute time intervals"), |
|
|
|
|
input: ` |
|
|
|
|
{ |
|
|
|
|
"route": { |
|
|
|
|
"receiver": "grafana-default-email", |
|
|
|
|
"mute_time_intervals": ["test1"] |
|
|
|
|
}, |
|
|
|
|
"mute_time_intervals": [ |
|
|
|
|
{ |
|
|
|
|
"name": "test1", |
|
|
|
|
"time_intervals": [ |
|
|
|
|
{ |
|
|
|
|
"times": [ |
|
|
|
|
{ |
|
|
|
|
"start_time": "00:00", |
|
|
|
|
"end_time": "12:00" |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
], |
|
|
|
|
"templates": null, |
|
|
|
|
"receivers": [ |
|
|
|
|
{ |
|
|
|
|
"name": "grafana-default-email", |
|
|
|
|
"grafana_managed_receiver_configs": [ |
|
|
|
|
{ |
|
|
|
|
"uid": "uxwfZvtnz", |
|
|
|
|
"name": "email receiver", |
|
|
|
|
"type": "email", |
|
|
|
|
"disableResolveMessage": false, |
|
|
|
|
"settings": { |
|
|
|
|
"addresses": "<example@email.com>" |
|
|
|
|
}, |
|
|
|
|
"secureFields": {} |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
`, |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
desc: "undefined mute time names in routes should error", |
|
|
|
|
err: errors.New("undefined time interval \"test2\" used in route"), |
|
|
|
|
input: ` |
|
|
|
|
{ |
|
|
|
|
"route": { |
|
|
|
|
"receiver": "grafana-default-email", |
|
|
|
|
"routes": [ |
|
|
|
|
{ |
|
|
|
|
"receiver": "grafana-default-email", |
|
|
|
|
"object_matchers": [ |
|
|
|
|
[ |
|
|
|
|
"a", |
|
|
|
|
"=", |
|
|
|
|
"b" |
|
|
|
|
] |
|
|
|
|
], |
|
|
|
|
"mute_time_intervals": [ |
|
|
|
|
"test2" |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
}, |
|
|
|
|
"mute_time_intervals": [ |
|
|
|
|
{ |
|
|
|
|
"name": "test1", |
|
|
|
|
"time_intervals": [ |
|
|
|
|
{ |
|
|
|
|
"times": [ |
|
|
|
|
{ |
|
|
|
|
"start_time": "00:00", |
|
|
|
|
"end_time": "12:00" |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
], |
|
|
|
|
"templates": null, |
|
|
|
|
"receivers": [ |
|
|
|
|
{ |
|
|
|
|
"name": "grafana-default-email", |
|
|
|
|
"grafana_managed_receiver_configs": [ |
|
|
|
|
{ |
|
|
|
|
"uid": "uxwfZvtnz", |
|
|
|
|
"name": "email receiver", |
|
|
|
|
"type": "email", |
|
|
|
|
"disableResolveMessage": false, |
|
|
|
|
"settings": { |
|
|
|
|
"addresses": "<example@email.com>" |
|
|
|
|
}, |
|
|
|
|
"secureFields": {} |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
`, |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
desc: "valid config should not error", |
|
|
|
|
input: ` |
|
|
|
|
{ |
|
|
|
|
"route": { |
|
|
|
|
"receiver": "grafana-default-email", |
|
|
|
|
"routes": [ |
|
|
|
|
{ |
|
|
|
|
"receiver": "grafana-default-email", |
|
|
|
|
"object_matchers": [ |
|
|
|
|
[ |
|
|
|
|
"a", |
|
|
|
|
"=", |
|
|
|
|
"b" |
|
|
|
|
] |
|
|
|
|
], |
|
|
|
|
"mute_time_intervals": [ |
|
|
|
|
"test1" |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
}, |
|
|
|
|
"mute_time_intervals": [ |
|
|
|
|
{ |
|
|
|
|
"name": "test1", |
|
|
|
|
"time_intervals": [ |
|
|
|
|
{ |
|
|
|
|
"times": [ |
|
|
|
|
{ |
|
|
|
|
"start_time": "00:00", |
|
|
|
|
"end_time": "12:00" |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
], |
|
|
|
|
"templates": null, |
|
|
|
|
"receivers": [ |
|
|
|
|
{ |
|
|
|
|
"name": "grafana-default-email", |
|
|
|
|
"grafana_managed_receiver_configs": [ |
|
|
|
|
{ |
|
|
|
|
"uid": "uxwfZvtnz", |
|
|
|
|
"name": "email receiver", |
|
|
|
|
"type": "email", |
|
|
|
|
"disableResolveMessage": false, |
|
|
|
|
"settings": { |
|
|
|
|
"addresses": "<example@email.com>" |
|
|
|
|
}, |
|
|
|
|
"secureFields": {} |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
`, |
|
|
|
|
}, |
|
|
|
|
} { |
|
|
|
|
t.Run(tc.desc, func(t *testing.T) { |
|
|
|
|
var out Config |
|
|
|
|
err := json.Unmarshal([]byte(tc.input), &out) |
|
|
|
|
require.Equal(t, tc.err, err) |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func Test_GettableUserConfigUnmarshaling(t *testing.T) { |
|
|
|
|
for _, tc := range []struct { |
|
|
|
|
desc, input string |
|
|
|
|