Skip to content

Commit

Permalink
uncomment
Browse files Browse the repository at this point in the history
  • Loading branch information
samliok committed Oct 10, 2024
1 parent 4038440 commit cd657d9
Showing 1 changed file with 120 additions and 116 deletions.
236 changes: 120 additions & 116 deletions tests/e2e/e2e.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,14 @@ package e2e

import (
"fmt"
"sync"
"time"

"github.com/ava-labs/avalanchego/api/info"
"github.com/ava-labs/avalanchego/ids"
"github.com/ava-labs/avalanchego/tests"
"github.com/ava-labs/avalanchego/tests/fixture/e2e"
"github.com/ava-labs/avalanchego/tests/fixture/tmpnet"
"github.com/stretchr/testify/require"

"github.com/ava-labs/hypersdk/abi"
Expand All @@ -19,6 +22,7 @@ import (
"github.com/ava-labs/hypersdk/chain"
"github.com/ava-labs/hypersdk/tests/workload"
"github.com/ava-labs/hypersdk/throughput"
"github.com/ava-labs/hypersdk/utils"

ginkgo "github.com/onsi/ginkgo/v2"
)
Expand Down Expand Up @@ -144,122 +148,122 @@ var _ = ginkgo.Describe("[HyperSDK Spam Workloads]", func() {
})
})

// var _ = ginkgo.Describe("[HyperSDK Syncing]", func() {
// ginkgo.It("[Sync]", func() {
// tc := e2e.NewTestContext()
// require := require.New(tc)
// blockchainID := e2e.GetEnv(tc).GetNetwork().GetSubnet(vmName).Chains[0].ChainID

// uris := getE2EURIs(tc, blockchainID)
// ginkgo.By("Generate 128 blocks", func() {
// workload.GenerateNBlocks(tc.ContextWithTimeout(5*time.Minute), require, uris, txWorkloadFactory, 128)
// })

// var (
// bootstrapNode *tmpnet.Node
// bootstrapNodeURI string
// )
// ginkgo.By("Start a new node to bootstrap", func() {
// bootstrapNode = e2e.CheckBootstrapIsPossible(tc, e2e.GetEnv(tc).GetNetwork())
// bootstrapNodeURI = formatURI(bootstrapNode.URI, blockchainID)
// uris = append(uris, bootstrapNodeURI)
// })
// ginkgo.By("Accept a transaction after state sync", func() {
// txWorkload, err := txWorkloadFactory.NewSizedTxWorkload(bootstrapNodeURI, 1)
// require.NoError(err)
// workload.ExecuteWorkload(tc.DefaultContext(), require, uris, txWorkload)
// })
// ginkgo.By("Restart the node", func() {
// require.NoError(e2e.GetEnv(tc).GetNetwork().RestartNode(tc.DefaultContext(), ginkgo.GinkgoWriter, bootstrapNode))
// })
// ginkgo.By("Generate > StateSyncMinBlocks=512", func() {
// workload.GenerateNBlocks(tc.ContextWithTimeout(20*time.Minute), require, uris, txWorkloadFactory, 512)
// })
// var (
// syncNode *tmpnet.Node
// syncNodeURI string
// )
// ginkgo.By("Start a new node to state sync", func() {
// syncNode = e2e.CheckBootstrapIsPossible(tc, e2e.GetEnv(tc).GetNetwork())
// syncNodeURI = formatURI(syncNode.URI, blockchainID)
// uris = append(uris, syncNodeURI)
// utils.Outf("{{blue}}sync node uri: %s{{/}}\n", syncNodeURI)
// c := jsonrpc.NewJSONRPCClient(syncNodeURI)
// _, _, _, err := c.Network(tc.DefaultContext())
// require.NoError(err)
// })
// ginkgo.By("Accept a transaction after state sync", func() {
// txWorkload, err := txWorkloadFactory.NewSizedTxWorkload(syncNodeURI, 1)
// require.NoError(err)
// workload.ExecuteWorkload(tc.DefaultContext(), require, uris, txWorkload)
// })
// ginkgo.By("Pause the node", func() {
// // TODO: remove the need to call SaveAPIPort from the test
// require.NoError(syncNode.SaveAPIPort())
// require.NoError(syncNode.Stop(tc.DefaultContext()))

// // TODO: remove extra Ping check and rely on tmpnet to stop the node correctly
// c := jsonrpc.NewJSONRPCClient(syncNodeURI)
// ok, err := c.Ping(tc.DefaultContext())
// require.Error(err) //nolint:forbidigo
// require.False(ok)
// })
// ginkgo.By("Generate 256 blocks", func() {
// // Generate blocks on all nodes except the paused node
// runningURIs := uris[:len(uris)-1]
// workload.GenerateNBlocks(tc.ContextWithTimeout(5*time.Minute), require, runningURIs, txWorkloadFactory, 256)
// })
// ginkgo.By("Resume the node", func() {
// require.NoError(e2e.GetEnv(tc).GetNetwork().StartNode(tc.DefaultContext(), ginkgo.GinkgoWriter, syncNode))
// utils.Outf("Waiting for sync node to restart")
// require.NoError(tmpnet.WaitForHealthy(tc.DefaultContext(), syncNode))

// utils.Outf("{{blue}}sync node reporting healthy: %s{{/}}\n", syncNodeURI)

// c := jsonrpc.NewJSONRPCClient(syncNodeURI)
// _, _, _, err := c.Network(tc.DefaultContext())
// require.NoError(err)
// })

// ginkgo.By("Accept a transaction after resuming", func() {
// txWorkload, err := txWorkloadFactory.NewSizedTxWorkload(syncNodeURI, 1)
// require.NoError(err)
// workload.ExecuteWorkload(tc.DefaultContext(), require, uris, txWorkload)
// })
// ginkgo.By("State sync while broadcasting txs", func() {
// stopChannel := make(chan struct{})
// wg := &sync.WaitGroup{}
// defer wg.Wait()
// defer close(stopChannel)

// wg.Add(1)
// go func() {
// defer wg.Done()
// // Recover failure if exits
// defer ginkgo.GinkgoRecover()

// txWorkload, err := txWorkloadFactory.NewSizedTxWorkload(uris[0], 128)
// require.NoError(err)
// workload.GenerateUntilStop(tc.DefaultContext(), require, uris, txWorkload, stopChannel)
// }()

// // Give time for transactions to start processing
// time.Sleep(5 * time.Second)

// syncConcurrentNode := e2e.CheckBootstrapIsPossible(tc, e2e.GetEnv(tc).GetNetwork())
// syncConcurrentNodeURI := formatURI(syncConcurrentNode.URI, blockchainID)
// uris = append(uris, syncConcurrentNodeURI)
// c := jsonrpc.NewJSONRPCClient(syncConcurrentNodeURI)
// _, _, _, err := c.Network(tc.DefaultContext())
// require.NoError(err)
// })
// ginkgo.By("Accept a transaction after syncing", func() {
// txWorkload, err := txWorkloadFactory.NewSizedTxWorkload(uris[0], 1)
// require.NoError(err)
// workload.ExecuteWorkload(tc.DefaultContext(), require, uris, txWorkload)
// })
// })
// })
var _ = ginkgo.Describe("[HyperSDK Syncing]", func() {
ginkgo.It("[Sync]", func() {
tc := e2e.NewTestContext()
require := require.New(tc)
blockchainID := e2e.GetEnv(tc).GetNetwork().GetSubnet(vmName).Chains[0].ChainID

uris := getE2EURIs(tc, blockchainID)
ginkgo.By("Generate 128 blocks", func() {
workload.GenerateNBlocks(tc.ContextWithTimeout(5*time.Minute), require, uris, txWorkloadFactory, 128)
})

var (
bootstrapNode *tmpnet.Node
bootstrapNodeURI string
)
ginkgo.By("Start a new node to bootstrap", func() {
bootstrapNode = e2e.CheckBootstrapIsPossible(tc, e2e.GetEnv(tc).GetNetwork())
bootstrapNodeURI = formatURI(bootstrapNode.URI, blockchainID)
uris = append(uris, bootstrapNodeURI)
})
ginkgo.By("Accept a transaction after state sync", func() {
txWorkload, err := txWorkloadFactory.NewSizedTxWorkload(bootstrapNodeURI, 1)
require.NoError(err)
workload.ExecuteWorkload(tc.DefaultContext(), require, uris, txWorkload)
})
ginkgo.By("Restart the node", func() {
require.NoError(e2e.GetEnv(tc).GetNetwork().RestartNode(tc.DefaultContext(), ginkgo.GinkgoWriter, bootstrapNode))
})
ginkgo.By("Generate > StateSyncMinBlocks=512", func() {
workload.GenerateNBlocks(tc.ContextWithTimeout(20*time.Minute), require, uris, txWorkloadFactory, 512)
})
var (
syncNode *tmpnet.Node
syncNodeURI string
)
ginkgo.By("Start a new node to state sync", func() {
syncNode = e2e.CheckBootstrapIsPossible(tc, e2e.GetEnv(tc).GetNetwork())
syncNodeURI = formatURI(syncNode.URI, blockchainID)
uris = append(uris, syncNodeURI)
utils.Outf("{{blue}}sync node uri: %s{{/}}\n", syncNodeURI)
c := jsonrpc.NewJSONRPCClient(syncNodeURI)
_, _, _, err := c.Network(tc.DefaultContext())
require.NoError(err)
})
ginkgo.By("Accept a transaction after state sync", func() {
txWorkload, err := txWorkloadFactory.NewSizedTxWorkload(syncNodeURI, 1)
require.NoError(err)
workload.ExecuteWorkload(tc.DefaultContext(), require, uris, txWorkload)
})
ginkgo.By("Pause the node", func() {
// TODO: remove the need to call SaveAPIPort from the test
require.NoError(syncNode.SaveAPIPort())
require.NoError(syncNode.Stop(tc.DefaultContext()))

// TODO: remove extra Ping check and rely on tmpnet to stop the node correctly
c := jsonrpc.NewJSONRPCClient(syncNodeURI)
ok, err := c.Ping(tc.DefaultContext())
require.Error(err) //nolint:forbidigo
require.False(ok)
})
ginkgo.By("Generate 256 blocks", func() {
// Generate blocks on all nodes except the paused node
runningURIs := uris[:len(uris)-1]
workload.GenerateNBlocks(tc.ContextWithTimeout(5*time.Minute), require, runningURIs, txWorkloadFactory, 256)
})
ginkgo.By("Resume the node", func() {
require.NoError(e2e.GetEnv(tc).GetNetwork().StartNode(tc.DefaultContext(), ginkgo.GinkgoWriter, syncNode))
utils.Outf("Waiting for sync node to restart")
require.NoError(tmpnet.WaitForHealthy(tc.DefaultContext(), syncNode))

utils.Outf("{{blue}}sync node reporting healthy: %s{{/}}\n", syncNodeURI)

c := jsonrpc.NewJSONRPCClient(syncNodeURI)
_, _, _, err := c.Network(tc.DefaultContext())
require.NoError(err)
})

ginkgo.By("Accept a transaction after resuming", func() {
txWorkload, err := txWorkloadFactory.NewSizedTxWorkload(syncNodeURI, 1)
require.NoError(err)
workload.ExecuteWorkload(tc.DefaultContext(), require, uris, txWorkload)
})
ginkgo.By("State sync while broadcasting txs", func() {
stopChannel := make(chan struct{})
wg := &sync.WaitGroup{}
defer wg.Wait()
defer close(stopChannel)

wg.Add(1)
go func() {
defer wg.Done()
// Recover failure if exits
defer ginkgo.GinkgoRecover()

txWorkload, err := txWorkloadFactory.NewSizedTxWorkload(uris[0], 128)
require.NoError(err)
workload.GenerateUntilStop(tc.DefaultContext(), require, uris, txWorkload, stopChannel)
}()

// Give time for transactions to start processing
time.Sleep(5 * time.Second)

syncConcurrentNode := e2e.CheckBootstrapIsPossible(tc, e2e.GetEnv(tc).GetNetwork())
syncConcurrentNodeURI := formatURI(syncConcurrentNode.URI, blockchainID)
uris = append(uris, syncConcurrentNodeURI)
c := jsonrpc.NewJSONRPCClient(syncConcurrentNodeURI)
_, _, _, err := c.Network(tc.DefaultContext())
require.NoError(err)
})
ginkgo.By("Accept a transaction after syncing", func() {
txWorkload, err := txWorkloadFactory.NewSizedTxWorkload(uris[0], 1)
require.NoError(err)
workload.ExecuteWorkload(tc.DefaultContext(), require, uris, txWorkload)
})
})
})

func getE2EURIs(tc tests.TestContext, blockchainID ids.ID) []string {
nodeURIs := e2e.GetEnv(tc).GetNetwork().GetNodeURIs()
Expand Down

0 comments on commit cd657d9

Please sign in to comment.