summaryrefslogtreecommitdiffstats
path: root/src/go/collectors/go.d.plugin/pkg/matcher/simple_patterns_test.go
blob: 016096d5775c515d1c45188501bfd589229d4a54 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
// SPDX-License-Identifier: GPL-3.0-or-later

package matcher

import (
	"testing"

	"github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/require"
)

func TestNewSimplePatternsMatcher(t *testing.T) {
	tests := []struct {
		expr     string
		expected Matcher
	}{
		{"", FALSE()},
		{" ", FALSE()},
		{"foo", simplePatternsMatcher{
			{stringFullMatcher("foo"), true},
		}},
		{"!foo", simplePatternsMatcher{
			{stringFullMatcher("foo"), false},
		}},
		{"foo bar", simplePatternsMatcher{
			{stringFullMatcher("foo"), true},
			{stringFullMatcher("bar"), true},
		}},
		{"*foobar* !foo* !*bar *", simplePatternsMatcher{
			{stringPartialMatcher("foobar"), true},
			{stringPrefixMatcher("foo"), false},
			{stringSuffixMatcher("bar"), false},
			{TRUE(), true},
		}},
		{`ab\`, nil},
	}
	for _, test := range tests {
		t.Run(test.expr, func(t *testing.T) {
			matcher, err := NewSimplePatternsMatcher(test.expr)
			if test.expected == nil {
				assert.Error(t, err)
			} else {
				assert.Equal(t, test.expected, matcher)
			}
		})
	}
}

func TestSimplePatterns_Match(t *testing.T) {
	m, err := NewSimplePatternsMatcher("*foobar* !foo* !*bar *")

	require.NoError(t, err)

	cases := []struct {
		expected bool
		line     string
	}{
		{
			expected: true,
			line:     "hello world",
		},
		{
			expected: false,
			line:     "hello world bar",
		},
		{
			expected: true,
			line:     "hello world foobar",
		},
	}

	for _, c := range cases {
		t.Run(c.line, func(t *testing.T) {
			assert.Equal(t, c.expected, m.MatchString(c.line))
			assert.Equal(t, c.expected, m.Match([]byte(c.line)))
		})
	}
}

func TestSimplePatterns_Match2(t *testing.T) {
	m, err := NewSimplePatternsMatcher("*foobar")

	require.NoError(t, err)

	assert.True(t, m.MatchString("foobar"))
	assert.True(t, m.MatchString("foo foobar"))
	assert.False(t, m.MatchString("foobar baz"))
}