@@ -894,6 +894,42 @@ func TestDecidePVCRestoreNoTargetVolumesTargetComponent(t *testing.T) {
894894 require .Nil (t , decision .sourceTarget )
895895}
896896
897+ func TestDecidePVCRestoreNoTargetVolumesTargetComponentMatchExpression (t * testing.T ) {
898+ reconciler := & VolumePopulatorReconciler {}
899+ backup := newBackupForRestoreDecision (nil , nil )
900+ backup .Status .BackupMethod .TargetVolumes = nil
901+ backup .Status .Target .PodSelector = & dpv1alpha1.PodSelector {
902+ LabelSelector : & metav1.LabelSelector {
903+ MatchLabels : map [string ]string {
904+ constant .AppInstanceLabelKey : "source-cluster" ,
905+ constant .RoleLabelKey : "leader" ,
906+ },
907+ MatchExpressions : []metav1.LabelSelectorRequirement {{
908+ Key : constant .KBAppComponentLabelKey ,
909+ Operator : metav1 .LabelSelectorOpIn ,
910+ Values : []string {"tidb" },
911+ }},
912+ },
913+ Strategy : dpv1alpha1 .PodSelectionStrategyAny ,
914+ }
915+
916+ pvc := newPVCForRestoreDecision ("data" , "tidb" , "" )
917+ decision , err := reconciler .decidePVCRestore (intctrlutil.RequestCtx {Ctx : context .Background ()}, pvc , backup , nil )
918+ require .NoError (t , err )
919+ require .Equal (t , pvcRestoreModeProvisionOnly , decision .mode )
920+ require .False (t , decision .skipPostReady ,
921+ "target component selected by MatchExpressions must not skip postReady" )
922+ require .NotNil (t , decision .sourceTarget )
923+
924+ pvc = newPVCForRestoreDecision ("data" , "pd" , "" )
925+ decision , err = reconciler .decidePVCRestore (intctrlutil.RequestCtx {Ctx : context .Background ()}, pvc , backup , nil )
926+ require .NoError (t , err )
927+ require .Equal (t , pvcRestoreModeProvisionOnly , decision .mode )
928+ require .True (t , decision .skipPostReady ,
929+ "non-target component must still skip postReady when component expression does not match" )
930+ require .Nil (t , decision .sourceTarget )
931+ }
932+
897933func TestDecidePVCRestoreNoTargetVolumesMultiComponentTargets (t * testing.T ) {
898934 reconciler := & VolumePopulatorReconciler {}
899935 backup := newBackupForRestoreDecision (nil , []string {"etcd" })
0 commit comments