110 lines
3.4 KiB
TypeScript
110 lines
3.4 KiB
TypeScript
import {
|
|
isValidMessage,
|
|
isValidTemplate,
|
|
} from 'src/kapacitor/utils/alertMessageValidation'
|
|
import {RULE_MESSAGE_TEMPLATE_TEXTS} from 'src/kapacitor/constants'
|
|
|
|
// for a full list of valid go templates consult: https://golang.org/pkg/text/template/
|
|
|
|
describe('kapacitor.utils.alertMessageValidation', () => {
|
|
describe('isValidMessage', () => {
|
|
it('accepts message containing a "with" block', () => {
|
|
const template = `{{ with eq.Tags "something" }} alert is under threshold{{ else }} alert is over threshold{{ end }}`
|
|
|
|
const isValid = isValidMessage(template)
|
|
|
|
expect(isValid).toBe(true)
|
|
})
|
|
|
|
it('accepts message containing a "block" block', () => {
|
|
const template = `{{ block eq.Tags "something" }} alert is under threshold{{ else }} alert is over threshold{{ end }}`
|
|
|
|
const isValid = isValidMessage(template)
|
|
|
|
expect(isValid).toBe(true)
|
|
})
|
|
|
|
it('accepts message containing a "range" block', () => {
|
|
const template = `{{ range eq.Tags "something" }} alert is under threshold{{ else }} alert is over threshold{{ end }}`
|
|
|
|
const isValid = isValidMessage(template)
|
|
|
|
expect(isValid).toBe(true)
|
|
})
|
|
|
|
it('accepts message containing an "if" block', () => {
|
|
const template = `{{ if eq.Tags "something" }} alert is under threshold{{ else }} alert is over threshold{{ end }}`
|
|
|
|
const isValid = isValidMessage(template)
|
|
|
|
expect(isValid).toBe(true)
|
|
})
|
|
|
|
it('accepts message containing one simple template', () => {
|
|
const isValid = isValidMessage('{{.ID}}')
|
|
|
|
expect(isValid).toEqual(true)
|
|
})
|
|
|
|
it('accepts message containing one simple and one complex template', () => {
|
|
const isValid = isValidMessage('{{ index .Tags "something" }} {{.Name}}')
|
|
|
|
expect(isValid).toEqual(true)
|
|
})
|
|
|
|
it('accepts message containing templates and strings mixed', () => {
|
|
const isValid = isValidMessage(
|
|
'{{ index .Tags "moo" }} lkajsdflkjasdf {{.Name}}lksjdflsj'
|
|
)
|
|
|
|
expect(isValid).toEqual(true)
|
|
})
|
|
;[
|
|
'CI ID = {{ with (index .Tags "ci_id") }}{{ . }}{{ else }}Unknown{{ end }}',
|
|
'CI ID = {{ if (index .Tags "ci_id") }}{{ index .Tags "ci_id" }}{{ else -}} Unknown {{- end }}',
|
|
'# of Tags = {{ len .Tags }}',
|
|
].forEach(m => {
|
|
it(`#5343 accepts message '${m}'`, () => {
|
|
const isValid = isValidMessage(m)
|
|
expect(isValid).toEqual(true)
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('isValidTemplate', () => {
|
|
it('is True for an exact match to a valid template', () => {
|
|
const isValid = isValidTemplate(RULE_MESSAGE_TEMPLATE_TEXTS[0])
|
|
|
|
expect(isValid).toEqual(true)
|
|
})
|
|
it('is True for for .Time.Unix (#5492)', () => {
|
|
const isValid = isValidTemplate('.Time.Unix')
|
|
|
|
expect(isValid).toEqual(true)
|
|
})
|
|
it('is True for for len .Tags (#5343)', () => {
|
|
const isValid = isValidTemplate('len .Tags')
|
|
|
|
expect(isValid).toEqual(true)
|
|
})
|
|
|
|
it('is False for a jibberish input', () => {
|
|
const isValid = isValidTemplate('laslkj;owaiu0294u,mxn')
|
|
|
|
expect(isValid).toEqual(false)
|
|
})
|
|
|
|
it('is True for a fuzzy match to tags', () => {
|
|
const isValid = isValidTemplate('(index .Tags "lalala")')
|
|
|
|
expect(isValid).toEqual(true)
|
|
})
|
|
|
|
it('is False for distorted version of tags', () => {
|
|
const isValid = isValidTemplate('(indeasdfx .Tags "lalala")')
|
|
|
|
expect(isValid).toEqual(false)
|
|
})
|
|
})
|
|
})
|