@@ -675,6 +675,12 @@ func TestEnsureAbsDir(t *testing.T) {
675
675
require .Equal (t , testDirectory + "/myGenesisID" , t2Abs )
676
676
}
677
677
678
+ type tLogger struct { t * testing.T }
679
+
680
+ func (l tLogger ) Infof (fmts string , args ... interface {}) {
681
+ l .t .Logf (fmts , args ... )
682
+ }
683
+
678
684
// TestEnsureAndResolveGenesisDirs confirms that paths provided in the config are resolved to absolute paths and are created if relevant
679
685
func TestEnsureAndResolveGenesisDirs (t * testing.T ) {
680
686
partitiontest .PartitionTest (t )
@@ -689,7 +695,7 @@ func TestEnsureAndResolveGenesisDirs(t *testing.T) {
689
695
cfg .StateproofDir = filepath .Join (testDirectory , "/RELATIVEPATHS/../RELATIVE/../custom_stateproof" )
690
696
cfg .CatchpointDir = filepath .Join (testDirectory , "custom_catchpoint" )
691
697
692
- paths , err := cfg .EnsureAndResolveGenesisDirs (testDirectory , "myGenesisID" )
698
+ paths , err := cfg .EnsureAndResolveGenesisDirs (testDirectory , "myGenesisID" , tLogger { t : t } )
693
699
require .NoError (t , err )
694
700
695
701
// confirm that the paths are absolute, and contain the genesisID
@@ -711,7 +717,7 @@ func TestEnsureAndResolveGenesisDirs_hierarchy(t *testing.T) {
711
717
712
718
cfg := GetDefaultLocal ()
713
719
testDirectory := t .TempDir ()
714
- paths , err := cfg .EnsureAndResolveGenesisDirs (testDirectory , "myGenesisID" )
720
+ paths , err := cfg .EnsureAndResolveGenesisDirs (testDirectory , "myGenesisID" , tLogger { t : t } )
715
721
require .NoError (t , err )
716
722
// confirm that if only the root is specified, it is used for all directories
717
723
require .Equal (t , testDirectory + "/myGenesisID" , paths .TrackerGenesisDir )
@@ -731,21 +737,125 @@ func TestEnsureAndResolveGenesisDirs_hierarchy(t *testing.T) {
731
737
cold := filepath .Join (testDirectory , "cold" )
732
738
cfg .HotDataDir = hot
733
739
cfg .ColdDataDir = cold
734
- paths , err = cfg .EnsureAndResolveGenesisDirs (testDirectory , "myGenesisID" )
740
+ paths , err = cfg .EnsureAndResolveGenesisDirs (testDirectory , "myGenesisID" , tLogger { t : t } )
735
741
require .NoError (t , err )
736
742
// confirm that if hot/cold are specified, hot/cold are used for appropriate directories
737
743
require .Equal (t , hot + "/myGenesisID" , paths .TrackerGenesisDir )
738
744
require .DirExists (t , paths .TrackerGenesisDir )
739
745
require .Equal (t , cold + "/myGenesisID" , paths .BlockGenesisDir )
740
746
require .DirExists (t , paths .BlockGenesisDir )
741
- require .Equal (t , cold + "/myGenesisID" , paths .CrashGenesisDir )
747
+ require .Equal (t , hot + "/myGenesisID" , paths .CrashGenesisDir )
742
748
require .DirExists (t , paths .CrashGenesisDir )
743
- require .Equal (t , cold + "/myGenesisID" , paths .StateproofGenesisDir )
749
+ require .Equal (t , hot + "/myGenesisID" , paths .StateproofGenesisDir )
744
750
require .DirExists (t , paths .StateproofGenesisDir )
745
751
require .Equal (t , cold + "/myGenesisID" , paths .CatchpointGenesisDir )
746
752
require .DirExists (t , paths .CatchpointGenesisDir )
747
753
}
748
754
755
+ func TestEnsureAndResolveGenesisDirs_migrate (t * testing.T ) {
756
+ partitiontest .PartitionTest (t )
757
+
758
+ cfg := GetDefaultLocal ()
759
+ testDirectory := t .TempDir ()
760
+ cfg .HotDataDir = filepath .Join (testDirectory , "hot" )
761
+ cfg .ColdDataDir = filepath .Join (testDirectory , "cold" )
762
+ coldDir := filepath .Join (cfg .ColdDataDir , "myGenesisID" )
763
+ hotDir := filepath .Join (cfg .HotDataDir , "myGenesisID" )
764
+ err := os .MkdirAll (coldDir , 0755 )
765
+ require .NoError (t , err )
766
+ // put a crash.sqlite file in the ColdDataDir
767
+ err = os .WriteFile (filepath .Join (coldDir , "crash.sqlite" ), []byte ("test" ), 0644 )
768
+ require .NoError (t , err )
769
+ err = os .WriteFile (filepath .Join (coldDir , "crash.sqlite-shm" ), []byte ("test" ), 0644 )
770
+ require .NoError (t , err )
771
+ // put a stateproof.sqlite file in the ColdDataDir
772
+ err = os .WriteFile (filepath .Join (coldDir , "stateproof.sqlite" ), []byte ("test" ), 0644 )
773
+ require .NoError (t , err )
774
+ err = os .WriteFile (filepath .Join (coldDir , "stateproof.sqlite-wal" ), []byte ("test" ), 0644 )
775
+ require .NoError (t , err )
776
+ // Resolve
777
+ paths , err := cfg .EnsureAndResolveGenesisDirs (testDirectory , "myGenesisID" , tLogger {t : t })
778
+ require .NoError (t , err )
779
+ // Confirm that crash.sqlite was moved to HotDataDir
780
+ require .DirExists (t , paths .CrashGenesisDir )
781
+ require .Equal (t , hotDir , paths .CrashGenesisDir )
782
+ require .NoFileExists (t , filepath .Join (coldDir , "crash.sqlite" ))
783
+ require .NoFileExists (t , filepath .Join (coldDir , "crash.sqlite-shm" ))
784
+ require .FileExists (t , filepath .Join (hotDir , "crash.sqlite" ))
785
+ require .FileExists (t , filepath .Join (hotDir , "crash.sqlite-shm" ))
786
+ // Confirm that stateproof.sqlite was moved to HotDataDir
787
+ require .DirExists (t , paths .StateproofGenesisDir )
788
+ require .Equal (t , hotDir , paths .StateproofGenesisDir )
789
+ require .NoFileExists (t , filepath .Join (coldDir , "stateproof.sqlite" ))
790
+ require .NoFileExists (t , filepath .Join (coldDir , "stateproof.sqlite-wal" ))
791
+ require .FileExists (t , filepath .Join (hotDir , "stateproof.sqlite" ))
792
+ require .FileExists (t , filepath .Join (hotDir , "stateproof.sqlite-wal" ))
793
+ }
794
+
795
+ func TestEnsureAndResolveGenesisDirs_migrateCrashFail (t * testing.T ) {
796
+ partitiontest .PartitionTest (t )
797
+
798
+ cfg := GetDefaultLocal ()
799
+ testDirectory := t .TempDir ()
800
+ cfg .HotDataDir = filepath .Join (testDirectory , "hot" )
801
+ cfg .ColdDataDir = filepath .Join (testDirectory , "cold" )
802
+ coldDir := filepath .Join (cfg .ColdDataDir , "myGenesisID" )
803
+ hotDir := filepath .Join (cfg .HotDataDir , "myGenesisID" )
804
+ err := os .MkdirAll (coldDir , 0755 )
805
+ require .NoError (t , err )
806
+ err = os .MkdirAll (hotDir , 0755 )
807
+ require .NoError (t , err )
808
+ // put a crash.sqlite file in the ColdDataDir
809
+ err = os .WriteFile (filepath .Join (coldDir , "crash.sqlite" ), []byte ("test" ), 0644 )
810
+ require .NoError (t , err )
811
+ err = os .WriteFile (filepath .Join (coldDir , "crash.sqlite-shm" ), []byte ("test" ), 0644 )
812
+ require .NoError (t , err )
813
+ // also put a crash.sqlite file in the HotDataDir
814
+ err = os .WriteFile (filepath .Join (hotDir , "crash.sqlite" ), []byte ("test" ), 0644 )
815
+ require .NoError (t , err )
816
+ // Resolve
817
+ paths , err := cfg .EnsureAndResolveGenesisDirs (testDirectory , "myGenesisID" , tLogger {t : t })
818
+ require .Error (t , err )
819
+ require .Empty (t , paths )
820
+ // Confirm that crash.sqlite was not moved to HotDataDir
821
+ require .FileExists (t , filepath .Join (coldDir , "crash.sqlite" ))
822
+ require .FileExists (t , filepath .Join (coldDir , "crash.sqlite-shm" ))
823
+ require .FileExists (t , filepath .Join (hotDir , "crash.sqlite" ))
824
+ require .NoFileExists (t , filepath .Join (hotDir , "crash.sqlite-shm" ))
825
+ }
826
+
827
+ func TestEnsureAndResolveGenesisDirs_migrateSPFail (t * testing.T ) {
828
+ partitiontest .PartitionTest (t )
829
+
830
+ cfg := GetDefaultLocal ()
831
+ testDirectory := t .TempDir ()
832
+ cfg .HotDataDir = filepath .Join (testDirectory , "hot" )
833
+ cfg .ColdDataDir = filepath .Join (testDirectory , "cold" )
834
+ coldDir := filepath .Join (cfg .ColdDataDir , "myGenesisID" )
835
+ hotDir := filepath .Join (cfg .HotDataDir , "myGenesisID" )
836
+ err := os .MkdirAll (coldDir , 0755 )
837
+ require .NoError (t , err )
838
+ err = os .MkdirAll (hotDir , 0755 )
839
+ require .NoError (t , err )
840
+ // put a stateproof.sqlite file in the ColdDataDir
841
+ err = os .WriteFile (filepath .Join (coldDir , "stateproof.sqlite" ), []byte ("test" ), 0644 )
842
+ require .NoError (t , err )
843
+ err = os .WriteFile (filepath .Join (coldDir , "stateproof.sqlite-wal" ), []byte ("test" ), 0644 )
844
+ require .NoError (t , err )
845
+ // also put a stateproof.sqlite-wal file in the HotDataDir
846
+ err = os .WriteFile (filepath .Join (hotDir , "stateproof.sqlite-wal" ), []byte ("test" ), 0644 )
847
+ require .NoError (t , err )
848
+ // Resolve
849
+ paths , err := cfg .EnsureAndResolveGenesisDirs (testDirectory , "myGenesisID" , tLogger {t : t })
850
+ require .Error (t , err )
851
+ require .Empty (t , paths )
852
+ // Confirm that stateproof.sqlite was not moved to HotDataDir
853
+ require .FileExists (t , filepath .Join (coldDir , "stateproof.sqlite" ))
854
+ require .FileExists (t , filepath .Join (coldDir , "stateproof.sqlite-wal" ))
855
+ require .NoFileExists (t , filepath .Join (hotDir , "stateproof.sqlite" ))
856
+ require .FileExists (t , filepath .Join (hotDir , "stateproof.sqlite-wal" ))
857
+ }
858
+
749
859
// TestEnsureAndResolveGenesisDirsError confirms that if a path can't be created, an error is returned
750
860
func TestEnsureAndResolveGenesisDirsError (t * testing.T ) {
751
861
partitiontest .PartitionTest (t )
@@ -761,15 +871,15 @@ func TestEnsureAndResolveGenesisDirsError(t *testing.T) {
761
871
cfg .CatchpointDir = filepath .Join (testDirectory , "custom_catchpoint" )
762
872
763
873
// first try an error with an empty root dir
764
- paths , err := cfg .EnsureAndResolveGenesisDirs ("" , "myGenesisID" )
874
+ paths , err := cfg .EnsureAndResolveGenesisDirs ("" , "myGenesisID" , tLogger { t : t } )
765
875
require .Empty (t , paths )
766
876
require .Error (t , err )
767
877
require .Contains (t , err .Error (), "rootDir is required" )
768
878
769
879
require .NoError (t , os .Chmod (testDirectory , 0200 ))
770
880
771
881
// now try an error with a root dir that can't be written to
772
- paths , err = cfg .EnsureAndResolveGenesisDirs (testDirectory , "myGenesisID" )
882
+ paths , err = cfg .EnsureAndResolveGenesisDirs (testDirectory , "myGenesisID" , tLogger { t : t } )
773
883
require .Empty (t , paths )
774
884
require .Error (t , err )
775
885
require .Contains (t , err .Error (), "permission denied" )
0 commit comments