package tuf import ( "os" "testing" "github.com/stretchr/testify/assert" "github.com/theupdateframework/go-tuf/pkg/keys" ) func TestLocalStoreSigners(t *testing.T) { tmpdir, err := os.MkdirTemp("", "") if err != nil { t.Fatal(err) } defer func() { os.RemoveAll(tmpdir) }() stores := map[string]LocalStore{ "MemoryStore": MemoryStore(nil, nil), "FileSystemStore": FileSystemStore(tmpdir, nil), } for name, store := range stores { t.Run(name, func(t *testing.T) { signers, err := store.GetSigners("abc") assert.NoError(t, err) assert.Equal(t, len(signers), 0) // Add two signers to role "a". aSigner1, err := keys.GenerateEd25519Key() assert.NoError(t, err) err = store.SaveSigner("a", aSigner1) assert.NoError(t, err) aSigner2, err := keys.GenerateEd25519Key() assert.NoError(t, err) err = store.SaveSigner("a", aSigner2) assert.NoError(t, err) // Add one signer to role "b". bSigner, err := keys.GenerateEd25519Key() assert.NoError(t, err) err = store.SaveSigner("b", bSigner) assert.NoError(t, err) // Add to b again to test deduplication. err = store.SaveSigner("b", bSigner) assert.NoError(t, err) signers, err = store.GetSigners("a") assert.NoError(t, err) assert.ElementsMatch(t, []keys.Signer{aSigner1, aSigner2}, signers) signers, err = store.GetSigners("b") assert.NoError(t, err) assert.ElementsMatch(t, []keys.Signer{bSigner}, signers) a1KeyIDs := aSigner1.PublicData().IDs() a2KeyIDs := aSigner2.PublicData().IDs() bKeyIDs := bSigner.PublicData().IDs() assert.Equal(t, []keys.Signer{aSigner1}, store.SignersForKeyIDs(a1KeyIDs)) assert.Equal(t, []keys.Signer{aSigner2}, store.SignersForKeyIDs(a2KeyIDs)) assert.ElementsMatch(t, []keys.Signer{aSigner1, aSigner2}, store.SignersForKeyIDs(append(a1KeyIDs, a2KeyIDs...))) assert.Equal(t, []keys.Signer{bSigner}, store.SignersForKeyIDs(bKeyIDs)) }) } }