Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

initial set of edge cases #110

Merged
merged 16 commits into from
Sep 20, 2024
128 changes: 122 additions & 6 deletions e2e/server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,65 @@
"time"

"github.com/Layr-Labs/eigenda-proxy/client"

"github.com/Layr-Labs/eigenda-proxy/e2e"
"github.com/Layr-Labs/eigenda-proxy/store"
op_plasma "github.com/ethereum-optimism/optimism/op-plasma"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

func useMemory() bool {
return !runTestnetIntegrationTests
}

func isPanic(err string) bool {
anupsv marked this conversation as resolved.
Show resolved Hide resolved
return strings.Contains(err, "panic") && strings.Contains(err, "SIGSEGV") &&
strings.Contains(err, "nil pointer dereference")
}

func TestOpClientKeccak256MalformedInputs(t *testing.T) {
if !runIntegrationTests || runTestnetIntegrationTests {
t.Skip("Skipping test as TESTNET env set or INTEGRATION var not set")
}

t.Parallel()
testCfg := e2e.TestConfig(useMemory())
testCfg.UseKeccak256ModeS3 = true
ts, kill := e2e.CreateTestSuite(t, testCfg)
defer kill()

// nil commitment. Should return an error but currently is not. This needs to be fixed by OP
// Ref: https://github.com/ethereum-optimism/optimism/issues/11987
//daClient := op_plasma.NewDAClient(ts.Address(), false, true)

Check failure on line 39 in e2e/server_test.go

View workflow job for this annotation

GitHub Actions / Linter

commentFormatting: put a space between `//` and comment text (gocritic)
//t.Run("nil commitment case", func(t *testing.T) {
// var commit op_plasma.CommitmentData
// _, err := daClient.GetInput(ts.Ctx, commit)
// require.Error(t, err)
// assert.True(t, !isPanic(err.Error()))
//})

daClientPcFalse := op_plasma.NewDAClient(ts.Address(), false, false)

t.Run("input bad data to SetInput & GetInput", func(t *testing.T) {
testPreimage := []byte("") // Empty preimage
_, err := daClientPcFalse.SetInput(ts.Ctx, testPreimage)
require.Error(t, err)

// should fail with proper error message as is now, and cannot contain panics or nils
assert.True(t, strings.Contains(err.Error(), "invalid input") && !isPanic(err.Error()))

// The below test panics silently.
input := op_plasma.NewGenericCommitment([]byte(""))
_, err = daClientPcFalse.GetInput(ts.Ctx, input)
require.Error(t, err)

// Should not fail on slice bounds out of range. This needs to be fixed by OP.
// assert.False(t, strings.Contains(err.Error(), ": EOF") && !isPanic(err.Error()))
})

}

func TestOptimismClientWithKeccak256Commitment(t *testing.T) {
if !runIntegrationTests && !runTestnetIntegrationTests {
t.Skip("Skipping test as INTEGRATION or TESTNET env var not set")
Expand All @@ -31,14 +80,16 @@

daClient := op_plasma.NewDAClient(ts.Address(), false, true)

testPreimage := []byte(e2e.RandString(100))
t.Run("normal case", func(t *testing.T) {
testPreimage := []byte(e2e.RandString(100))

commit, err := daClient.SetInput(ts.Ctx, testPreimage)
require.NoError(t, err)
commit, err := daClient.SetInput(ts.Ctx, testPreimage)
require.NoError(t, err)

preimage, err := daClient.GetInput(ts.Ctx, commit)
require.NoError(t, err)
require.Equal(t, testPreimage, preimage)
preimage, err := daClient.GetInput(ts.Ctx, commit)
require.NoError(t, err)
require.Equal(t, testPreimage, preimage)
})
}

/*
Expand Down Expand Up @@ -70,6 +121,71 @@
require.Equal(t, testPreimage, preimage)
}

func TestProxyClientIntegrationOnly(t *testing.T) {
samlaf marked this conversation as resolved.
Show resolved Hide resolved
if !runIntegrationTests && !runTestnetIntegrationTests {
t.Skip("Skipping test as INTEGRATION or TESTNET env var not set")
}

t.Parallel()

ts, kill := e2e.CreateTestSuite(t, e2e.TestConfig(useMemory()))
defer kill()

cfg := &client.Config{
URL: ts.Address(),
}
daClient := client.New(cfg)

t.Run("single byte preimage set data case", func(t *testing.T) {
testPreimage := []byte{1} // Empty preimage
t.Log("Setting input data on proxy server...")
_, err := daClient.SetData(ts.Ctx, testPreimage)
require.NoError(t, err)
})

t.Run("unicode preimage set data case", func(t *testing.T) {
testPreimage := []byte("§§©ˆªªˆ˙√ç®∂§∞¶§ƒ¥√¨¥√¨¥ƒƒ©˙˜ø˜˜˜∫˙∫¥∫√†®®√稈¨˙ï") // Empty preimage
t.Log("Setting input data on proxy server...")
_, err := daClient.SetData(ts.Ctx, testPreimage)
require.NoError(t, err)

testPreimage = []byte("§") // Empty preimage
t.Log("Setting input data on proxy server...")
_, err = daClient.SetData(ts.Ctx, testPreimage)
require.NoError(t, err)

})

t.Run("empty preimage set data case", func(t *testing.T) {
testPreimage := []byte("") // Empty preimage
t.Log("Setting input data on proxy server...")
_, err := daClient.SetData(ts.Ctx, testPreimage)
require.NoError(t, err)
})

t.Run("get data edge cases", func(t *testing.T) {
testCert := []byte("")
_, err := daClient.GetData(ts.Ctx, testCert)
require.Error(t, err)
assert.True(t, strings.Contains(err.Error(),
"commitment is too short") && !isPanic(err.Error()))

testCert = []byte{1}
_, err = daClient.GetData(ts.Ctx, testCert)
require.Error(t, err)
assert.True(t, strings.Contains(err.Error(),
"commitment is too short") && !isPanic(err.Error()))

testCert = []byte(e2e.RandString(10000))
_, err = daClient.GetData(ts.Ctx, testCert)
require.Error(t, err)
assert.True(t, strings.Contains(err.Error(),
"failed to decode DA cert to RLP format: rlp: expected input list for verify.Certificate") &&
!isPanic(err.Error()))
})

}

func TestProxyClient(t *testing.T) {
if !runIntegrationTests && !runTestnetIntegrationTests {
t.Skip("Skipping test as INTEGRATION or TESTNET env var not set")
Expand Down
Loading