@@ -21,10 +21,12 @@ import (
21
21
"testing"
22
22
23
23
"github.com/google/go-cmp/cmp"
24
+ v1 "k8s.io/api/core/v1"
24
25
"k8s.io/apimachinery/pkg/api/errors"
25
26
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
26
27
"k8s.io/apimachinery/pkg/fields"
27
28
"k8s.io/apimachinery/pkg/labels"
29
+ "k8s.io/apimachinery/pkg/selection"
28
30
"k8s.io/apimachinery/pkg/util/intstr"
29
31
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
30
32
"k8s.io/apiserver/pkg/registry/rest"
@@ -789,10 +791,16 @@ func TestDropTypeDependentFields(t *testing.T) {
789
791
}
790
792
791
793
func TestMatchService (t * testing.T ) {
794
+ noHeadlessServiceRequirement , err := labels .NewRequirement (v1 .IsHeadlessService , selection .DoesNotExist , nil )
795
+ if err != nil {
796
+ t .Fatalf ("Error creating no headless service requirement: %v" , err )
797
+ }
798
+ noHeadlessServiceLabelSelector := labels .NewSelector ().Add (* noHeadlessServiceRequirement )
792
799
testCases := []struct {
793
800
name string
794
801
in * api.Service
795
802
fieldSelector fields.Selector
803
+ labelSelector labels.Selector
796
804
expectMatch bool
797
805
}{
798
806
{
@@ -805,6 +813,7 @@ func TestMatchService(t *testing.T) {
805
813
Spec : api.ServiceSpec {ClusterIP : api .ClusterIPNone },
806
814
},
807
815
fieldSelector : fields .ParseSelectorOrDie ("metadata.name=test" ),
816
+ labelSelector : labels .Everything (),
808
817
expectMatch : true ,
809
818
},
810
819
{
@@ -817,6 +826,7 @@ func TestMatchService(t *testing.T) {
817
826
Spec : api.ServiceSpec {ClusterIP : api .ClusterIPNone },
818
827
},
819
828
fieldSelector : fields .ParseSelectorOrDie ("metadata.namespace=testns" ),
829
+ labelSelector : labels .Everything (),
820
830
expectMatch : true ,
821
831
},
822
832
{
@@ -829,6 +839,7 @@ func TestMatchService(t *testing.T) {
829
839
Spec : api.ServiceSpec {ClusterIP : api .ClusterIPNone },
830
840
},
831
841
fieldSelector : fields .ParseSelectorOrDie ("metadata.name=nomatch" ),
842
+ labelSelector : labels .Everything (),
832
843
expectMatch : false ,
833
844
},
834
845
{
@@ -841,6 +852,7 @@ func TestMatchService(t *testing.T) {
841
852
Spec : api.ServiceSpec {ClusterIP : api .ClusterIPNone },
842
853
},
843
854
fieldSelector : fields .ParseSelectorOrDie ("metadata.namespace=nomatch" ),
855
+ labelSelector : labels .Everything (),
844
856
expectMatch : false ,
845
857
},
846
858
{
@@ -849,6 +861,7 @@ func TestMatchService(t *testing.T) {
849
861
Spec : api.ServiceSpec {Type : api .ServiceTypeLoadBalancer },
850
862
},
851
863
fieldSelector : fields .ParseSelectorOrDie ("spec.type=LoadBalancer" ),
864
+ labelSelector : labels .Everything (),
852
865
expectMatch : true ,
853
866
},
854
867
{
@@ -857,6 +870,7 @@ func TestMatchService(t *testing.T) {
857
870
Spec : api.ServiceSpec {Type : api .ServiceTypeNodePort },
858
871
},
859
872
fieldSelector : fields .ParseSelectorOrDie ("spec.type=LoadBalancer" ),
873
+ labelSelector : labels .Everything (),
860
874
expectMatch : false ,
861
875
},
862
876
{
@@ -865,6 +879,7 @@ func TestMatchService(t *testing.T) {
865
879
Spec : api.ServiceSpec {ClusterIP : api .ClusterIPNone },
866
880
},
867
881
fieldSelector : fields .ParseSelectorOrDie ("spec.clusterIP=None" ),
882
+ labelSelector : labels .Everything (),
868
883
expectMatch : true ,
869
884
},
870
885
{
@@ -873,6 +888,7 @@ func TestMatchService(t *testing.T) {
873
888
Spec : api.ServiceSpec {ClusterIP : "192.168.1.1" },
874
889
},
875
890
fieldSelector : fields .ParseSelectorOrDie ("spec.clusterIP=None" ),
891
+ labelSelector : labels .Everything (),
876
892
expectMatch : false ,
877
893
},
878
894
{
@@ -881,6 +897,7 @@ func TestMatchService(t *testing.T) {
881
897
Spec : api.ServiceSpec {ClusterIP : "192.168.1.1" },
882
898
},
883
899
fieldSelector : fields .ParseSelectorOrDie ("spec.clusterIP=192.168.1.1" ),
900
+ labelSelector : labels .Everything (),
884
901
expectMatch : true ,
885
902
},
886
903
{
@@ -889,6 +906,7 @@ func TestMatchService(t *testing.T) {
889
906
Spec : api.ServiceSpec {ClusterIP : "192.168.1.1" },
890
907
},
891
908
fieldSelector : fields .ParseSelectorOrDie ("spec.clusterIP!=None" ),
909
+ labelSelector : labels .Everything (),
892
910
expectMatch : true ,
893
911
},
894
912
{
@@ -897,6 +915,7 @@ func TestMatchService(t *testing.T) {
897
915
Spec : api.ServiceSpec {ClusterIP : "192.168.1.1" },
898
916
},
899
917
fieldSelector : fields .ParseSelectorOrDie ("spec.clusterIP!=\" \" " ),
918
+ labelSelector : labels .Everything (),
900
919
expectMatch : true ,
901
920
},
902
921
{
@@ -905,6 +924,7 @@ func TestMatchService(t *testing.T) {
905
924
Spec : api.ServiceSpec {ClusterIP : "2001:db2::1" },
906
925
},
907
926
fieldSelector : fields .ParseSelectorOrDie ("spec.clusterIP=2001:db2::1" ),
927
+ labelSelector : labels .Everything (),
908
928
expectMatch : true ,
909
929
},
910
930
{
@@ -913,6 +933,7 @@ func TestMatchService(t *testing.T) {
913
933
Spec : api.ServiceSpec {ClusterIP : api .ClusterIPNone },
914
934
},
915
935
fieldSelector : fields .ParseSelectorOrDie ("spec.clusterIP=192.168.1.1" ),
936
+ labelSelector : labels .Everything (),
916
937
expectMatch : false ,
917
938
},
918
939
{
@@ -921,18 +942,49 @@ func TestMatchService(t *testing.T) {
921
942
Spec : api.ServiceSpec {ClusterIP : api .ClusterIPNone },
922
943
},
923
944
fieldSelector : fields .ParseSelectorOrDie ("spec.clusterIP=2001:db2::1" ),
945
+ labelSelector : labels .Everything (),
924
946
expectMatch : false ,
925
947
},
926
948
{
927
949
name : "no match on empty service" ,
928
950
in : & api.Service {},
929
951
fieldSelector : fields .ParseSelectorOrDie ("spec.clusterIP=None" ),
952
+ labelSelector : labels .Everything (),
953
+ expectMatch : false ,
954
+ },
955
+ {
956
+ name : "no match on headless service" ,
957
+ in : & api.Service {
958
+ ObjectMeta : metav1.ObjectMeta {
959
+ Labels : map [string ]string {
960
+ v1 .IsHeadlessService : "" ,
961
+ },
962
+ },
963
+ },
964
+ fieldSelector : fields .ParseSelectorOrDie ("spec.clusterIP!=None" ),
965
+ labelSelector : noHeadlessServiceLabelSelector ,
966
+ expectMatch : false ,
967
+ },
968
+ {
969
+ name : "no match on headless service" ,
970
+ in : & api.Service {
971
+ Spec : api.ServiceSpec {ClusterIP : api .ClusterIPNone },
972
+ },
973
+ fieldSelector : fields .ParseSelectorOrDie ("spec.clusterIP!=None" ),
974
+ labelSelector : noHeadlessServiceLabelSelector ,
930
975
expectMatch : false ,
931
976
},
977
+ {
978
+ name : "match on empty service" ,
979
+ in : & api.Service {},
980
+ fieldSelector : fields .ParseSelectorOrDie ("spec.clusterIP!=None" ),
981
+ labelSelector : noHeadlessServiceLabelSelector ,
982
+ expectMatch : true ,
983
+ },
932
984
}
933
985
for _ , testCase := range testCases {
934
986
t .Run (testCase .name , func (t * testing.T ) {
935
- m := Matcher (labels . Everything () , testCase .fieldSelector )
987
+ m := Matcher (testCase . labelSelector , testCase .fieldSelector )
936
988
result , err := m .Matches (testCase .in )
937
989
if err != nil {
938
990
t .Errorf ("Unexpected error %v" , err )
0 commit comments