summaryrefslogtreecommitdiff
path: root/test/e2e-go/features/participation/accountParticipationTransitions_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'test/e2e-go/features/participation/accountParticipationTransitions_test.go')
-rw-r--r--test/e2e-go/features/participation/accountParticipationTransitions_test.go64
1 files changed, 51 insertions, 13 deletions
diff --git a/test/e2e-go/features/participation/accountParticipationTransitions_test.go b/test/e2e-go/features/participation/accountParticipationTransitions_test.go
index 606ae7ce7..5b2c3ea0c 100644
--- a/test/e2e-go/features/participation/accountParticipationTransitions_test.go
+++ b/test/e2e-go/features/participation/accountParticipationTransitions_test.go
@@ -21,11 +21,14 @@ package participation
// deterministic.
import (
+ "fmt"
"io/ioutil"
"os"
"path/filepath"
"testing"
+ "time"
+ "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/algorand/go-algorand/daemon/algod/api/server/v2/generated"
@@ -70,17 +73,27 @@ func registerParticipationAndWait(t *testing.T, client libgoal.Client, part acco
func TestKeyRegistration(t *testing.T) {
partitiontest.PartitionTest(t)
+ t.Skipf("Skipping flaky test. Re-enable with #3255")
if testing.Short() {
t.Skip()
}
- t.Parallel()
+ checkKey := func(key generated.ParticipationKey, firstValid, lastValid, lastProposal uint64, msg string) {
+ require.NotNil(t, key.EffectiveFirstValid, fmt.Sprintf("%s.EffectiveFirstValid", msg))
+ require.NotNil(t, key.EffectiveLastValid, fmt.Sprintf("%s.EffectiveLastValid", msg))
+ require.NotNil(t, key.LastBlockProposal, fmt.Sprintf("%s.LastBlockProposal", msg))
+
+ assert.Equal(t, int(*(key.EffectiveFirstValid)), int(firstValid), fmt.Sprintf("%s.EffectiveFirstValid", msg))
+ assert.Equal(t, int(*(key.EffectiveLastValid)), int(lastValid), fmt.Sprintf("%s.EffectiveLastValid", msg))
+ assert.Equal(t, int(*(key.LastBlockProposal)), int(lastProposal), fmt.Sprintf("%s.LastBlockProposal", msg))
+ }
// Start devmode network and initialize things for the test.
var fixture fixtures.RestClientFixture
fixture.SetupNoStart(t, filepath.Join("nettemplates", "DevModeOneWallet.json"))
fixture.Start()
+ defer fixture.Shutdown()
sClient := fixture.GetLibGoalClientForNamedNode("Node")
minTxnFee, _, err := fixture.MinFeeAndBalance(0)
require.NoError(t, err)
@@ -92,7 +105,7 @@ func TestKeyRegistration(t *testing.T) {
last := uint64(6_000_000)
numNew := 2
for i := 0; i < numNew; i++ {
- response, part, err := installParticipationKey(t, sClient, sAccount, 0, last)
+ response, part, err := installParticipationKey(t, sClient, sAccount, 0, last+uint64(i))
require.NoError(t, err)
require.NotNil(t, response)
registerParticipationAndWait(t, sClient, part)
@@ -111,16 +124,41 @@ func TestKeyRegistration(t *testing.T) {
fixture.SendMoneyAndWait(2+i, 0, minTxnFee, sAccount, sAccount, "")
}
- keys, err = fixture.LibGoalClient.GetParticipationKeys()
- require.Equal(t, *(keys[0].EffectiveFirstValid), uint64(1))
- require.Equal(t, *(keys[0].EffectiveLastValid), lookback)
- require.Equal(t, *(keys[0].LastBlockProposal), lookback)
-
- require.Equal(t, *(keys[1].EffectiveFirstValid), lookback+1)
- require.Equal(t, *(keys[1].EffectiveLastValid), lookback+1)
- require.Equal(t, *(keys[1].LastBlockProposal), lookback+1)
+ // Wait until data has been persisted
+ ready := false
+ waitfor := time.After(1 * time.Minute)
+ for !ready {
+ select {
+ case <-waitfor:
+ ready = true
+ default:
+ keys, err = fixture.LibGoalClient.GetParticipationKeys()
+ ready = (len(keys) >= 3) &&
+ (keys[2].LastBlockProposal != nil) &&
+ (keys[2].EffectiveFirstValid != nil) &&
+ (keys[2].EffectiveLastValid != nil) &&
+ (keys[1].LastBlockProposal != nil) &&
+ (keys[1].EffectiveFirstValid != nil) &&
+ (keys[1].EffectiveLastValid != nil) &&
+ (keys[0].LastBlockProposal != nil) &&
+ (keys[0].EffectiveFirstValid != nil) &&
+ (keys[0].EffectiveLastValid != nil)
+ if !ready {
+ time.Sleep(100 * time.Millisecond)
+ }
+ }
+ }
- require.Equal(t, *(keys[2].EffectiveFirstValid), lookback+2)
- require.Equal(t, *(keys[2].EffectiveLastValid), last)
- require.Equal(t, *(keys[2].LastBlockProposal), lookback+2)
+ // Verify results, order may vary, key off of the last valid field
+ require.Len(t, keys, 3)
+ for _, k := range keys {
+ switch k.Key.VoteLastValid {
+ case 3_000_000:
+ checkKey(k, 1, lookback, lookback, "keys[0]")
+ case last:
+ checkKey(k, lookback+1, lookback+1, lookback+1, "keys[1]")
+ case last + 1:
+ checkKey(k, lookback+2, last+1, lookback+2, "keys[2]")
+ }
+ }
}