github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/swarmkit/manager/constraint/constraint_test.go (about) 1 package constraint 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 ) 8 9 func TestParse(t *testing.T) { 10 // empty string 11 _, err := Parse([]string{""}) 12 assert.Error(t, err) 13 14 _, err = Parse([]string{" "}) 15 assert.Error(t, err) 16 17 // no operator 18 _, err = Parse([]string{"nodeabc"}) 19 assert.Error(t, err) 20 21 // incorrect operator 22 _, err = Parse([]string{"node ~ abc"}) 23 assert.Error(t, err) 24 25 // Cannot use the leading digit for key 26 _, err = Parse([]string{"1node==a2"}) 27 assert.Error(t, err) 28 29 // leading and trailing white space are ignored 30 _, err = Parse([]string{" node == node1"}) 31 assert.NoError(t, err) 32 33 // key cannot container white space in the middle 34 _, err = Parse([]string{"no de== node1"}) 35 assert.Error(t, err) 36 37 // Cannot use * in key 38 _, err = Parse([]string{"no*de==node1"}) 39 assert.Error(t, err) 40 41 // key cannot be empty 42 _, err = Parse([]string{"==node1"}) 43 assert.Error(t, err) 44 45 // value cannot be empty 46 _, err = Parse([]string{"node=="}) 47 assert.Error(t, err) 48 49 // value cannot be an empty space 50 _, err = Parse([]string{"node== "}) 51 assert.Error(t, err) 52 53 // Cannot use $ in key 54 _, err = Parse([]string{"no$de==node1"}) 55 assert.Error(t, err) 56 57 // Allow CAPS in key 58 exprs, err := Parse([]string{"NoDe==node1"}) 59 assert.NoError(t, err) 60 assert.Equal(t, exprs[0].key, "NoDe") 61 62 // Allow dot in key 63 exprs, err = Parse([]string{"no.de==node1"}) 64 assert.NoError(t, err) 65 assert.Equal(t, exprs[0].key, "no.de") 66 67 // Allow leading underscore 68 exprs, err = Parse([]string{"_node==_node1"}) 69 assert.NoError(t, err) 70 assert.Equal(t, exprs[0].key, "_node") 71 72 // Allow special characters in exp 73 exprs, err = Parse([]string{"node==[a-b]+c*(n|b)/"}) 74 assert.NoError(t, err) 75 assert.Equal(t, exprs[0].key, "node") 76 assert.Equal(t, exprs[0].exp, "[a-b]+c*(n|b)/") 77 78 // Allow space in Exp 79 exprs, err = Parse([]string{"node==node 1"}) 80 assert.NoError(t, err) 81 assert.Equal(t, exprs[0].key, "node") 82 assert.Equal(t, exprs[0].exp, "node 1") 83 } 84 85 func TestMatch(t *testing.T) { 86 exprs, err := Parse([]string{"node.name==foo"}) 87 assert.NoError(t, err) 88 e := exprs[0] 89 assert.True(t, e.Match("foo")) 90 assert.False(t, e.Match("fo")) 91 assert.False(t, e.Match("fooE")) 92 93 exprs, err = Parse([]string{"node.name!=foo"}) 94 assert.NoError(t, err) 95 e = exprs[0] 96 assert.False(t, e.Match("foo")) 97 assert.True(t, e.Match("bar")) 98 assert.True(t, e.Match("fo")) 99 assert.True(t, e.Match("fooExtra")) 100 101 exprs, err = Parse([]string{"node.name==f*o"}) 102 assert.NoError(t, err) 103 e = exprs[0] 104 assert.False(t, e.Match("fo")) 105 assert.True(t, e.Match("f*o")) 106 assert.True(t, e.Match("F*o")) 107 assert.False(t, e.Match("foo", "fo", "bar")) 108 assert.True(t, e.Match("foo", "f*o", "bar")) 109 assert.False(t, e.Match("foo")) 110 111 // test special characters 112 exprs, err = Parse([]string{"node.name==f.-$o"}) 113 assert.NoError(t, err) 114 e = exprs[0] 115 assert.False(t, e.Match("fa-$o")) 116 assert.True(t, e.Match("f.-$o")) 117 }