datasource_specs.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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 Datasource from '../datasource';
  5. describe('PrometheusDatasource', function() {
  6. var ctx = new helpers.ServiceTestContext();
  7. var instanceSettings = {url: 'proxied', directUrl: 'direct', user: 'test', password: 'mupp' };
  8. beforeEach(angularMocks.module('grafana.core'));
  9. beforeEach(angularMocks.module('grafana.services'));
  10. beforeEach(angularMocks.inject(function($q, $rootScope, $httpBackend, $injector) {
  11. ctx.$q = $q;
  12. ctx.$httpBackend = $httpBackend;
  13. ctx.$rootScope = $rootScope;
  14. ctx.ds = $injector.instantiate(Datasource, {instanceSettings: instanceSettings});
  15. }));
  16. describe('When querying prometheus with one target using query editor target spec', function() {
  17. var results;
  18. var urlExpected = 'proxied/api/v1/query_range?query=' +
  19. encodeURIComponent('test{job="testjob"}') +
  20. '&start=1443438675&end=1443460275&step=60';
  21. var query = {
  22. range: { from: moment(1443438674760), to: moment(1443460274760) },
  23. targets: [{ expr: 'test{job="testjob"}' }],
  24. interval: '60s'
  25. };
  26. var response = {
  27. status: "success",
  28. data: {
  29. resultType: "matrix",
  30. result: [{
  31. metric: {"__name__": "test", job: "testjob"},
  32. values: [[1443454528, "3846"]]
  33. }]
  34. }
  35. };
  36. beforeEach(function() {
  37. ctx.$httpBackend.expect('GET', urlExpected).respond(response);
  38. ctx.ds.query(query).then(function(data) { results = data; });
  39. ctx.$httpBackend.flush();
  40. });
  41. it('should generate the correct query', function() {
  42. ctx.$httpBackend.verifyNoOutstandingExpectation();
  43. });
  44. it('should return series list', function() {
  45. expect(results.data.length).to.be(1);
  46. expect(results.data[0].target).to.be('test{job="testjob"}');
  47. });
  48. });
  49. describe('When performing metricFindQuery', function() {
  50. var results;
  51. var response;
  52. it('label_values(resource) should generate label search query', function() {
  53. response = {
  54. status: "success",
  55. data: ["value1", "value2", "value3"]
  56. };
  57. ctx.$httpBackend.expect('GET', 'proxied/api/v1/label/resource/values').respond(response);
  58. ctx.ds.metricFindQuery('label_values(resource)').then(function(data) { results = data; });
  59. ctx.$httpBackend.flush();
  60. ctx.$rootScope.$apply();
  61. expect(results.length).to.be(3);
  62. });
  63. it('label_values(metric, resource) should generate series query', function() {
  64. response = {
  65. status: "success",
  66. data: [
  67. {__name__: "metric", resource: "value1"},
  68. {__name__: "metric", resource: "value2"},
  69. {__name__: "metric", resource: "value3"}
  70. ]
  71. };
  72. ctx.$httpBackend.expect('GET', 'proxied/api/v1/series?match[]=metric').respond(response);
  73. ctx.ds.metricFindQuery('label_values(metric, resource)').then(function(data) { results = data; });
  74. ctx.$httpBackend.flush();
  75. ctx.$rootScope.$apply();
  76. expect(results.length).to.be(3);
  77. });
  78. it('metrics(metric.*) should generate metric name query', function() {
  79. response = {
  80. status: "success",
  81. data: ["metric1","metric2","metric3","nomatch"]
  82. };
  83. ctx.$httpBackend.expect('GET', 'proxied/api/v1/label/__name__/values').respond(response);
  84. ctx.ds.metricFindQuery('metrics(metric.*)').then(function(data) { results = data; });
  85. ctx.$httpBackend.flush();
  86. ctx.$rootScope.$apply();
  87. expect(results.length).to.be(3);
  88. });
  89. });
  90. });