datasource_specs.ts 3.5 KB

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