Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
29020284
Commit
29020284
authored
Mar 05, 2015
by
Brian Grant
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #4835 from sdminonne/issue_341_step_2
moving ParseSelector to Parse for labels only.
parents
00989f22
75f2efb5
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
68 additions
and
44 deletions
+68
-44
test.sh
hack/lib/test.sh
+1
-1
test-cmd.sh
hack/test-cmd.sh
+6
-6
resthandler.go
pkg/apiserver/resthandler.go
+1
-1
listwatch_test.go
pkg/client/cache/listwatch_test.go
+1
-1
client_test.go
pkg/client/client_test.go
+15
-1
request.go
pkg/client/request.go
+10
-1
request_test.go
pkg/client/request_test.go
+1
-1
builder.go
pkg/kubectl/resource/builder.go
+1
-1
selector.go
pkg/labels/selector.go
+0
-0
selector_test.go
pkg/labels/selector_test.go
+30
-29
registry_test.go
pkg/registry/generic/registry_test.go
+1
-1
etcd_test.go
pkg/registry/pod/etcd/etcd_test.go
+1
-1
No files found.
hack/lib/test.sh
View file @
29020284
...
...
@@ -31,7 +31,7 @@ kube::test::get_object_assert() {
local
request
=
$2
local
expected
=
$3
res
=
$(
kubectl get
"
${
kube_flags
[@]
}
"
$object
-o
template
-t
"
$request
"
)
res
=
$(
eval
kubectl get
"
${
kube_flags
[@]
}
"
$object
-o
template
-t
"
$request
"
)
if
[[
"
$res
"
=
~ ^
$expected$
]]
;
then
echo
-n
${
green
}
...
...
hack/test-cmd.sh
View file @
29020284
...
...
@@ -194,11 +194,11 @@ for version in "${kube_api_versions[@]}"; do
### Delete POD valid-pod with label
# Pre-condition: valid-pod POD is running
kube::test::get_object_assert
'pods -l name=valid-pod'
"{{range.items}}{{.
$id_field
}}:{{end}}"
'valid-pod:'
kube::test::get_object_assert
"pods -l'name in (valid-pod)'"
'{{range.items}}{{.$id_field}}:{{end}}'
'valid-pod:'
# Command
kubectl delete pods
-l
name
=
valid-pod
"
${
kube_flags
[@]
}
"
kubectl delete pods
-l
'name in (valid-pod)'
"
${
kube_flags
[@]
}
"
# Post-condition: no POD is running
kube::test::get_object_assert
'pods -l name=valid-pod'
"{{range.items}}{{.
$id_field
}}:{{end}}"
''
kube::test::get_object_assert
"pods -l'name in (valid-pod)'"
'{{range.items}}{{.$id_field}}:{{end}}'
''
### Create POD valid-pod from JSON
# Pre-condition: no POD is running
...
...
@@ -220,7 +220,7 @@ for version in "${kube_api_versions[@]}"; do
# Pre-condition: valid-pod POD is running
kube::test::get_object_assert pods
"{{range.items}}{{.
$id_field
}}:{{end}}"
'valid-pod:'
# Command
!
kubectl delete
--all
pods
-l
name
=
valid-pod
"
${
kube_flags
[@]
}
"
!
kubectl delete
--all
pods
-l
'name in (valid-pod)'
"
${
kube_flags
[@]
}
"
# Post-condition: valid-pod POD is running
kube::test::get_object_assert pods
"{{range.items}}{{.
$id_field
}}:{{end}}"
'valid-pod:'
...
...
@@ -230,7 +230,7 @@ for version in "${kube_api_versions[@]}"; do
# Command
kubectl delete
--all
pods
"
${
kube_flags
[@]
}
"
# --all remove all the pods
# Post-condition: no POD is running
kube::test::get_object_assert
'pods -l name=valid-pod'
"{{range.items}}{{.
$id_field
}}:{{end}}"
''
kube::test::get_object_assert
"pods -l'name in (valid-pod)'"
'{{range.items}}{{.$id_field}}:{{end}}'
''
### Create two PODs
# Pre-condition: no POD is running
...
...
@@ -318,7 +318,7 @@ for version in "${kube_api_versions[@]}"; do
# Pre-condition: valid-pod POD is running
kube::test::get_object_assert pods
"{{range.items}}{{.
$id_field
}}:{{end}}"
'valid-pod:'
# Command
kubectl delete pods
-l
name
=
valid-pod-super-sayan
"
${
kube_flags
[@]
}
"
kubectl delete pods
-l
'name in (valid-pod-super-sayan)'
"
${
kube_flags
[@]
}
"
# Post-condition: no POD is running
kube::test::get_object_assert pods
"{{range.items}}{{.
$id_field
}}:{{end}}"
''
...
...
pkg/apiserver/resthandler.go
View file @
29020284
...
...
@@ -81,7 +81,7 @@ func GetResource(r RESTGetter, ctxFn ContextFunc, namer ScopeNamer, codec runtim
}
func
parseSelectorQueryParams
(
query
url
.
Values
,
version
,
apiResource
string
)
(
label
,
field
labels
.
Selector
,
err
error
)
{
label
,
err
=
labels
.
Parse
Selector
(
query
.
Get
(
"labels"
))
label
,
err
=
labels
.
Parse
(
query
.
Get
(
"labels"
))
if
err
!=
nil
{
return
nil
,
nil
,
err
}
...
...
pkg/client/cache/listwatch_test.go
View file @
29020284
...
...
@@ -30,7 +30,7 @@ import (
)
func
parseSelectorOrDie
(
s
string
)
labels
.
Selector
{
selector
,
err
:=
labels
.
Parse
Selector
(
s
)
selector
,
err
:=
labels
.
Parse
(
s
)
if
err
!=
nil
{
panic
(
err
)
}
...
...
pkg/client/client_test.go
View file @
29020284
...
...
@@ -139,8 +139,10 @@ func (c *testClient) ValidateCommon(t *testing.T, err error) {
validator
,
ok
:=
c
.
QueryValidator
[
key
]
if
!
ok
{
switch
key
{
case
"labels"
,
"fields"
:
case
"labels"
:
validator
=
validateLabels
case
"fields"
:
validator
=
validateFields
default
:
validator
=
func
(
a
,
b
string
)
bool
{
return
a
==
b
}
}
...
...
@@ -227,6 +229,18 @@ func TestListPods(t *testing.T) {
}
func
validateLabels
(
a
,
b
string
)
bool
{
sA
,
eA
:=
labels
.
Parse
(
a
)
if
eA
!=
nil
{
return
false
}
sB
,
eB
:=
labels
.
Parse
(
b
)
if
eB
!=
nil
{
return
false
}
return
sA
.
String
()
==
sB
.
String
()
}
func
validateFields
(
a
,
b
string
)
bool
{
sA
,
_
:=
labels
.
ParseSelector
(
a
)
sB
,
_
:=
labels
.
ParseSelector
(
b
)
return
sA
.
String
()
==
sB
.
String
()
...
...
pkg/client/request.go
View file @
29020284
...
...
@@ -236,7 +236,16 @@ func (r *Request) ParseSelectorParam(paramName, item string) *Request {
if
r
.
err
!=
nil
{
return
r
}
sel
,
err
:=
labels
.
ParseSelector
(
item
)
var
sel
labels
.
Selector
var
err
error
switch
paramName
{
case
"labels"
:
sel
,
err
=
labels
.
Parse
(
item
)
case
"fields"
:
sel
,
err
=
labels
.
ParseSelector
(
item
)
default
:
err
=
fmt
.
Errorf
(
"unknown parameter name '%s'"
,
paramName
)
}
if
err
!=
nil
{
r
.
err
=
err
return
r
...
...
pkg/client/request_test.go
View file @
29020284
...
...
@@ -142,7 +142,7 @@ func TestRequestSetTwiceError(t *testing.T) {
}
func
TestRequestParseSelectorParam
(
t
*
testing
.
T
)
{
r
:=
(
&
Request
{})
.
ParseSelectorParam
(
"foo"
,
"a"
)
r
:=
(
&
Request
{})
.
ParseSelectorParam
(
"foo"
,
"a
=
"
)
if
r
.
err
==
nil
||
r
.
params
!=
nil
{
t
.
Errorf
(
"should have set err and left params nil: %#v"
,
r
)
}
...
...
pkg/kubectl/resource/builder.go
View file @
29020284
...
...
@@ -164,7 +164,7 @@ func (b *Builder) ResourceTypes(types ...string) *Builder {
// This will not affect files loaded from disk or URL. If the parameter is empty it is
// a no-op - to select all resources invoke `b.Selector(labels.Everything)`.
func
(
b
*
Builder
)
SelectorParam
(
s
string
)
*
Builder
{
selector
,
err
:=
labels
.
Parse
Selector
(
s
)
selector
,
err
:=
labels
.
Parse
(
s
)
if
err
!=
nil
{
b
.
errs
=
append
(
b
.
errs
,
fmt
.
Errorf
(
"the provided selector %q is not valid: %v"
,
s
,
err
))
return
b
...
...
pkg/labels/selector.go
View file @
29020284
This diff is collapsed.
Click to expand it.
pkg/labels/selector_test.go
View file @
29020284
...
...
@@ -302,17 +302,17 @@ func TestLexer(t *testing.T) {
s
string
t
Token
}{
{
""
,
E
OS
},
{
","
,
C
OMMA
},
{
"notin"
,
N
OTIN
},
{
"in"
,
I
N
},
{
"="
,
E
QUAL
},
{
"=="
,
EEQUAL
},
{
"!="
,
N
EQUAL
},
{
"("
,
O
PAR
},
{
")"
,
C
PAR
},
{
"||"
,
I
DENTIFIER
},
{
"!"
,
E
RROR
},
{
""
,
E
ndOfStringToken
},
{
","
,
C
ommaToken
},
{
"notin"
,
N
otInToken
},
{
"in"
,
I
nToken
},
{
"="
,
E
qualsToken
},
{
"=="
,
DoubleEqualsToken
},
{
"!="
,
N
otEqualsToken
},
{
"("
,
O
penParToken
},
{
")"
,
C
losedParToken
},
{
"||"
,
I
dentifierToken
},
{
"!"
,
E
rrorToken
},
}
for
_
,
v
:=
range
testcases
{
l
:=
&
Lexer
{
s
:
v
.
s
,
pos
:
0
}
...
...
@@ -320,7 +320,7 @@ func TestLexer(t *testing.T) {
if
token
!=
v
.
t
{
t
.
Errorf
(
"Got %d it should be %d for '%s'"
,
token
,
v
.
t
,
v
.
s
)
}
if
v
.
t
!=
E
RROR
&&
lit
!=
v
.
s
{
if
v
.
t
!=
E
rrorToken
&&
lit
!=
v
.
s
{
t
.
Errorf
(
"Got '%s' it should be '%s'"
,
lit
,
v
.
s
)
}
}
...
...
@@ -339,13 +339,13 @@ func TestLexerSequence(t *testing.T) {
s
string
t
[]
Token
}{
{
"key in ( value )"
,
[]
Token
{
I
DENTIFIER
,
IN
,
OPAR
,
IDENTIFIER
,
CPAR
}},
{
"key notin ( value )"
,
[]
Token
{
I
DENTIFIER
,
NOTIN
,
OPAR
,
IDENTIFIER
,
CPAR
}},
{
"key in ( value1, value2 )"
,
[]
Token
{
I
DENTIFIER
,
IN
,
OPAR
,
IDENTIFIER
,
COMMA
,
IDENTIFIER
,
CPAR
}},
{
"key"
,
[]
Token
{
I
DENTIFIER
}},
{
"()"
,
[]
Token
{
O
PAR
,
CPAR
}},
{
"x in (),y"
,
[]
Token
{
I
DENTIFIER
,
IN
,
OPAR
,
CPAR
,
COMMA
,
IDENTIFIER
}},
{
"== != (), = notin"
,
[]
Token
{
EEQUAL
,
NEQUAL
,
OPAR
,
CPAR
,
COMMA
,
EQUAL
,
NOTIN
}},
{
"key in ( value )"
,
[]
Token
{
I
dentifierToken
,
InToken
,
OpenParToken
,
IdentifierToken
,
ClosedParToken
}},
{
"key notin ( value )"
,
[]
Token
{
I
dentifierToken
,
NotInToken
,
OpenParToken
,
IdentifierToken
,
ClosedParToken
}},
{
"key in ( value1, value2 )"
,
[]
Token
{
I
dentifierToken
,
InToken
,
OpenParToken
,
IdentifierToken
,
CommaToken
,
IdentifierToken
,
ClosedParToken
}},
{
"key"
,
[]
Token
{
I
dentifierToken
}},
{
"()"
,
[]
Token
{
O
penParToken
,
ClosedParToken
}},
{
"x in (),y"
,
[]
Token
{
I
dentifierToken
,
InToken
,
OpenParToken
,
ClosedParToken
,
CommaToken
,
IdentifierToken
}},
{
"== != (), = notin"
,
[]
Token
{
DoubleEqualsToken
,
NotEqualsToken
,
OpenParToken
,
ClosedParToken
,
CommaToken
,
EqualsToken
,
NotInToken
}},
}
for
_
,
v
:=
range
testcases
{
var
literals
[]
string
...
...
@@ -353,7 +353,7 @@ func TestLexerSequence(t *testing.T) {
l
:=
&
Lexer
{
s
:
v
.
s
,
pos
:
0
}
for
{
token
,
lit
:=
l
.
Lex
()
if
token
==
E
OS
{
if
token
==
E
ndOfStringToken
{
break
}
tokens
=
append
(
tokens
,
token
)
...
...
@@ -374,14 +374,14 @@ func TestParserLookahead(t *testing.T) {
s
string
t
[]
Token
}{
{
"key in ( value )"
,
[]
Token
{
I
DENTIFIER
,
IN
,
OPAR
,
IDENTIFIER
,
CPAR
,
EOS
}},
{
"key notin ( value )"
,
[]
Token
{
I
DENTIFIER
,
NOTIN
,
OPAR
,
IDENTIFIER
,
CPAR
,
EOS
}},
{
"key in ( value1, value2 )"
,
[]
Token
{
I
DENTIFIER
,
IN
,
OPAR
,
IDENTIFIER
,
COMMA
,
IDENTIFIER
,
CPAR
,
EOS
}},
{
"key"
,
[]
Token
{
I
DENTIFIER
,
EOS
}},
{
"()"
,
[]
Token
{
O
PAR
,
CPAR
,
EOS
}},
{
""
,
[]
Token
{
E
OS
}},
{
"x in (),y"
,
[]
Token
{
I
DENTIFIER
,
IN
,
OPAR
,
CPAR
,
COMMA
,
IDENTIFIER
,
EOS
}},
{
"== != (), = notin"
,
[]
Token
{
EEQUAL
,
NEQUAL
,
OPAR
,
CPAR
,
COMMA
,
EQUAL
,
NOTIN
,
EOS
}},
{
"key in ( value )"
,
[]
Token
{
I
dentifierToken
,
InToken
,
OpenParToken
,
IdentifierToken
,
ClosedParToken
,
EndOfStringToken
}},
{
"key notin ( value )"
,
[]
Token
{
I
dentifierToken
,
NotInToken
,
OpenParToken
,
IdentifierToken
,
ClosedParToken
,
EndOfStringToken
}},
{
"key in ( value1, value2 )"
,
[]
Token
{
I
dentifierToken
,
InToken
,
OpenParToken
,
IdentifierToken
,
CommaToken
,
IdentifierToken
,
ClosedParToken
,
EndOfStringToken
}},
{
"key"
,
[]
Token
{
I
dentifierToken
,
EndOfStringToken
}},
{
"()"
,
[]
Token
{
O
penParToken
,
ClosedParToken
,
EndOfStringToken
}},
{
""
,
[]
Token
{
E
ndOfStringToken
}},
{
"x in (),y"
,
[]
Token
{
I
dentifierToken
,
InToken
,
OpenParToken
,
ClosedParToken
,
CommaToken
,
IdentifierToken
,
EndOfStringToken
}},
{
"== != (), = notin"
,
[]
Token
{
DoubleEqualsToken
,
NotEqualsToken
,
OpenParToken
,
ClosedParToken
,
CommaToken
,
EqualsToken
,
NotInToken
,
EndOfStringToken
}},
}
for
_
,
v
:=
range
testcases
{
p
:=
&
Parser
{
l
:
&
Lexer
{
s
:
v
.
s
,
pos
:
0
},
position
:
0
}
...
...
@@ -393,7 +393,7 @@ func TestParserLookahead(t *testing.T) {
token
,
lit
:=
p
.
lookahead
(
KeyAndOperator
)
token2
,
lit2
:=
p
.
consume
(
KeyAndOperator
)
if
token
==
E
OS
{
if
token
==
E
ndOfStringToken
{
break
}
if
token
!=
token2
||
lit
!=
lit2
{
...
...
@@ -597,6 +597,7 @@ func getRequirement(key string, op Operator, vals util.StringSet, t *testing.T)
req
,
err
:=
NewRequirement
(
key
,
op
,
vals
)
if
err
!=
nil
{
t
.
Errorf
(
"NewRequirement(%v, %v, %v) resulted in error:%v"
,
key
,
op
,
vals
,
err
)
return
Requirement
{}
}
return
*
req
}
pkg/registry/generic/registry_test.go
View file @
29020284
...
...
@@ -73,7 +73,7 @@ func TestSelectionPredicate(t *testing.T) {
}
for
name
,
item
:=
range
table
{
parsedLabel
,
err
:=
labels
.
Parse
Selector
(
item
.
labelSelector
)
parsedLabel
,
err
:=
labels
.
Parse
(
item
.
labelSelector
)
if
err
!=
nil
{
panic
(
err
)
}
...
...
pkg/registry/pod/etcd/etcd_test.go
View file @
29020284
...
...
@@ -351,7 +351,7 @@ func TestListPodListSelection(t *testing.T) {
}
for
index
,
item
:=
range
table
{
label
,
err
:=
labels
.
Parse
Selector
(
item
.
label
)
label
,
err
:=
labels
.
Parse
(
item
.
label
)
if
err
!=
nil
{
t
.
Errorf
(
"unexpected error: %v"
,
err
)
continue
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment