cloudflare/pint

Public

mirrored from https://github.com/cloudflare/pintAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
v0.38.0

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

internal/parser/utils/rate_test.go

94lines · modepreview

package utils_test

import (
	"testing"

	"github.com/stretchr/testify/require"

	"github.com/cloudflare/pint/internal/parser"
	"github.com/cloudflare/pint/internal/parser/utils"
)

func TestHasOuterRate(t *testing.T) {
	type testCaseT struct {
		expr   string
		output []string
	}

	testCases := []testCaseT{
		{
			expr: "foo",
		},
		{
			expr:   "rate(foo[2m])",
			output: []string{"rate(foo[2m])"},
		},
		{
			expr:   "rate(foo[2m]) > 0",
			output: []string{"rate(foo[2m])"},
		},
		{
			expr:   "rate(foo[2m]) / sum(rate(bar[2m]))",
			output: []string{"rate(foo[2m])"},
		},
		{
			expr:   "sum(rate(foo[2m])) > 0",
			output: []string{"rate(foo[2m])"},
		},
		{
			expr: "count(rate(foo[2m])) > 0",
		},
		{
			expr: "count_values(\"foo\", rate(foo[2m])) > 0",
		},
		{
			expr: "floor(rate(foo[2m])) > 0",
		},
		{
			expr: "ceil(rate(foo[2m])) > 0",
		},
		{
			expr:   "rate(foo[2m]) or irate(foo[2m])",
			output: []string{"rate(foo[2m])", "irate(foo[2m])"},
		},
		{
			expr:   "rate(foo[2m]) * on() irate(foo[2m])",
			output: []string{"rate(foo[2m])", "irate(foo[2m])"},
		},
		{
			expr: "sum(foo) without() * on() group_left(instance) sum(deriv(foo[2m]))",
		},
		{
			expr:   "sum(foo) without(job) * on() group_right(instance) sum(deriv(foo[2m]))",
			output: []string{"deriv(foo[2m])"},
		},
		{
			expr: "2 > foo",
		},
		{
			expr: "2 > rate(foo[2m])",
		},
	}

	for _, tc := range testCases {
		t.Run(tc.expr, func(t *testing.T) {
			n, err := parser.DecodeExpr(tc.expr)
			if err != nil {
				t.Error(err)
				t.FailNow()
			}
			calls := utils.HasOuterRate(n)
			if len(calls) == 0 {
				if len(tc.output) > 0 {
					t.Errorf("HasOuterRate() returned nil, expected %s", tc.output)
				}
			} else {
				output := []string{}
				for _, a := range calls {
					output = append(output, a.String())
				}
				require.Equal(t, tc.output, output, "HasOuterRate() returned wrong output")
			}
		})
	}
}