cloudwatch-datasource-specs.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. define([
  2. './helpers',
  3. 'app/plugins/datasource/cloudwatch/datasource',
  4. 'aws-sdk',
  5. ], function(helpers) {
  6. 'use strict';
  7. describe('CloudWatchDatasource', function() {
  8. var ctx = new helpers.ServiceTestContext();
  9. beforeEach(module('grafana.services'));
  10. beforeEach(module('grafana.controllers'));
  11. beforeEach(ctx.providePhase(['templateSrv']));
  12. beforeEach(ctx.createService('CloudWatchDatasource'));
  13. beforeEach(function() {
  14. ctx.ds = new ctx.service({
  15. jsonData: {
  16. defaultRegion: 'us-east-1',
  17. access: 'proxy'
  18. }
  19. });
  20. });
  21. describe('When performing CloudWatch query', function() {
  22. var requestParams;
  23. var query = {
  24. range: { from: 'now-1h', to: 'now' },
  25. targets: [
  26. {
  27. region: 'us-east-1',
  28. namespace: 'AWS/EC2',
  29. metricName: 'CPUUtilization',
  30. dimensions: {
  31. InstanceId: 'i-12345678'
  32. },
  33. statistics: {
  34. Average: true
  35. },
  36. period: 300
  37. }
  38. ]
  39. };
  40. var response = {
  41. Datapoints: [
  42. {
  43. Average: 1,
  44. Timestamp: 'Wed Dec 31 1969 16:00:00 GMT-0800 (PST)'
  45. }
  46. ],
  47. Label: 'CPUUtilization'
  48. };
  49. beforeEach(function() {
  50. ctx.ds.getAwsClient = function() {
  51. return {
  52. getMetricStatistics: function(params, callback) {
  53. requestParams = params;
  54. callback(null, response);
  55. }
  56. };
  57. };
  58. });
  59. it('should generate the correct query', function(done) {
  60. ctx.ds.query(query).then(function() {
  61. expect(requestParams.Namespace).to.be(query.targets[0].namespace);
  62. expect(requestParams.MetricName).to.be(query.targets[0].metricName);
  63. expect(requestParams.Dimensions[0].Name).to.be(Object.keys(query.targets[0].dimensions)[0]);
  64. expect(requestParams.Dimensions[0].Value).to.be(query.targets[0].dimensions[Object.keys(query.targets[0].dimensions)[0]]);
  65. expect(requestParams.Statistics).to.eql(Object.keys(query.targets[0].statistics));
  66. expect(requestParams.Period).to.be(query.targets[0].period);
  67. done();
  68. });
  69. ctx.$rootScope.$apply();
  70. });
  71. it('should return series list', function(done) {
  72. ctx.ds.query(query).then(function(result) {
  73. var s = Object.keys(query.targets[0].statistics)[0];
  74. expect(result.data[0].target).to.be(response.Label + '_' + s + JSON.stringify(query.targets[0].dimensions));
  75. expect(result.data[0].datapoints[0][0]).to.be(response.Datapoints[0][s]);
  76. done();
  77. });
  78. ctx.$rootScope.$apply();
  79. });
  80. });
  81. describe('When performing CloudWatch metricFindQuery', function() {
  82. var requestParams;
  83. var response = {
  84. Metrics: [
  85. {
  86. Namespace: 'AWS/EC2',
  87. MetricName: 'CPUUtilization',
  88. Dimensions: [
  89. {
  90. Name: 'InstanceId',
  91. Value: 'i-12345678'
  92. }
  93. ]
  94. }
  95. ]
  96. };
  97. beforeEach(function() {
  98. ctx.ds.getAwsClient = function() {
  99. return {
  100. listMetrics: function(params, callback) {
  101. requestParams = params;
  102. callback(null, response);
  103. }
  104. };
  105. };
  106. });
  107. it('should return suggest list for region()', function(done) {
  108. var query = 'region()';
  109. ctx.ds.metricFindQuery(query).then(function(result) {
  110. result = result.map(function(v) { return v.text; });
  111. expect(result).to.contain('us-east-1');
  112. done();
  113. });
  114. ctx.$rootScope.$apply();
  115. });
  116. it('should return suggest list for namespace()', function(done) {
  117. var query = 'namespace()';
  118. ctx.ds.metricFindQuery(query).then(function(result) {
  119. result = result.map(function(v) { return v.text; });
  120. expect(result).to.contain('AWS/EC2');
  121. done();
  122. });
  123. ctx.$rootScope.$apply();
  124. });
  125. it('should return suggest list for metrics()', function(done) {
  126. var query = 'metrics(AWS/EC2)';
  127. ctx.ds.metricFindQuery(query).then(function(result) {
  128. result = result.map(function(v) { return v.text; });
  129. expect(result).to.contain('CPUUtilization');
  130. done();
  131. });
  132. ctx.$rootScope.$apply();
  133. });
  134. it('should return suggest list for dimension_keys()', function(done) {
  135. var query = 'dimension_keys(AWS/EC2)';
  136. ctx.ds.metricFindQuery(query).then(function(result) {
  137. result = result.map(function(v) { return v.text; });
  138. expect(result).to.contain('InstanceId');
  139. done();
  140. });
  141. ctx.$rootScope.$apply();
  142. });
  143. it('should return suggest list for dimension_values()', function(done) {
  144. var query = 'dimension_values(us-east-1,AWS/EC2,CPUUtilization)';
  145. ctx.ds.metricFindQuery(query).then(function(result) {
  146. result = result.map(function(v) { return v.text; });
  147. expect(result).to.eql([ 'InstanceId=i-12345678' ]);
  148. done();
  149. });
  150. ctx.$rootScope.$apply();
  151. });
  152. });
  153. });
  154. });