datasource_specs.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. ///<amd-dependency path="app/plugins/datasource/prometheus/datasource" />
  2. ///<amd-dependency path="test/specs/helpers" name="helpers" />
  3. import {describe, beforeEach, it, sinon, expect, angularMocks} from 'test/lib/common';
  4. import moment = require('moment');
  5. declare var helpers: any;
  6. describe('PrometheusDatasource', function() {
  7. var ctx = new helpers.ServiceTestContext();
  8. beforeEach(angularMocks.module('grafana.services'));
  9. beforeEach(ctx.createService('PrometheusDatasource'));
  10. beforeEach(function() {
  11. ctx.ds = new ctx.service({ url: 'proxied', directUrl: 'direct', user: 'test', password: 'mupp' });
  12. });
  13. describe('When querying prometheus with one target using query editor target spec', function() {
  14. var results;
  15. var urlExpected = 'proxied/api/v1/query_range?query=' +
  16. encodeURIComponent('test{job="testjob"}') +
  17. '&start=1443438675&end=1443460275&step=60s';
  18. var query = {
  19. range: { from: moment(1443438674760), to: moment(1443460274760) },
  20. targets: [{ expr: 'test{job="testjob"}' }],
  21. interval: '60s'
  22. };
  23. var response = {
  24. status: "success",
  25. data: {
  26. resultType: "matrix",
  27. result: [{
  28. metric: {"__name__": "test", job: "testjob"},
  29. values: [[1443454528, "3846"]]
  30. }]
  31. }
  32. };
  33. beforeEach(function() {
  34. ctx.$httpBackend.expect('GET', urlExpected).respond(response);
  35. ctx.ds.query(query).then(function(data) { results = data; });
  36. ctx.$httpBackend.flush();
  37. });
  38. it('should generate the correct query', function() {
  39. ctx.$httpBackend.verifyNoOutstandingExpectation();
  40. });
  41. it('should return series list', function() {
  42. expect(results.data.length).to.be(1);
  43. expect(results.data[0].target).to.be('test{job="testjob"}');
  44. });
  45. });
  46. describe('When performing metricFindQuery', function() {
  47. var results;
  48. var response;
  49. it('label_values(resource) should generate label search query', function() {
  50. response = {
  51. status: "success",
  52. data: ["value1", "value2", "value3"]
  53. };
  54. ctx.$httpBackend.expect('GET', 'proxied/api/v1/label/resource/values').respond(response);
  55. ctx.ds.metricFindQuery('label_values(resource)').then(function(data) { results = data; });
  56. ctx.$httpBackend.flush();
  57. ctx.$rootScope.$apply();
  58. expect(results.length).to.be(3);
  59. });
  60. it('label_values(metric, resource) should generate count metric query', function() {
  61. response = {
  62. status: "success",
  63. data: {
  64. resultType: "vector",
  65. result: [
  66. {metric: {resource: "value1"}, value: []},
  67. {metric: {resource: "value2"}, value: []},
  68. {metric: {resource: "value3"}, value: []}
  69. ]
  70. }
  71. };
  72. ctx.$httpBackend.expect('GET', /proxied\/api\/v1\/query\?query=count\(metric\)%20by%20\(resource\)&time=.*/).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. });