package logstorage import ( "testing" ) func TestParseStatsCountUniqSuccess(t *testing.T) { f := func(pipeStr string) { t.Helper() expectParseStatsFuncSuccess(t, pipeStr) } f(`count_uniq(*)`) f(`count_uniq(a)`) f(`count_uniq(a, b)`) f(`count_uniq(*) limit 10`) f(`count_uniq(a) limit 20`) f(`count_uniq(a, b) limit 5`) } func TestParseStatsCountUniqFailure(t *testing.T) { f := func(pipeStr string) { t.Helper() expectParseStatsFuncFailure(t, pipeStr) } f(`count_uniq`) f(`count_uniq(a b)`) f(`count_uniq(x) y`) f(`count_uniq(x) limit`) f(`count_uniq(x) limit N`) } func TestStatsCountUniq(t *testing.T) { f := func(pipeStr string, rows, rowsExpected [][]Field) { t.Helper() expectPipeResults(t, pipeStr, rows, rowsExpected) } f("stats count_uniq(*) as x", [][]Field{ { {"_msg", `abc`}, {"a", `2`}, {"b", `3`}, }, { {"_msg", `def`}, {"a", `1`}, }, {}, { {"a", `3`}, {"b", `54`}, }, }, [][]Field{ { {"x", "3"}, }, }) f("stats count_uniq(*) limit 2 as x", [][]Field{ { {"_msg", `abc`}, {"a", `2`}, {"b", `3`}, }, { {"_msg", `def`}, {"a", `1`}, }, {}, { {"a", `3`}, {"b", `54`}, }, }, [][]Field{ { {"x", "2"}, }, }) f("stats count_uniq(*) limit 10 as x", [][]Field{ { {"_msg", `abc`}, {"a", `2`}, {"b", `3`}, }, { {"_msg", `def`}, {"a", `1`}, }, {}, { {"a", `3`}, {"b", `54`}, }, }, [][]Field{ { {"x", "3"}, }, }) f("stats count_uniq(b) as x", [][]Field{ { {"_msg", `abc`}, {"a", `2`}, {"b", `3`}, }, { {"_msg", `def`}, {"a", `1`}, }, {}, { {"a", `3`}, {"b", `54`}, }, }, [][]Field{ { {"x", "2"}, }, }) f("stats count_uniq(a, b) as x", [][]Field{ { {"_msg", `abc`}, {"a", `2`}, {"b", `3`}, }, { {"_msg", `def`}, {"a", `1`}, }, {}, { {"aa", `3`}, {"bb", `54`}, }, }, [][]Field{ { {"x", "2"}, }, }) f("stats count_uniq(c) as x", [][]Field{ { {"_msg", `abc`}, {"a", `2`}, {"b", `3`}, }, { {"_msg", `def`}, {"a", `1`}, }, { {"a", `3`}, {"b", `54`}, }, }, [][]Field{ { {"x", "0"}, }, }) f("stats count_uniq(a) if (b:*) as x", [][]Field{ { {"_msg", `abc`}, {"a", `2`}, {"b", `3`}, }, { {"_msg", `def`}, {"a", `1`}, }, { {"b", `54`}, }, }, [][]Field{ { {"x", "1"}, }, }) f("stats by (a) count_uniq(b) as x", [][]Field{ { {"_msg", `abc`}, {"a", `1`}, {"b", `3`}, }, { {"_msg", `def`}, {"a", `1`}, }, { {"a", `3`}, {"b", `5`}, }, { {"a", `3`}, {"b", `7`}, }, }, [][]Field{ { {"a", "1"}, {"x", "1"}, }, { {"a", "3"}, {"x", "2"}, }, }) f("stats by (a) count_uniq(b) if (!c:foo) as x", [][]Field{ { {"_msg", `abc`}, {"a", `1`}, {"b", `3`}, }, { {"_msg", `def`}, {"a", `1`}, {"b", "aadf"}, {"c", "foo"}, }, { {"a", `3`}, {"b", `5`}, {"c", "bar"}, }, { {"a", `3`}, }, }, [][]Field{ { {"a", "1"}, {"x", "1"}, }, { {"a", "3"}, {"x", "1"}, }, }) f("stats by (a) count_uniq(*) as x", [][]Field{ { {"_msg", `abc`}, {"a", `1`}, {"b", `3`}, }, { {"_msg", `def`}, {"a", `1`}, {"c", "3"}, }, {}, { {"a", `3`}, {"b", `5`}, }, }, [][]Field{ { {"a", ""}, {"x", "0"}, }, { {"a", "1"}, {"x", "2"}, }, { {"a", "3"}, {"x", "1"}, }, }) f("stats by (a) count_uniq(c) as x", [][]Field{ { {"_msg", `abc`}, {"a", `1`}, {"b", `3`}, }, { {"_msg", `def`}, {"a", `1`}, }, { {"a", `3`}, {"c", `5`}, }, { {"a", `3`}, {"b", `7`}, }, }, [][]Field{ { {"a", "1"}, {"x", "0"}, }, { {"a", "3"}, {"x", "1"}, }, }) f("stats by (a) count_uniq(a, b, c) as x", [][]Field{ { {"_msg", `abc`}, {"a", `1`}, {"b", `3`}, }, { {"_msg", `def`}, {"a", `1`}, {"c", "3"}, }, { {"a", `3`}, {"b", `5`}, }, { {"foo", "bar"}, }, { {"a", `3`}, {"b", `7`}, }, }, [][]Field{ { {"a", "1"}, {"x", "2"}, }, { {"a", ""}, {"x", "0"}, }, { {"a", "3"}, {"x", "2"}, }, }) f("stats by (a, b) count_uniq(a) as x", [][]Field{ { {"_msg", `abc`}, {"a", `1`}, {"b", `3`}, }, { {"_msg", `def`}, {"a", `1`}, {"c", "3"}, }, { {"c", `3`}, {"b", `5`}, }, }, [][]Field{ { {"a", "1"}, {"b", "3"}, {"x", "1"}, }, { {"a", "1"}, {"b", ""}, {"x", "1"}, }, { {"a", ""}, {"b", "5"}, {"x", "0"}, }, }) }