File: constraint_test.go

package info (click to toggle)
docker.io 20.10.5%2Bdfsg1-1%2Bdeb11u2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, bullseye-backports
  • size: 60,044 kB
  • sloc: sh: 5,527; makefile: 616; ansic: 179; python: 162; asm: 7
file content (117 lines) | stat: -rw-r--r-- 2,897 bytes parent folder | download | duplicates (6)
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
package constraint

import (
	"testing"

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

func TestParse(t *testing.T) {
	// empty string
	_, err := Parse([]string{""})
	assert.Error(t, err)

	_, err = Parse([]string{" "})
	assert.Error(t, err)

	// no operator
	_, err = Parse([]string{"nodeabc"})
	assert.Error(t, err)

	// incorrect operator
	_, err = Parse([]string{"node ~ abc"})
	assert.Error(t, err)

	// Cannot use the leading digit for key
	_, err = Parse([]string{"1node==a2"})
	assert.Error(t, err)

	// leading and trailing white space are ignored
	_, err = Parse([]string{" node == node1"})
	assert.NoError(t, err)

	// key cannot container white space in the middle
	_, err = Parse([]string{"no de== node1"})
	assert.Error(t, err)

	// Cannot use * in key
	_, err = Parse([]string{"no*de==node1"})
	assert.Error(t, err)

	// key cannot be empty
	_, err = Parse([]string{"==node1"})
	assert.Error(t, err)

	// value cannot be empty
	_, err = Parse([]string{"node=="})
	assert.Error(t, err)

	// value cannot be an empty space
	_, err = Parse([]string{"node== "})
	assert.Error(t, err)

	// Cannot use $ in key
	_, err = Parse([]string{"no$de==node1"})
	assert.Error(t, err)

	// Allow CAPS in key
	exprs, err := Parse([]string{"NoDe==node1"})
	assert.NoError(t, err)
	assert.Equal(t, exprs[0].key, "NoDe")

	// Allow dot in key
	exprs, err = Parse([]string{"no.de==node1"})
	assert.NoError(t, err)
	assert.Equal(t, exprs[0].key, "no.de")

	// Allow leading underscore
	exprs, err = Parse([]string{"_node==_node1"})
	assert.NoError(t, err)
	assert.Equal(t, exprs[0].key, "_node")

	// Allow special characters in exp
	exprs, err = Parse([]string{"node==[a-b]+c*(n|b)/"})
	assert.NoError(t, err)
	assert.Equal(t, exprs[0].key, "node")
	assert.Equal(t, exprs[0].exp, "[a-b]+c*(n|b)/")

	// Allow space in Exp
	exprs, err = Parse([]string{"node==node 1"})
	assert.NoError(t, err)
	assert.Equal(t, exprs[0].key, "node")
	assert.Equal(t, exprs[0].exp, "node 1")
}

func TestMatch(t *testing.T) {
	exprs, err := Parse([]string{"node.name==foo"})
	assert.NoError(t, err)
	e := exprs[0]
	assert.True(t, e.Match("foo"))
	assert.False(t, e.Match("fo"))
	assert.False(t, e.Match("fooE"))

	exprs, err = Parse([]string{"node.name!=foo"})
	assert.NoError(t, err)
	e = exprs[0]
	assert.False(t, e.Match("foo"))
	assert.True(t, e.Match("bar"))
	assert.True(t, e.Match("fo"))
	assert.True(t, e.Match("fooExtra"))

	exprs, err = Parse([]string{"node.name==f*o"})
	assert.NoError(t, err)
	e = exprs[0]
	assert.False(t, e.Match("fo"))
	assert.True(t, e.Match("f*o"))
	assert.True(t, e.Match("F*o"))
	assert.False(t, e.Match("foo", "fo", "bar"))
	assert.True(t, e.Match("foo", "f*o", "bar"))
	assert.False(t, e.Match("foo"))

	// test special characters
	exprs, err = Parse([]string{"node.name==f.-$o"})
	assert.NoError(t, err)
	e = exprs[0]
	assert.False(t, e.Match("fa-$o"))
	assert.True(t, e.Match("f.-$o"))
}