|
|
|
@ -1,27 +1,36 @@ |
|
|
|
|
import { ZipkinDatasource, ZipkinQuery } from './datasource'; |
|
|
|
|
import { DataQueryRequest, DataSourceInstanceSettings } from '@grafana/data'; |
|
|
|
|
import { BackendSrv, BackendSrvRequest, setBackendSrv } from '@grafana/runtime'; |
|
|
|
|
import { DataSourceInstanceSettings } from '@grafana/data'; |
|
|
|
|
import { backendSrv } from 'app/core/services/backend_srv'; |
|
|
|
|
import { of } from 'rxjs'; |
|
|
|
|
import { createFetchResponse } from 'test/helpers/createFetchResponse'; |
|
|
|
|
import { ZipkinDatasource } from './datasource'; |
|
|
|
|
import { jaegerTrace, zipkinResponse } from './utils/testData'; |
|
|
|
|
|
|
|
|
|
jest.mock('@grafana/runtime', () => ({ |
|
|
|
|
...((jest.requireActual('@grafana/runtime') as unknown) as object), |
|
|
|
|
getBackendSrv: () => backendSrv, |
|
|
|
|
})); |
|
|
|
|
|
|
|
|
|
describe('ZipkinDatasource', () => { |
|
|
|
|
describe('query', () => { |
|
|
|
|
it('runs query', async () => { |
|
|
|
|
setupBackendSrv({ url: '/api/datasources/proxy/1/api/v2/trace/12345', response: zipkinResponse }); |
|
|
|
|
setupBackendSrv(zipkinResponse); |
|
|
|
|
const ds = new ZipkinDatasource(defaultSettings); |
|
|
|
|
const response = await ds.query({ targets: [{ query: '12345' }] } as DataQueryRequest<ZipkinQuery>).toPromise(); |
|
|
|
|
expect(response.data[0].fields[0].values.get(0)).toEqual(jaegerTrace); |
|
|
|
|
await expect(ds.query({ targets: [{ query: '12345' }] } as any)).toEmitValuesWith((val) => { |
|
|
|
|
expect(val[0].data[0].fields[0].values.get(0)).toEqual(jaegerTrace); |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
it('runs query with traceId that includes special characters', async () => { |
|
|
|
|
setupBackendSrv({ url: '/api/datasources/proxy/1/api/v2/trace/a%2Fb', response: zipkinResponse }); |
|
|
|
|
setupBackendSrv(zipkinResponse); |
|
|
|
|
const ds = new ZipkinDatasource(defaultSettings); |
|
|
|
|
const response = await ds.query({ targets: [{ query: 'a/b' }] } as DataQueryRequest<ZipkinQuery>).toPromise(); |
|
|
|
|
expect(response.data[0].fields[0].values.get(0)).toEqual(jaegerTrace); |
|
|
|
|
await expect(ds.query({ targets: [{ query: 'a/b' }] } as any)).toEmitValuesWith((val) => { |
|
|
|
|
expect(val[0].data[0].fields[0].values.get(0)).toEqual(jaegerTrace); |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
describe('metadataRequest', () => { |
|
|
|
|
it('runs query', async () => { |
|
|
|
|
setupBackendSrv({ url: '/api/datasources/proxy/1/api/v2/services', response: ['service 1', 'service 2'] }); |
|
|
|
|
setupBackendSrv(['service 1', 'service 2']); |
|
|
|
|
const ds = new ZipkinDatasource(defaultSettings); |
|
|
|
|
const response = await ds.metadataRequest('/api/v2/services'); |
|
|
|
|
expect(response).toEqual(['service 1', 'service 2']); |
|
|
|
@ -29,15 +38,11 @@ describe('ZipkinDatasource', () => { |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
function setupBackendSrv<T>({ url, response }: { url: string; response: T }): void { |
|
|
|
|
setBackendSrv({ |
|
|
|
|
datasourceRequest(options: BackendSrvRequest): Promise<any> { |
|
|
|
|
if (options.url === url) { |
|
|
|
|
return Promise.resolve({ data: response }); |
|
|
|
|
} |
|
|
|
|
throw new Error(`Unexpected url ${options.url}`); |
|
|
|
|
}, |
|
|
|
|
} as BackendSrv); |
|
|
|
|
function setupBackendSrv(response: any) { |
|
|
|
|
const defaultMock = () => of(createFetchResponse(response)); |
|
|
|
|
|
|
|
|
|
const fetchMock = jest.spyOn(backendSrv, 'fetch'); |
|
|
|
|
fetchMock.mockImplementation(defaultMock); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const defaultSettings: DataSourceInstanceSettings = { |
|
|
|
|