metric_find_query_specs.ts 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import {describe, beforeEach, it, sinon, expect, angularMocks} from 'test/lib/common';
  2. import moment from 'moment';
  3. import helpers from 'test/specs/helpers';
  4. import {PrometheusDatasource} from '../datasource';
  5. import PrometheusMetricFindQuery from '../metric_find_query';
  6. describe('PrometheusMetricFindQuery', function() {
  7. var ctx = new helpers.ServiceTestContext();
  8. var instanceSettings = {url: 'proxied', directUrl: 'direct', user: 'test', password: 'mupp' };
  9. beforeEach(angularMocks.module('grafana.core'));
  10. beforeEach(angularMocks.module('grafana.services'));
  11. beforeEach(angularMocks.inject(function($q, $rootScope, $httpBackend, $injector) {
  12. ctx.$q = $q;
  13. ctx.$httpBackend = $httpBackend;
  14. ctx.$rootScope = $rootScope;
  15. ctx.ds = $injector.instantiate(PrometheusDatasource, {instanceSettings: instanceSettings});
  16. }));
  17. describe('When performing metricFindQuery', function() {
  18. var results;
  19. var response;
  20. it('label_values(resource) should generate label search query', function() {
  21. response = {
  22. status: "success",
  23. data: ["value1", "value2", "value3"]
  24. };
  25. ctx.$httpBackend.expect('GET', 'proxied/api/v1/label/resource/values').respond(response);
  26. var pm = new PrometheusMetricFindQuery(ctx.ds, 'label_values(resource)');
  27. pm.process().then(function(data) { results = data; });
  28. ctx.$httpBackend.flush();
  29. ctx.$rootScope.$apply();
  30. expect(results.length).to.be(3);
  31. });
  32. it('label_values(metric, resource) should generate series query', function() {
  33. response = {
  34. status: "success",
  35. data: [
  36. {__name__: "metric", resource: "value1"},
  37. {__name__: "metric", resource: "value2"},
  38. {__name__: "metric", resource: "value3"}
  39. ]
  40. };
  41. ctx.$httpBackend.expect('GET', 'proxied/api/v1/series?match[]=metric').respond(response);
  42. var pm = new PrometheusMetricFindQuery(ctx.ds, 'label_values(metric, resource)');
  43. pm.process().then(function(data) { results = data; });
  44. ctx.$httpBackend.flush();
  45. ctx.$rootScope.$apply();
  46. expect(results.length).to.be(3);
  47. });
  48. it('metrics(metric.*) should generate metric name query', function() {
  49. response = {
  50. status: "success",
  51. data: ["metric1","metric2","metric3","nomatch"]
  52. };
  53. ctx.$httpBackend.expect('GET', 'proxied/api/v1/label/__name__/values').respond(response);
  54. var pm = new PrometheusMetricFindQuery(ctx.ds, 'metrics(metric.*)');
  55. pm.process().then(function(data) { results = data; });
  56. ctx.$httpBackend.flush();
  57. ctx.$rootScope.$apply();
  58. expect(results.length).to.be(3);
  59. });
  60. it('query_result(metric) should generate metric name query', function() {
  61. response = {
  62. status: "success",
  63. data: {
  64. resultType: "vector",
  65. result: [{
  66. metric: {"__name__": "metric", job: "testjob"},
  67. value: [1443454528.000, "3846"]
  68. }]
  69. }
  70. };
  71. ctx.$httpBackend.expect('GET', /proxied\/api\/v1\/query\?query=metric&time=.*/).respond(response);
  72. var pm = new PrometheusMetricFindQuery(ctx.ds, 'query_result(metric)');
  73. pm.process().then(function(data) { results = data; });
  74. ctx.$httpBackend.flush();
  75. ctx.$rootScope.$apply();
  76. expect(results.length).to.be(1);
  77. expect(results[0].text).to.be('metric{job="testjob"} 3846 1443454528000');
  78. });
  79. });
  80. });