metric_find_query_specs.ts 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import {describe, beforeEach, it, 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', jsonData: {}};
  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. $httpBackend.when('GET', /\.html$/).respond('');
  17. }));
  18. describe('When performing metricFindQuery', function() {
  19. var results;
  20. var response;
  21. it('label_values(resource) should generate label search query', function() {
  22. response = {
  23. status: "success",
  24. data: ["value1", "value2", "value3"]
  25. };
  26. ctx.$httpBackend.expect('GET', 'proxied/api/v1/label/resource/values').respond(response);
  27. var pm = new PrometheusMetricFindQuery(ctx.ds, 'label_values(resource)', ctx.timeSrv);
  28. pm.process().then(function(data) { results = data; });
  29. ctx.$httpBackend.flush();
  30. ctx.$rootScope.$apply();
  31. expect(results.length).to.be(3);
  32. });
  33. it('label_values(metric, resource) should generate series query', function() {
  34. response = {
  35. status: "success",
  36. data: [
  37. {__name__: "metric", resource: "value1"},
  38. {__name__: "metric", resource: "value2"},
  39. {__name__: "metric", resource: "value3"}
  40. ]
  41. };
  42. ctx.$httpBackend.expect('GET', /proxied\/api\/v1\/series\?match\[\]=metric&start=.*&end=.*/).respond(response);
  43. var pm = new PrometheusMetricFindQuery(ctx.ds, 'label_values(metric, resource)', ctx.timeSrv);
  44. pm.process().then(function(data) { results = data; });
  45. ctx.$httpBackend.flush();
  46. ctx.$rootScope.$apply();
  47. expect(results.length).to.be(3);
  48. });
  49. it('label_values(metric, resource) should pass correct time', function() {
  50. ctx.timeSrv.setTime({ from: moment.utc('2011-01-01'), to: moment.utc('2015-01-01') });
  51. ctx.$httpBackend.expect('GET',
  52. /proxied\/api\/v1\/series\?match\[\]=metric&start=1293840000&end=1420070400/).respond(response);
  53. var pm = new PrometheusMetricFindQuery(ctx.ds, 'label_values(metric, resource)', ctx.timeSrv);
  54. pm.process().then(function(data) { results = data; });
  55. ctx.$httpBackend.flush();
  56. ctx.$rootScope.$apply();
  57. });
  58. it('label_values(metric{label1="foo", label2="bar", label3="baz"}, resource) should generate series query', function() {
  59. response = {
  60. status: "success",
  61. data: [
  62. {__name__: "metric", resource: "value1"},
  63. {__name__: "metric", resource: "value2"},
  64. {__name__: "metric", resource: "value3"}
  65. ]
  66. };
  67. ctx.$httpBackend.expect('GET', /proxied\/api\/v1\/series\?match\[\]=metric&start=.*&end=.*/).respond(response);
  68. var pm = new PrometheusMetricFindQuery(ctx.ds, 'label_values(metric, resource)', ctx.timeSrv);
  69. pm.process().then(function(data) { results = data; });
  70. ctx.$httpBackend.flush();
  71. ctx.$rootScope.$apply();
  72. expect(results.length).to.be(3);
  73. });
  74. it('metrics(metric.*) should generate metric name query', function() {
  75. response = {
  76. status: "success",
  77. data: ["metric1","metric2","metric3","nomatch"]
  78. };
  79. ctx.$httpBackend.expect('GET', 'proxied/api/v1/label/__name__/values').respond(response);
  80. var pm = new PrometheusMetricFindQuery(ctx.ds, 'metrics(metric.*)', ctx.timeSrv);
  81. pm.process().then(function(data) { results = data; });
  82. ctx.$httpBackend.flush();
  83. ctx.$rootScope.$apply();
  84. expect(results.length).to.be(3);
  85. });
  86. it('query_result(metric) should generate metric name query', function() {
  87. response = {
  88. status: "success",
  89. data: {
  90. resultType: "vector",
  91. result: [{
  92. metric: {"__name__": "metric", job: "testjob"},
  93. value: [1443454528.000, "3846"]
  94. }]
  95. }
  96. };
  97. ctx.$httpBackend.expect('GET', /proxied\/api\/v1\/query\?query=metric&time=.*/).respond(response);
  98. var pm = new PrometheusMetricFindQuery(ctx.ds, 'query_result(metric)', ctx.timeSrv);
  99. pm.process().then(function(data) { results = data; });
  100. ctx.$httpBackend.flush();
  101. ctx.$rootScope.$apply();
  102. expect(results.length).to.be(1);
  103. expect(results[0].text).to.be('metric{job="testjob"} 3846 1443454528000');
  104. });
  105. });
  106. describe('When performing performSuggestQuery', function() {
  107. var results;
  108. var response;
  109. it('cache response', function() {
  110. response = {
  111. status: "success",
  112. data: ["value1", "value2", "value3"]
  113. };
  114. ctx.$httpBackend.expect('GET', 'proxied/api/v1/label/__name__/values').respond(response);
  115. ctx.ds.performSuggestQuery('value', true).then(function(data) { results = data; });
  116. ctx.$httpBackend.flush();
  117. ctx.$rootScope.$apply();
  118. expect(results.length).to.be(3);
  119. ctx.ds.performSuggestQuery('value', true).then(function (data) {
  120. // get from cache, no need to flush
  121. results = data;
  122. expect(results.length).to.be(3);
  123. });
  124. });
  125. });
  126. });