@@ -702,6 +702,191 @@ func Test_nodeMatchesFilters(t *testing.T) {
702702 },
703703 expectResult : false ,
704704 },
705+ {
706+ name : "true when taint exists" ,
707+ node : corev1.Node {
708+ Spec : corev1.NodeSpec {
709+ Taints : []corev1.Taint {
710+ {
711+ Key : "node.kubernetes.io/not-ready" ,
712+ Value : "" ,
713+ Effect : corev1 .TaintEffectNoSchedule ,
714+ },
715+ },
716+ },
717+ },
718+ filters : & troubleshootv1beta2.NodeResourceFilters {
719+ Taint : & corev1.Taint {
720+ Key : "node.kubernetes.io/not-ready" ,
721+ Effect : corev1 .TaintEffectNoSchedule ,
722+ },
723+ },
724+ expectResult : true ,
725+ },
726+ {
727+ name : "true when taint exists with value match" ,
728+ node : corev1.Node {
729+ Spec : corev1.NodeSpec {
730+ Taints : []corev1.Taint {
731+ {
732+ Key : "dedicated" ,
733+ Value : "gpu" ,
734+ Effect : corev1 .TaintEffectNoSchedule ,
735+ },
736+ },
737+ },
738+ },
739+ filters : & troubleshootv1beta2.NodeResourceFilters {
740+ Taint : & corev1.Taint {
741+ Key : "dedicated" ,
742+ Value : "gpu" ,
743+ Effect : corev1 .TaintEffectNoSchedule ,
744+ },
745+ },
746+ expectResult : true ,
747+ },
748+ {
749+ name : "false when taint key does not exist" ,
750+ node : corev1.Node {
751+ Spec : corev1.NodeSpec {
752+ Taints : []corev1.Taint {
753+ {
754+ Key : "node.kubernetes.io/not-ready" ,
755+ Value : "" ,
756+ Effect : corev1 .TaintEffectNoSchedule ,
757+ },
758+ },
759+ },
760+ },
761+ filters : & troubleshootv1beta2.NodeResourceFilters {
762+ Taint : & corev1.Taint {
763+ Key : "different-key" ,
764+ Effect : corev1 .TaintEffectNoSchedule ,
765+ },
766+ },
767+ expectResult : false ,
768+ },
769+ {
770+ name : "false when taint effect does not match" ,
771+ node : corev1.Node {
772+ Spec : corev1.NodeSpec {
773+ Taints : []corev1.Taint {
774+ {
775+ Key : "node.kubernetes.io/not-ready" ,
776+ Value : "" ,
777+ Effect : corev1 .TaintEffectNoSchedule ,
778+ },
779+ },
780+ },
781+ },
782+ filters : & troubleshootv1beta2.NodeResourceFilters {
783+ Taint : & corev1.Taint {
784+ Key : "node.kubernetes.io/not-ready" ,
785+ Effect : corev1 .TaintEffectNoExecute ,
786+ },
787+ },
788+ expectResult : false ,
789+ },
790+ {
791+ name : "true when taint value does not match but key and effect do (TaintExists only matches key and effect)" ,
792+ node : corev1.Node {
793+ Spec : corev1.NodeSpec {
794+ Taints : []corev1.Taint {
795+ {
796+ Key : "dedicated" ,
797+ Value : "gpu" ,
798+ Effect : corev1 .TaintEffectNoSchedule ,
799+ },
800+ },
801+ },
802+ },
803+ filters : & troubleshootv1beta2.NodeResourceFilters {
804+ Taint : & corev1.Taint {
805+ Key : "dedicated" ,
806+ Value : "cpu" ,
807+ Effect : corev1 .TaintEffectNoSchedule ,
808+ },
809+ },
810+ expectResult : true ,
811+ },
812+ {
813+ name : "true when node has multiple taints and filter matches one" ,
814+ node : corev1.Node {
815+ Spec : corev1.NodeSpec {
816+ Taints : []corev1.Taint {
817+ {
818+ Key : "node.kubernetes.io/not-ready" ,
819+ Value : "" ,
820+ Effect : corev1 .TaintEffectNoSchedule ,
821+ },
822+ {
823+ Key : "dedicated" ,
824+ Value : "gpu" ,
825+ Effect : corev1 .TaintEffectNoSchedule ,
826+ },
827+ {
828+ Key : "example.com/special-hardware" ,
829+ Value : "true" ,
830+ Effect : corev1 .TaintEffectNoExecute ,
831+ },
832+ },
833+ },
834+ },
835+ filters : & troubleshootv1beta2.NodeResourceFilters {
836+ Taint : & corev1.Taint {
837+ Key : "dedicated" ,
838+ Value : "gpu" ,
839+ Effect : corev1 .TaintEffectNoSchedule ,
840+ },
841+ },
842+ expectResult : true ,
843+ },
844+ {
845+ name : "true when node has no taints but no taint filter is specified" ,
846+ node : corev1.Node {
847+ Spec : corev1.NodeSpec {
848+ Taints : []corev1.Taint {},
849+ },
850+ },
851+ filters : & troubleshootv1beta2.NodeResourceFilters {},
852+ expectResult : true ,
853+ },
854+ {
855+ name : "false when node has no taints but taint filter is specified" ,
856+ node : corev1.Node {
857+ Spec : corev1.NodeSpec {
858+ Taints : []corev1.Taint {},
859+ },
860+ },
861+ filters : & troubleshootv1beta2.NodeResourceFilters {
862+ Taint : & corev1.Taint {
863+ Key : "node.kubernetes.io/not-ready" ,
864+ Effect : corev1 .TaintEffectNoSchedule ,
865+ },
866+ },
867+ expectResult : false ,
868+ },
869+ {
870+ name : "true when matching taint with PreferNoSchedule effect" ,
871+ node : corev1.Node {
872+ Spec : corev1.NodeSpec {
873+ Taints : []corev1.Taint {
874+ {
875+ Key : "node.kubernetes.io/memory-pressure" ,
876+ Value : "" ,
877+ Effect : corev1 .TaintEffectPreferNoSchedule ,
878+ },
879+ },
880+ },
881+ },
882+ filters : & troubleshootv1beta2.NodeResourceFilters {
883+ Taint : & corev1.Taint {
884+ Key : "node.kubernetes.io/memory-pressure" ,
885+ Effect : corev1 .TaintEffectPreferNoSchedule ,
886+ },
887+ },
888+ expectResult : true ,
889+ },
705890 }
706891
707892 for _ , test := range tests {
0 commit comments