add_label_to_query.test.ts 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import { addLabelToQuery, addLabelToSelector } from '../add_label_to_query';
  2. describe('addLabelToQuery()', () => {
  3. it('should add label to simple query', () => {
  4. expect(() => {
  5. addLabelToQuery('foo', '', '');
  6. }).toThrow();
  7. expect(addLabelToQuery('foo', 'bar', 'baz')).toBe('foo{bar="baz"}');
  8. expect(addLabelToQuery('foo{}', 'bar', 'baz')).toBe('foo{bar="baz"}');
  9. expect(addLabelToQuery('foo{x="yy"}', 'bar', 'baz')).toBe('foo{bar="baz",x="yy"}');
  10. expect(addLabelToQuery('metric > 0.001', 'foo', 'bar')).toBe('metric{foo="bar"} > 0.001');
  11. });
  12. it('should add custom operator', () => {
  13. expect(addLabelToQuery('foo{}', 'bar', 'baz', '!=')).toBe('foo{bar!="baz"}');
  14. expect(addLabelToQuery('foo{x="yy"}', 'bar', 'baz', '!=')).toBe('foo{bar!="baz",x="yy"}');
  15. });
  16. it('should not modify ranges', () => {
  17. expect(addLabelToQuery('rate(metric[1m])', 'foo', 'bar')).toBe('rate(metric{foo="bar"}[1m])');
  18. });
  19. it('should detect in-order function use', () => {
  20. expect(addLabelToQuery('sum by (xx) (foo)', 'bar', 'baz')).toBe('sum by (xx) (foo{bar="baz"})');
  21. });
  22. it('should handle selectors with punctuation', () => {
  23. expect(addLabelToQuery('foo{instance="my-host.com:9100"}', 'bar', 'baz')).toBe(
  24. 'foo{bar="baz",instance="my-host.com:9100"}'
  25. );
  26. expect(addLabelToQuery('foo:metric:rate1m', 'bar', 'baz')).toBe('foo:metric:rate1m{bar="baz"}');
  27. expect(addLabelToQuery('foo{list="a,b,c"}', 'bar', 'baz')).toBe('foo{bar="baz",list="a,b,c"}');
  28. });
  29. it('should work on arithmetical expressions', () => {
  30. expect(addLabelToQuery('foo + foo', 'bar', 'baz')).toBe('foo{bar="baz"} + foo{bar="baz"}');
  31. expect(addLabelToQuery('foo{x="yy"} + metric', 'bar', 'baz')).toBe('foo{bar="baz",x="yy"} + metric{bar="baz"}');
  32. expect(addLabelToQuery('avg(foo) + sum(xx_yy)', 'bar', 'baz')).toBe('avg(foo{bar="baz"}) + sum(xx_yy{bar="baz"})');
  33. expect(addLabelToQuery('foo{x="yy"} * metric{y="zz",a="bb"} * metric2', 'bar', 'baz')).toBe(
  34. 'foo{bar="baz",x="yy"} * metric{a="bb",bar="baz",y="zz"} * metric2{bar="baz"}'
  35. );
  36. });
  37. it('should not add duplicate labels to aquery', () => {
  38. expect(addLabelToQuery(addLabelToQuery('foo{x="yy"}', 'bar', 'baz', '!='), 'bar', 'baz', '!=')).toBe(
  39. 'foo{bar!="baz",x="yy"}'
  40. );
  41. expect(addLabelToQuery(addLabelToQuery('rate(metric[1m])', 'foo', 'bar'), 'foo', 'bar')).toBe(
  42. 'rate(metric{foo="bar"}[1m])'
  43. );
  44. expect(addLabelToQuery(addLabelToQuery('foo{list="a,b,c"}', 'bar', 'baz'), 'bar', 'baz')).toBe(
  45. 'foo{bar="baz",list="a,b,c"}'
  46. );
  47. expect(addLabelToQuery(addLabelToQuery('avg(foo) + sum(xx_yy)', 'bar', 'baz'), 'bar', 'baz')).toBe(
  48. 'avg(foo{bar="baz"}) + sum(xx_yy{bar="baz"})'
  49. );
  50. });
  51. });
  52. describe('addLabelToSelector()', () => {
  53. test('should add a label to an empty selector', () => {
  54. expect(addLabelToSelector('{}', 'foo', 'bar')).toBe('{foo="bar"}');
  55. expect(addLabelToSelector('', 'foo', 'bar')).toBe('{foo="bar"}');
  56. });
  57. test('should add a label to a selector', () => {
  58. expect(addLabelToSelector('{foo="bar"}', 'baz', '42')).toBe('{baz="42",foo="bar"}');
  59. });
  60. test('should add a label to a selector with custom operator', () => {
  61. expect(addLabelToSelector('{}', 'baz', '42', '!=')).toBe('{baz!="42"}');
  62. });
  63. });