2025-04-01 10:38:02 +09:00

118 lines
3.3 KiB
TypeScript

import { MatcherOperator, ROUTES_META_SYMBOL, Route } from 'app/plugins/datasource/alertmanager/types';
import { ComGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1Route } from '../../openapi/routesApi.gen';
import { ROOT_ROUTE_NAME } from '../../utils/k8s/constants';
import { createKubernetesRoutingTreeSpec, k8sSubRouteToRoute, routeToK8sSubRoute } from './useNotificationPolicyRoute';
test('k8sSubRouteToRoute', () => {
const input: ComGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1Route = {
continue: false,
group_by: ['label1'],
group_interval: '5m',
group_wait: '30s',
matchers: [{ label: 'label1', type: '=', value: 'value1' }],
mute_time_intervals: ['mt-1'],
receiver: 'my-receiver',
repeat_interval: '4h',
routes: [
{
receiver: 'receiver2',
matchers: [{ label: 'label2', type: '!=', value: 'value2' }],
},
],
};
const expected: Route = {
continue: false,
group_by: ['label1'],
group_interval: '5m',
group_wait: '30s',
matchers: undefined, // matchers -> object_matchers
object_matchers: [['label1', MatcherOperator.equal, 'value1']],
mute_time_intervals: ['mt-1'],
receiver: 'my-receiver',
repeat_interval: '4h',
routes: [
{
receiver: 'receiver2',
matchers: undefined,
object_matchers: [['label2', MatcherOperator.notEqual, 'value2']],
routes: undefined,
},
],
};
expect(k8sSubRouteToRoute(input)).toStrictEqual(expected);
});
test('routeToK8sSubRoute', () => {
const input: Route = {
continue: false,
group_by: ['label1'],
group_interval: '5m',
group_wait: '30s',
matchers: undefined, // matchers -> object_matchers
object_matchers: [['label1', MatcherOperator.equal, 'value1']],
mute_time_intervals: ['mt-1'],
receiver: 'my-receiver',
repeat_interval: '4h',
routes: [
{
receiver: 'receiver2',
matchers: undefined,
object_matchers: [['label2', MatcherOperator.notEqual, 'value2']],
},
],
};
const expected: ComGithubGrafanaGrafanaPkgApisAlertingNotificationsV0Alpha1Route = {
continue: false,
group_by: ['label1'],
group_interval: '5m',
group_wait: '30s',
matchers: [{ label: 'label1', type: '=', value: 'value1' }],
mute_time_intervals: ['mt-1'],
receiver: 'my-receiver',
repeat_interval: '4h',
routes: [
{
receiver: 'receiver2',
matchers: [{ label: 'label2', type: '!=', value: 'value2' }],
routes: undefined,
},
],
};
expect(routeToK8sSubRoute(input)).toStrictEqual(expected);
});
test('createKubernetesRoutingTreeSpec', () => {
const route: Route = {
continue: true,
group_by: ['alertname'],
matchers: undefined,
object_matchers: [['severity', MatcherOperator.equal, 'critical']],
mute_time_intervals: ['interval-1'],
receiver: 'default-receiver',
repeat_interval: '4h',
routes: [
{
continue: false,
receiver: 'nested-receiver',
object_matchers: [['team', MatcherOperator.equal, 'frontend']],
group_wait: '30s',
group_interval: '5m',
},
],
[ROUTES_META_SYMBOL]: {
resourceVersion: 'abc123',
},
};
const tree = createKubernetesRoutingTreeSpec(route);
expect(tree.metadata.name).toBe(ROOT_ROUTE_NAME);
expect(tree).toMatchSnapshot();
});