metric_find_query_specs.ts 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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('label_values(metric{label1="foo", label2="bar", label3="baz"}, resource) should generate series query', function() {
  49. response = {
  50. status: "success",
  51. data: [
  52. {__name__: "metric", resource: "value1"},
  53. {__name__: "metric", resource: "value2"},
  54. {__name__: "metric", resource: "value3"}
  55. ]
  56. };
  57. ctx.$httpBackend.expect('GET', 'proxied/api/v1/series?match[]=metric').respond(response);
  58. var pm = new PrometheusMetricFindQuery(ctx.ds, 'label_values(metric, resource)');
  59. pm.process().then(function(data) { results = data; });
  60. ctx.$httpBackend.flush();
  61. ctx.$rootScope.$apply();
  62. expect(results.length).to.be(3);
  63. });
  64. it('metrics(metric.*) should generate metric name query', function() {
  65. response = {
  66. status: "success",
  67. data: ["metric1","metric2","metric3","nomatch"]
  68. };
  69. ctx.$httpBackend.expect('GET', 'proxied/api/v1/label/__name__/values').respond(response);
  70. var pm = new PrometheusMetricFindQuery(ctx.ds, 'metrics(metric.*)');
  71. pm.process().then(function(data) { results = data; });
  72. ctx.$httpBackend.flush();
  73. ctx.$rootScope.$apply();
  74. expect(results.length).to.be(3);
  75. });
  76. it('query_result(metric) should generate metric name query', function() {
  77. response = {
  78. status: "success",
  79. data: {
  80. resultType: "vector",
  81. result: [{
  82. metric: {"__name__": "metric", job: "testjob"},
  83. value: [1443454528.000, "3846"]
  84. }]
  85. }
  86. };
  87. ctx.$httpBackend.expect('GET', /proxied\/api\/v1\/query\?query=metric&time=.*/).respond(response);
  88. var pm = new PrometheusMetricFindQuery(ctx.ds, 'query_result(metric)');
  89. pm.process().then(function(data) { results = data; });
  90. ctx.$httpBackend.flush();
  91. ctx.$rootScope.$apply();
  92. expect(results.length).to.be(1);
  93. expect(results[0].text).to.be('metric{job="testjob"} 3846 1443454528000');
  94. });
  95. });
  96. });