@@ -656,6 +656,80 @@ func TestPOSIXAge(t *testing.T) {
656656 assert .Equal (t , secret , storeSecret )
657657 })
658658
659+ t .Run ("upsert inserts when credential does not exist" , func (t * testing.T ) {
660+ root , err := os .OpenRoot (t .TempDir ())
661+ require .NoError (t , err )
662+ t .Cleanup (func () {
663+ assert .NoError (t , root .Close ())
664+ })
665+
666+ masterKey := uuid .NewString ()
667+ s , err := New (root ,
668+ func (_ context.Context , _ store.ID ) * mocks.MockCredential {
669+ return & mocks.MockCredential {}
670+ },
671+ WithLogger (& testLogger {t }),
672+ WithEncryptionCallbackFunc [EncryptionPassword ](func (_ context.Context ) ([]byte , error ) {
673+ return []byte (masterKey ), nil
674+ }),
675+ WithDecryptionCallbackFunc [DecryptionPassword ](func (_ context.Context ) ([]byte , error ) {
676+ return []byte (masterKey ), nil
677+ }),
678+ )
679+ require .NoError (t , err )
680+
681+ secret := & mocks.MockCredential {
682+ Username : uuid .NewString (),
683+ Password : uuid .NewString (),
684+ }
685+ id := secrets .MustParseID ("test/something/" + uuid .NewString ())
686+ require .NoError (t , s .Upsert (t .Context (), id , secret ))
687+
688+ storeSecret , err := s .Get (t .Context (), id )
689+ require .NoError (t , err )
690+ assert .EqualValues (t , secret , storeSecret )
691+ })
692+
693+ t .Run ("upsert overwrites an existing credential" , func (t * testing.T ) {
694+ root , err := os .OpenRoot (t .TempDir ())
695+ require .NoError (t , err )
696+ t .Cleanup (func () {
697+ assert .NoError (t , root .Close ())
698+ })
699+
700+ masterKey := uuid .NewString ()
701+ s , err := New (root ,
702+ func (_ context.Context , _ store.ID ) * mocks.MockCredential {
703+ return & mocks.MockCredential {}
704+ },
705+ WithLogger (& testLogger {t }),
706+ WithEncryptionCallbackFunc [EncryptionPassword ](func (_ context.Context ) ([]byte , error ) {
707+ return []byte (masterKey ), nil
708+ }),
709+ WithDecryptionCallbackFunc [DecryptionPassword ](func (_ context.Context ) ([]byte , error ) {
710+ return []byte (masterKey ), nil
711+ }),
712+ )
713+ require .NoError (t , err )
714+
715+ original := & mocks.MockCredential {
716+ Username : uuid .NewString (),
717+ Password : uuid .NewString (),
718+ }
719+ id := secrets .MustParseID ("test/something/" + uuid .NewString ())
720+ require .NoError (t , s .Save (t .Context (), id , original ))
721+
722+ updated := & mocks.MockCredential {
723+ Username : uuid .NewString (),
724+ Password : uuid .NewString (),
725+ }
726+ require .NoError (t , s .Upsert (t .Context (), id , updated ))
727+
728+ storeSecret , err := s .Get (t .Context (), id )
729+ require .NoError (t , err )
730+ assert .EqualValues (t , updated , storeSecret )
731+ })
732+
659733 t .Run ("an error on encryption callbackFunc is propagated on save" , func (t * testing.T ) {
660734 root , err := os .OpenRoot (t .TempDir ())
661735 require .NoError (t , err )
0 commit comments