diff --git a/br/pkg/pdutil/pd_serial_test.go b/br/pkg/pdutil/pd_serial_test.go
index <HASH>..<HASH> 100644
--- a/br/pkg/pdutil/pd_serial_test.go
+++ b/br/pkg/pdutil/pd_serial_test.go
@@ -35,6 +35,8 @@ func TestScheduler(t *testing.T) {
 	}
 	schedulerPauseCh := make(chan struct{})
 	pdController := &PdController{addrs: []string{"", ""}, schedulerPauseCh: schedulerPauseCh}
+	// As pdController.Client is nil, (*pdController).Close() can not be called directly.
+	defer close(schedulerPauseCh)
 
 	_, err := pdController.pauseSchedulersAndConfigWith(ctx, []string{scheduler}, nil, mock)
 	require.EqualError(t, err, "failed")
@@ -70,9 +72,7 @@ func TestScheduler(t *testing.T) {
 	_, err = pdController.pauseSchedulersAndConfigWith(ctx, []string{scheduler}, cfg, mock)
 	require.NoError(t, err)
 
-	go func() {
-		<-schedulerPauseCh
-	}()
+	// pauseSchedulersAndConfigWith will wait on chan schedulerPauseCh
 	err = pdController.resumeSchedulerWith(ctx, []string{scheduler}, mock)
 	require.NoError(t, err)
br: fix leak in pdutil.TestScheduler (#<I>)