datasource_specs.ts 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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 series query', function() {
  61. response = {
  62. status: "success",
  63. data: [
  64. {__name__: "metric", resource: "value1"},
  65. {__name__: "metric", resource: "value2"},
  66. {__name__: "metric", resource: "value3"}
  67. ]
  68. };
  69. ctx.$httpBackend.expect('GET', 'proxied/api/v1/series?match[]=metric').respond(response);
  70. ctx.ds.metricFindQuery('label_values(metric, resource)').then(function(data) { results = data; });
  71. ctx.$httpBackend.flush();
  72. ctx.$rootScope.$apply();
  73. expect(results.length).to.be(3);
  74. });
  75. it('metrics(metric.*) should generate metric name query', function() {
  76. response = {
  77. status: "success",
  78. data: ["metric1","metric2","metric3","nomatch"]
  79. };
  80. ctx.$httpBackend.expect('GET', 'proxied/api/v1/label/__name__/values').respond(response);
  81. ctx.ds.metricFindQuery('metrics(metric.*)').then(function(data) { results = data; });
  82. ctx.$httpBackend.flush();
  83. ctx.$rootScope.$apply();
  84. expect(results.length).to.be(3);
  85. });
  86. });
  87. });