diff --git a/.github/workflows/cre-soak-memory-leak.yml b/.github/workflows/cre-soak-memory-leak.yml index 3121aa54c9a..7a9eabb9aa1 100644 --- a/.github/workflows/cre-soak-memory-leak.yml +++ b/.github/workflows/cre-soak-memory-leak.yml @@ -28,7 +28,7 @@ jobs: environment: name: integration deployment: false - runs-on: runs-on=${{ github.run_id }}/cpu=8+16/ram=32+64/family=c6id+m6id+m6idn/spot=false/image=ubuntu24-full-x64/extras=s3-cache + runs-on: runs-on=${{ github.run_id }}/cpu=32/ram=128/family=m6id+m6idn/spot=false/image=ubuntu24-full-x64/extras=s3-cache timeout-minutes: 270 # 4h30m — test timeout is 4h20m permissions: contents: read @@ -43,6 +43,7 @@ jobs: steps: - name: Enable S3 Cache for Self-Hosted Runners + if: ${{ env.RUNS_ON_INSTANCE_ID != '' && env.ACTIONS_CACHE_URL != '' }} uses: runs-on/action@742bf56072eb4845a0f94b3394673e4903c90ff0 # v2.1.0 with: metrics: cpu,network,memory,disk diff --git a/system-tests/tests/soak/cre/soak_test.go b/system-tests/tests/soak/cre/soak_test.go index 7a1196f2621..fa9c4b0a420 100644 --- a/system-tests/tests/soak/cre/soak_test.go +++ b/system-tests/tests/soak/cre/soak_test.go @@ -5,10 +5,13 @@ import ( "fmt" "math/big" "os" + "path/filepath" "testing" "time" "github.com/ethereum/go-ethereum/common" + "github.com/gin-gonic/gin" + "github.com/rs/zerolog" "github.com/stretchr/testify/require" "github.com/smartcontractkit/chainlink-evm/gethwrappers/data-feeds/generated/data_feeds_cache" @@ -56,8 +59,34 @@ func Test_CRE_PoR_MemoryLeakSoak(t *testing.T) { // registered. Subsequent calls to setupFakeDataProvider would overwrite the // HTTP handler and make previously-registered feeds return 400. allFeedIDs := smokecre.GenerateSoakFeedIDs(numWorkflows) + + logFileName := fmt.Sprintf("./%s-%s/soak-fake-price-provider.log", framework.DefaultCTFLogsDir, t.Name()) + if _, err := os.Stat(filepath.Dir(logFileName)); os.IsNotExist(err) { + require.NoError(t, os.MkdirAll(filepath.Dir(logFileName), 0755), "failed to create directory %s", filepath.Dir(logFileName)) + } + ppLogFile, openErr := os.OpenFile(logFileName, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0o644) + require.NoError(t, openErr, "failed to open %d", logFileName) + oldGinDefaultWriter := gin.DefaultWriter + oldGinDefaultErrorWriter := gin.DefaultErrorWriter + // fake.NewFakeDataProvider uses gin.Default(), so redirect Gin's global request/error + // output to the soak provider log file to avoid flooding the main test logs. + gin.DefaultWriter = ppLogFile + gin.DefaultErrorWriter = ppLogFile + t.Cleanup(func() { + gin.DefaultWriter = oldGinDefaultWriter + gin.DefaultErrorWriter = oldGinDefaultErrorWriter + }) + + soakPPLogger := zerolog.New(ppLogFile). + Level(framework.L.GetLevel()). + With(). + Timestamp(). + Str("component", "soak-fake-price-provider"). + Logger() + framework.L.Info().Str("path", logFileName).Msg("redirecting soak fake price provider logs to file") + priceProvider, err := smokecre.NewFakePriceProviderForSoak( - framework.L, testEnv.Config.Fake, "", allFeedIDs, + soakPPLogger, testEnv.Config.Fake, "", allFeedIDs, ) require.NoError(t, err, "failed to create soak price provider")