| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- import "../datasource";
- import {describe, beforeEach, it, sinon, expect, angularMocks} from 'test/lib/common';
- import moment from 'moment';
- import helpers from 'test/specs/helpers';
- import {CloudWatchDatasource} from "../datasource";
- describe('CloudWatchDatasource', function() {
- var ctx = new helpers.ServiceTestContext();
- var instanceSettings = {
- jsonData: {defaultRegion: 'us-east-1', access: 'proxy'},
- };
- beforeEach(angularMocks.module('grafana.core'));
- beforeEach(angularMocks.module('grafana.services'));
- beforeEach(angularMocks.module('grafana.controllers'));
- beforeEach(ctx.providePhase(['templateSrv', 'backendSrv']));
- beforeEach(angularMocks.inject(function($q, $rootScope, $httpBackend, $injector) {
- ctx.$q = $q;
- ctx.$httpBackend = $httpBackend;
- ctx.$rootScope = $rootScope;
- ctx.ds = $injector.instantiate(CloudWatchDatasource, {instanceSettings: instanceSettings});
- }));
- describe('When performing CloudWatch query', function() {
- var requestParams;
- var query = {
- range: { from: 'now-1h', to: 'now' },
- targets: [
- {
- region: 'us-east-1',
- namespace: 'AWS/EC2',
- metricName: 'CPUUtilization',
- dimensions: {
- InstanceId: 'i-12345678'
- },
- statistics: ['Average'],
- period: 300
- }
- ]
- };
- var response = {
- Datapoints: [
- {
- Average: 1,
- Timestamp: 'Wed Dec 31 1969 16:00:00 GMT-0800 (PST)'
- },
- {
- Average: 2,
- Timestamp: 'Wed Dec 31 1969 16:05:00 GMT-0800 (PST)'
- },
- {
- Average: 5,
- Timestamp: 'Wed Dec 31 1969 16:15:00 GMT-0800 (PST)'
- }
- ],
- Label: 'CPUUtilization'
- };
- beforeEach(function() {
- ctx.backendSrv.datasourceRequest = function(params) {
- requestParams = params;
- return ctx.$q.when({data: response});
- };
- });
- it('should generate the correct query', function(done) {
- ctx.ds.query(query).then(function() {
- var params = requestParams.data.parameters;
- expect(params.namespace).to.be(query.targets[0].namespace);
- expect(params.metricName).to.be(query.targets[0].metricName);
- expect(params.dimensions[0].Name).to.be(Object.keys(query.targets[0].dimensions)[0]);
- expect(params.dimensions[0].Value).to.be(query.targets[0].dimensions[Object.keys(query.targets[0].dimensions)[0]]);
- expect(params.statistics).to.eql(query.targets[0].statistics);
- expect(params.period).to.be(query.targets[0].period);
- done();
- });
- ctx.$rootScope.$apply();
- });
- it('should return series list', function(done) {
- ctx.ds.query(query).then(function(result) {
- expect(result.data[0].target).to.be('CPUUtilization_Average');
- expect(result.data[0].datapoints[0][0]).to.be(response.Datapoints[0]['Average']);
- done();
- });
- ctx.$rootScope.$apply();
- });
- it('should return null for missing data point', function(done) {
- ctx.ds.query(query).then(function(result) {
- expect(result.data[0].datapoints[2][0]).to.be(null);
- done();
- });
- ctx.$rootScope.$apply();
- });
- });
- function describeMetricFindQuery(query, func) {
- describe('metricFindQuery ' + query, () => {
- let scenario: any = {};
- scenario.setup = setupCallback => {
- beforeEach(() => {
- setupCallback();
- ctx.backendSrv.datasourceRequest = args => {
- scenario.request = args;
- return ctx.$q.when({data: scenario.requestResponse });
- };
- ctx.ds.metricFindQuery(query).then(args => {
- scenario.result = args;
- });
- ctx.$rootScope.$apply();
- });
- };
- func(scenario);
- });
- }
- describeMetricFindQuery('regions()', scenario => {
- scenario.setup(() => {
- scenario.requestResponse = [{text: 'us-east-1'}];
- });
- it('should call __GetRegions and return result', () => {
- expect(scenario.result[0].text).to.contain('us-east-1');
- expect(scenario.request.data.action).to.be('__GetRegions');
- });
- });
- describeMetricFindQuery('namespaces()', scenario => {
- scenario.setup(() => {
- scenario.requestResponse = [{text: 'AWS/EC2'}];
- });
- it('should call __GetNamespaces and return result', () => {
- expect(scenario.result[0].text).to.contain('AWS/EC2');
- expect(scenario.request.data.action).to.be('__GetNamespaces');
- });
- });
- describeMetricFindQuery('metrics(AWS/EC2)', scenario => {
- scenario.setup(() => {
- scenario.requestResponse = [{text: 'CPUUtilization'}];
- });
- it('should call __GetMetrics and return result', () => {
- expect(scenario.result[0].text).to.be('CPUUtilization');
- expect(scenario.request.data.action).to.be('__GetMetrics');
- });
- });
- describeMetricFindQuery('dimension_keys(AWS/EC2)', scenario => {
- scenario.setup(() => {
- scenario.requestResponse = [{text: 'InstanceId'}];
- });
- it('should call __GetDimensions and return result', () => {
- expect(scenario.result[0].text).to.be('InstanceId');
- expect(scenario.request.data.action).to.be('__GetDimensions');
- });
- });
- describeMetricFindQuery('dimension_values(us-east-1,AWS/EC2,CPUUtilization,InstanceId)', scenario => {
- scenario.setup(() => {
- scenario.requestResponse = {
- Metrics: [
- {
- Namespace: 'AWS/EC2',
- MetricName: 'CPUUtilization',
- Dimensions: [
- {
- Name: 'InstanceId',
- Value: 'i-12345678'
- }
- ]
- }
- ]
- };
- });
- it('should call __ListMetrics and return result', () => {
- expect(scenario.result[0].text).to.be('i-12345678');
- expect(scenario.request.data.action).to.be('ListMetrics');
- });
- });
- });
|