2019-09-23 07:17:00 -05:00
|
|
|
import { DataSourceSrv } from '@grafana/runtime';
|
2020-10-14 17:03:14 -05:00
|
|
|
import { DataSourceApi, PluginMeta, DataTransformerConfig, DataSourceInstanceSettings } from '@grafana/data';
|
2019-09-23 07:17:00 -05:00
|
|
|
|
|
|
|
import { ElasticsearchQuery } from '../../plugins/datasource/elasticsearch/types';
|
|
|
|
import { getAlertingValidationMessage } from './getAlertingValidationMessage';
|
|
|
|
|
|
|
|
describe('getAlertingValidationMessage', () => {
|
|
|
|
describe('when called with some targets containing template variables', () => {
|
|
|
|
it('then it should return false', async () => {
|
|
|
|
let call = 0;
|
|
|
|
const datasource: DataSourceApi = ({
|
|
|
|
meta: ({ alerting: true } as any) as PluginMeta,
|
|
|
|
targetContainsTemplate: () => {
|
|
|
|
if (call === 0) {
|
|
|
|
call++;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
},
|
|
|
|
name: 'some name',
|
|
|
|
} as any) as DataSourceApi;
|
|
|
|
const getMock = jest.fn().mockResolvedValue(datasource);
|
|
|
|
const datasourceSrv: DataSourceSrv = {
|
|
|
|
get: getMock,
|
2020-12-04 07:24:55 -06:00
|
|
|
getList(): DataSourceInstanceSettings[] {
|
2020-10-14 17:03:14 -05:00
|
|
|
return [];
|
|
|
|
},
|
2020-12-01 08:17:33 -06:00
|
|
|
getInstanceSettings: (() => {}) as any,
|
2019-09-23 07:17:00 -05:00
|
|
|
};
|
|
|
|
const targets: ElasticsearchQuery[] = [
|
2021-03-02 03:10:41 -06:00
|
|
|
{ refId: 'A', query: '@hostname:$hostname' },
|
|
|
|
{ refId: 'B', query: '@instance:instance' },
|
2019-09-23 07:17:00 -05:00
|
|
|
];
|
|
|
|
const transformations: DataTransformerConfig[] = [];
|
|
|
|
|
|
|
|
const result = await getAlertingValidationMessage(transformations, targets, datasourceSrv, datasource.name);
|
|
|
|
|
|
|
|
expect(result).toBe('');
|
|
|
|
expect(getMock).toHaveBeenCalledTimes(2);
|
|
|
|
expect(getMock).toHaveBeenCalledWith(datasource.name);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('when called with some targets using a datasource that does not support alerting', () => {
|
|
|
|
it('then it should return false', async () => {
|
|
|
|
const alertingDatasource: DataSourceApi = ({
|
|
|
|
meta: ({ alerting: true } as any) as PluginMeta,
|
|
|
|
targetContainsTemplate: () => false,
|
|
|
|
name: 'alertingDatasource',
|
|
|
|
} as any) as DataSourceApi;
|
|
|
|
const datasource: DataSourceApi = ({
|
|
|
|
meta: ({ alerting: false } as any) as PluginMeta,
|
|
|
|
targetContainsTemplate: () => false,
|
|
|
|
name: 'datasource',
|
|
|
|
} as any) as DataSourceApi;
|
|
|
|
|
|
|
|
const datasourceSrv: DataSourceSrv = {
|
|
|
|
get: (name: string) => {
|
|
|
|
if (name === datasource.name) {
|
|
|
|
return Promise.resolve(datasource);
|
|
|
|
}
|
|
|
|
|
|
|
|
return Promise.resolve(alertingDatasource);
|
|
|
|
},
|
2020-12-01 08:17:33 -06:00
|
|
|
getInstanceSettings: (() => {}) as any,
|
2020-12-04 07:24:55 -06:00
|
|
|
getList(): DataSourceInstanceSettings[] {
|
2020-10-14 17:03:14 -05:00
|
|
|
return [];
|
|
|
|
},
|
2019-09-23 07:17:00 -05:00
|
|
|
};
|
|
|
|
const targets: any[] = [
|
|
|
|
{ refId: 'A', query: 'some query', datasource: 'alertingDatasource' },
|
|
|
|
{ refId: 'B', query: 'some query', datasource: 'datasource' },
|
|
|
|
];
|
|
|
|
const transformations: DataTransformerConfig[] = [];
|
|
|
|
|
|
|
|
const result = await getAlertingValidationMessage(transformations, targets, datasourceSrv, datasource.name);
|
|
|
|
|
|
|
|
expect(result).toBe('');
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('when called with all targets containing template variables', () => {
|
|
|
|
it('then it should return false', async () => {
|
|
|
|
const datasource: DataSourceApi = ({
|
|
|
|
meta: ({ alerting: true } as any) as PluginMeta,
|
|
|
|
targetContainsTemplate: () => true,
|
|
|
|
name: 'some name',
|
|
|
|
} as any) as DataSourceApi;
|
|
|
|
const getMock = jest.fn().mockResolvedValue(datasource);
|
|
|
|
const datasourceSrv: DataSourceSrv = {
|
|
|
|
get: getMock,
|
2020-12-01 08:17:33 -06:00
|
|
|
getInstanceSettings: (() => {}) as any,
|
2020-12-04 07:24:55 -06:00
|
|
|
getList(): DataSourceInstanceSettings[] {
|
2020-10-14 17:03:14 -05:00
|
|
|
return [];
|
|
|
|
},
|
2019-09-23 07:17:00 -05:00
|
|
|
};
|
|
|
|
const targets: ElasticsearchQuery[] = [
|
2021-03-02 03:10:41 -06:00
|
|
|
{ refId: 'A', query: '@hostname:$hostname' },
|
|
|
|
{ refId: 'B', query: '@instance:$instance' },
|
2019-09-23 07:17:00 -05:00
|
|
|
];
|
|
|
|
const transformations: DataTransformerConfig[] = [];
|
|
|
|
|
|
|
|
const result = await getAlertingValidationMessage(transformations, targets, datasourceSrv, datasource.name);
|
|
|
|
|
|
|
|
expect(result).toBe('Template variables are not supported in alert queries');
|
|
|
|
expect(getMock).toHaveBeenCalledTimes(2);
|
|
|
|
expect(getMock).toHaveBeenCalledWith(datasource.name);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('when called with all targets using a datasource that does not support alerting', () => {
|
|
|
|
it('then it should return false', async () => {
|
|
|
|
const datasource: DataSourceApi = ({
|
|
|
|
meta: ({ alerting: false } as any) as PluginMeta,
|
|
|
|
targetContainsTemplate: () => false,
|
|
|
|
name: 'some name',
|
|
|
|
} as any) as DataSourceApi;
|
|
|
|
const getMock = jest.fn().mockResolvedValue(datasource);
|
|
|
|
const datasourceSrv: DataSourceSrv = {
|
|
|
|
get: getMock,
|
2020-12-01 08:17:33 -06:00
|
|
|
getInstanceSettings: (() => {}) as any,
|
2020-12-04 07:24:55 -06:00
|
|
|
getList(): DataSourceInstanceSettings[] {
|
2020-10-14 17:03:14 -05:00
|
|
|
return [];
|
|
|
|
},
|
2019-09-23 07:17:00 -05:00
|
|
|
};
|
|
|
|
const targets: ElasticsearchQuery[] = [
|
2021-03-02 03:10:41 -06:00
|
|
|
{ refId: 'A', query: '@hostname:hostname' },
|
|
|
|
{ refId: 'B', query: '@instance:instance' },
|
2019-09-23 07:17:00 -05:00
|
|
|
];
|
|
|
|
const transformations: DataTransformerConfig[] = [];
|
|
|
|
|
|
|
|
const result = await getAlertingValidationMessage(transformations, targets, datasourceSrv, datasource.name);
|
|
|
|
|
|
|
|
expect(result).toBe('The datasource does not support alerting queries');
|
|
|
|
expect(getMock).toHaveBeenCalledTimes(2);
|
|
|
|
expect(getMock).toHaveBeenCalledWith(datasource.name);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('when called with transformations', () => {
|
|
|
|
it('then it should return false', async () => {
|
|
|
|
const datasource: DataSourceApi = ({
|
|
|
|
meta: ({ alerting: true } as any) as PluginMeta,
|
|
|
|
targetContainsTemplate: () => false,
|
|
|
|
name: 'some name',
|
|
|
|
} as any) as DataSourceApi;
|
|
|
|
const getMock = jest.fn().mockResolvedValue(datasource);
|
|
|
|
const datasourceSrv: DataSourceSrv = {
|
|
|
|
get: getMock,
|
2020-12-01 08:17:33 -06:00
|
|
|
getInstanceSettings: (() => {}) as any,
|
2020-12-04 07:24:55 -06:00
|
|
|
getList(): DataSourceInstanceSettings[] {
|
2020-10-14 17:03:14 -05:00
|
|
|
return [];
|
|
|
|
},
|
2019-09-23 07:17:00 -05:00
|
|
|
};
|
|
|
|
const targets: ElasticsearchQuery[] = [
|
2021-03-02 03:10:41 -06:00
|
|
|
{ refId: 'A', query: '@hostname:hostname' },
|
|
|
|
{ refId: 'B', query: '@instance:instance' },
|
2019-09-23 07:17:00 -05:00
|
|
|
];
|
|
|
|
const transformations: DataTransformerConfig[] = [{ id: 'A', options: null }];
|
|
|
|
|
|
|
|
const result = await getAlertingValidationMessage(transformations, targets, datasourceSrv, datasource.name);
|
|
|
|
|
|
|
|
expect(result).toBe('Transformations are not supported in alert queries');
|
|
|
|
expect(getMock).toHaveBeenCalledTimes(0);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|