@@ -152,7 +152,6 @@ type testServerImpl struct {
152
152
version * version.Version
153
153
serverArgs testServerArgs
154
154
serverState int
155
- baseDir string
156
155
pgURL []pgURLChan
157
156
initCmd * exec.Cmd
158
157
initCmdArgs []string
@@ -241,6 +240,7 @@ type testServerArgs struct {
241
240
localityFlags []string
242
241
cockroachLogsDir string
243
242
noFileCleanup bool // do not clean files at `Stop`
243
+ baseDir string
244
244
}
245
245
246
246
// CockroachBinaryPathOpt is a TestServer option that can be passed to
@@ -283,6 +283,14 @@ func NoFileCleanup() TestServerOpt {
283
283
}
284
284
}
285
285
286
+ // NoFileCleanup is a TestServer option that can be passed to NewTestServer
287
+ // to skip cleanup of files when Testserver is stopped
288
+ func BasedirOverride (baseDirPath string ) TestServerOpt {
289
+ return func (args * testServerArgs ) {
290
+ args .baseDir = baseDirPath
291
+ }
292
+ }
293
+
286
294
// SetStoreMemSizeOpt is a TestServer option that can be passed to NewTestServer
287
295
// to set the proportion of available memory that is allocated
288
296
// to the test server.
@@ -437,20 +445,26 @@ var errStoppedInMiddle = errors.New("download stopped in middle")
437
445
// If the download fails, we attempt just call "cockroach", hoping it is
438
446
// found in your path.
439
447
func NewTestServer (opts ... TestServerOpt ) (TestServer , error ) {
440
- baseDir , err := os .MkdirTemp ("" , "cockroach-testserver" )
441
- if err != nil {
442
- return nil , fmt .Errorf ("%s: could not create temp directory: %w" , testserverMessagePrefix , err )
443
- }
444
-
445
448
serverArgs := & testServerArgs {numNodes : 1 }
446
449
serverArgs .storeMemSize = defaultStoreMemSize
447
450
serverArgs .initTimeoutSeconds = defaultInitTimeout
448
451
serverArgs .pollListenURLTimeoutSeconds = defaultPollListenURLTimeout
449
452
serverArgs .listenAddrHost = defaultListenAddrHost
450
- serverArgs .cockroachLogsDir = baseDir
451
453
for _ , applyOptToArgs := range opts {
452
454
applyOptToArgs (serverArgs )
453
455
}
456
+ var err error
457
+ if serverArgs .baseDir == "" {
458
+ baseDir , err := os .MkdirTemp ("" , "cockroach-testserver" )
459
+ if err != nil {
460
+ return nil , fmt .Errorf ("%s: could not create temp directory: %w" , testserverMessagePrefix , err )
461
+ }
462
+ serverArgs .baseDir = baseDir
463
+ if serverArgs .cockroachLogsDir == "" {
464
+ serverArgs .cockroachLogsDir = baseDir
465
+ }
466
+ }
467
+
454
468
log .Printf ("cockroach logs directory: %s" , serverArgs .cockroachLogsDir )
455
469
456
470
if serverArgs .cockroachBinary != "" {
@@ -496,7 +510,7 @@ func NewTestServer(opts ...TestServerOpt) (TestServer, error) {
496
510
}
497
511
498
512
mkDir := func (name string ) (string , error ) {
499
- path := filepath .Join (baseDir , name )
513
+ path := filepath .Join (serverArgs . baseDir , name )
500
514
if err := os .MkdirAll (path , 0755 ); err != nil {
501
515
return "" , fmt .Errorf ("%s: could not create %s directory: %s: %w" ,
502
516
testserverMessagePrefix , name , path , err )
@@ -638,7 +652,6 @@ func NewTestServer(opts ...TestServerOpt) (TestServer, error) {
638
652
serverArgs : * serverArgs ,
639
653
version : v ,
640
654
serverState : stateNew ,
641
- baseDir : baseDir ,
642
655
initCmdArgs : initArgs ,
643
656
curTenantID : firstTenantID ,
644
657
nodes : nodes ,
@@ -686,7 +699,7 @@ func (ts *testServerImpl) StderrForNode(i int) string {
686
699
687
700
// BaseDir returns directory StoreOnDiskOpt writes to if used.
688
701
func (ts * testServerImpl ) BaseDir () string {
689
- return ts .baseDir
702
+ return ts .serverArgs . baseDir
690
703
}
691
704
692
705
// PGURL returns the postgres connection URL to reach the started
@@ -887,7 +900,7 @@ func (ts *testServerImpl) Stop() {
887
900
}
888
901
ts .mu .RLock ()
889
902
890
- nodeDir := filepath .Join (ts .baseDir , strconv .Itoa (i ))
903
+ nodeDir := filepath .Join (ts .BaseDir () , strconv .Itoa (i ))
891
904
if ts .serverArgs .noFileCleanup {
892
905
log .Printf ("%s: skipping file cleanup of node-dir %s" , testserverMessagePrefix , nodeDir )
893
906
} else if err := os .RemoveAll (nodeDir ); err != nil {
@@ -903,9 +916,9 @@ func (ts *testServerImpl) Stop() {
903
916
904
917
// Only cleanup on intentional stops.
905
918
if ts .serverArgs .noFileCleanup {
906
- log .Printf ("%s: skipping file cleanup of base-dir %s" , testserverMessagePrefix , ts .baseDir )
919
+ log .Printf ("%s: skipping file cleanup of base-dir %s" , testserverMessagePrefix , ts .BaseDir () )
907
920
} else {
908
- _ = os .RemoveAll (ts .baseDir )
921
+ _ = os .RemoveAll (ts .BaseDir () )
909
922
}
910
923
}
911
924
@@ -922,7 +935,7 @@ func (ts *testServerImpl) CockroachInit() error {
922
935
// Set the working directory of the cockroach process to our temp folder.
923
936
// This stops cockroach from polluting the project directory with _dump
924
937
// folders.
925
- ts .initCmd .Dir = ts .baseDir
938
+ ts .initCmd .Dir = ts .serverArgs . baseDir
926
939
927
940
err := ts .initCmd .Start ()
928
941
if ts .initCmd .Process != nil {
0 commit comments