@@ -320,3 +320,94 @@ func TestKeystore_SetMetadata(t *testing.T) {
320320 require .ErrorIs (t , err , keystore .ErrKeyNotFound )
321321 })
322322}
323+
324+ func TestKeystore_RenameKey (t * testing.T ) {
325+ ctx := t .Context ()
326+ ks , err := keystore .LoadKeystore (ctx , keystore .NewMemoryStorage (), "ks" )
327+ require .NoError (t , err )
328+ _ , err = ks .CreateKeys (ctx , keystore.CreateKeysRequest {
329+ Keys : []keystore.CreateKeyRequest {
330+ {KeyName : "key1" , KeyType : keystore .Ed25519 },
331+ },
332+ })
333+ require .NoError (t , err )
334+ originalKey , err := ks .GetKeys (ctx , keystore.GetKeysRequest {
335+ KeyNames : []string {"key1" },
336+ })
337+ require .NoError (t , err )
338+ require .Len (t , originalKey .Keys , 1 )
339+
340+ t .Run ("rename non-existent key" , func (t * testing.T ) {
341+ _ , err = ks .RenameKey (ctx , keystore.RenameKeyRequest {
342+ OldName : "key2" ,
343+ NewName : "new-name" ,
344+ })
345+ require .ErrorIs (t , err , keystore .ErrKeyNotFound )
346+ })
347+
348+ t .Run ("rename to invalid name" , func (t * testing.T ) {
349+ _ , err = ks .RenameKey (ctx , keystore.RenameKeyRequest {
350+ OldName : "key1" ,
351+ NewName : "" , // Empty name is invalid
352+ })
353+ require .ErrorIs (t , err , keystore .ErrInvalidKeyName )
354+ })
355+
356+ t .Run ("rename to existing name" , func (t * testing.T ) {
357+ // Create another key
358+ _ , err = ks .CreateKeys (ctx , keystore.CreateKeysRequest {
359+ Keys : []keystore.CreateKeyRequest {
360+ {KeyName : "another" , KeyType : keystore .Ed25519 },
361+ },
362+ })
363+ require .NoError (t , err )
364+
365+ _ , err = ks .RenameKey (ctx , keystore.RenameKeyRequest {
366+ OldName : "key1" ,
367+ NewName : "another" , // Name already exists
368+ })
369+ require .ErrorIs (t , err , keystore .ErrKeyAlreadyExists )
370+ })
371+
372+ t .Run ("rename to same name" , func (t * testing.T ) {
373+ _ , err = ks .RenameKey (ctx , keystore.RenameKeyRequest {
374+ OldName : "key1" ,
375+ NewName : "key1" ,
376+ })
377+ require .NoError (t , err )
378+
379+ // Verify the key still exists
380+ resp , err := ks .GetKeys (ctx , keystore.GetKeysRequest {
381+ KeyNames : []string {"key1" },
382+ })
383+ require .NoError (t , err )
384+ require .Equal (t , resp , originalKey )
385+ })
386+
387+ t .Run ("successful rename" , func (t * testing.T ) {
388+ // Rename the key
389+ _ , err = ks .RenameKey (ctx , keystore.RenameKeyRequest {
390+ OldName : "key1" ,
391+ NewName : "renamed" ,
392+ })
393+ require .NoError (t , err )
394+
395+ // Verify the key exists under new name
396+ resp , err := ks .GetKeys (ctx , keystore.GetKeysRequest {
397+ KeyNames : []string {"renamed" },
398+ })
399+ require .NoError (t , err )
400+ require .Len (t , resp .Keys , 1 )
401+ require .Equal (t , resp .Keys [0 ].KeyInfo .Name , "renamed" )
402+
403+ // set name to the old one for easier comparison
404+ resp .Keys [0 ].KeyInfo .Name = "key1"
405+ assert .Equal (t , resp , originalKey )
406+
407+ // Verify the old name no longer exists
408+ resp , err = ks .GetKeys (ctx , keystore.GetKeysRequest {
409+ KeyNames : []string {"key1" },
410+ })
411+ require .EqualError (t , err , "key not found: key1" )
412+ })
413+ }
0 commit comments