From b027fe97e2b5c282444d8600b5527845992a41a6 Mon Sep 17 00:00:00 2001 From: Samuel Laferriere Date: Tue, 17 Sep 2024 15:10:54 -0700 Subject: [PATCH 1/5] refactor: e2e server_test to separate testsuite config creation from testsuite creation this will give flexibility to change the exact config being used to start the testsuite server --- e2e/optimism_test.go | 7 +++++-- e2e/server_test.go | 26 +++++++++++++++++--------- e2e/setup.go | 42 +++++++++++++++++++++++------------------- 3 files changed, 45 insertions(+), 30 deletions(-) diff --git a/e2e/optimism_test.go b/e2e/optimism_test.go index cbfa365..7b0e1e5 100644 --- a/e2e/optimism_test.go +++ b/e2e/optimism_test.go @@ -123,7 +123,9 @@ func TestOptimismKeccak256Commitment(gt *testing.T) { testCfg := e2e.TestConfig(useMemory()) testCfg.UseKeccak256ModeS3 = true - proxyTS, shutDown := e2e.CreateTestSuite(gt, testCfg) + + tsConfig := e2e.TestSuiteConfig(gt, testCfg) + proxyTS, shutDown := e2e.CreateTestSuite(gt, tsConfig) defer shutDown() t := actions.NewDefaultTesting(gt) @@ -176,7 +178,8 @@ func TestOptimismAltDACommitment(gt *testing.T) { gt.Skip("Skipping test as INTEGRATION or TESTNET env var not set") } - proxyTS, shutDown := e2e.CreateTestSuite(gt, e2e.TestConfig(useMemory())) + tsConfig := e2e.TestSuiteConfig(gt, e2e.TestConfig(useMemory())) + proxyTS, shutDown := e2e.CreateTestSuite(gt, tsConfig) defer shutDown() t := actions.NewDefaultTesting(gt) diff --git a/e2e/server_test.go b/e2e/server_test.go index 1514b40..54346a5 100644 --- a/e2e/server_test.go +++ b/e2e/server_test.go @@ -26,7 +26,8 @@ func TestOptimismClientWithKeccak256Commitment(t *testing.T) { testCfg := e2e.TestConfig(useMemory()) testCfg.UseKeccak256ModeS3 = true - ts, kill := e2e.CreateTestSuite(t, testCfg) + tsConfig := e2e.TestSuiteConfig(t, testCfg) + ts, kill := e2e.CreateTestSuite(t, tsConfig) defer kill() daClient := op_plasma.NewDAClient(ts.Address(), false, true) @@ -53,7 +54,8 @@ func TestOptimismClientWithGenericCommitment(t *testing.T) { t.Parallel() - ts, kill := e2e.CreateTestSuite(t, e2e.TestConfig(useMemory())) + tsConfig := e2e.TestSuiteConfig(t, e2e.TestConfig(useMemory())) + ts, kill := e2e.CreateTestSuite(t, tsConfig) defer kill() daClient := op_plasma.NewDAClient(ts.Address(), false, false) @@ -77,7 +79,8 @@ func TestProxyClient(t *testing.T) { t.Parallel() - ts, kill := e2e.CreateTestSuite(t, e2e.TestConfig(useMemory())) + tsConfig := e2e.TestSuiteConfig(t, e2e.TestConfig(useMemory())) + ts, kill := e2e.CreateTestSuite(t, tsConfig) defer kill() cfg := &client.Config{ @@ -99,12 +102,13 @@ func TestProxyClient(t *testing.T) { func TestProxyServerWithLargeBlob(t *testing.T) { if !runIntegrationTests && !runTestnetIntegrationTests { - t.Skip("Skipping test as INTEGRATION or TESTNET env var not set") + // t.Skip("Skipping test as INTEGRATION or TESTNET env var not set") } t.Parallel() - ts, kill := e2e.CreateTestSuite(t, e2e.TestConfig(useMemory())) + tsConfig := e2e.TestSuiteConfig(t, e2e.TestConfig(useMemory())) + ts, kill := e2e.CreateTestSuite(t, tsConfig) defer kill() cfg := &client.Config{ @@ -131,7 +135,8 @@ func TestProxyServerWithOversizedBlob(t *testing.T) { t.Parallel() - ts, kill := e2e.CreateTestSuite(t, e2e.TestConfig(useMemory())) + tsConfig := e2e.TestSuiteConfig(t, e2e.TestConfig(useMemory())) + ts, kill := e2e.CreateTestSuite(t, tsConfig) defer kill() cfg := &client.Config{ @@ -172,7 +177,8 @@ func TestProxyServerCaching(t *testing.T) { testCfg := e2e.TestConfig(useMemory()) testCfg.UseS3Caching = true - ts, kill := e2e.CreateTestSuite(t, testCfg) + tsConfig := e2e.TestSuiteConfig(t, e2e.TestConfig(useMemory())) + ts, kill := e2e.CreateTestSuite(t, tsConfig) defer kill() cfg := &client.Config{ @@ -214,7 +220,8 @@ func TestProxyServerCachingWithRedis(t *testing.T) { testCfg := e2e.TestConfig(useMemory()) testCfg.UseRedisCaching = true - ts, kill := e2e.CreateTestSuite(t, testCfg) + tsConfig := e2e.TestSuiteConfig(t, e2e.TestConfig(useMemory())) + ts, kill := e2e.CreateTestSuite(t, tsConfig) defer kill() cfg := &client.Config{ @@ -266,7 +273,8 @@ func TestProxyServerReadFallback(t *testing.T) { testCfg.UseS3Fallback = true testCfg.Expiration = time.Millisecond * 1 - ts, kill := e2e.CreateTestSuite(t, testCfg) + tsConfig := e2e.TestSuiteConfig(t, e2e.TestConfig(useMemory())) + ts, kill := e2e.CreateTestSuite(t, tsConfig) defer kill() cfg := &client.Config{ diff --git a/e2e/setup.go b/e2e/setup.go index 3eea3f0..ba13012 100644 --- a/e2e/setup.go +++ b/e2e/setup.go @@ -32,8 +32,9 @@ const ( ) type Cfg struct { - UseMemory bool - Expiration time.Duration + UseMemory bool + Expiration time.Duration + // at most one of the below options should be true UseKeccak256ModeS3 bool UseS3Caching bool UseRedisCaching bool @@ -84,15 +85,7 @@ func createS3Config(eigendaCfg server.Config) server.CLIConfig { } } -type TestSuite struct { - Ctx context.Context - Log log.Logger - Server *server.Server -} - -func CreateTestSuite(t *testing.T, testCfg *Cfg) (TestSuite, func()) { - ctx := context.Background() - +func TestSuiteConfig(t *testing.T, testCfg *Cfg) server.CLIConfig { // load signer key from environment pk := os.Getenv(privateKey) if pk == "" && !testCfg.UseMemory { @@ -112,12 +105,6 @@ func CreateTestSuite(t *testing.T, testCfg *Cfg) (TestSuite, func()) { pollInterval = time.Minute * 1 } - log := oplog.NewLogger(os.Stdout, oplog.CLIConfig{ - Level: log.LevelDebug, - Format: oplog.FormatLogFmt, - Color: true, - }).New("role", svcName) - eigendaCfg := server.Config{ ClientConfig: clients.EigenDAClientConfig{ RPC: holeskyDA, @@ -143,7 +130,6 @@ func CreateTestSuite(t *testing.T, testCfg *Cfg) (TestSuite, func()) { } var cfg server.CLIConfig - switch { case testCfg.UseKeccak256ModeS3: cfg = createS3Config(eigendaCfg) @@ -167,9 +153,27 @@ func CreateTestSuite(t *testing.T, testCfg *Cfg) (TestSuite, func()) { } } + return cfg +} + +type TestSuite struct { + Ctx context.Context + Log log.Logger + Server *server.Server +} + +func CreateTestSuite(t *testing.T, testSuiteCfg server.CLIConfig) (TestSuite, func()) { + + log := oplog.NewLogger(os.Stdout, oplog.CLIConfig{ + Level: log.LevelDebug, + Format: oplog.FormatLogFmt, + Color: true, + }).New("role", svcName) + + ctx := context.Background() store, err := server.LoadStoreRouter( ctx, - cfg, + testSuiteCfg, log, ) require.NoError(t, err) From b141432e788eb3e6d5d6bda235c1ede516f4ce5f Mon Sep 17 00:00:00 2001 From: Samuel Laferriere Date: Tue, 17 Sep 2024 15:19:38 -0700 Subject: [PATCH 2/5] test: add e2e test for keccak commitment to expect error from s3 backend not set --- e2e/server_test.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/e2e/server_test.go b/e2e/server_test.go index 54346a5..10f31d5 100644 --- a/e2e/server_test.go +++ b/e2e/server_test.go @@ -42,6 +42,30 @@ func TestOptimismClientWithKeccak256Commitment(t *testing.T) { require.Equal(t, testPreimage, preimage) } +func TestKeccak256CommitmentRequestErrorsWhenS3NotSet(t *testing.T) { + if !runIntegrationTests && !runTestnetIntegrationTests { + t.Skip("Skipping test as INTEGRATION or TESTNET env var not set") + } + + t.Parallel() + + testCfg := e2e.TestConfig(useMemory()) + testCfg.UseKeccak256ModeS3 = true + + tsConfig := e2e.TestSuiteConfig(t, testCfg) + tsConfig.S3Config.Endpoint = "" + ts, kill := e2e.CreateTestSuite(t, tsConfig) + defer kill() + + daClient := op_plasma.NewDAClient(ts.Address(), false, true) + + testPreimage := []byte(e2e.RandString(100)) + + _, err := daClient.SetInput(ts.Ctx, testPreimage) + // TODO: the server currently returns an internal server error. Should it return a 400 instead? + require.Error(t, err) +} + /* this test asserts that the data can be posted/read to EigenDA with a concurrent S3 backend configured From d8c605b980b43a63559c278836afbe58de66910a Mon Sep 17 00:00:00 2001 From: Samuel Laferriere Date: Tue, 17 Sep 2024 15:25:46 -0700 Subject: [PATCH 3/5] fix: panic on nil ptr dereference when s3 backend not set --- server/load_store.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/load_store.go b/server/load_store.go index e73f09d..376a5dd 100644 --- a/server/load_store.go +++ b/server/load_store.go @@ -11,7 +11,7 @@ import ( ) // populateTargets ... creates a list of storage backends based on the provided target strings -func populateTargets(targets []string, s3 *store.S3Store, redis *store.RedStore) []store.PrecomputedKeyStore { +func populateTargets(targets []string, s3 store.PrecomputedKeyStore, redis *store.RedStore) []store.PrecomputedKeyStore { stores := make([]store.PrecomputedKeyStore, len(targets)) for i, f := range targets { @@ -42,7 +42,7 @@ func populateTargets(targets []string, s3 *store.S3Store, redis *store.RedStore) func LoadStoreRouter(ctx context.Context, cfg CLIConfig, log log.Logger) (store.IRouter, error) { // create S3 backend store (if enabled) var err error - var s3 *store.S3Store + var s3 store.PrecomputedKeyStore var redis *store.RedStore if cfg.S3Config.Bucket != "" && cfg.S3Config.Endpoint != "" { From 6736fdf1b4c32058fc09ebaddad5600f692c31a9 Mon Sep 17 00:00:00 2001 From: Samuel Laferriere Date: Tue, 17 Sep 2024 21:05:56 -0700 Subject: [PATCH 4/5] fix: lint --- e2e/server_test.go | 2 +- e2e/setup.go | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/e2e/server_test.go b/e2e/server_test.go index 10f31d5..4f83946 100644 --- a/e2e/server_test.go +++ b/e2e/server_test.go @@ -126,7 +126,7 @@ func TestProxyClient(t *testing.T) { func TestProxyServerWithLargeBlob(t *testing.T) { if !runIntegrationTests && !runTestnetIntegrationTests { - // t.Skip("Skipping test as INTEGRATION or TESTNET env var not set") + t.Skip("Skipping test as INTEGRATION or TESTNET env var not set") } t.Parallel() diff --git a/e2e/setup.go b/e2e/setup.go index ba13012..b91cdd6 100644 --- a/e2e/setup.go +++ b/e2e/setup.go @@ -163,7 +163,6 @@ type TestSuite struct { } func CreateTestSuite(t *testing.T, testSuiteCfg server.CLIConfig) (TestSuite, func()) { - log := oplog.NewLogger(os.Stdout, oplog.CLIConfig{ Level: log.LevelDebug, Format: oplog.FormatLogFmt, From 5e2e47116b9b0450591d06b070cdb53e2d9b06f1 Mon Sep 17 00:00:00 2001 From: Samuel Laferriere Date: Tue, 17 Sep 2024 21:14:42 -0700 Subject: [PATCH 5/5] fix: e2e tests --- e2e/server_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/e2e/server_test.go b/e2e/server_test.go index 4f83946..f093bcb 100644 --- a/e2e/server_test.go +++ b/e2e/server_test.go @@ -201,7 +201,7 @@ func TestProxyServerCaching(t *testing.T) { testCfg := e2e.TestConfig(useMemory()) testCfg.UseS3Caching = true - tsConfig := e2e.TestSuiteConfig(t, e2e.TestConfig(useMemory())) + tsConfig := e2e.TestSuiteConfig(t, testCfg) ts, kill := e2e.CreateTestSuite(t, tsConfig) defer kill() @@ -244,7 +244,7 @@ func TestProxyServerCachingWithRedis(t *testing.T) { testCfg := e2e.TestConfig(useMemory()) testCfg.UseRedisCaching = true - tsConfig := e2e.TestSuiteConfig(t, e2e.TestConfig(useMemory())) + tsConfig := e2e.TestSuiteConfig(t, testCfg) ts, kill := e2e.CreateTestSuite(t, tsConfig) defer kill() @@ -297,7 +297,7 @@ func TestProxyServerReadFallback(t *testing.T) { testCfg.UseS3Fallback = true testCfg.Expiration = time.Millisecond * 1 - tsConfig := e2e.TestSuiteConfig(t, e2e.TestConfig(useMemory())) + tsConfig := e2e.TestSuiteConfig(t, testCfg) ts, kill := e2e.CreateTestSuite(t, tsConfig) defer kill()