99 "context"
1010 "encoding/binary"
1111 "fmt"
12+ "maps"
1213 "slices"
13- "strconv"
1414 "strings"
1515 "testing"
1616 "time"
@@ -28,6 +28,7 @@ import (
2828 "github.com/cockroachdb/cockroach/pkg/settings/cluster"
2929 "github.com/cockroachdb/cockroach/pkg/storage"
3030 "github.com/cockroachdb/cockroach/pkg/storage/enginepb"
31+ "github.com/cockroachdb/cockroach/pkg/testutils/dd"
3132 "github.com/cockroachdb/cockroach/pkg/util/hlc"
3233 "github.com/cockroachdb/cockroach/pkg/util/keysutil"
3334 "github.com/cockroachdb/cockroach/pkg/util/protoutil"
@@ -572,10 +573,7 @@ func (e *quorumRecoveryEnv) handleMakePlan(t *testing.T, d datadriven.TestData)
572573 return "" , err
573574 }
574575 err = report .Error ()
575- var force bool
576- if d .HasArg ("force" ) {
577- d .ScanArgs (t , "force" , & force )
578- }
576+ force := dd .ScanArgOr (t , & d , "force" , false )
579577 if err != nil && ! force {
580578 return "" , err
581579 }
@@ -712,27 +710,9 @@ func (e *quorumRecoveryEnv) parseStoresArg(
712710 t * testing.T , d datadriven.TestData , defaultToAll bool ,
713711) []roachpb.StoreID {
714712 // Prepare replica info
715- var stores []roachpb.StoreID
716- if d .HasArg ("stores" ) {
717- for _ , arg := range d .CmdArgs {
718- if arg .Key == "stores" {
719- for _ , id := range arg .Vals {
720- id , err := strconv .ParseInt (id , 10 , 32 )
721- if err != nil {
722- t .Fatalf ("failed to parse store id: %v" , err )
723- }
724- stores = append (stores , roachpb .StoreID (id ))
725- }
726- }
727- }
728- } else {
729- if defaultToAll {
730- for id := range e .stores {
731- stores = append (stores , id )
732- }
733- } else {
734- stores = []roachpb.StoreID {}
735- }
713+ stores , ok := dd .ScanArgOpt [[]roachpb.StoreID ](t , & d , "stores" )
714+ if ! ok && defaultToAll {
715+ stores = slices .AppendSeq (stores , maps .Keys (e .stores ))
736716 }
737717 slices .Sort (stores )
738718 return stores
@@ -741,23 +721,8 @@ func (e *quorumRecoveryEnv) parseStoresArg(
741721// parseNodesArg parses NodeIDs from nodes arg if available.
742722// Results are returned in sorted order to allow consistent output.
743723func (e * quorumRecoveryEnv ) parseNodesArg (t * testing.T , d datadriven.TestData ) []roachpb.NodeID {
744- var nodes []roachpb.NodeID
745- if d .HasArg ("nodes" ) {
746- for _ , arg := range d .CmdArgs {
747- if arg .Key == "nodes" {
748- for _ , id := range arg .Vals {
749- id , err := strconv .ParseInt (id , 10 , 32 )
750- if err != nil {
751- t .Fatalf ("failed to parse node id: %v" , err )
752- }
753- nodes = append (nodes , roachpb .NodeID (id ))
754- }
755- }
756- }
757- }
758- if len (nodes ) > 0 {
759- slices .Sort (nodes )
760- }
724+ nodes , _ := dd .ScanArgOpt [[]roachpb.NodeID ](t , & d , "nodes" )
725+ slices .Sort (nodes )
761726 return nodes
762727}
763728
@@ -804,10 +769,7 @@ func (e *quorumRecoveryEnv) handleDumpStore(t *testing.T, d datadriven.TestData)
804769func (e * quorumRecoveryEnv ) handleApplyPlan (t * testing.T , d datadriven.TestData ) (string , error ) {
805770 ctx := context .Background ()
806771 stores := e .parseStoresArg (t , d , true /* defaultToAll */ )
807- var restart bool
808- if d .HasArg ("restart" ) {
809- d .ScanArgs (t , "restart" , & restart )
810- }
772+ restart := dd .ScanArgOr (t , & d , "restart" , false )
811773
812774 if ! restart {
813775 nodes := e .groupStoresByNodeStore (t , stores )
@@ -863,14 +825,8 @@ func (e *quorumRecoveryEnv) dumpRecoveryEvents(
863825) (string , error ) {
864826 ctx := context .Background ()
865827
866- removeEvents := false
867- if d .HasArg ("remove" ) {
868- d .ScanArgs (t , "remove" , & removeEvents )
869- }
870- dumpStatus := false
871- if d .HasArg ("status" ) {
872- d .ScanArgs (t , "status" , & dumpStatus )
873- }
828+ removeEvents := dd .ScanArgOr (t , & d , "remove" , false )
829+ dumpStatus := dd .ScanArgOr (t , & d , "status" , false )
874830
875831 var events []string
876832 logEvents := func (ctx context.Context , record loqrecoverypb.ReplicaRecoveryRecord ) (bool , error ) {
0 commit comments