@@ -150,6 +150,69 @@ func TestManager_AddRemoveConfig(t *testing.T) {
150150 }
151151}
152152
153+ func TestManager_RemoveConfig_WithKey (t * testing.T ) {
154+ tmpDir , err := os .MkdirTemp ("" , "sshc-test-rm-key" )
155+ if err != nil {
156+ t .Fatal (err )
157+ }
158+ defer os .RemoveAll (tmpDir )
159+
160+ m := & Manager {
161+ SshDir : tmpDir ,
162+ }
163+ _ = m .Init ()
164+
165+ name := "key-config"
166+ keyPath := filepath .Join (tmpDir , "test-key" )
167+ content := "Host test\n IdentityFile " + keyPath
168+
169+ // Create dummy key files
170+ if err := os .WriteFile (keyPath , []byte ("private" ), 0600 ); err != nil {
171+ t .Fatal (err )
172+ }
173+ if err := os .WriteFile (keyPath + ".pub" , []byte ("public" ), 0644 ); err != nil {
174+ t .Fatal (err )
175+ }
176+
177+ if err := m .AddConfig (name , content ); err != nil {
178+ t .Fatal (err )
179+ }
180+
181+ // 1. Remove WITHOUT deleting key
182+ idFile , err := m .RemoveConfigWithKey (name , false )
183+ if err != nil {
184+ t .Errorf ("RemoveConfigWithKey(false) error = %v" , err )
185+ }
186+ if idFile != keyPath {
187+ t .Errorf ("Expected idFile %s, got %s" , keyPath , idFile )
188+ }
189+
190+ // Verify key still exists
191+ if _ , err := os .Stat (keyPath ); os .IsNotExist (err ) {
192+ t .Errorf ("Key should still exist" )
193+ }
194+
195+ // 2. Add back and remove WITH deleting key
196+ if err := m .AddConfig (name , content ); err != nil {
197+ t .Fatal (err )
198+ }
199+ idFile , err = m .RemoveConfigWithKey (name , true )
200+ if err != nil {
201+ t .Errorf ("RemoveConfigWithKey(true) error = %v" , err )
202+ }
203+ if idFile != keyPath {
204+ t .Errorf ("Expected idFile %s, got %s" , keyPath , idFile )
205+ }
206+
207+ // Verify key is deleted
208+ if _ , err := os .Stat (keyPath ); ! os .IsNotExist (err ) {
209+ t .Errorf ("Key should be deleted" )
210+ }
211+ if _ , err := os .Stat (keyPath + ".pub" ); ! os .IsNotExist (err ) {
212+ t .Errorf ("Public key should be deleted" )
213+ }
214+ }
215+
153216func TestManager_ListConfigs_Sorted (t * testing.T ) {
154217 tmpDir , err := os .MkdirTemp ("" , "sshc-test-list" )
155218 if err != nil {
0 commit comments