diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index 60820d1b..5fa4d668 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -44,6 +44,10 @@ jobs: run: | make test + - name: Run Optimism Test + run: | + make optimism-test + gosec: runs-on: ubuntu-latest env: diff --git a/Makefile b/Makefile index 93e98afd..e5dd7156 100644 --- a/Makefile +++ b/Makefile @@ -26,15 +26,15 @@ run-server: clean: rm bin/eigenda-proxy -test: optimism-test - go test -v ./... +test: + go test -v ./... -parallel 4 optimism-test: OPTIMISM=true go test -timeout 50m -v ./e2e/... -deploy-config ../.devnet/devnetL1.json holesky-test: - TESTNET=true go test -timeout 50m -v ./e2e - + TESTNET=true go test -timeout 50m -v ./e2e -parallel + .PHONY: lint lint: @if ! test -f &> /dev/null; \ @@ -59,7 +59,7 @@ srs: cd operator-setup && ./srs_setup.sh; \ fi -op-devnet-allocs: submodules +op-devnet-allocs: @echo "Generating devnet allocs..." @./scripts/op-devnet-allocs.sh diff --git a/common/common_test.go b/common/common_test.go index 498672e0..11632c89 100644 --- a/common/common_test.go +++ b/common/common_test.go @@ -8,6 +8,8 @@ import ( ) func TestParseByteAmount(t *testing.T) { + t.Parallel() + testCases := []struct { input string expected uint64 diff --git a/e2e/server_test.go b/e2e/server_test.go index 7ac2551d..2bf43445 100644 --- a/e2e/server_test.go +++ b/e2e/server_test.go @@ -15,92 +15,26 @@ import ( "github.com/stretchr/testify/require" ) -func TestHoleskyWithPlasmaClient(t *testing.T) { - if !runTestnetIntegrationTests || runOptimismIntegrationTests { - t.Skip("Skipping testnet integration test") - } - - ts, kill := e2e.CreateTestSuite(t, false) - defer kill() - - daClient := op_plasma.NewDAClient(ts.Address(), false, false) - t.Log("Waiting for client to establish connection with plasma server...") - // wait for server to come online after starting - time.Sleep(5 * time.Second) - - // 1 - write arbitrary data to EigenDA - - var testPreimage = []byte("inter-subjective and not objective!") - - t.Log("Setting input data on proxy server...") - commit, err := daClient.SetInput(ts.Ctx, testPreimage) - require.NoError(t, err) - - // 2 - fetch data from EigenDA for generated commitment key - t.Log("Getting input data from proxy server...") - preimage, err := daClient.GetInput(ts.Ctx, commit) - require.NoError(t, err) - require.Equal(t, testPreimage, preimage) -} - -func TestHoleskyWithProxyClient(t *testing.T) { - if !runTestnetIntegrationTests || runOptimismIntegrationTests { - t.Skip("Skipping testnet integration test") +func useMemory() bool { + if runOptimismIntegrationTests { + return true } - ts, kill := e2e.CreateTestSuite(t, false) - defer kill() - - cfg := &client.Config{ - URL: ts.Address(), + if runTestnetIntegrationTests { + return false } - daClient := client.New(cfg) - t.Log("Waiting for client to establish connection with plasma server...") - // wait for server to come online after starting - wait.For(ts.Ctx, time.Second*1, func() (bool, error) { - err := daClient.Health() - if err != nil { - return false, nil - } - - return true, nil - }) - - // 1 - write arbitrary data to EigenDA - - var testPreimage = []byte("inter-subjective and not objective!") - - t.Log("Setting input data on proxy server...") - blobInfo, err := daClient.SetData(ts.Ctx, testPreimage) - require.NoError(t, err) - - // 2 - fetch data from EigenDA for generated commitment key - t.Log("Getting input data from proxy server...") - preimage, err := daClient.GetData(ts.Ctx, blobInfo, common.BinaryDomain) - require.NoError(t, err) - require.Equal(t, testPreimage, preimage) - - // 3 - fetch iFFT representation of preimage - iFFTPreimage, err := daClient.GetData(ts.Ctx, blobInfo, common.PolyDomain) - require.NoError(t, err) - require.NotEqual(t, preimage, iFFTPreimage) - - // 4 - Assert domain transformations - - ifftCodec := codecs.NewIFFTCodec(codecs.DefaultBlobCodec{}) - decodedBlob, err := ifftCodec.DecodeBlob(iFFTPreimage) - require.NoError(t, err) - - require.Equal(t, decodedBlob, preimage) + return true } -func TestMemStoreWithPlasmaClient(t *testing.T) { - if runTestnetIntegrationTests || runOptimismIntegrationTests { - t.Skip("Skipping non-testnet integration test") +func TestPlasmaClient(t *testing.T) { + t.Parallel() + + if runOptimismIntegrationTests { + t.Skip("Skipping testnet integration test") } - ts, kill := e2e.CreateTestSuite(t, true) + ts, kill := e2e.CreateTestSuite(t, useMemory()) defer kill() daClient := op_plasma.NewDAClient(ts.Address(), false, false) @@ -123,12 +57,14 @@ func TestMemStoreWithPlasmaClient(t *testing.T) { require.Equal(t, testPreimage, preimage) } -func TestMemStoreWithProxyClient(t *testing.T) { - if runTestnetIntegrationTests || runOptimismIntegrationTests { - t.Skip("Skipping non-testnet integration test") +func TestProxyClient(t *testing.T) { + t.Parallel() + + if runOptimismIntegrationTests { + t.Skip("Skipping testnet integration test") } - ts, kill := e2e.CreateTestSuite(t, true) + ts, kill := e2e.CreateTestSuite(t, useMemory()) defer kill() cfg := &client.Config{ diff --git a/e2e/setup.go b/e2e/setup.go index 54b6ff25..a0a39381 100644 --- a/e2e/setup.go +++ b/e2e/setup.go @@ -26,7 +26,6 @@ const ( transport = "http" SvcName = "eigenda_proxy" host = "127.0.0.1" - port = 4200 HoleskyDA = "disperser-holesky.eigenda.xyz:443" ) @@ -84,7 +83,7 @@ func CreateTestSuite(t *testing.T, useMemory bool) (TestSuite, func()) { log, ) require.NoError(t, err) - server := server.NewServer(host, port, store, log, metrics.NoopMetrics) + server := server.NewServer(host, 0, store, log, metrics.NoopMetrics) t.Log("Starting proxy server...") err = server.Start() @@ -104,5 +103,8 @@ func CreateTestSuite(t *testing.T, useMemory bool) (TestSuite, func()) { } func (ts *TestSuite) Address() string { + // read port from listener + port := ts.Server.Port() + return fmt.Sprintf("%s://%s:%d", transport, host, port) } diff --git a/server/server.go b/server/server.go index 4ab6fdfa..d8d60206 100644 --- a/server/server.go +++ b/server/server.go @@ -227,3 +227,10 @@ func ReadDomainFilter(r *http.Request) (common.DomainType, error) { func (svr *Server) Store() store.Store { return svr.store } + +func (svr *Server) Port() int { + // read from listener + _, portStr, _ := net.SplitHostPort(svr.listener.Addr().String()) + port, _ := strconv.Atoi(portStr) + return port +} diff --git a/store/memory_test.go b/store/memory_test.go index 3ed7f2be..f3ce1783 100644 --- a/store/memory_test.go +++ b/store/memory_test.go @@ -55,6 +55,8 @@ func TestGetSet(t *testing.T) { } func TestExpiration(t *testing.T) { + t.Parallel() + ctx, cancel := context.WithCancel(context.Background()) defer cancel() diff --git a/verify/verify_test.go b/verify/verify_test.go index b25c57a7..19ec5c8b 100644 --- a/verify/verify_test.go +++ b/verify/verify_test.go @@ -12,6 +12,7 @@ import ( ) func TestVerification(t *testing.T) { + t.Parallel() var data = []byte("inter-subjective and not objective!")