@@ -98,3 +98,49 @@ func TestMigrateFSMStoreSeedsEtcdDataDir(t *testing.T) {
9898 require .NoError (t , err )
9999 require .Equal (t , []byte ("one" ), value )
100100}
101+
102+ func TestMigrateFSMStorePersistsSingleNodePeer (t * testing.T ) {
103+ sourcePath := filepath .Join (t .TempDir (), "fsm.db" )
104+ source , err := store .NewPebbleStore (sourcePath )
105+ require .NoError (t , err )
106+ require .NoError (t , source .Close ())
107+
108+ destDataDir := filepath .Join (t .TempDir (), "raft" )
109+ peers := []Peer {{NodeID : 1 , ID : "n1" , Address : "127.0.0.1:7001" }}
110+ _ , err = MigrateFSMStore (sourcePath , destDataDir , peers )
111+ require .NoError (t , err )
112+
113+ loaded , ok , err := LoadPersistedPeers (destDataDir )
114+ require .NoError (t , err )
115+ require .True (t , ok , "persisted peers file must exist after single-node migration" )
116+ require .Len (t , loaded , 1 )
117+ require .Equal (t , peers [0 ].NodeID , loaded [0 ].NodeID )
118+ }
119+
120+ func TestMigrateFSMStorePersistsMultiNodePeers (t * testing.T ) {
121+ sourcePath := filepath .Join (t .TempDir (), "fsm.db" )
122+ source , err := store .NewPebbleStore (sourcePath )
123+ require .NoError (t , err )
124+ require .NoError (t , source .Close ())
125+
126+ destDataDir := filepath .Join (t .TempDir (), "raft" )
127+ peers := []Peer {
128+ {NodeID : 1 , ID : "n1" , Address : "127.0.0.1:7001" },
129+ {NodeID : 2 , ID : "n2" , Address : "127.0.0.1:7002" },
130+ {NodeID : 3 , ID : "n3" , Address : "127.0.0.1:7003" },
131+ }
132+ _ , err = MigrateFSMStore (sourcePath , destDataDir , peers )
133+ require .NoError (t , err )
134+
135+ // Persisted peers must exist so the engine discovers all cluster members
136+ // even when FactoryConfig.Peers is empty (the common post-migration case).
137+ loaded , ok , err := LoadPersistedPeers (destDataDir )
138+ require .NoError (t , err )
139+ require .True (t , ok , "persisted peers file must exist after migration" )
140+ require .Len (t , loaded , 3 )
141+ for i , peer := range loaded {
142+ require .Equal (t , peers [i ].NodeID , peer .NodeID )
143+ require .Equal (t , peers [i ].ID , peer .ID )
144+ require .Equal (t , peers [i ].Address , peer .Address )
145+ }
146+ }
0 commit comments