Skip to content

feat(ext4): disable journal on rootfs mkfs#2565

Closed
ValentaTomas wants to merge 1 commit intomainfrom
feat/ext4-no-journal
Closed

feat(ext4): disable journal on rootfs mkfs#2565
ValentaTomas wants to merge 1 commit intomainfrom
feat/ext4-no-journal

Conversation

@ValentaTomas
Copy link
Copy Markdown
Member

@ValentaTomas ValentaTomas commented May 5, 2026

Drop has_journal from the rootfs mkfs feature list. The jbd2 commit timer dirties journal blocks every 5 s regardless of guest activity, inflating every snapshot diff. Also reclaims ~32 MiB at the front of the rootfs.

Snapshots come from a paused guest (no in-flight writes), so the journal's crash-recovery role across pause/resume is unused.

Risk: a guest kernel panic between snapshots can leave the rootfs inconsistent — resume always loads the previous good snapshot, so blast radius is bounded to one in-flight customer interaction. Want to discuss before flipping universally — feature flag is an easy follow-up.

Add ^has_journal to the mkfs feature list. The ext4 journal commits
metadata every 5 s (jbd2/commit timer) regardless of guest activity,
which dirties journal blocks on a fixed cadence and inflates every
snapshot diff. Removing the journal also reclaims ~32 MiB of disk
space at the front of the rootfs.

Snapshots are taken from a paused guest, so all in-flight writes have
already drained — the journal's crash-recovery guarantee across a
clean pause/resume isn't needed. A guest kernel panic between
snapshots can leave the rootfs inconsistent; resume always loads the
previous good snapshot, so the blast radius is bounded to one
in-flight customer interaction.

mkfs-time only; affects newly-built bases.
@cursor
Copy link
Copy Markdown

cursor Bot commented May 5, 2026

PR Summary

High Risk
Disabling has_journal changes ext4 crash-recovery semantics for all newly created rootfs images; a guest crash/panic between snapshots can persist filesystem corruption into the next snapshot and may require e2fsck repair.

Overview
This changes rootfs image creation to pass -O ^has_journal to mkfs.ext4, producing ext4 filesystems without a journal to avoid periodic metadata commits inflating snapshot diffs and to reclaim journal space. The main concern is reduced resilience to unexpected guest crashes between snapshots, where inconsistencies may persist until repaired.

Reviewed by Cursor Bugbot for commit e84b9c8. Bugbot is set up for automated code reviews on this repo. Configure here.

@codecov
Copy link
Copy Markdown

codecov Bot commented May 5, 2026

❌ 3 Tests Failed:

Tests completed Failed Passed Skipped
2355 3 2352 5
View the top 3 failed test(s) by shortest run time
github.com/e2b-dev/infra/packages/shared/pkg/cache::TestRedisCache_Lock_PreventsParallelCallbacks
Stack Traces | 15.2s run time
=== RUN   TestRedisCache_Lock_PreventsParallelCallbacks
=== PAUSE TestRedisCache_Lock_PreventsParallelCallbacks
=== CONT  TestRedisCache_Lock_PreventsParallelCallbacks
    redis_test.go:454: 
        	Error Trace:	.../pkg/redis/tests.go:27
        	            				.../pkg/cache/redis_test.go:454
        	Error:      	Received unexpected error:
        	            	create container: Error response from daemon: Head "https://registry-1.docker..../redis/manifests/8-alpine": Get "https://auth.docker.io/token?account=githubactions&scope=repository%3Alibrary%2Fredis%3Apull&service=registry.docker.io": net/http: request canceled (Client.Timeout exceeded while awaiting headers)
        	Test:       	TestRedisCache_Lock_PreventsParallelCallbacks
--- FAIL: TestRedisCache_Lock_PreventsParallelCallbacks (15.22s)
github.com/e2b-dev/infra/packages/shared/pkg/cache::TestRedisCache_RedisRefresh_ErrorKeepsStaleValue
Stack Traces | 15.2s run time
=== RUN   TestRedisCache_RedisRefresh_ErrorKeepsStaleValue
=== PAUSE TestRedisCache_RedisRefresh_ErrorKeepsStaleValue
=== CONT  TestRedisCache_RedisRefresh_ErrorKeepsStaleValue
    redis_test.go:314: 
        	Error Trace:	.../pkg/redis/tests.go:27
        	            				.../pkg/cache/redis_test.go:314
        	Error:      	Received unexpected error:
        	            	create container: Error response from daemon: Head "https://registry-1.docker..../redis/manifests/8-alpine": Get "https://auth.docker.io/token?account=githubactions&scope=repository%3Alibrary%2Fredis%3Apull&service=registry.docker.io": net/http: request canceled (Client.Timeout exceeded while awaiting headers)
        	Test:       	TestRedisCache_RedisRefresh_ErrorKeepsStaleValue
--- FAIL: TestRedisCache_RedisRefresh_ErrorKeepsStaleValue (15.22s)
github.com/e2b-dev/infra/packages/shared/pkg/cache::TestRedisCache_Delete
Stack Traces | 15.2s run time
=== RUN   TestRedisCache_Delete
=== PAUSE TestRedisCache_Delete
=== CONT  TestRedisCache_Delete
    redis_test.go:129: 
        	Error Trace:	.../pkg/redis/tests.go:27
        	            				.../pkg/cache/redis_test.go:129
        	Error:      	Received unexpected error:
        	            	create container: Error response from daemon: Head "https://registry-1.docker..../redis/manifests/8-alpine": Get "https://auth.docker.io/token?account=githubactions&scope=repository%3Alibrary%2Fredis%3Apull&service=registry.docker.io": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
        	Test:       	TestRedisCache_Delete
--- FAIL: TestRedisCache_Delete (15.23s)
github.com/e2b-dev/infra/packages/shared/pkg/cache::TestRedisCache_Singleflight
Stack Traces | 15.2s run time
=== RUN   TestRedisCache_Singleflight
=== PAUSE TestRedisCache_Singleflight
=== CONT  TestRedisCache_Singleflight
    redis_test.go:174: 
        	Error Trace:	.../pkg/redis/tests.go:27
        	            				.../pkg/cache/redis_test.go:174
        	Error:      	Received unexpected error:
        	            	create container: Error response from daemon: Head "https://registry-1.docker..../redis/manifests/8-alpine": Get "https://auth.docker.io/token?account=githubactions&scope=repository%3Alibrary%2Fredis%3Apull&service=registry.docker.io": net/http: request canceled (Client.Timeout exceeded while awaiting headers)
        	Test:       	TestRedisCache_Singleflight
--- FAIL: TestRedisCache_Singleflight (15.24s)
View the full list of 3 ❄️ flaky test(s)
github.com/e2b-dev/infra/tests/integration/internal/tests/api/metrics::TestTeamMetrics

Flake rate in main: 55.56% (Passed 4 times, Failed 5 times)

Stack Traces | 3.08s run time
=== RUN   TestTeamMetrics
=== PAUSE TestTeamMetrics
=== CONT  TestTeamMetrics
    team_metrics_test.go:61: 
        	Error Trace:	.../api/metrics/team_metrics_test.go:61
        	Error:      	Should be true
        	Test:       	TestTeamMetrics
        	Messages:   	MaxConcurrentSandboxes should be >= 0
--- FAIL: TestTeamMetrics (3.08s)
github.com/e2b-dev/infra/tests/integration/internal/tests/api/sandboxes::TestUpdateNetworkConfig

Flake rate in main: 57.14% (Passed 6 times, Failed 8 times)

Stack Traces | 141s run time
=== RUN   TestUpdateNetworkConfig
=== PAUSE TestUpdateNetworkConfig
=== CONT  TestUpdateNetworkConfig
--- FAIL: TestUpdateNetworkConfig (141.39s)
github.com/e2b-dev/infra/tests/integration/internal/tests/api/sandboxes::TestUpdateNetworkConfig/pause_resume_preserves_allow_internet_access_false

Flake rate in main: 50.00% (Passed 6 times, Failed 6 times)

Stack Traces | 1.36s run time
=== RUN   TestUpdateNetworkConfig/pause_resume_preserves_allow_internet_access_false
Executing command curl in sandbox ie25w6rthtxbti9to447x
    sandbox_network_update_test.go:372: Command [curl] output: event:{start:{pid:1367}}
    sandbox_network_update_test.go:372: Command [curl] output: event:{end:{exit_code:35 exited:true status:"exit status 35" error:"exit status 35"}}
Executing command curl in sandbox ie25w6rthtxbti9to447x
    sandbox_network_update_test.go:372: Command [curl] output: event:{start:{pid:1368}}
    sandbox_network_update_test.go:372: Command [curl] output: event:{end:{exit_code:35 exited:true status:"exit status 35" error:"exit status 35"}}
    sandbox_network_update_test.go:391: Command [curl] output: event:{start:{pid:1369}}
    sandbox_network_update_test.go:391: Command [curl] output: event:{data:{stdout:"HTTP/2 302 \r\nx-content-type-options: nosniff\r\nlocation: https://dns.google/\r\ndate: Tue, 05 May 2026 01:30:22 GMT\r\ncontent-type: text/html; charset=UTF-8\r\nserver: HTTP server (unknown)\r\ncontent-length: 216\r\nx-xss-protection: 0\r\nx-frame-options: SAMEORIGIN\r\nalt-svc: h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000\r\n\r\n"}}
    sandbox_network_update_test.go:391: Command [curl] output: event:{end:{exited:true status:"exit status 0"}}
    sandbox_network_update_test.go:391: Command [curl] completed successfully in sandbox ie25w6rthtxbti9to447x
    sandbox_network_update_test.go:391: 
        	Error Trace:	.../api/sandboxes/sandbox_network_out_test.go:74
        	            				.../api/sandboxes/sandbox_network_update_test.go:60
        	            				.../api/sandboxes/sandbox_network_update_test.go:391
        	Error:      	An error is expected but got nil.
        	Test:       	TestUpdateNetworkConfig/pause_resume_preserves_allow_internet_access_false
        	Messages:   	https://8.8.8.8 should be blocked
--- FAIL: TestUpdateNetworkConfig/pause_resume_preserves_allow_internet_access_false (1.36s)

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

Disabling the ext4 journal will cause resize2fs to fail on dirty filesystems, which occurs with snapshots of running VMs, thereby breaking disk scaling for resumed sandboxes.

// between snapshots can leave the rootfs inconsistent; resume always
// loads the previous good snapshot, so blast radius is bounded to
// one in-flight customer interaction.
"^has_journal",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

Disabling the journal causes resize2fs (used in Resize and Shrink) to fail on filesystems that are not perfectly clean. Since snapshots of running VMs are crash-consistent but not cleanly unmounted, they are marked as dirty. Without a journal for automatic recovery, resize2fs will refuse to run, breaking disk scaling for resumed sandboxes.

@qodo-code-review
Copy link
Copy Markdown

CI Feedback 🧐

A test triggered by this PR failed. Here is an AI-generated analysis of the failure:

Action: arm64-tests / ARM64 tests for packages/shared

Failed stage: Run tests [❌]

Failed test name: TestRedisCache_RedisRefresh_ErrorKeepsStaleValue

Failure summary:

The action failed during gotestsum because multiple Redis-related unit tests in
packages/shared/pkg/cache could not start a Redis test container.
- Failing tests attempt to create
container using the redis:8-alpine image, but the runner cannot reach Docker Hub to fetch the image
manifest/token:
- Head "https://registry-1.docker.io/v2/library/redis/manifests/8-alpine" followed
by a request to https://auth.docker.io/token... timing out (Client.Timeout exceeded while awaiting
headers / context deadline exceeded).
- This caused 4 test failures and gotestsum exited with code
1:
- packages/shared/pkg/cache/redis_test.go:314 (/pkg/redis/tests.go:27) for
TestRedisCache_RedisRefresh_ErrorKeepsStaleValue
- packages/shared/pkg/cache/redis_test.go:454
(/pkg/redis/tests.go:27) for TestRedisCache_Lock_PreventsParallelCallbacks
-
packages/shared/pkg/cache/redis_test.go:129 (/pkg/redis/tests.go:27) for TestRedisCache_Delete
-
packages/shared/pkg/cache/redis_test.go:174 (/pkg/redis/tests.go:27) for TestRedisCache_Singleflight

Note: earlier redis: connection pool: failed to dial ... localhost:1 messages occurred during
passing tests and appear to be part of expected error-path testing, not the failure cause.

Relevant error logs:
1:  ##[group]Runner Image Provisioner
2:  Hosted Compute Agent
...

261:  go: downloading github.com/gin-gonic/gin v1.12.0
262:  go: downloading github.com/hashicorp/nomad/api v0.0.0-20251216171439-1dee0671280e
263:  go: downloading go.uber.org/zap v1.27.1
264:  go: downloading github.com/dchest/uniuri v1.2.0
265:  go: downloading github.com/oapi-codegen/runtime v1.4.0
266:  go: downloading github.com/bsm/redislock v0.9.4
267:  go: downloading cloud.google.com/go/artifactregistry v1.19.0
268:  go: downloading google.golang.org/protobuf v1.36.11
269:  go: downloading connectrpc.com/connect v1.18.1
270:  go: downloading github.com/google/uuid v1.6.0
271:  go: downloading github.com/stretchr/testify v1.11.1
272:  go: downloading google.golang.org/grpc v1.80.0
273:  go: downloading github.com/go-openapi/runtime v0.29.2
274:  go: downloading github.com/Masterminds/semver/v3 v3.4.0
275:  go: downloading github.com/redis/go-redis/v9 v9.17.3
276:  go: downloading github.com/go-openapi/errors v0.22.6
277:  go: downloading github.com/aws/aws-sdk-go-v2/config v1.32.6
...

315:  go: downloading github.com/go-openapi/swag/jsonutils v0.25.4
316:  go: downloading github.com/go-openapi/swag/jsonname v0.25.4
317:  go: downloading github.com/go-openapi/swag/loading v0.25.4
318:  go: downloading github.com/go-openapi/swag/mangling v0.25.4
319:  go: downloading github.com/go-openapi/swag/netutils v0.25.4
320:  go: downloading github.com/go-openapi/swag/stringutils v0.25.4
321:  go: downloading github.com/go-openapi/swag/yamlutils v0.25.4
322:  go: downloading github.com/go-openapi/swag/typeutils v0.25.4
323:  go: downloading github.com/go-viper/mapstructure/v2 v2.5.0
324:  go: downloading github.com/oklog/ulid v1.3.1
325:  go: downloading go.mongodb.org/mongo-driver v1.17.6
326:  go: downloading golang.org/x/net v0.53.0
327:  go: downloading github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674
328:  go: downloading github.com/hashicorp/cronexpr v1.1.3
329:  go: downloading github.com/hashicorp/go-cleanhttp v0.5.2
330:  go: downloading github.com/hashicorp/go-multierror v1.1.1
331:  go: downloading github.com/hashicorp/go-rootcerts v1.0.2
...

463:  go: downloading github.com/mattn/go-colorable v0.1.14
464:  go: downloading github.com/spiffe/go-spiffe/v2 v2.6.0
465:  go: downloading github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5
466:  go: downloading github.com/envoyproxy/go-control-plane v0.14.0
467:  go: downloading github.com/envoyproxy/protoc-gen-validate v1.3.0
468:  go: downloading github.com/go-jose/go-jose/v4 v4.1.4
469:  go: downloading github.com/grafana/dskit v0.0.0-20250917065751-798f5a8fa154
470:  go: downloading cel.dev/expr v0.25.1
471:  go: downloading github.com/json-iterator/go v1.1.12
472:  go: downloading github.com/prometheus/common v0.67.4
473:  go: downloading github.com/prometheus/prometheus v0.309.1
474:  go: downloading github.com/c2h5oh/datasize v0.0.0-20231215233829-aa82cc1e6500
475:  go: downloading github.com/gorilla/mux v1.8.1
476:  go: downloading github.com/grafana/jsonparser v0.0.0-20241004153430-023329977675
477:  go: downloading github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee
478:  go: downloading github.com/pkg/errors v0.9.1
479:  go: downloading github.com/gogo/protobuf v1.3.2
...

601:  go: downloading github.com/gobwas/glob v0.2.3
602:  go: downloading go.opentelemetry.io/collector/featuregate v1.48.0
603:  go: downloading github.com/hashicorp/go-version v1.8.0
604:  go: downloading github.com/coreos/go-semver v0.3.1
605:  go: downloading github.com/googleapis/enterprise-certificate-proxy v0.3.11
606:  go: downloading cloud.google.com/go/auth/oauth2adapt v0.2.8
607:  go: downloading github.com/google/s2a-go v0.1.9
608:  go: downloading k8s.io/utils v0.0.0-20250604170112-4c0f3b243397
609:  go: downloading k8s.io/apimachinery v0.34.3
610:  go: downloading k8s.io/klog/v2 v2.130.1
611:  go: downloading k8s.io/klog v1.0.0
612:  go: downloading github.com/mschoch/smat v0.2.0
613:  go: downloading github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2
614:  go: downloading github.com/AzureAD/microsoft-authentication-library-for-go v1.6.0
615:  go: downloading github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c
616:  ?   	github.com/e2b-dev/infra/packages/shared/pkg/apierrors	[no test files]
617:  ?   	github.com/e2b-dev/infra/packages/shared/pkg/artifacts-registry	[no test files]
...

675:  ok  	github.com/e2b-dev/infra/packages/shared/pkg/syncroaring	0.003s [no tests to run]
676:  ?   	github.com/e2b-dev/infra/packages/shared/pkg/teamprovision	[no test files]
677:  ok  	github.com/e2b-dev/infra/packages/shared/pkg/telemetry	0.004s [no tests to run]
678:  ?   	github.com/e2b-dev/infra/packages/shared/pkg/templates	[no test files]
679:  ok  	github.com/e2b-dev/infra/packages/shared/pkg/utils	0.004s [no tests to run]
680:  ##[group]Run gotestsum --junitfile=junit.xml --format=standard-verbose \
681:  �[36;1mgotestsum --junitfile=junit.xml --format=standard-verbose \�[0m
682:  �[36;1m  -- -timeout 20m -coverprofile=coverage.txt -covermode=atomic ./pkg/...�[0m
683:  shell: /usr/bin/bash -e {0}
684:  env:
685:  GIN_MODE: test
686:  TESTCONTAINERS_RYUK_DISABLED: true
687:  CODECOV_TOKEN: ***
688:  GOTOOLCHAIN: local
689:  ##[endgroup]
690:  github.com/e2b-dev/infra/packages/shared/pkg/apierrors		coverage: 0.0% of statements
691:  github.com/e2b-dev/infra/packages/shared/pkg/artifacts-registry		coverage: 0.0% of statements
...

862:  ok  	github.com/e2b-dev/infra/packages/shared/pkg/connlimit	0.008s	coverage: 100.0% of statements
863:  === RUN   TestNewCache
864:  === PAUSE TestNewCache
865:  === RUN   TestNewCache_DefaultRefreshTimeout
866:  === PAUSE TestNewCache_DefaultRefreshTimeout
867:  === RUN   TestCache_SetAndGet
868:  === PAUSE TestCache_SetAndGet
869:  === RUN   TestCache_SetWithTTL
870:  === PAUSE TestCache_SetWithTTL
871:  === RUN   TestCache_Delete
872:  === PAUSE TestCache_Delete
873:  === RUN   TestCache_GetOrSet_CacheMiss
874:  === PAUSE TestCache_GetOrSet_CacheMiss
875:  === RUN   TestCache_GetOrSet_CacheHit
876:  === PAUSE TestCache_GetOrSet_CacheHit
877:  === RUN   TestCache_GetOrSet_CallbackError
878:  === PAUSE TestCache_GetOrSet_CallbackError
879:  === RUN   TestCache_GetOrSet_WithRefreshInterval
880:  === PAUSE TestCache_GetOrSet_WithRefreshInterval
881:  === RUN   TestCache_GetOrSet_RefreshOnlyOnce
882:  === PAUSE TestCache_GetOrSet_RefreshOnlyOnce
883:  === RUN   TestCache_GetOrSet_CacheMissSingleflight
884:  === PAUSE TestCache_GetOrSet_CacheMissSingleflight
885:  === RUN   TestCache_Refresh_DeletesOnError
886:  === PAUSE TestCache_Refresh_DeletesOnError
887:  === RUN   TestCache_ContextCancellation
888:  === PAUSE TestCache_ContextCancellation
889:  === RUN   TestCache_CallbackTimeout
890:  === PAUSE TestCache_CallbackTimeout
891:  === RUN   TestCache_ExtractKeyFunc
892:  === PAUSE TestCache_ExtractKeyFunc
893:  === RUN   TestRedisNoPTTL_MatchesRedisBehavior
894:  === PAUSE TestRedisNoPTTL_MatchesRedisBehavior
895:  === RUN   TestRedisCache_RedisHit
896:  === PAUSE TestRedisCache_RedisHit
897:  === RUN   TestRedisCache_CallbackFallback
898:  === PAUSE TestRedisCache_CallbackFallback
899:  === RUN   TestRedisCache_RedisErrorFallthrough
900:  === PAUSE TestRedisCache_RedisErrorFallthrough
901:  === RUN   TestRedisCache_Delete
902:  === PAUSE TestRedisCache_Delete
903:  === RUN   TestRedisCache_SetWritesRedis
904:  === PAUSE TestRedisCache_SetWritesRedis
905:  === RUN   TestRedisCache_Singleflight
906:  === PAUSE TestRedisCache_Singleflight
907:  === RUN   TestRedisCache_RedisRefresh_TriggeredWhenStale
908:  === PAUSE TestRedisCache_RedisRefresh_TriggeredWhenStale
909:  === RUN   TestRedisCache_RedisRefresh_UpdatesRedis
910:  === PAUSE TestRedisCache_RedisRefresh_UpdatesRedis
911:  === RUN   TestRedisCache_RedisRefresh_ErrorKeepsStaleValue
912:  === PAUSE TestRedisCache_RedisRefresh_ErrorKeepsStaleValue
913:  === RUN   TestRedisCache_RedisRefresh_Disabled
...

917:  === RUN   TestRedisCache_DeleteByPrefix_NoMatches
918:  === PAUSE TestRedisCache_DeleteByPrefix_NoMatches
919:  === RUN   TestRedisCache_Lock_PreventsParallelCallbacks
920:  === PAUSE TestRedisCache_Lock_PreventsParallelCallbacks
921:  === RUN   TestRedisCache_Lock_GracefulDegradation
922:  === PAUSE TestRedisCache_Lock_GracefulDegradation
923:  === RUN   TestRedisCache_Lock_Disabled
924:  === PAUSE TestRedisCache_Lock_Disabled
925:  === CONT  TestNewCache
926:  === CONT  TestRedisCache_Lock_Disabled
927:  --- PASS: TestNewCache (0.00s)
928:  === CONT  TestRedisCache_Lock_PreventsParallelCallbacks
929:  === CONT  TestRedisCache_DeleteByPrefix_NoMatches
930:  === CONT  TestRedisCache_Lock_GracefulDegradation
931:  === CONT  TestRedisCache_DeleteByPrefix
932:  === CONT  TestRedisCache_RedisRefresh_ErrorKeepsStaleValue
933:  === CONT  TestRedisCache_RedisRefresh_Disabled
934:  === CONT  TestRedisCache_RedisRefresh_UpdatesRedis
935:  === CONT  TestRedisCache_RedisRefresh_TriggeredWhenStale
936:  === CONT  TestRedisCache_Singleflight
937:  === CONT  TestRedisCache_SetWritesRedis
938:  === CONT  TestRedisCache_Delete
939:  === CONT  TestRedisCache_RedisErrorFallthrough
940:  === CONT  TestRedisCache_CallbackFallback
941:  === CONT  TestRedisCache_RedisHit
942:  === CONT  TestRedisNoPTTL_MatchesRedisBehavior
943:  === CONT  TestCache_ExtractKeyFunc
944:  === RUN   TestCache_ExtractKeyFunc/extract_key_from_value_on_cache_miss
945:  === PAUSE TestCache_ExtractKeyFunc/extract_key_from_value_on_cache_miss
946:  === RUN   TestCache_ExtractKeyFunc/extract_key_without_ExtractKeyFunc
947:  === PAUSE TestCache_ExtractKeyFunc/extract_key_without_ExtractKeyFunc
948:  === CONT  TestCache_ExtractKeyFunc/extract_key_from_value_on_cache_miss
949:  --- PASS: TestCache_ExtractKeyFunc/extract_key_from_value_on_cache_miss (0.00s)
950:  === CONT  TestCache_CallbackTimeout
951:  === CONT  TestCache_ExtractKeyFunc/extract_key_without_ExtractKeyFunc
952:  --- PASS: TestCache_ExtractKeyFunc/extract_key_without_ExtractKeyFunc (0.00s)
953:  --- PASS: TestCache_ExtractKeyFunc (0.00s)
954:  === CONT  TestCache_ContextCancellation
955:  === CONT  TestCache_Refresh_DeletesOnError
956:  === CONT  TestCache_GetOrSet_CacheMissSingleflight
957:  === CONT  TestCache_GetOrSet_RefreshOnlyOnce
958:  === CONT  TestCache_GetOrSet_WithRefreshInterval
959:  === CONT  TestCache_GetOrSet_CallbackError
960:  --- PASS: TestCache_GetOrSet_CallbackError (0.00s)
961:  === CONT  TestCache_GetOrSet_CacheHit
...

976:  --- PASS: TestNewCache_DefaultRefreshTimeout (0.00s)
977:  === CONT  TestCache_SetAndGet/set_and_get_value
978:  --- PASS: TestCache_SetAndGet/set_and_get_value (0.00s)
979:  === CONT  TestCache_SetAndGet/overwrite_existing_value
980:  --- PASS: TestCache_SetAndGet/overwrite_existing_value (0.00s)
981:  === CONT  TestCache_SetAndGet/get_non-existent_key
982:  --- PASS: TestCache_SetAndGet/get_non-existent_key (0.00s)
983:  --- PASS: TestCache_SetAndGet (0.00s)
984:  --- PASS: TestCache_CallbackTimeout (0.01s)
985:  github.com/e2b-dev/infra/packages/shared/pkg/clusters		coverage: 0.0% of statements
986:  github.com/e2b-dev/infra/packages/shared/pkg/factories		coverage: 0.0% of statements
987:  github.com/e2b-dev/infra/packages/shared/pkg/edge		coverage: 0.0% of statements
988:  github.com/e2b-dev/infra/packages/shared/pkg/clusters/discovery		coverage: 0.0% of statements
989:  github.com/e2b-dev/infra/packages/shared/pkg/env		coverage: 0.0% of statements
990:  --- PASS: TestCache_ContextCancellation (0.10s)
991:  redis: 2026/05/05 01:20:53 pool.go:426: redis: connection pool: failed to dial after 1 attempts: dial tcp [::1]:1: connect: connection refused
992:  --- PASS: TestCache_GetOrSet_CacheMissSingleflight (0.10s)
993:  redis: 2026/05/05 01:20:53 pool.go:426: redis: connection pool: failed to dial after 2 attempts: dial tcp 127.0.0.1:1: i/o timeout
994:  --- PASS: TestCache_SetWithTTL (0.15s)
995:  redis: 2026/05/05 01:20:53 pool.go:426: redis: connection pool: failed to dial after 1 attempts: dial tcp 127.0.0.1:1: connect: connection refused
996:  redis: 2026/05/05 01:20:53 pool.go:426: redis: connection pool: failed to dial after 2 attempts: dial tcp: lookup localhost: i/o timeout
997:  --- PASS: TestCache_GetOrSet_WithRefreshInterval (0.30s)
998:  --- PASS: TestCache_Refresh_DeletesOnError (0.30s)
999:  redis: 2026/05/05 01:20:53 pool.go:426: redis: connection pool: failed to dial after 1 attempts: dial tcp [::1]:1: connect: connection refused
1000:  redis: 2026/05/05 01:20:53 pool.go:426: redis: connection pool: failed to dial after 2 attempts: dial tcp 127.0.0.1:1: i/o timeout
1001:  --- PASS: TestCache_GetOrSet_RefreshOnlyOnce (0.40s)
1002:  redis: 2026/05/05 01:20:53 pool.go:426: redis: connection pool: failed to dial after 1 attempts: dial tcp [::1]:1: connect: connection refused
1003:  redis: 2026/05/05 01:20:53 pool.go:426: redis: connection pool: failed to dial after 2 attempts: dial tcp 127.0.0.1:1: i/o timeout
1004:  --- PASS: TestRedisCache_RedisErrorFallthrough (0.42s)
1005:  redis: 2026/05/05 01:20:53 pool.go:426: redis: connection pool: failed to dial after 2 attempts: dial tcp: lookup localhost: i/o timeout
1006:  github.com/e2b-dev/infra/packages/shared/pkg/fc/client		coverage: 0.0% of statements
...

1142:  === RUN   TestGenerateKey
1143:  === PAUSE TestGenerateKey
1144:  === RUN   TestGetMaskedIdentifierProperties
1145:  === PAUSE TestGetMaskedIdentifierProperties
1146:  === RUN   TestSHA256Hashing
1147:  === PAUSE TestSHA256Hashing
1148:  === CONT  TestHMACSha256Hashing_ValidHash
1149:  --- PASS: TestHMACSha256Hashing_ValidHash (0.00s)
1150:  === CONT  TestHMACSha256Hashing_IdenticalResult
1151:  --- PASS: TestHMACSha256Hashing_IdenticalResult (0.00s)
1152:  === CONT  TestHMACSha256Hashing_DifferentKey
1153:  --- PASS: TestHMACSha256Hashing_DifferentKey (0.00s)
1154:  === CONT  TestHMACSha256Hashing_EmptyContent
1155:  --- PASS: TestHMACSha256Hashing_EmptyContent (0.00s)
1156:  === CONT  TestGetMaskedIdentifierProperties
1157:  === RUN   TestGetMaskedIdentifierProperties/error:_value_length_<_suffix_length_(3_vs_4)
1158:  === PAUSE TestGetMaskedIdentifierProperties/error:_value_length_<_suffix_length_(3_vs_4)
1159:  === RUN   TestGetMaskedIdentifierProperties/error:_value_length_==_suffix_length_(4_vs_4)
1160:  === PAUSE TestGetMaskedIdentifierProperties/error:_value_length_==_suffix_length_(4_vs_4)
1161:  === RUN   TestGetMaskedIdentifierProperties/error:_value_length_<_suffix_length_(0_vs_4,_empty_value)
1162:  === PAUSE TestGetMaskedIdentifierProperties/error:_value_length_<_suffix_length_(0_vs_4,_empty_value)
1163:  === RUN   TestGetMaskedIdentifierProperties/success:_value_long_(10),_prefix_val_len_fully_used
1164:  === PAUSE TestGetMaskedIdentifierProperties/success:_value_long_(10),_prefix_val_len_fully_used
1165:  === RUN   TestGetMaskedIdentifierProperties/success:_value_medium_(5),_prefix_val_len_truncated_by_overlap
1166:  === PAUSE TestGetMaskedIdentifierProperties/success:_value_medium_(5),_prefix_val_len_truncated_by_overlap
1167:  === RUN   TestGetMaskedIdentifierProperties/success:_value_medium_(6),_prefix_val_len_fits_exactly
1168:  === PAUSE TestGetMaskedIdentifierProperties/success:_value_medium_(6),_prefix_val_len_fits_exactly
1169:  === CONT  TestGetMaskedIdentifierProperties/error:_value_length_<_suffix_length_(3_vs_4)
1170:  --- PASS: TestGetMaskedIdentifierProperties/error:_value_length_<_suffix_length_(3_vs_4) (0.00s)
1171:  === CONT  TestSHA256Hashing
1172:  --- PASS: TestSHA256Hashing (0.00s)
1173:  === CONT  TestGetMaskedIdentifierProperties/success:_value_medium_(6),_prefix_val_len_fits_exactly
1174:  --- PASS: TestGetMaskedIdentifierProperties/success:_value_medium_(6),_prefix_val_len_fits_exactly (0.00s)
1175:  === CONT  TestGetMaskedIdentifierProperties/success:_value_medium_(5),_prefix_val_len_truncated_by_overlap
1176:  --- PASS: TestGetMaskedIdentifierProperties/success:_value_medium_(5),_prefix_val_len_truncated_by_overlap (0.00s)
1177:  === CONT  TestGetMaskedIdentifierProperties/success:_value_long_(10),_prefix_val_len_fully_used
1178:  --- PASS: TestGetMaskedIdentifierProperties/success:_value_long_(10),_prefix_val_len_fully_used (0.00s)
1179:  === CONT  TestGetMaskedIdentifierProperties/error:_value_length_<_suffix_length_(0_vs_4,_empty_value)
1180:  --- PASS: TestGetMaskedIdentifierProperties/error:_value_length_<_suffix_length_(0_vs_4,_empty_value) (0.00s)
1181:  === CONT  TestGetMaskedIdentifierProperties/error:_value_length_==_suffix_length_(4_vs_4)
1182:  --- PASS: TestGetMaskedIdentifierProperties/error:_value_length_==_suffix_length_(4_vs_4) (0.00s)
1183:  --- PASS: TestGetMaskedIdentifierProperties (0.00s)
1184:  === CONT  TestGenerateKey
1185:  === RUN   TestGenerateKey/succeeds
1186:  === PAUSE TestGenerateKey/succeeds
1187:  === RUN   TestGenerateKey/no_prefix
1188:  === PAUSE TestGenerateKey/no_prefix
1189:  === CONT  TestGenerateKey/succeeds
1190:  === CONT  TestMaskKey
1191:  === CONT  TestGenerateKey/no_prefix
1192:  === RUN   TestMaskKey/succeeds:_value_longer_than_suffix_length
1193:  === PAUSE TestMaskKey/succeeds:_value_longer_than_suffix_length
1194:  === RUN   TestMaskKey/succeeds:_empty_prefix,_value_longer_than_suffix_length
1195:  === PAUSE TestMaskKey/succeeds:_empty_prefix,_value_longer_than_suffix_length
1196:  === RUN   TestMaskKey/error:_value_length_less_than_suffix_length
1197:  === PAUSE TestMaskKey/error:_value_length_less_than_suffix_length
1198:  === RUN   TestMaskKey/error:_value_length_equals_suffix_length
1199:  === PAUSE TestMaskKey/error:_value_length_equals_suffix_length
1200:  === CONT  TestMaskKey/succeeds:_value_longer_than_suffix_length
1201:  --- PASS: TestMaskKey/succeeds:_value_longer_than_suffix_length (0.00s)
1202:  === CONT  TestMaskKey/error:_value_length_equals_suffix_length
1203:  --- PASS: TestMaskKey/error:_value_length_equals_suffix_length (0.00s)
1204:  === CONT  TestMaskKey/error:_value_length_less_than_suffix_length
1205:  --- PASS: TestMaskKey/error:_value_length_less_than_suffix_length (0.00s)
1206:  === CONT  TestMaskKey/succeeds:_empty_prefix,_value_longer_than_suffix_length
...

1510:  --- PASS: TestSplitIdentifier (0.00s)
1511:  PASS
1512:  coverage: 92.7% of statements
1513:  === RUN   TestHTTPWriterWaitGroupReuse
1514:  === PAUSE TestHTTPWriterWaitGroupReuse
1515:  === RUN   TestHTTPWriterConcurrentWriteSync
1516:  === PAUSE TestHTTPWriterConcurrentWriteSync
1517:  === RUN   TestHTTPWriterSequentialWrites
1518:  === PAUSE TestHTTPWriterSequentialWrites
1519:  === CONT  TestHTTPWriterWaitGroupReuse
1520:  coverage: 88.4% of statements
1521:  === CONT  TestHTTPWriterSequentialWrites
1522:  === CONT  TestHTTPWriterConcurrentWriteSync
1523:  ok  	github.com/e2b-dev/infra/packages/shared/pkg/id	0.009s	coverage: 92.7% of statements
1524:  ok  	github.com/e2b-dev/infra/packages/shared/pkg/filesystem	0.011s	coverage: 88.4% of statements
1525:  redis: 2026/05/05 01:20:53 pool.go:426: redis: connection pool: failed to dial after 2 attempts: dial tcp: lookup localhost: i/o timeout
1526:  --- PASS: TestRedisCache_Lock_GracefulDegradation (0.65s)
...

1603:  === CONT  TestGetTargetFromRequest/headers:_missing_sandbox_port
1604:  --- PASS: TestGetTargetFromRequest/headers:_missing_sandbox_port (0.00s)
1605:  === CONT  TestGetTargetFromRequest/headers:_missing_sandbox_id
1606:  --- PASS: TestGetTargetFromRequest/headers:_missing_sandbox_id (0.00s)
1607:  === CONT  TestGetTargetFromRequest/headers:_invalid_sandbox_id_with_uppercase
1608:  --- PASS: TestGetTargetFromRequest/headers:_invalid_sandbox_id_with_uppercase (0.00s)
1609:  === CONT  TestGetTargetFromRequest/sandbox-host-with-missing-domain
1610:  --- PASS: TestGetTargetFromRequest/sandbox-host-with-missing-domain (0.00s)
1611:  === CONT  TestGetTargetFromRequest/headers:_happy_path
1612:  --- PASS: TestGetTargetFromRequest/headers:_happy_path (0.00s)
1613:  === CONT  TestGetTargetFromRequest/sandbox-host-with-missing-domain-and-port
1614:  --- PASS: TestGetTargetFromRequest/sandbox-host-with-missing-domain-and-port (0.00s)
1615:  --- PASS: TestGetTargetFromRequest (0.00s)
1616:  === RUN   TestProxyRoutesToTargetServer
1617:  === PAUSE TestProxyRoutesToTargetServer
1618:  === RUN   TestProxyResumePermissionDeniedErrorTemplate
1619:  === PAUSE TestProxyResumePermissionDeniedErrorTemplate
1620:  === RUN   TestProxySandboxStillTransitioningErrorTemplate
1621:  === PAUSE TestProxySandboxStillTransitioningErrorTemplate
1622:  === RUN   TestProxyTeamSandboxLimitError
1623:  === PAUSE TestProxyTeamSandboxLimitError
1624:  === RUN   TestProxyReusesConnections
...

1708:  === PAUSE TestRequestTimeout_SetsDeadline
1709:  === RUN   TestRequestTimeout_CancelsBlockingHandler
1710:  === PAUSE TestRequestTimeout_CancelsBlockingHandler
1711:  === RUN   TestRequestTimeout_NormalRequestContextNotCanceled
1712:  === PAUSE TestRequestTimeout_NormalRequestContextNotCanceled
1713:  === RUN   TestRequestTimeout_TimeoutContextVisibleToOuterMiddleware
1714:  === PAUSE TestRequestTimeout_TimeoutContextVisibleToOuterMiddleware
1715:  === CONT  TestRequestTimeout_SetsDeadline
1716:  --- PASS: TestRequestTimeout_SetsDeadline (0.00s)
1717:  === CONT  TestRequestTimeout_TimeoutContextVisibleToOuterMiddleware
1718:  === CONT  TestRequestTimeout_NormalRequestContextNotCanceled
1719:  --- PASS: TestRequestTimeout_NormalRequestContextNotCanceled (0.00s)
1720:  === CONT  TestRequestTimeout_CancelsBlockingHandler
1721:  === CONT  TestConnectionLimitBlocksExcessConnections
1722:  === CONT  TestChangeResponseHeader
1723:  === CONT  TestProxyResumePermissionDeniedErrorTemplate
1724:  === CONT  TestProxyResetAliveConnectionsFromPool
1725:  === RUN   TestProxyResumePermissionDeniedErrorTemplate/json_for_non-browser
1726:  === PAUSE TestProxyResumePermissionDeniedErrorTemplate/json_for_non-browser
1727:  === RUN   TestProxyResumePermissionDeniedErrorTemplate/html_for_browser
1728:  === PAUSE TestProxyResumePermissionDeniedErrorTemplate/html_for_browser
1729:  === CONT  TestProxyResumePermissionDeniedErrorTemplate/json_for_non-browser
1730:  === CONT  TestProxyRetriesOnDelayedBackendStartup
1731:  === CONT  TestProxyCloseIdleConnectionsFromPool
1732:  === CONT  TestProxyDoesNotReuseConnectionsWhenBackendChanges
1733:  === CONT  TestProxyReusesConnections
1734:  === CONT  TestProxyReuseConnectionsWhenBackendChangesFails
1735:  === CONT  TestProxyTeamSandboxLimitError
1736:  === RUN   TestProxyTeamSandboxLimitError/json_for_non-browser
1737:  === PAUSE TestProxyTeamSandboxLimitError/json_for_non-browser
1738:  === RUN   TestProxyTeamSandboxLimitError/html_for_browser
1739:  === PAUSE TestProxyTeamSandboxLimitError/html_for_browser
1740:  === CONT  TestProxyTeamSandboxLimitError/json_for_non-browser
1741:  === CONT  TestProxySandboxStillTransitioningErrorTemplate
1742:  === RUN   TestProxySandboxStillTransitioningErrorTemplate/json_for_non-browser
1743:  === PAUSE TestProxySandboxStillTransitioningErrorTemplate/json_for_non-browser
1744:  === RUN   TestProxySandboxStillTransitioningErrorTemplate/html_for_browser
1745:  === PAUSE TestProxySandboxStillTransitioningErrorTemplate/html_for_browser
1746:  === CONT  TestProxySandboxStillTransitioningErrorTemplate/json_for_non-browser
1747:  === CONT  TestProxyResumePermissionDeniedErrorTemplate/html_for_browser
1748:  === CONT  TestProxyTeamSandboxLimitError/html_for_browser
1749:  === CONT  TestProxySandboxStillTransitioningErrorTemplate/html_for_browser
1750:  ok  	github.com/e2b-dev/infra/packages/shared/pkg/sandbox-network	0.005s	coverage: 61.5% of statements
1751:  --- PASS: TestProxyResumePermissionDeniedErrorTemplate/json_for_non-browser (0.01s)
1752:  --- PASS: TestProxyTeamSandboxLimitError/json_for_non-browser (0.02s)
1753:  === RUN   TestResponseMapper_DirectionOrdering
...

1804:  --- PASS: TestResponseMapper_DirectionOrdering (0.00s)
1805:  === CONT  TestSanitizeLogMessageRegexFilter/removes_backticks
1806:  --- PASS: TestSanitizeLogMessageRegexFilter/removes_backticks (0.00s)
1807:  === CONT  TestSanitizeLogMessageRegexFilter/backslashes
1808:  --- PASS: TestSanitizeLogMessageRegexFilter/backslashes (0.00s)
1809:  === CONT  TestSanitizeLogMessageRegexFilter/regex_meta
1810:  --- PASS: TestSanitizeLogMessageRegexFilter/regex_meta (0.00s)
1811:  --- PASS: TestSanitizeLogMessageRegexFilter (0.00s)
1812:  === CONT  TestSanitizeLokiLabel/empty
1813:  --- PASS: TestSanitizeLokiLabel/empty (0.00s)
1814:  === CONT  TestSanitizeLokiLabel/removes_backticks
1815:  --- PASS: TestSanitizeLokiLabel/removes_backticks (0.00s)
1816:  --- PASS: TestSanitizeLokiLabel (0.00s)
1817:  PASS
1818:  coverage: 55.3% of statements
1819:  --- PASS: TestProxySandboxStillTransitioningErrorTemplate/html_for_browser (0.02s)
1820:  --- PASS: TestProxyTeamSandboxLimitError/html_for_browser (0.02s)
1821:  --- PASS: TestProxySandboxStillTransitioningErrorTemplate/json_for_non-browser (0.02s)
1822:  ok  	github.com/e2b-dev/infra/packages/shared/pkg/logs/loki	0.025s	coverage: 55.3% of statements
1823:  --- PASS: TestProxyResumePermissionDeniedErrorTemplate/html_for_browser (0.02s)
1824:  --- PASS: TestProxyTeamSandboxLimitError (0.00s)
1825:  --- PASS: TestProxySandboxStillTransitioningErrorTemplate (0.00s)
1826:  --- PASS: TestProxyResumePermissionDeniedErrorTemplate (0.00s)
1827:  --- PASS: TestChangeResponseHeader (0.03s)
...

1891:  === PAUSE TestGetLockFilePath_Consistency
1892:  === RUN   TestGetLockFilePath_DifferentPaths
1893:  === PAUSE TestGetLockFilePath_DifferentPaths
1894:  === CONT  TestOpenFile
1895:  === RUN   TestOpenFile/happy_path
1896:  === RUN   TestSynchronize_SyncRespectsContextCancellation
1897:  === PAUSE TestSynchronize_SyncRespectsContextCancellation
1898:  === RUN   TestSynchronize_InsertAndRemove
1899:  === PAUSE TestSynchronize_InsertAndRemove
1900:  === CONT  TestSynchronize_SyncRespectsContextCancellation
1901:  === PAUSE TestOpenFile/happy_path
1902:  === RUN   TestOpenFile/close_without_commit_drops_new_data
1903:  === PAUSE TestOpenFile/close_without_commit_drops_new_data
1904:  === RUN   TestOpenFile/two_files_cannot_be_opened_at_the_same_time
1905:  === PAUSE TestOpenFile/two_files_cannot_be_opened_at_the_same_time
1906:  === RUN   TestOpenFile/missing_directory_returns_error
1907:  === PAUSE TestOpenFile/missing_directory_returns_error
1908:  === CONT  TestOpenFile/happy_path
1909:  === CONT  TestTryAcquireLock_AlreadyHeld
1910:  === CONT  TestSynchronize_InsertAndRemove
1911:  --- PASS: TestSynchronize_InsertAndRemove (0.00s)
1912:  === CONT  TestGetLockFilePath_Consistency
1913:  --- PASS: TestGetLockFilePath_Consistency (0.00s)
1914:  === CONT  TestReleaseLock_NilFile
1915:  --- PASS: TestReleaseLock_NilFile (0.00s)
1916:  === CONT  TestTryAcquireLock_StaleLock
1917:  === CONT  TestGetLockFilePath_DifferentPaths
1918:  --- PASS: TestGetLockFilePath_DifferentPaths (0.00s)
1919:  coverage: 70.0% of statements
1920:  === CONT  TestOpenFile/two_files_cannot_be_opened_at_the_same_time
1921:  === CONT  TestOpenFile/missing_directory_returns_error
1922:  --- PASS: TestOpenFile/happy_path (0.00s)
1923:  === CONT  TestOpenFile/close_without_commit_drops_new_data
1924:  --- PASS: TestTryAcquireLock_AlreadyHeld (0.00s)
1925:  === CONT  TestTryAcquireLock_Success
1926:  --- PASS: TestOpenFile/missing_directory_returns_error (0.00s)
1927:  === RUN   TestTargetArch_DefaultsToHostArch
...

1929:  === RUN   TestTargetArch_RespectsValidOverride
1930:  === RUN   TestTargetArch_RespectsValidOverride/amd64
1931:  --- PASS: TestTargetArch_RespectsValidOverride/amd64 (0.00s)
1932:  === RUN   TestTargetArch_RespectsValidOverride/arm64
1933:  --- PASS: TestTargetArch_RespectsValidOverride/arm64 (0.00s)
1934:  --- PASS: TestTargetArch_RespectsValidOverride (0.00s)
1935:  === RUN   TestTargetArch_NormalizesAliases
1936:  === RUN   TestTargetArch_NormalizesAliases/x86_64_→_amd64
1937:  --- PASS: TestTargetArch_NormalizesAliases/x86_64_→_amd64 (0.00s)
1938:  === RUN   TestTargetArch_NormalizesAliases/aarch64_→_arm64
1939:  --- PASS: TestTargetArch_NormalizesAliases/aarch64_→_arm64 (0.00s)
1940:  --- PASS: TestTargetArch_NormalizesAliases (0.00s)
1941:  === RUN   TestTargetArch_FallsBackOnUnknown
1942:  WARNING: unrecognized TARGET_ARCH="mips", falling back to arm64
1943:  --- PASS: TestTargetArch_FallsBackOnUnknown (0.00s)
1944:  === RUN   TestErrorOnce
1945:  === PAUSE TestErrorOnce
1946:  === RUN   TestErrorOnceSetSuccess
1947:  === PAUSE TestErrorOnceSetSuccess
1948:  === RUN   TestErrorCollector
1949:  === PAUSE TestErrorCollector
1950:  === RUN   TestAtomicMove_SuccessWhenDestMissing
...

1973:  === CONT  TestParseEdgeTraceID/rejects_malformed_aws_trace_id
1974:  --- PASS: TestParseEdgeTraceID/rejects_malformed_aws_trace_id (0.00s)
1975:  === CONT  TestParseEdgeTraceID/rejects_malformed_gcp_trace_id
1976:  --- PASS: TestParseEdgeTraceID/rejects_malformed_gcp_trace_id (0.00s)
1977:  === CONT  TestParseEdgeTraceID/falls_back_to_aws_trace_header
1978:  --- PASS: TestParseEdgeTraceID/falls_back_to_aws_trace_header (0.00s)
1979:  --- PASS: TestParseEdgeTraceID (0.00s)
1980:  === CONT  TestDedicatedPprofMuxServes
1981:  === CONT  TestDefaultServeMuxPassesThroughNonPprofPaths
1982:  === CONT  TestDefaultServeMuxBlocksPprofPaths
1983:  --- PASS: TestDedicatedPprofMuxServes (0.00s)
1984:  --- PASS: TestDefaultServeMuxBlocksPprofPaths (0.00s)
1985:  --- PASS: TestDefaultServeMuxPassesThroughNonPprofPaths (0.00s)
1986:  PASS
1987:  coverage: 14.6% of statements
1988:  === RUN   TestPromiseError
1989:  === PAUSE TestPromiseError
1990:  === RUN   TestPromiseDelayedResult
...

1993:  === PAUSE TestPromiseContextCancelled
1994:  === RUN   TestPromiseMultipleWaiters
1995:  === PAUSE TestPromiseMultipleWaiters
1996:  === RUN   TestPromiseDone
1997:  === PAUSE TestPromiseDone
1998:  === RUN   TestPromiseResultBeforeResolve
1999:  === PAUSE TestPromiseResultBeforeResolve
2000:  === RUN   TestPromiseResultAfterResolve
2001:  === PAUSE TestPromiseResultAfterResolve
2002:  === RUN   TestBasicAcquireTryRelease
2003:  === PAUSE TestBasicAcquireTryRelease
2004:  === RUN   TestAcquireWithLimitIncrease
2005:  === PAUSE TestAcquireWithLimitIncrease
2006:  === RUN   TestAcquireWithLimitDecrease
2007:  === PAUSE TestAcquireWithLimitDecrease
2008:  === RUN   TestAcquireErrorsOnNegativeN
2009:  === PAUSE TestAcquireErrorsOnNegativeN
2010:  === RUN   TestAcquireErrorsOnZeroN
2011:  === PAUSE TestAcquireErrorsOnZeroN
2012:  === RUN   TestReleaseErrorsOnNegativeN
2013:  === PAUSE TestReleaseErrorsOnNegativeN
2014:  === RUN   TestReleaseMoreThanAcquired
2015:  === PAUSE TestReleaseMoreThanAcquired
2016:  === RUN   TestReleaseErrorsOnZero
2017:  === PAUSE TestReleaseErrorsOnZero
2018:  === RUN   TestSetLimitErrorsOnNegativeLimit
2019:  === PAUSE TestSetLimitErrorsOnNegativeLimit
2020:  === RUN   TestSetLimitErrorsOnZeroLimit
2021:  === PAUSE TestSetLimitErrorsOnZeroLimit
2022:  === RUN   TestNewAdjustableSemaphoreErrorsOnNegativeLimit
2023:  === PAUSE TestNewAdjustableSemaphoreErrorsOnNegativeLimit
2024:  === RUN   TestNewAdjustableSemaphoreErrorsOnZeroLimit
2025:  === PAUSE TestNewAdjustableSemaphoreErrorsOnZeroLimit
2026:  === RUN   TestAcquireBlocksUntilRelease
2027:  === PAUSE TestAcquireBlocksUntilRelease
2028:  === RUN   TestAcquireUnblocksOnSetLimit
2029:  === PAUSE TestAcquireUnblocksOnSetLimit
2030:  === RUN   TestAcquireRespectsContextCancel
2031:  === PAUSE TestAcquireRespectsContextCancel
2032:  === RUN   TestConcurrentStressNoDeadlockOrRace
2033:  === PAUSE TestConcurrentStressNoDeadlockOrRace
2034:  === RUN   TestSetOnce
2035:  === PAUSE TestSetOnce
2036:  === RUN   TestSetOnceSetError
2037:  === PAUSE TestSetOnceSetError
2038:  === RUN   TestSetOnceWait
...

2050:  === PAUSE TestSetOnceConcurrentReads
2051:  === RUN   TestSetOnceConcurrentReadsWithContext
2052:  === PAUSE TestSetOnceConcurrentReadsWithContext
2053:  === RUN   TestSetOnceConcurrentReadersBeforeWrite
2054:  === PAUSE TestSetOnceConcurrentReadersBeforeWrite
2055:  === RUN   TestSetOnceConcurrentReadWriteRace
2056:  === PAUSE TestSetOnceConcurrentReadWriteRace
2057:  === RUN   TestNotSetResult
2058:  === PAUSE TestNotSetResult
2059:  === RUN   TestResultAfterDone
2060:  === PAUSE TestResultAfterDone
2061:  === RUN   TestMultipleDone
2062:  === PAUSE TestMultipleDone
2063:  === RUN   TestIsGTEVersion
2064:  === PAUSE TestIsGTEVersion
2065:  === CONT  TestErrorOnce
2066:  --- PASS: TestErrorOnce (0.00s)
2067:  === CONT  TestIsGTEVersion
...

2100:  === RUN   TestIsGTEVersion/both_versions_empty
2101:  === PAUSE TestIsGTEVersion/both_versions_empty
2102:  === RUN   TestIsGTEVersion/invalid_format_with_extra_dots
2103:  === PAUSE TestIsGTEVersion/invalid_format_with_extra_dots
2104:  === RUN   TestIsGTEVersion/invalid_format_with_spaces
2105:  === PAUSE TestIsGTEVersion/invalid_format_with_spaces
2106:  === CONT  TestIsGTEVersion/current_version_greater_than_minimum
2107:  --- PASS: TestIsGTEVersion/current_version_greater_than_minimum (0.00s)
2108:  === CONT  TestMultipleDone
2109:  === CONT  TestResultAfterDone
2110:  --- PASS: TestResultAfterDone (0.00s)
2111:  === CONT  TestNotSetResult
2112:  --- PASS: TestNotSetResult (0.00s)
2113:  === CONT  TestSetOnceConcurrentReadWriteRace
2114:  === CONT  TestSetOnceConcurrentReadersBeforeWrite
2115:  === CONT  TestPromiseError
2116:  --- PASS: TestPromiseError (0.00s)
2117:  === CONT  TestPromiseSuccess
2118:  --- PASS: TestPromiseSuccess (0.00s)
2119:  === CONT  TestAtomicMove_SuccessWhenDestMissing
2120:  --- PASS: TestSetOnceConcurrentReadWriteRace (0.00s)
2121:  === CONT  TestIsGTEVersion/empty_minimum_version
2122:  === CONT  TestSetOnceConcurrentReadsWithContext
2123:  --- PASS: TestMultipleDone (0.00s)
2124:  === CONT  TestSetOnceSetError
2125:  === CONT  TestAcquireUnblocksOnSetLimit
2126:  --- PASS: TestSetOnceSetError (0.00s)
2127:  === CONT  TestSetOnceConcurrentReads
2128:  === CONT  TestSetOnce
2129:  --- PASS: TestSetOnce (0.00s)
2130:  === CONT  TestConcurrentStressNoDeadlockOrRace
2131:  === CONT  TestSetOnceSetResultConcurrentWithContext
2132:  === CONT  TestSetOnceSetResultConcurrent
2133:  === CONT  TestSetOnceWaitWithContextCanceled
2134:  === CONT  TestSetOnceWaitWithContext
2135:  === CONT  TestSetOnceWait
2136:  === CONT  TestSetLimitErrorsOnNegativeLimit
2137:  === CONT  TestSetLimitErrorsOnZeroLimit
2138:  --- PASS: TestSetLimitErrorsOnNegativeLimit (0.00s)
2139:  === CONT  TestReleaseErrorsOnZero
2140:  --- PASS: TestSetLimitErrorsOnZeroLimit (0.00s)
2141:  === CONT  TestAcquireBlocksUntilRelease
2142:  --- PASS: TestReleaseErrorsOnZero (0.00s)
2143:  === CONT  TestNewAdjustableSemaphoreErrorsOnZeroLimit
2144:  --- PASS: TestNewAdjustableSemaphoreErrorsOnZeroLimit (0.00s)
2145:  === CONT  TestNewAdjustableSemaphoreErrorsOnNegativeLimit
2146:  --- PASS: TestNewAdjustableSemaphoreErrorsOnNegativeLimit (0.00s)
2147:  === CONT  TestReleaseMoreThanAcquired
2148:  --- PASS: TestReleaseMoreThanAcquired (0.00s)
2149:  === CONT  TestAcquireRespectsContextCancel
2150:  --- PASS: TestIsGTEVersion/empty_minimum_version (0.00s)
2151:  === CONT  TestErrorCollector
2152:  === RUN   TestErrorCollector/no_errors
2153:  === PAUSE TestErrorCollector/no_errors
2154:  === RUN   TestErrorCollector/one_error
2155:  === PAUSE TestErrorCollector/one_error
2156:  === RUN   TestErrorCollector/multiple_errors
2157:  === PAUSE TestErrorCollector/multiple_errors
2158:  === RUN   TestErrorCollector/waiting_can_be_canceled
2159:  === PAUSE TestErrorCollector/waiting_can_be_canceled
2160:  === CONT  TestAcquireErrorsOnNegativeN
2161:  === CONT  TestAcquireWithLimitDecrease
2162:  === CONT  TestAcquireWithLimitIncrease
2163:  === CONT  TestErrorOnceSetSuccess
2164:  === CONT  TestIsGTEVersion/invalid_format_with_spaces
2165:  --- PASS: TestIsGTEVersion/invalid_format_with_spaces (0.00s)
2166:  === CONT  TestIsGTEVersion/invalid_format_with_extra_dots
2167:  --- PASS: TestIsGTEVersion/invalid_format_with_extra_dots (0.00s)
2168:  === CONT  TestPromiseDone
2169:  === CONT  TestPromiseResultBeforeResolve
2170:  === CONT  TestIsGTEVersion/both_versions_empty
2171:  === CONT  TestPromiseMultipleWaiters
2172:  --- PASS: TestIsGTEVersion/both_versions_empty (0.00s)
2173:  === CONT  TestPromiseDelayedResult
2174:  === RUN   TestAtomicMove_SuccessWhenDestMissing/happy_path
2175:  === CONT  TestIsGTEVersion/empty_current_version
2176:  === PAUSE TestAtomicMove_SuccessWhenDestMissing/happy_path
2177:  --- PASS: TestIsGTEVersion/empty_current_version (0.00s)
2178:  === CONT  TestErrorCollector/no_errors
2179:  === RUN   TestAtomicMove_SuccessWhenDestMissing/fail_when_source_does_not_exist
2180:  === PAUSE TestAtomicMove_SuccessWhenDestMissing/fail_when_source_does_not_exist
2181:  === RUN   TestAtomicMove_SuccessWhenDestMissing/fail_when_destination_exists
2182:  --- PASS: TestErrorCollector/no_errors (0.00s)
2183:  === CONT  TestIsGTEVersion/minimum_version_missing_minor
2184:  --- PASS: TestIsGTEVersion/minimum_version_missing_minor (0.00s)
2185:  --- PASS: TestOpenFile/two_files_cannot_be_opened_at_the_same_time (0.00s)
2186:  --- PASS: TestOpenFile (0.00s)
2187:  --- PASS: TestTryAcquireLock_Success (0.00s)
2188:  PASS
2189:  coverage: 78.4% of statements
2190:  === CONT  TestErrorCollector/multiple_errors
2191:  === PAUSE TestAtomicMove_SuccessWhenDestMissing/fail_when_destination_exists
...

2201:  --- PASS: TestIsGTEVersion/pre-release_comparison (0.00s)
2202:  === CONT  TestIsGTEVersion/pre-release_versions
2203:  --- PASS: TestIsGTEVersion/pre-release_versions (0.00s)
2204:  === CONT  TestIsGTEVersion/mixed_v_prefix_reverse
2205:  --- PASS: TestIsGTEVersion/mixed_v_prefix_reverse (0.00s)
2206:  === CONT  TestIsGTEVersion/mixed_v_prefix
2207:  --- PASS: TestIsGTEVersion/mixed_v_prefix (0.00s)
2208:  === CONT  TestIsGTEVersion/versions_with_v_prefix
2209:  --- PASS: TestIsGTEVersion/versions_with_v_prefix (0.00s)
2210:  === CONT  TestIsGTEVersion/current_version_less_than_minimum
2211:  --- PASS: TestIsGTEVersion/current_version_less_than_minimum (0.00s)
2212:  === CONT  TestIsGTEVersion/current_version_equal_to_minimum
2213:  --- PASS: TestIsGTEVersion/current_version_equal_to_minimum (0.00s)
2214:  --- PASS: TestSetOnceSetResultConcurrent (0.00s)
2215:  --- PASS: TestSetOnceSetResultConcurrentWithContext (0.00s)
2216:  --- PASS: TestAcquireErrorsOnNegativeN (0.00s)
2217:  ok  	github.com/e2b-dev/infra/packages/shared/pkg/storage/lock	0.007s	coverage: 78.4% of statements
2218:  === CONT  TestAtomicMove_SuccessWhenDestMissing/succeed_when_source_cannot_be_removed
2219:  --- PASS: TestSetOnceConcurrentReads (0.00s)
2220:  --- PASS: TestErrorOnceSetSuccess (0.00s)
2221:  === CONT  TestAcquireErrorsOnZeroN
2222:  --- PASS: TestAcquireErrorsOnZeroN (0.00s)
2223:  === CONT  TestBasicAcquireTryRelease
2224:  --- PASS: TestBasicAcquireTryRelease (0.00s)
2225:  === CONT  TestPromiseResultAfterResolve
2226:  --- PASS: TestPromiseResultAfterResolve (0.00s)
2227:  --- PASS: TestSetOnceConcurrentReadsWithContext (0.00s)
2228:  --- PASS: TestPromiseResultBeforeResolve (0.00s)
2229:  === CONT  TestPromiseContextCancelled
2230:  === CONT  TestIsGTEVersion/current_version_missing_minor
2231:  --- PASS: TestIsGTEVersion/current_version_missing_minor (0.00s)
2232:  === CONT  TestErrorCollector/waiting_can_be_canceled
2233:  --- PASS: TestErrorCollector/multiple_errors (0.00s)
2234:  --- PASS: TestErrorCollector/waiting_can_be_canceled (0.00s)
2235:  === CONT  TestErrorCollector/one_error
2236:  === CONT  TestReleaseErrorsOnNegativeN
2237:  --- PASS: TestReleaseErrorsOnNegativeN (0.00s)
2238:  === CONT  TestAtomicMove_SuccessWhenDestMissing/fail_when_destination_exists
2239:  --- PASS: TestAtomicMove_SuccessWhenDestMissing/happy_path (0.00s)
2240:  --- PASS: TestAtomicMove_SuccessWhenDestMissing/succeed_when_source_cannot_be_removed (0.00s)
2241:  --- PASS: TestErrorCollector/one_error (0.00s)
2242:  --- PASS: TestErrorCollector (0.00s)
2243:  --- PASS: TestAtomicMove_SuccessWhenDestMissing/fail_when_destination_exists (0.00s)
...

2304:  === PAUSE TestNormalizeMappingsZeroLengthMapping
2305:  === RUN   TestNormalizeMappingsDoesNotModifyInput
2306:  === PAUSE TestNormalizeMappingsDoesNotModifyInput
2307:  === CONT  TestIsZero
2308:  --- PASS: TestIsZero (0.00s)
2309:  === CONT  TestNormalizeMappingsSingleMapping
2310:  === CONT  TestNormalizeMappingsNoAdjacentSameBuildId
2311:  === CONT  TestMergeMappingsRemoveEmpty
2312:  === PAUSE TestMultipartUploader_EdgeCases_EmptyFile
2313:  === RUN   TestMultipartUploader_EdgeCases_VerySmallFile
2314:  === PAUSE TestMultipartUploader_EdgeCases_VerySmallFile
2315:  === RUN   TestMultipartUploader_ResourceExhaustion_TooManyConcurrentUploads
2316:  === PAUSE TestMultipartUploader_ResourceExhaustion_TooManyConcurrentUploads
2317:  === RUN   TestMultipartUploader_BoundaryConditions_ExactChunkSize
2318:  === PAUSE TestMultipartUploader_BoundaryConditions_ExactChunkSize
2319:  === RUN   TestMultipartUploader_FileNotFound_Error
2320:  === PAUSE TestMultipartUploader_FileNotFound_Error
2321:  === RUN   TestMultipartUploader_ConcurrentRetries_RaceCondition
...

2495:  github.com/e2b-dev/infra/packages/shared/pkg/storage/storageopts		coverage: 0.0% of statements
2496:  github.com/e2b-dev/infra/packages/shared/pkg/storage/mocks		coverage: 0.0% of statements
2497:  --- PASS: TestPromiseDelayedResult (0.05s)
2498:  --- PASS: TestPromiseMultipleWaiters (0.05s)
2499:  --- PASS: TestAcquireWithLimitIncrease (0.05s)
2500:  --- PASS: TestPromiseDone (0.05s)
2501:  --- PASS: TestSynchronize_SyncRespectsContextCancellation (0.07s)
2502:  PASS
2503:  coverage: 60.3% of statements
2504:  ok  	github.com/e2b-dev/infra/packages/shared/pkg/synchronization	0.075s	coverage: 60.3% of statements
2505:  === CONT  TestMultipartUploader_EdgeCases_EmptyFile
2506:  === CONT  TestCreateRetryableClient_ZeroBackoff
2507:  === CONT  TestCachedObjectProvider_Put/can_be_cached_successfully
2508:  === PAUSE TestCachedFileObjectProvider_WriteTo/short_cache_file_returns_EOF_via_ReadAt
2509:  === CONT  TestMultipartUploader_PartialFailures_Recovery
2510:  === CONT  TestMultipartUploader_FileNotFound_Error
2511:  === CONT  TestCachedObjectProvider_Put/uncached_reads_will_be_cached_the_second_time
2512:  === CONT  TestRetryableClient_ActualRetryBehavior
2513:  === CONT  TestCachedSeekable_OpenRangeReader/cache_miss_then_full_read_populates_cache_for_next_call
2514:  === RUN   TestUploadSignedURL/PathWithSpecialChars
2515:  === PAUSE TestUploadSignedURL/PathWithSpecialChars
2516:  === PAUSE TestComputeHMAC/Deterministic
2517:  === RUN   TestComputeHMAC/DifferentInputs
2518:  === RUN   TestIsCompleteRead/short_read,_no_error
2519:  === PAUSE TestIsCompleteRead/short_read,_no_error
2520:  === RUN   TestIsCompleteRead/zero_bytes,_no_error
2521:  === PAUSE TestCachedFileObjectProvider_Size/can_be_cached_successfully
2522:  === PAUSE TestIsCompleteRead/zero_bytes,_no_error
2523:  === PAUSE TestCachedSeekable_ReadAt_PreservesEOF/EOF_from_inner_is_returned_to_caller_unchanged
...

2528:  === PAUSE TestCachedFileObjectProvider_validateReadAtParams/buffer_is_too_large_(unaligned)
2529:  --- PASS: TestWriteToNonExistentObject (0.00s)
2530:  --- PASS: TestFSPut (0.00s)
2531:  === RUN   TestCachedFileObjectProvider_validateReadAtParams/buffer_is_too_large_(aligned)
2532:  --- PASS: TestOpenObject_Write_Exists_WriteTo (0.00s)
2533:  === PAUSE TestCachedFileObjectProvider_validateReadAtParams/buffer_is_too_large_(aligned)
2534:  === RUN   TestCachedFileObjectProvider_validateReadAtParams/buffer_is_smaller_than_chunk_size
2535:  === PAUSE TestCachedFileObjectProvider_validateReadAtParams/buffer_is_smaller_than_chunk_size
2536:  === RUN   TestCachedFileObjectProvider_validateReadAtParams/buffer_is_empty
2537:  === PAUSE TestCachedFileObjectProvider_validateReadAtParams/buffer_is_empty
2538:  === RUN   TestCachedFileObjectProvider_WriteTo/consecutive_ReadAt_calls_should_cache
2539:  === PAUSE TestCachedFileObjectProvider_WriteTo/consecutive_ReadAt_calls_should_cache
2540:  === RUN   TestCachedFileObjectProvider_WriteTo/WriteTo_calls_should_read_from_cache
2541:  === RUN   TestUploadSignedURL/RoundTrip
2542:  === PAUSE TestUploadSignedURL/RoundTrip
2543:  === RUN   TestCachedSeekable_ReadAt_PreservesEOF/nil_error_from_inner_is_returned_to_caller_unchanged
2544:  --- PASS: TestCachedSeekable_ReadAt_SkipCacheWriteback (0.00s)
2545:  === CONT  TestCachedSeekable_OpenRangeReader/skip_cache_writeback_returns_inner_directly
2546:  --- PASS: TestCreateRetryableClient_ZeroBackoff (0.00s)
2547:  --- PASS: TestOffsetReader_SequentialReads (0.00s)
2548:  === CONT  TestMultipartUploader_RandomFailures_ChaosTest
2549:  --- PASS: TestMultipartUploader_UploadPart_Success (0.07s)
2550:  --- PASS: TestMultipartUploader_FileNotFound_Error (0.00s)
2551:  === PAUSE TestCachedSeekable_ReadAt_PreservesEOF/nil_error_from_inner_is_returned_to_caller_unchanged
2552:  === CONT  TestCachedFileObjectProvider_validateReadAtParams/offset_is_unaligned
2553:  --- PASS: TestCachedFileObjectProvider_validateReadAtParams/offset_is_unaligned (0.00s)
2554:  === CONT  TestCachedFileObjectProvider_validateReadAtParams/buffer_is_smaller_than_chunk_size
2555:  --- PASS: TestCachedFileObjectProvider_validateReadAtParams/buffer_is_smaller_than_chunk_size (0.00s)
2556:  === CONT  TestCachedFileObjectProvider_validateReadAtParams/buffer_is_too_large_(aligned)
2557:  --- PASS: TestCachedFileObjectProvider_validateReadAtParams/buffer_is_too_large_(aligned) (0.00s)
2558:  === CONT  TestCachedFileObjectProvider_validateReadAtParams/buffer_is_too_large_(unaligned)
2559:  --- PASS: TestCachedFileObjectProvider_validateReadAtParams/buffer_is_too_large_(unaligned) (0.00s)
2560:  === CONT  TestUploadSignedURL/NotConfigured
2561:  === CONT  TestCachedFileObjectProvider_Size/can_be_cached_successfully
2562:  --- PASS: TestAcquireWithLimitDecrease (0.10s)
2563:  === PAUSE TestCachedFileObjectProvider_WriteFromFileSystem/can_be_cached_successfully
2564:  --- PASS: TestCachedFileObjectProvider_MakeChunkFilename (0.00s)
2565:  === CONT  TestUploadSignedURL/RoundTrip
2566:  === RUN   TestCachedSeekableObjectProvider_ReadAt/failed_but_returns_count_on_short_read
2567:  === PAUSE TestCachedSeekableObjectProvider_ReadAt/failed_but_returns_count_on_short_read
2568:  === RUN   TestCachedSeekableObjectProvider_ReadAt/zero_byte_read_with_EOF_is_not_cached
...

2588:  === RUN   TestUploadSignedURL/RoundTrip/simple.txt
2589:  === PAUSE TestUploadSignedURL/RoundTrip/simple.txt
2590:  === RUN   TestUploadSignedURL/RoundTrip/nested/dir/file.tar.gz
2591:  === PAUSE TestUploadSignedURL/RoundTrip/nested/dir/file.tar.gz
2592:  === RUN   TestUploadSignedURL/RoundTrip/path_with_spaces/file.txt
2593:  === PAUSE TestUploadSignedURL/RoundTrip/path_with_spaces/file.txt
2594:  === RUN   TestUploadSignedURL/RoundTrip/special-chars/file+name=value&other.bin
2595:  === PAUSE TestUploadSignedURL/RoundTrip/special-chars/file+name=value&other.bin
2596:  === PAUSE TestCreateRetryableClient_JitterBehavior/JitterRange
2597:  === RUN   TestCreateRetryableClient_JitterBehavior/JitterRandomness
2598:  === PAUSE TestCreateRetryableClient_JitterBehavior/JitterRandomness
2599:  === RUN   TestCreateRetryableClient_JitterBehavior/ExponentialBackoffBase
2600:  === PAUSE TestCachedSeekableObjectProvider_ReadAt/full_read_without_EOF_is_cached
2601:  === CONT  TestUploadSignedURL/PathWithSpecialChars
2602:  --- PASS: TestMultipartUploader_InitiateUpload_Success (0.11s)
2603:  === CONT  TestCachedSeekable_ReadAt_PreservesEOF/nil_error_from_inner_is_returned_to_caller_unchanged
2604:  === PAUSE TestCreateRetryableClient_JitterBehavior/ExponentialBackoffBase
2605:  === RUN   TestCreateRetryableClient_JitterBehavior/MaxBackoffCap
2606:  === PAUSE TestCreateRetryableClient_JitterBehavior/MaxBackoffCap
2607:  === CONT  TestUploadSignedURL/Configured
2608:  --- PASS: TestCachedSeekable_OpenRangeReader/truncated_inner_read_does_not_populate_cache (0.03s)
2609:  === CONT  TestValidateUploadToken/Valid
2610:  --- PASS: TestValidateUploadToken/Valid (0.00s)
2611:  --- PASS: TestMultipartUploader_UploadPart_MissingETag (0.03s)
2612:  === CONT  TestCachedSeekableObjectProvider_ReadAt/failed_but_returns_count_on_short_read
2613:  --- PASS: TestCacheWriteThroughReader/complete_read_is_cached (0.11s)
2614:  --- PASS: TestCacheWriteThroughReader (0.00s)
2615:  === CONT  TestCreateRetryableClient_JitterBehavior/JitterRange
2616:  === CONT  TestCachedSeekable_ReadAt_PreservesEOF/EOF_from_inner_is_returned_to_caller_unchanged
2617:  === RUN   TestOffsetReader_Read/read_from_start
2618:  === PAUSE TestOffsetReader_Read/read_from_start
2619:  === RUN   TestOffsetReader_Read/read_from_offset
2620:  === PAUSE TestOffsetReader_Read/read_from_offset
2621:  === RUN   TestOffsetReader_Read/read_until_EOF
2622:  --- PASS: TestCreateRetryableClient_JitterBehavior/JitterRange (0.00s)
2623:  === PAUSE TestOffsetReader_Read/read_until_EOF
2624:  === CONT  TestCachedSeekableObjectProvider_ReadAt/short_read_without_EOF_is_not_cached
2625:  --- PASS: TestCachedSeekableObjectProvider_ReadAt/failed_but_returns_count_on_short_read (0.00s)
2626:  === CONT  TestCachedSeekableObjectProvider_ReadAt/full_read_without_EOF_is_cached
...

2675:  --- PASS: TestCachedFileObjectProvider_validateReadAtParams (0.07s)
2676:  --- PASS: TestCreateRetryableClient_JitterBehavior/ExponentialBackoffBase (0.00s)
2677:  === PAUSE TestOffsetReader_Read/read_exactly_at_EOF
2678:  --- PASS: TestCreateRetryableClient_JitterBehavior (0.11s)
2679:  === RUN   TestOffsetReader_Read/read_zero_bytes
2680:  === PAUSE TestOffsetReader_Read/read_zero_bytes
2681:  === RUN   TestIsCompleteRead/full_read,_with_EOF
2682:  --- PASS: TestCachedFileObjectProvider_Size/can_be_cached_successfully (0.00s)
2683:  === PAUSE TestIsCompleteRead/full_read,_with_EOF
2684:  === RUN   TestIsCompleteRead/short_read,_with_EOF
2685:  --- PASS: TestCachedFileObjectProvider_Size (0.07s)
2686:  === CONT  TestCachedFileObjectProvider_WriteTo/read_from_cache_when_the_file_exists
2687:  === CONT  TestOffsetReader_Read/read_from_start
2688:  --- PASS: TestOffsetReader_Read/read_from_start (0.00s)
2689:  === PAUSE TestIsCompleteRead/short_read,_with_EOF
2690:  === RUN   TestIsCompleteRead/short_read,_other_error
2691:  === PAUSE TestIsCompleteRead/short_read,_other_error
2692:  === RUN   TestIsCompleteRead/zero_bytes,_with_EOF
...

2694:  === CONT  TestCachedFileObjectProvider_WriteTo/consecutive_ReadAt_calls_should_cache
2695:  --- PASS: TestMultipartUploader_EdgeCases_VerySmallFile (0.11s)
2696:  === CONT  TestOffsetReader_Read/read_exactly_at_EOF
2697:  === PAUSE TestIsCompleteRead/zero_bytes,_with_EOF
2698:  === CONT  TestCachedFileObjectProvider_WriteTo/short_cache_file_returns_EOF_via_ReadAt
2699:  --- PASS: TestCachedSeekable_OpenRangeReader/cache_miss_then_full_read_populates_cache_for_next_call (0.00s)
2700:  --- PASS: TestCachedSeekableObjectProvider_ReadAt/full_read_without_EOF_is_cached (0.00s)
2701:  --- PASS: TestCachedSeekableObjectProvider_ReadAt/zero_byte_read_without_EOF_is_not_cached (0.00s)
2702:  --- PASS: TestOffsetReader_Read/read_past_EOF (0.00s)
2703:  --- PASS: TestOffsetReader_Read/read_exactly_at_EOF (0.00s)
2704:  === CONT  TestCachedFileObjectProvider_WriteTo/WriteTo_calls_should_read_from_cache
2705:  === CONT  TestOffsetReader_Read/read_from_offset
2706:  --- PASS: TestOffsetReader_Read/read_from_offset (0.00s)
2707:  === CONT  TestOffsetReader_Read/read_zero_bytes
2708:  --- PASS: TestOffsetReader_Read/read_zero_bytes (0.00s)
2709:  --- PASS: TestCachedSeekable_ReadAt_PreservesEOF/nil_error_from_inner_is_returned_to_caller_unchanged (0.00s)
2710:  --- PASS: TestCachedSeekable_ReadAt_PreservesEOF/EOF_from_inner_is_returned_to_caller_unchanged (0.00s)
2711:  --- PASS: TestMultipartUploader_UploadFileInParallel_Success (0.11s)
2712:  === CONT  TestOffsetReader_Read/read_until_EOF
2713:  --- PASS: TestUploadSignedURL/RoundTrip (0.02s)
2714:  --- PASS: TestUploadSignedURL (0.07s)
2715:  === RUN   TestIsCompleteRead/full_read,_no_error
2716:  --- PASS: TestOffsetReader_Read/read_until_EOF (0.00s)
2717:  --- PASS: TestCachedSeekableObjectProvider_ReadAt/zero_byte_read_with_EOF_is_not_cached (0.02s)
2718:  --- PASS: TestCachedFileObjectProvider_WriteTo/read_from_cache_when_the_file_exists (0.02s)
2719:  === PAUSE TestIsCompleteRead/full_read,_no_error
2720:  --- PASS: TestCachedFileObjectProvider_WriteTo/short_cache_file_returns_EOF_via_ReadAt (0.02s)
2721:  --- PASS: TestMultipartUploader_CompleteUpload_Success (0.13s)
2722:  === CONT  TestIsCompleteRead/short_read,_no_error
2723:  === CONT  TestIsCompleteRead/short_read,_other_error
2724:  --- PASS: TestCachedObjectProvider_WriteFileToCache (0.13s)
2725:  === CONT  TestIsCompleteRead/full_read,_no_error
2726:  === CONT  TestIsCompleteRead/zero_bytes,_with_EOF
2727:  === CONT  TestIsCompleteRead/short_read,_with_EOF
2728:  === CONT  TestIsCompleteRead/zero_expected,_zero_read
2729:  --- PASS: TestIsCompleteRead/short_read,_no_error (0.00s)
2730:  === CONT  TestIsCompleteRead/full_read,_with_EOF
2731:  === CONT  TestIsCompleteRead/zero_bytes,_no_error
2732:  --- PASS: TestCachedFileObjectProvider_WriteTo/consecutive_ReadAt_calls_should_cache (0.02s)
2733:  --- PASS: TestCachedSeekableObjectProvider_ReadAt/short_read_with_EOF_is_cached (0.02s)
2734:  --- PASS: TestCachedSeekable_ReadAt_PreservesEOF (0.07s)
2735:  --- PASS: TestCachedSeekable_OpenRangeReader (0.00s)
2736:  --- PASS: TestIsCompleteRead/short_read,_other_error (0.00s)
2737:  --- PASS: TestOffsetReader_Read (0.00s)
2738:  --- PASS: TestIsCompleteRead/full_read,_no_error (0.00s)
2739:  --- PASS: TestCachedFileObjectProvider_WriteFromFileSystem/can_be_cached_successfully (0.02s)
2740:  --- PASS: TestIsCompleteRead/zero_bytes,_with_EOF (0.00s)
2741:  --- PASS: TestIsCompleteRead/short_read,_with_EOF (0.00s)
2742:  --- PASS: TestIsCompleteRead/zero_expected,_zero_read (0.00s)
2743:  --- PASS: TestIsCompleteRead/full_read,_with_EOF (0.00s)
2744:  --- PASS: TestIsCompleteRead/zero_bytes,_no_error (0.00s)
2745:  --- PASS: TestCachedSeekableObjectProvider_ReadAt (0.00s)
...

2772:  --- PASS: TestMultipartUploader_ResourceExhaustion_TooManyConcurrentUploads (1.15s)
2773:  PASS
2774:  coverage: 45.6% of statements
2775:  ok  	github.com/e2b-dev/infra/packages/shared/pkg/storage	1.253s	coverage: 45.6% of statements
2776:  --- PASS: TestRedisCache_DeleteByPrefix_NoMatches (4.81s)
2777:  --- PASS: TestRedisCache_RedisHit (4.95s)
2778:  --- PASS: TestRedisNoPTTL_MatchesRedisBehavior (4.99s)
2779:  --- PASS: TestRedisCache_Lock_Disabled (5.07s)
2780:  --- PASS: TestRedisCache_CallbackFallback (5.15s)
2781:  --- PASS: TestRedisCache_SetWritesRedis (5.18s)
2782:  --- PASS: TestRedisCache_DeleteByPrefix (5.23s)
2783:  --- PASS: TestRedisCache_RedisRefresh_TriggeredWhenStale (5.28s)
2784:  --- PASS: TestRedisCache_RedisRefresh_UpdatesRedis (5.31s)
2785:  --- PASS: TestRedisCache_RedisRefresh_Disabled (5.36s)
2786:  redis_test.go:314: 
2787:  Error Trace:	/home/runner/work/infra/infra/packages/shared/pkg/redis/tests.go:27
2788:  /home/runner/work/infra/infra/packages/shared/pkg/cache/redis_test.go:314
2789:  Error:      	Received unexpected error:
2790:  create container: Error response from daemon: Head "https://registry-1.docker.io/v2/library/redis/manifests/8-alpine": Get "https://auth.docker.io/token?account=githubactions&scope=repository%3Alibrary%2Fredis%3Apull&service=registry.docker.io": net/http: request canceled (Client.Timeout exceeded while awaiting headers)
2791:  Test:       	TestRedisCache_RedisRefresh_ErrorKeepsStaleValue
2792:  --- FAIL: TestRedisCache_RedisRefresh_ErrorKeepsStaleValue (15.22s)
2793:  redis_test.go:454: 
2794:  Error Trace:	/home/runner/work/infra/infra/packages/shared/pkg/redis/tests.go:27
2795:  /home/runner/work/infra/infra/packages/shared/pkg/cache/redis_test.go:454
2796:  Error:      	Received unexpected error:
2797:  create container: Error response from daemon: Head "https://registry-1.docker.io/v2/library/redis/manifests/8-alpine": Get "https://auth.docker.io/token?account=githubactions&scope=repository%3Alibrary%2Fredis%3Apull&service=registry.docker.io": net/http: request canceled (Client.Timeout exceeded while awaiting headers)
2798:  Test:       	TestRedisCache_Lock_PreventsParallelCallbacks
2799:  --- FAIL: TestRedisCache_Lock_PreventsParallelCallbacks (15.22s)
2800:  redis_test.go:129: 
2801:  Error Trace:	/home/runner/work/infra/infra/packages/shared/pkg/redis/tests.go:27
2802:  /home/runner/work/infra/infra/packages/shared/pkg/cache/redis_test.go:129
2803:  Error:      	Received unexpected error:
2804:  create container: Error response from daemon: Head "https://registry-1.docker.io/v2/library/redis/manifests/8-alpine": Get "https://auth.docker.io/token?account=githubactions&scope=repository%3Alibrary%2Fredis%3Apull&service=registry.docker.io": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
2805:  Test:       	TestRedisCache_Delete
2806:  --- FAIL: TestRedisCache_Delete (15.23s)
2807:  redis_test.go:174: 
2808:  Error Trace:	/home/runner/work/infra/infra/packages/shared/pkg/redis/tests.go:27
2809:  /home/runner/work/infra/infra/packages/shared/pkg/cache/redis_test.go:174
2810:  Error:      	Received unexpected error:
2811:  create container: Error response from daemon: Head "https://registry-1.docker.io/v2/library/redis/manifests/8-alpine": Get "https://auth.docker.io/token?account=githubactions&scope=repository%3Alibrary%2Fredis%3Apull&service=registry.docker.io": net/http: request canceled (Client.Timeout exceeded while awaiting headers)
2812:  Test:       	TestRedisCache_Singleflight
2813:  --- FAIL: TestRedisCache_Singleflight (15.24s)
2814:  FAIL
2815:  coverage: 81.1% of statements
2816:  FAIL	github.com/e2b-dev/infra/packages/shared/pkg/cache	15.277s
2817:  === �[31mFailed�[0m
2818:  === �[31mFAIL�[0m: pkg/cache TestRedisCache_RedisRefresh_ErrorKeepsStaleValue (15.22s)
2819:  redis_test.go:314: 
2820:  Error Trace:	/home/runner/work/infra/infra/packages/shared/pkg/redis/tests.go:27
2821:  /home/runner/work/infra/infra/packages/shared/pkg/cache/redis_test.go:314
2822:  Error:      	Received unexpected error:
2823:  create container: Error response from daemon: Head "https://registry-1.docker.io/v2/library/redis/manifests/8-alpine": Get "https://auth.docker.io/token?account=githubactions&scope=repository%3Alibrary%2Fredis%3Apull&service=registry.docker.io": net/http: request canceled (Client.Timeout exceeded while awaiting headers)
2824:  Test:       	TestRedisCache_RedisRefresh_ErrorKeepsStaleValue
2825:  === �[31mFAIL�[0m: pkg/cache TestRedisCache_Lock_PreventsParallelCallbacks (15.22s)
2826:  redis_test.go:454: 
2827:  Error Trace:	/home/runner/work/infra/infra/packages/shared/pkg/redis/tests.go:27
2828:  /home/runner/work/infra/infra/packages/shared/pkg/cache/redis_test.go:454
2829:  Error:      	Received unexpected error:
2830:  create container: Error response from daemon: Head "https://registry-1.docker.io/v2/library/redis/manifests/8-alpine": Get "https://auth.docker.io/token?account=githubactions&scope=repository%3Alibrary%2Fredis%3Apull&service=registry.docker.io": net/http: request canceled (Client.Timeout exceeded while awaiting headers)
2831:  Test:       	TestRedisCache_Lock_PreventsParallelCallbacks
2832:  === �[31mFAIL�[0m: pkg/cache TestRedisCache_Delete (15.23s)
2833:  redis_test.go:129: 
2834:  Error Trace:	/home/runner/work/infra/infra/packages/shared/pkg/redis/tests.go:27
2835:  /home/runner/work/infra/infra/packages/shared/pkg/cache/redis_test.go:129
2836:  Error:      	Received unexpected error:
2837:  create container: Error response from daemon: Head "https://registry-1.docker.io/v2/library/redis/manifests/8-alpine": Get "https://auth.docker.io/token?account=githubactions&scope=repository%3Alibrary%2Fredis%3Apull&service=registry.docker.io": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
2838:  Test:       	TestRedisCache_Delete
2839:  === �[31mFAIL�[0m: pkg/cache TestRedisCache_Singleflight (15.24s)
2840:  redis_test.go:174: 
2841:  Error Trace:	/home/runner/work/infra/infra/packages/shared/pkg/redis/tests.go:27
2842:  /home/runner/work/infra/infra/packages/shared/pkg/cache/redis_test.go:174
2843:  Error:      	Received unexpected error:
2844:  create container: Error response from daemon: Head "https://registry-1.docker.io/v2/library/redis/manifests/8-alpine": Get "https://auth.docker.io/token?account=githubactions&scope=repository%3Alibrary%2Fredis%3Apull&service=registry.docker.io": net/http: request canceled (Client.Timeout exceeded while awaiting headers)
2845:  Test:       	TestRedisCache_Singleflight
2846:  DONE 499 tests, 4 failures in 16.350s
2847:  ##[error]Process completed with exit code 1.
2848:  ##[group]Run codecov/codecov-action@v5
2849:  with:
2850:  token: ***
2851:  files: packages/shared/coverage.txt
2852:  flags: arm64-shared,unit
2853:  disable_search: true
2854:  disable_file_fixes: false
2855:  disable_safe_directory: false
2856:  disable_telem: false
2857:  dry_run: false
2858:  fail_ci_if_error: false
2859:  git_service: github
...

2880:  �[36;1mfor cmd in bash git curl; do�[0m
2881:  �[36;1m  if ! command -v "$cmd" >/dev/null 2>&1; then�[0m
2882:  �[36;1m    missing_deps="$missing_deps $cmd"�[0m
2883:  �[36;1m  fi�[0m
2884:  �[36;1mdone�[0m
2885:  �[36;1m�[0m
2886:  �[36;1m# Check for gpg only if validation is not being skipped�[0m
2887:  �[36;1mif [ "false" != "true" ]; then�[0m
2888:  �[36;1m  if ! command -v gpg >/dev/null 2>&1; then�[0m
2889:  �[36;1m    missing_deps="$missing_deps gpg"�[0m
2890:  �[36;1m  fi�[0m
2891:  �[36;1mfi�[0m
2892:  �[36;1m�[0m
2893:  �[36;1m# Report missing required dependencies�[0m
2894:  �[36;1mif [ -n "$missing_deps" ]; then�[0m
2895:  �[36;1m  echo "Error: The following required dependencies are missing:$missing_deps"�[0m
2896:  �[36;1m  echo "Please install these dependencies before using this action."�[0m
...

3058:  CC_SHA: e84b9c8b38a4e2776558a683685616732fb0df4f
3059:  CC_PR: 
3060:  CC_BASE_SHA: 
3061:  CC_BINARY: 
3062:  CC_BUILD: 
3063:  CC_BUILD_URL: 
3064:  CC_CODE: 
3065:  CC_DIR: 
3066:  CC_DISABLE_FILE_FIXES: false
3067:  CC_DISABLE_SEARCH: true
3068:  CC_DISABLE_TELEM: false
3069:  CC_DRY_RUN: false
3070:  CC_ENTERPRISE_URL: 
3071:  CC_ENV: 
3072:  CC_EXCLUDES: 
3073:  CC_FAIL_ON_ERROR: false
3074:  CC_FILES: packages/shared/coverage.txt

@ValentaTomas
Copy link
Copy Markdown
Member Author

Close for now, will reopen after measuring later.

@ValentaTomas ValentaTomas deleted the feat/ext4-no-journal branch May 6, 2026 08:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants