Update module name to github.com/fraktal/mev-beta and fix channel closing issues in pipeline stages

This commit is contained in:
Krypto Kajun
2025-09-12 19:08:38 -05:00
parent fbb85e529a
commit 1113d82499
31 changed files with 3359 additions and 210 deletions

View File

@@ -0,0 +1,129 @@
package config
import (
"os"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestLoad(t *testing.T) {
// Create a temporary config file for testing
tmpFile, err := os.CreateTemp("", "config_test_*.yaml")
require.NoError(t, err)
defer os.Remove(tmpFile.Name())
// Write test config content
configContent := `
arbitrum:
rpc_endpoint: "https://arb1.arbitrum.io/rpc"
ws_endpoint: ""
chain_id: 42161
rate_limit:
requests_per_second: 10
max_concurrent: 5
burst: 20
bot:
enabled: true
polling_interval: 1
min_profit_threshold: 10.0
gas_price_multiplier: 1.2
max_workers: 10
channel_buffer_size: 100
rpc_timeout: 30
uniswap:
factory_address: "0x1F98431c8aD98523631AE4a59f267346ea31F984"
position_manager_address: "0xC36442b4a4522E871399CD717aBDD847Ab11FE88"
fee_tiers:
- 500
- 3000
- 10000
cache:
enabled: true
expiration: 300
max_size: 10000
log:
level: "info"
format: "text"
file: ""
database:
file: "mev-bot.db"
max_open_connections: 10
max_idle_connections: 5
`
_, err = tmpFile.Write([]byte(configContent))
require.NoError(t, err)
err = tmpFile.Close()
require.NoError(t, err)
// Test loading the config
cfg, err := Load(tmpFile.Name())
require.NoError(t, err)
// Verify the loaded config
assert.Equal(t, "https://arb1.arbitrum.io/rpc", cfg.Arbitrum.RPCEndpoint)
assert.Equal(t, int64(42161), cfg.Arbitrum.ChainID)
assert.Equal(t, 10, cfg.Arbitrum.RateLimit.RequestsPerSecond)
assert.True(t, cfg.Bot.Enabled)
assert.Equal(t, 1, cfg.Bot.PollingInterval)
assert.Equal(t, 10.0, cfg.Bot.MinProfitThreshold)
assert.Equal(t, "0x1F98431c8aD98523631AE4a59f267346ea31F984", cfg.Uniswap.FactoryAddress)
assert.Len(t, cfg.Uniswap.FeeTiers, 3)
assert.Equal(t, true, cfg.Uniswap.Cache.Enabled)
assert.Equal(t, "info", cfg.Log.Level)
assert.Equal(t, "mev-bot.db", cfg.Database.File)
}
func TestLoadWithInvalidFile(t *testing.T) {
// Test loading a non-existent config file
_, err := Load("/non/existent/file.yaml")
assert.Error(t, err)
}
func TestOverrideWithEnv(t *testing.T) {
// Create a temporary config file for testing
tmpFile, err := os.CreateTemp("", "config_test_*.yaml")
require.NoError(t, err)
defer os.Remove(tmpFile.Name())
// Write test config content
configContent := `
arbitrum:
rpc_endpoint: "https://arb1.arbitrum.io/rpc"
rate_limit:
requests_per_second: 10
max_concurrent: 5
bot:
max_workers: 10
channel_buffer_size: 100
`
_, err = tmpFile.Write([]byte(configContent))
require.NoError(t, err)
err = tmpFile.Close()
require.NoError(t, err)
// Set environment variables to override config
os.Setenv("ARBITRUM_RPC_ENDPOINT", "https://override.arbitrum.io/rpc")
os.Setenv("RPC_REQUESTS_PER_SECOND", "20")
os.Setenv("BOT_MAX_WORKERS", "20")
defer func() {
os.Unsetenv("ARBITRUM_RPC_ENDPOINT")
os.Unsetenv("RPC_REQUESTS_PER_SECOND")
os.Unsetenv("BOT_MAX_WORKERS")
}()
// Load the config
cfg, err := Load(tmpFile.Name())
require.NoError(t, err)
// Verify the overridden values
assert.Equal(t, "https://override.arbitrum.io/rpc", cfg.Arbitrum.RPCEndpoint)
assert.Equal(t, 20, cfg.Arbitrum.RateLimit.RequestsPerSecond)
assert.Equal(t, 20, cfg.Bot.MaxWorkers)
}