@prometheus-io/codemirror-promql
Version:
a CodeMirror mode for the PromQL language
137 lines (133 loc) • 3.56 kB
text/typescript
// Copyright 2021 The Prometheus Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import { EqlRegex, EqlSingle, Neq, NeqRegex } from '@prometheus-io/lezer-promql';
import { labelMatchersToString } from './matcher';
import { Matcher } from '../types';
describe('labelMatchersToString test', () => {
const testCases = [
{
title: 'metric_name',
metricName: 'metric_name',
labelName: undefined,
matchers: [] as Matcher[],
result: 'metric_name',
},
{
title: 'metric_name 2',
metricName: 'metric_name',
labelName: undefined,
matchers: undefined,
result: 'metric_name',
},
{
title: 'metric_name{}',
metricName: 'metric_name',
labelName: undefined,
matchers: [
{
type: EqlSingle,
name: 'LabelName',
value: '',
},
] as Matcher[],
result: 'metric_name{}',
},
{
title: 'sum{LabelName!="LabelValue"}',
metricName: 'sum',
labelName: undefined,
matchers: [
{
type: Neq,
name: 'LabelName',
value: 'LabelValue',
},
] as Matcher[],
result: 'sum{LabelName!="LabelValue"}',
},
{
title: 'rate{LabelName=~"label.+"}',
metricName: 'rate',
labelName: undefined,
matchers: [
{
type: EqlSingle,
name: 'LabelName',
value: '',
},
{
type: EqlRegex,
name: 'LabelName',
value: 'label.+',
},
] as Matcher[],
result: 'rate{LabelName=~"label.+"}',
},
{
title: 'rate{LabelName="l1",labelName2=~"label.+",labelName3!~"label.+"}',
metricName: 'rate',
labelName: undefined,
matchers: [
{
type: EqlSingle,
name: 'LabelName',
value: 'l1',
},
{
type: EqlRegex,
name: 'labelName2',
value: 'label.+',
},
{
type: NeqRegex,
name: 'labelName3',
value: 'label.+',
},
] as Matcher[],
result: 'rate{LabelName="l1",labelName2=~"label.+",labelName3!~"label.+"}',
},
{
title: 'rate{LabelName="l1",labelName2=~"label.+",labelName3!~"label.+"}',
metricName: 'rate',
labelName: 'LabelName',
matchers: [
{
type: EqlSingle,
name: 'LabelName',
value: 'l1',
},
{
type: EqlRegex,
name: 'labelName2',
value: 'label.+',
},
{
type: NeqRegex,
name: 'labelName3',
value: 'label.+',
},
{
type: Neq,
name: 'labelName4',
value: '',
},
] as Matcher[],
result: 'rate{labelName2=~"label.+",labelName3!~"label.+"}',
},
];
testCases.forEach((value) => {
it(value.title, () => {
expect(labelMatchersToString(value.metricName, value.matchers, value.labelName)).toEqual(value.result);
});
});
});