Add tests for peering state snapshots / restores.
This commit is contained in:
parent
27bbdced8d
commit
6c355134e8
|
@ -2669,3 +2669,131 @@ func TestStateStore_Peering_ListDeleted(t *testing.T) {
|
||||||
|
|
||||||
require.ElementsMatch(t, []string{"foo", "baz"}, names)
|
require.ElementsMatch(t, []string{"foo", "baz"}, names)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestStateStore_Peering_Snapshot_Restore(t *testing.T) {
|
||||||
|
s := testStateStore(t)
|
||||||
|
|
||||||
|
expectedPeering := &pbpeering.Peering{
|
||||||
|
ID: "1fabcd52-1d46-49b0-b1d8-71559aee47f5",
|
||||||
|
Name: "baz",
|
||||||
|
}
|
||||||
|
expectedTrustBundle := &pbpeering.PeeringTrustBundle{
|
||||||
|
TrustDomain: "example.com",
|
||||||
|
PeerName: "example",
|
||||||
|
RootPEMs: []string{"example certificate bundle"},
|
||||||
|
}
|
||||||
|
expectedSecret := &pbpeering.PeeringSecrets{
|
||||||
|
PeerID: expectedPeering.ID,
|
||||||
|
Establishment: &pbpeering.PeeringSecrets_Establishment{
|
||||||
|
SecretID: "baaeea83-8419-4aa8-ac89-14e7246a3d2f",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
testutil.RunStep(t, "write initial values", func(t *testing.T) {
|
||||||
|
// Peering
|
||||||
|
require.NoError(t, s.PeeringWrite(1001, &pbpeering.PeeringWriteRequest{
|
||||||
|
Peering: expectedPeering,
|
||||||
|
}))
|
||||||
|
|
||||||
|
// Peering Trust Bundles
|
||||||
|
require.NoError(t, s.PeeringTrustBundleWrite(1002, expectedTrustBundle))
|
||||||
|
|
||||||
|
// Peering Secrets and SecretUUIDs
|
||||||
|
// Secrets writes don't update the index, so this 1003 will be ignored.
|
||||||
|
require.NoError(t, s.PeeringSecretsWrite(1003, &pbpeering.SecretsWriteRequest{
|
||||||
|
PeerID: expectedPeering.ID,
|
||||||
|
Request: &pbpeering.SecretsWriteRequest_GenerateToken{
|
||||||
|
GenerateToken: &pbpeering.SecretsWriteRequest_GenerateTokenRequest{
|
||||||
|
EstablishmentSecret: expectedSecret.Establishment.SecretID,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}))
|
||||||
|
})
|
||||||
|
|
||||||
|
var peeringDump []*pbpeering.Peering
|
||||||
|
var trustBundleDump []*pbpeering.PeeringTrustBundle
|
||||||
|
var secretsDump []*pbpeering.PeeringSecrets
|
||||||
|
testutil.RunStep(t, "verify snapshot", func(t *testing.T) {
|
||||||
|
// Create a snapshot
|
||||||
|
snap := s.Snapshot()
|
||||||
|
defer snap.Close()
|
||||||
|
|
||||||
|
// This should be 1002, because the secrets write doesn't update the index.
|
||||||
|
require.Equal(t, uint64(1002), snap.LastIndex())
|
||||||
|
|
||||||
|
// Verify peerings
|
||||||
|
{
|
||||||
|
iter, err := snap.Peerings()
|
||||||
|
require.NoError(t, err)
|
||||||
|
for entry := iter.Next(); entry != nil; entry = iter.Next() {
|
||||||
|
peeringDump = append(peeringDump, entry.(*pbpeering.Peering))
|
||||||
|
}
|
||||||
|
require.Equal(t, []*pbpeering.Peering{expectedPeering}, peeringDump)
|
||||||
|
}
|
||||||
|
// Verify trust bundles
|
||||||
|
{
|
||||||
|
iter, err := snap.PeeringTrustBundles()
|
||||||
|
require.NoError(t, err)
|
||||||
|
for entry := iter.Next(); entry != nil; entry = iter.Next() {
|
||||||
|
trustBundleDump = append(trustBundleDump, entry.(*pbpeering.PeeringTrustBundle))
|
||||||
|
}
|
||||||
|
require.Equal(t, []*pbpeering.PeeringTrustBundle{expectedTrustBundle}, trustBundleDump)
|
||||||
|
}
|
||||||
|
// Verify secrets
|
||||||
|
{
|
||||||
|
iter, err := snap.PeeringSecrets()
|
||||||
|
require.NoError(t, err)
|
||||||
|
for entry := iter.Next(); entry != nil; entry = iter.Next() {
|
||||||
|
secretsDump = append(secretsDump, entry.(*pbpeering.PeeringSecrets))
|
||||||
|
}
|
||||||
|
require.Equal(t, []*pbpeering.PeeringSecrets{expectedSecret}, secretsDump)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// Restore the values into a new state store.
|
||||||
|
testutil.RunStep(t, "restore values", func(t *testing.T) {
|
||||||
|
s := testStateStore(t)
|
||||||
|
restore := s.Restore()
|
||||||
|
|
||||||
|
// Restore values
|
||||||
|
for _, entry := range peeringDump {
|
||||||
|
require.NoError(t, restore.Peering(entry))
|
||||||
|
}
|
||||||
|
for _, entry := range trustBundleDump {
|
||||||
|
require.NoError(t, restore.PeeringTrustBundle(entry))
|
||||||
|
}
|
||||||
|
for _, entry := range secretsDump {
|
||||||
|
require.NoError(t, restore.PeeringSecrets(entry))
|
||||||
|
}
|
||||||
|
restore.Commit()
|
||||||
|
|
||||||
|
// Verify peerings
|
||||||
|
{
|
||||||
|
idx, foundPeerings, err := s.PeeringList(nil, *acl.DefaultEnterpriseMeta())
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, uint64(1001), idx)
|
||||||
|
require.Equal(t, []*pbpeering.Peering{expectedPeering}, foundPeerings)
|
||||||
|
}
|
||||||
|
// Verify trust Bundles
|
||||||
|
{
|
||||||
|
idx, foundTrustBundles, err := s.PeeringTrustBundleList(nil, *acl.DefaultEnterpriseMeta())
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, uint64(1002), idx)
|
||||||
|
require.Equal(t, []*pbpeering.PeeringTrustBundle{expectedTrustBundle}, foundTrustBundles)
|
||||||
|
}
|
||||||
|
// Verify secrets
|
||||||
|
{
|
||||||
|
foundSecrets, err := s.PeeringSecretsRead(nil, expectedSecret.PeerID)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, expectedSecret, foundSecrets)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify index
|
||||||
|
require.Equal(t, uint64(1002), s.maxIndex(
|
||||||
|
partitionedIndexEntryName(tablePeering, "default"),
|
||||||
|
partitionedIndexEntryName(tablePeeringTrustBundles, "default"),
|
||||||
|
partitionedIndexEntryName(tablePeeringSecrets, "default"),
|
||||||
|
partitionedIndexEntryName(tablePeeringSecretUUIDs, "default"),
|
||||||
|
))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue