From f8419f04a979a0dd96deb7f8148d8a84dd799779 Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Wed, 9 Nov 2016 16:52:12 +0300 Subject: [PATCH] Tests: added tests for template variables replacing. --- src/datasource-zabbix/datasource.js | 4 +- .../specs/datasource_specs.js | 75 ++++++++++++++++--- 2 files changed, 66 insertions(+), 13 deletions(-) diff --git a/src/datasource-zabbix/datasource.js b/src/datasource-zabbix/datasource.js index f2176c2..b860833 100644 --- a/src/datasource-zabbix/datasource.js +++ b/src/datasource-zabbix/datasource.js @@ -449,7 +449,7 @@ function formatMetric(metricObj) { * template variables, for example * /CPU $cpu_item.*time/ where $cpu_item is system,user,iowait */ -function zabbixTemplateFormat(value) { +export function zabbixTemplateFormat(value) { if (typeof value === 'string') { return utils.escapeRegex(value); } @@ -468,7 +468,7 @@ function zabbixTemplateFormat(value) { */ function replaceTemplateVars(templateSrv, target, scopedVars) { var replacedTarget = templateSrv.replace(target, scopedVars, zabbixTemplateFormat); - if (target !== replacedTarget && !utils.regexPattern.test(replacedTarget)) { + if (target !== replacedTarget && !utils.isRegex(replacedTarget)) { replacedTarget = '/^' + replacedTarget + '$/'; } return replacedTarget; diff --git a/src/datasource-zabbix/specs/datasource_specs.js b/src/datasource-zabbix/specs/datasource_specs.js index 4b292d8..fc44a5c 100644 --- a/src/datasource-zabbix/specs/datasource_specs.js +++ b/src/datasource-zabbix/specs/datasource_specs.js @@ -1,13 +1,14 @@ import {Datasource} from "../module"; +import {zabbixTemplateFormat} from "../datasource"; import Q from "q"; import sinon from 'sinon'; import _ from 'lodash'; -describe('ZabbixDatasource', function() { +describe('ZabbixDatasource', () => { var ctx = {}; var defined = sinon.match.defined; - beforeEach(function() { + beforeEach(() => { ctx.instanceSettings = { jsonData: { username: 'zabbix', @@ -19,19 +20,19 @@ describe('ZabbixDatasource', function() { ctx.$q = Q; ctx.templateSrv = {}; ctx.alertSrv = {}; - ctx.zabbixAPIService = function() {}; - ctx.ZabbixCachingProxy = function() {}; - ctx.QueryProcessor = function() {}; + ctx.zabbixAPIService = () => {}; + ctx.ZabbixCachingProxy = () => {}; + ctx.QueryProcessor = () => {}; ctx.ds = new Datasource(ctx.instanceSettings, ctx.$q, ctx.templateSrv, ctx.alertSrv, ctx.zabbixAPIService, ctx.ZabbixCachingProxy, ctx.QueryProcessor); - - ctx.ds.replaceTemplateVars = function(str) { - return str; - }; }); - describe('When querying data', function() { + describe('When querying data', () => { + beforeEach(() => { + ctx.ds.replaceTemplateVars = (str) => { return str; }; + }); + ctx.options = { targets: [ { @@ -83,10 +84,62 @@ describe('ZabbixDatasource', function() { expect(ctx.ds.queryNumericData) .to.have.been.calledWith(defined, defined, defined, false); }); - done(); }); }); + describe('When replacing template variables', () => { + + function testReplacingVariable(target, varValue, expectedResult, done) { + ctx.ds.templateSrv.replace = () => { + return zabbixTemplateFormat(varValue); + }; + + let result = ctx.ds.replaceTemplateVars(target); + expect(result).to.equal(expectedResult); + done(); + } + + /* + * Alphanumerics, spaces, dots, dashes and underscores + * are allowed in Zabbix host name. + * 'AaBbCc0123 .-_' + */ + it('should return properly escaped regex', (done) => { + let target = '$host'; + let template_var_value = 'AaBbCc0123 .-_'; + let expected_result = '/^AaBbCc0123 \\.-_$/'; + + testReplacingVariable(target, template_var_value, expected_result, done); + }); + + /* + * Single-value variable + * $host = backend01 + * $host => /^backend01|backend01$/ + */ + it('should return proper regex for single value', (done) => { + let target = '$host'; + let template_var_value = 'backend01'; + let expected_result = '/^backend01$/'; + + testReplacingVariable(target, template_var_value, expected_result, done); + }); + + /* + * Multi-value variable + * $host = [backend01, backend02] + * $host => /^(backend01|backend01)$/ + */ + it('should return proper regex for multi-value', (done) => { + let target = '$host'; + let template_var_value = ['backend01', 'backend02']; + let expected_result = '/^(backend01|backend02)$/'; + + testReplacingVariable(target, template_var_value, expected_result, done); + }); + + }); + });