>>> frp: Building community/frp 0.71.0-r0 (using abuild 3.18.0_rc7-r0) started Fri, 09 Oct 2026 11:33:15 +0000 >>> frp: Validating /home/buildozer/aports/community/frp/APKBUILD... >>> frp: Analyzing dependencies... >>> frp: Installing for build: build-base go (1/2) Installing go (1.27.1-r0) (2/2) Installing .makedepends-frp (20261009.113318) Executing busybox-1.38.0-r7.trigger OK: 1228.3 MiB in 115 packages >>> frp: Cleaning up srcdir >>> frp: Cleaning up pkgdir >>> frp: Cleaning up tmpdir >>> frp: Fetching https://distfiles.alpinelinux.org/distfiles/edge/frp-0.71.0.tar.gz Connecting to distfiles.alpinelinux.org (172.105.82.32:443) wget: server returned error: HTTP/1.1 404 Not Found >>> frp: Fetching https://github.com/fatedier/frp/archive/v0.71.0/frp-0.71.0.tar.gz Connecting to github.com (140.82.121.4:443) Connecting to codeload.github.com (140.82.121.10:443) saving to '/var/cache/distfiles/edge/frp-0.71.0.tar.gz.part' frp-0.71.0.tar.gz.pa 100% |********************************| 720k 0:00:00 ETA '/var/cache/distfiles/edge/frp-0.71.0.tar.gz.part' saved /var/cache/distfiles/edge/frp-0.71.0.tar.gz: OK /home/buildozer/aports/community/frp/enable-cgo.patch: OK /home/buildozer/aports/community/frp/frpc.initd: OK /home/buildozer/aports/community/frp/frpc.confd: OK /home/buildozer/aports/community/frp/frps.initd: OK /home/buildozer/aports/community/frp/frps.confd: OK >>> frp: Fetching https://distfiles.alpinelinux.org/distfiles/edge/frp-0.71.0.tar.gz /var/cache/distfiles/edge/frp-0.71.0.tar.gz: OK /home/buildozer/aports/community/frp/enable-cgo.patch: OK /home/buildozer/aports/community/frp/frpc.initd: OK /home/buildozer/aports/community/frp/frpc.confd: OK /home/buildozer/aports/community/frp/frps.initd: OK /home/buildozer/aports/community/frp/frps.confd: OK >>> frp: Unpacking /var/cache/distfiles/edge/frp-0.71.0.tar.gz... >>> frp: enable-cgo.patch patching file Makefile Hunk #1 succeeded at 41 (offset 6 lines). Hunk #2 succeeded at 44 (offset 6 lines). env go build -trimpath -ldflags "-s -w" -tags "frps,noweb" -o bin/frps ./cmd/frps env go build -trimpath -ldflags "-s -w" -tags "frpc,noweb" -o bin/frpc ./cmd/frpc go: downloading github.com/rodaine/table v1.2.0 go: downloading github.com/spf13/cobra v1.8.0 go: downloading github.com/spf13/cobra v1.8.0 go: downloading github.com/fatedier/golib v0.8.2 go: downloading k8s.io/apimachinery v0.28.8 go: downloading github.com/pelletier/go-toml/v2 v2.2.0 go: downloading github.com/samber/lo v1.47.0 go: downloading github.com/fatedier/golib v0.8.2 go: downloading golang.org/x/sync v0.22.0 go: downloading github.com/samber/lo v1.47.0 go: downloading k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 go: downloading github.com/spf13/pflag v1.0.5 go: downloading gopkg.in/ini.v1 v1.67.0 go: downloading k8s.io/apimachinery v0.28.8 go: downloading github.com/quic-go/quic-go v0.60.0 go: downloading golang.org/x/net v0.56.0 go: downloading github.com/prometheus/client_golang v1.19.1 go: downloading k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 go: downloading github.com/pelletier/go-toml/v2 v2.2.0 go: downloading github.com/spf13/pflag v1.0.5 go: downloading gopkg.in/ini.v1 v1.67.0 go: downloading github.com/fatedier/yamux v0.0.0-20250825093530-d0154be01cd6 go: downloading golang.org/x/sys v0.47.0 go: downloading golang.org/x/crypto v0.54.0 go: downloading github.com/gorilla/mux v1.8.1 go: downloading github.com/coreos/go-oidc/v3 v3.18.0 go: downloading golang.org/x/oauth2 v0.36.0 go: downloading golang.org/x/sys v0.47.0 go: downloading github.com/gorilla/mux v1.8.1 go: downloading github.com/quic-go/quic-go v0.60.0 go: downloading golang.org/x/time v0.10.0 go: downloading github.com/pires/go-proxyproto v0.15.0 go: downloading github.com/xtaci/kcp-go/v5 v5.6.13 go: downloading golang.org/x/net v0.56.0 go: downloading github.com/pires/go-proxyproto v0.15.0 go: downloading github.com/fatedier/yamux v0.0.0-20250825093530-d0154be01cd6 go: downloading github.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8 go: downloading github.com/vishvananda/netlink v1.3.0 go: downloading golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173 go: downloading github.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8 go: downloading github.com/vishvananda/netlink v1.3.0 go: downloading golang.org/x/sync v0.22.0 go: downloading golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173 go: downloading github.com/coreos/go-oidc/v3 v3.18.0 go: downloading golang.org/x/time v0.10.0 go: downloading github.com/xtaci/kcp-go/v5 v5.6.13 go: downloading github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 go: downloading golang.org/x/oauth2 v0.36.0 go: downloading github.com/templexxx/xorsimd v0.4.3 go: downloading golang.org/x/crypto v0.54.0 go: downloading github.com/tjfoc/gmsm v1.4.1 go: downloading github.com/klauspost/reedsolomon v1.12.0 go: downloading github.com/pkg/errors v0.9.1 go: downloading github.com/go-jose/go-jose/v4 v4.1.4 go: downloading github.com/templexxx/xorsimd v0.4.3 go: downloading github.com/tjfoc/gmsm v1.4.1 go: downloading github.com/go-jose/go-jose/v4 v4.1.4 go: downloading github.com/pkg/errors v0.9.1 go: downloading github.com/klauspost/reedsolomon v1.12.0 go: downloading github.com/templexxx/cpu v0.1.1 go: downloading golang.org/x/text v0.40.0 go: downloading golang.org/x/text v0.40.0 go: downloading github.com/templexxx/cpu v0.1.1 go: downloading github.com/golang/snappy v0.0.4 go: downloading github.com/Azure/go-ntlmssp v0.1.0 go: downloading github.com/Azure/go-ntlmssp v0.1.0 go: downloading github.com/golang/snappy v0.0.4 go: downloading github.com/cespare/xxhash/v2 v2.2.0 go: downloading google.golang.org/protobuf v1.36.5 go: downloading github.com/prometheus/client_model v0.5.0 go: downloading github.com/beorn7/perks v1.0.1 go: downloading github.com/prometheus/common v0.48.0 go: downloading github.com/vishvananda/netns v0.0.4 go: downloading github.com/vishvananda/netns v0.0.4 go: downloading github.com/prometheus/procfs v0.12.0 go: downloading github.com/klauspost/cpuid/v2 v2.2.6 go: downloading sigs.k8s.io/yaml v1.3.0 go: downloading sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd go: downloading sigs.k8s.io/yaml v1.3.0 go: downloading sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd go: downloading gopkg.in/yaml.v2 v2.4.0 go: downloading gopkg.in/yaml.v2 v2.4.0 go test -tags ",noweb" -v --cover ./assets/... github.com/fatedier/frp/assets coverage: 0.0% of statements go test -tags ",noweb" -v --cover ./cmd/... go: downloading github.com/stretchr/testify v1.11.1 go: downloading github.com/davecgh/go-spew v1.1.1 go: downloading gopkg.in/yaml.v3 v3.0.1 go: downloading github.com/pmezard/go-difflib v1.0.0 github.com/fatedier/frp/cmd/frpc coverage: 0.0% of statements === RUN TestVerifyClientConfigFeatureGates === RUN TestVerifyClientConfigFeatureGates/VirtualNet_enabled === RUN TestVerifyClientConfigFeatureGates/VirtualNet_disabled === RUN TestVerifyClientConfigFeatureGates/unknown_feature_gate --- PASS: TestVerifyClientConfigFeatureGates (0.05s) --- PASS: TestVerifyClientConfigFeatureGates/VirtualNet_enabled (0.04s) --- PASS: TestVerifyClientConfigFeatureGates/VirtualNet_disabled (0.00s) --- PASS: TestVerifyClientConfigFeatureGates/unknown_feature_gate (0.00s) PASS coverage: 18.5% of statements ok github.com/fatedier/frp/cmd/frpc/sub 0.707s coverage: 18.5% of statements github.com/fatedier/frp/cmd/frps coverage: 0.0% of statements go test -tags ",noweb" -v --cover ./client/... === RUN TestServiceConfigManagerReloadVirtualNetRuntimeDependency === RUN TestServiceConfigManagerReloadVirtualNetRuntimeDependency/unrelated_common_config 2026-10-09 11:35:45.511 [I] [client/config_manager.go:52] success reload conf === RUN TestServiceConfigManagerReloadVirtualNetRuntimeDependency/VirtualNet_address_without_startup_runtime === RUN TestServiceConfigManagerReloadVirtualNetRuntimeDependency/VirtualNet_proxy_without_startup_runtime === RUN TestServiceConfigManagerReloadVirtualNetRuntimeDependency/VirtualNet_visitor_without_startup_runtime === RUN TestServiceConfigManagerReloadVirtualNetRuntimeDependency/existing_VirtualNet_startup_runtime 2026-10-09 11:35:45.528 [I] [client/config_manager.go:52] success reload conf --- PASS: TestServiceConfigManagerReloadVirtualNetRuntimeDependency (0.06s) --- PASS: TestServiceConfigManagerReloadVirtualNetRuntimeDependency/unrelated_common_config (0.04s) --- PASS: TestServiceConfigManagerReloadVirtualNetRuntimeDependency/VirtualNet_address_without_startup_runtime (0.00s) --- PASS: TestServiceConfigManagerReloadVirtualNetRuntimeDependency/VirtualNet_proxy_without_startup_runtime (0.00s) --- PASS: TestServiceConfigManagerReloadVirtualNetRuntimeDependency/VirtualNet_visitor_without_startup_runtime (0.00s) --- PASS: TestServiceConfigManagerReloadVirtualNetRuntimeDependency/existing_VirtualNet_startup_runtime (0.00s) === RUN TestServiceConfigManagerReloadVirtualNetRuntimeDependencyUsesMergedSources === RUN TestServiceConfigManagerReloadVirtualNetRuntimeDependencyUsesMergedSources/Store_VirtualNet_proxy_is_rejected === RUN TestServiceConfigManagerReloadVirtualNetRuntimeDependencyUsesMergedSources/Store_VirtualNet_visitor_is_rejected === RUN TestServiceConfigManagerReloadVirtualNetRuntimeDependencyUsesMergedSources/Store_VirtualNet_proxy_overrides_file_proxy === RUN TestServiceConfigManagerReloadVirtualNetRuntimeDependencyUsesMergedSources/Store_non-VirtualNet_proxy_overrides_file_VirtualNet_proxy 2026-10-09 11:35:45.592 [I] [client/config_manager.go:52] success reload conf --- PASS: TestServiceConfigManagerReloadVirtualNetRuntimeDependencyUsesMergedSources (0.07s) --- PASS: TestServiceConfigManagerReloadVirtualNetRuntimeDependencyUsesMergedSources/Store_VirtualNet_proxy_is_rejected (0.02s) --- PASS: TestServiceConfigManagerReloadVirtualNetRuntimeDependencyUsesMergedSources/Store_VirtualNet_visitor_is_rejected (0.02s) --- PASS: TestServiceConfigManagerReloadVirtualNetRuntimeDependencyUsesMergedSources/Store_VirtualNet_proxy_overrides_file_proxy (0.01s) --- PASS: TestServiceConfigManagerReloadVirtualNetRuntimeDependencyUsesMergedSources/Store_non-VirtualNet_proxy_overrides_file_VirtualNet_proxy (0.02s) === RUN TestServiceConfigManagerCreateStoreProxyConflict --- PASS: TestServiceConfigManagerCreateStoreProxyConflict (0.01s) === RUN TestServiceConfigManagerCreateStoreProxyKeepsStoreOnReloadFailure --- PASS: TestServiceConfigManagerCreateStoreProxyKeepsStoreOnReloadFailure (0.01s) === RUN TestServiceConfigManagerCreateStoreProxyStoreDisabled --- PASS: TestServiceConfigManagerCreateStoreProxyStoreDisabled (0.00s) === RUN TestServiceConfigManagerCreateStoreProxyDoesNotPersistRuntimeDefaults 2026-10-09 11:35:45.630 [I] [client/config_manager.go:196] store: created proxy "raw-proxy" --- PASS: TestServiceConfigManagerCreateStoreProxyDoesNotPersistRuntimeDefaults (0.01s) === RUN TestControlSessionDialerDialV1 --- PASS: TestControlSessionDialerDialV1 (0.01s) === RUN TestControlSessionDialerDialV2 --- PASS: TestControlSessionDialerDialV2 (0.00s) === RUN TestControlSessionDialerDialLoginErrorClosesResources --- PASS: TestControlSessionDialerDialLoginErrorClosesResources (0.00s) === RUN TestControlSessionDialerDialSSHTunnelSkipsControlEncryption --- PASS: TestControlSessionDialerDialSSHTunnelSkipsControlEncryption (0.00s) === RUN TestControlPropagatesBinaryUDPPacketCodecToWorkConn 2026-10-09 11:35:45.655 [I] [proxy/proxy_manager.go:183] proxy added: [udp] 2026-10-09 11:35:45.659 [I] [proxy/udp.go:90] [udp] incoming a new work connection for udp proxy, pipe --- PASS: TestControlPropagatesBinaryUDPPacketCodecToWorkConn (0.01s) === RUN TestGracefulCloseAndStopSynchronizeDuration 2026-10-09 11:35:45.663 [W] [proxy/udp.go:120] [udp] read from workConn for udp error: io: read/write on closed pipe 2026-10-09 11:35:45.663 [I] [proxy/udp.go:134] [udp] writer goroutine for udp work connection closed --- PASS: TestGracefulCloseAndStopSynchronizeDuration (0.99s) === RUN TestGracefulCloseDoesNotBlockDuringStop --- PASS: TestGracefulCloseDoesNotBlockDuringStop (0.20s) === RUN TestRunStopsStartedComponentsOnInitialLoginFailure 2026-10-09 11:35:46.854 [I] [client/service.go:312] try to connect to server... 2026-10-09 11:35:46.854 [W] [client/service.go:323] connect to server error: login boom 2026-10-09 11:35:46.854 [I] [client/service.go:254] admin server listen on 127.0.0.1:40969 --- PASS: TestRunStopsStartedComponentsOnInitialLoginFailure (0.01s) === RUN TestNewServiceDoesNotLeakAdminListenerOnAuthBuildFailure --- PASS: TestNewServiceDoesNotLeakAdminListenerOnAuthBuildFailure (0.00s) === RUN TestUpdateConfigSourceRollsBackReloadCommonOnReplaceAllFailure --- PASS: TestUpdateConfigSourceRollsBackReloadCommonOnReplaceAllFailure (0.00s) === RUN TestUpdateConfigSourceKeepsReloadCommonOnReloadFailure --- PASS: TestUpdateConfigSourceKeepsReloadCommonOnReloadFailure (0.00s) === RUN TestReloadConfigFromSourcesDoesNotMutateStoreConfigs --- PASS: TestReloadConfigFromSourcesDoesNotMutateStoreConfigs (0.02s) PASS coverage: 41.1% of statements ok github.com/fatedier/frp/client 2.141s coverage: 41.1% of statements ? github.com/fatedier/frp/client/configmgmt [no test files] ? github.com/fatedier/frp/client/event [no test files] github.com/fatedier/frp/client/health coverage: 0.0% of statements === RUN TestBuildProxyStatusRespStoreSourceEnabled --- PASS: TestBuildProxyStatusRespStoreSourceEnabled (0.00s) === RUN TestReloadErrorMapping === RUN TestReloadErrorMapping/invalid_arg === RUN TestReloadErrorMapping/apply_fail --- PASS: TestReloadErrorMapping (0.01s) --- PASS: TestReloadErrorMapping/invalid_arg (0.00s) --- PASS: TestReloadErrorMapping/apply_fail (0.00s) === RUN TestStoreProxyErrorMapping === RUN TestStoreProxyErrorMapping/not_found === RUN TestStoreProxyErrorMapping/conflict === RUN TestStoreProxyErrorMapping/internal --- PASS: TestStoreProxyErrorMapping (0.01s) --- PASS: TestStoreProxyErrorMapping/not_found (0.00s) --- PASS: TestStoreProxyErrorMapping/conflict (0.00s) --- PASS: TestStoreProxyErrorMapping/internal (0.00s) === RUN TestStoreVisitorErrorMapping --- PASS: TestStoreVisitorErrorMapping (0.00s) === RUN TestCreateStoreProxyIgnoresUnknownFields --- PASS: TestCreateStoreProxyIgnoresUnknownFields (0.00s) === RUN TestCreateStoreVisitorIgnoresUnknownFields --- PASS: TestCreateStoreVisitorIgnoresUnknownFields (0.00s) === RUN TestCreateStoreProxyPluginUnknownFieldsAreIgnored --- PASS: TestCreateStoreProxyPluginUnknownFieldsAreIgnored (0.00s) === RUN TestCreateStoreVisitorPluginUnknownFieldsAreIgnored --- PASS: TestCreateStoreVisitorPluginUnknownFieldsAreIgnored (0.00s) === RUN TestUpdateStoreProxyRejectsMismatchedTypeBlock --- PASS: TestUpdateStoreProxyRejectsMismatchedTypeBlock (0.00s) === RUN TestUpdateStoreProxyRejectsNameMismatch --- PASS: TestUpdateStoreProxyRejectsNameMismatch (0.00s) === RUN TestListStoreProxiesReturnsSortedPayload --- PASS: TestListStoreProxiesReturnsSortedPayload (0.00s) === RUN TestUpdateStoreProxyReturnsTypedPayload --- PASS: TestUpdateStoreProxyReturnsTypedPayload (0.00s) === RUN TestGetProxyConfigFromManager --- PASS: TestGetProxyConfigFromManager (0.00s) === RUN TestGetProxyConfigNotFound --- PASS: TestGetProxyConfigNotFound (0.00s) === RUN TestGetVisitorConfigFromManager --- PASS: TestGetVisitorConfigFromManager (0.00s) === RUN TestGetVisitorConfigNotFound --- PASS: TestGetVisitorConfigNotFound (0.00s) PASS coverage: 46.5% of statements ok github.com/fatedier/frp/client/http 0.522s coverage: 46.5% of statements github.com/fatedier/frp/client/http/model coverage: 0.0% of statements === RUN TestHandleTCPWorkConnectionRejectsInvalidAddress 2026-10-09 11:35:45.384 [W] [proxy/proxy.go:185] resolve source address [[] error: address [:1: missing ']' in address --- PASS: TestHandleTCPWorkConnectionRejectsInvalidAddress (0.02s) === RUN TestReadNatHoleSidUsesSelectedWireProtocol === RUN TestReadNatHoleSidUsesSelectedWireProtocol/v2 === RUN TestReadNatHoleSidUsesSelectedWireProtocol/v1 === RUN TestReadNatHoleSidUsesSelectedWireProtocol/default --- PASS: TestReadNatHoleSidUsesSelectedWireProtocol (0.01s) --- PASS: TestReadNatHoleSidUsesSelectedWireProtocol/v2 (0.01s) --- PASS: TestReadNatHoleSidUsesSelectedWireProtocol/v1 (0.00s) --- PASS: TestReadNatHoleSidUsesSelectedWireProtocol/default (0.00s) PASS coverage: 5.7% of statements ok github.com/fatedier/frp/client/proxy 0.659s coverage: 5.7% of statements github.com/fatedier/frp/client/visitor coverage: 0.0% of statements go test -tags ",noweb" -v --cover ./server/... === RUN TestControlPendingReplacementFinishesWithoutStarting 2026-10-09 11:36:08.249 [I] [server/control.go:544] replaced by client [same-run] (control ID 2) --- PASS: TestControlPendingReplacementFinishesWithoutStarting (0.01s) === RUN TestNewControlPoolCountBoundaries === RUN TestNewControlPoolCountBoundaries/negative_pool_count_below_offset === RUN TestNewControlPoolCountBoundaries/negative_pool_count_at_offset === RUN TestNewControlPoolCountBoundaries/negative_pool_count === RUN TestNewControlPoolCountBoundaries/zero_pool_count === RUN TestNewControlPoolCountBoundaries/pool_count_capped === RUN TestNewControlPoolCountBoundaries/maximum_int_pool_count_capped === RUN TestNewControlPoolCountBoundaries/negative_maximum === RUN TestNewControlPoolCountBoundaries/maximum_int64_with_small_client_pool === RUN TestNewControlPoolCountBoundaries/maximum_int_client_and_server_overflow --- PASS: TestNewControlPoolCountBoundaries (0.01s) --- PASS: TestNewControlPoolCountBoundaries/negative_pool_count_below_offset (0.00s) --- PASS: TestNewControlPoolCountBoundaries/negative_pool_count_at_offset (0.00s) --- PASS: TestNewControlPoolCountBoundaries/negative_pool_count (0.00s) --- PASS: TestNewControlPoolCountBoundaries/zero_pool_count (0.00s) --- PASS: TestNewControlPoolCountBoundaries/pool_count_capped (0.00s) --- PASS: TestNewControlPoolCountBoundaries/maximum_int_pool_count_capped (0.00s) --- PASS: TestNewControlPoolCountBoundaries/negative_maximum (0.00s) --- PASS: TestNewControlPoolCountBoundaries/maximum_int64_with_small_client_pool (0.00s) --- PASS: TestNewControlPoolCountBoundaries/maximum_int_client_and_server_overflow (0.00s) === RUN TestControlRunningReplacementFinishesInWorker 2026-10-09 11:36:08.275 [I] [server/control.go:544] replaced by client [same-run] (control ID 4) 2026-10-09 11:36:08.276 [I] [server/control.go:721] client exit success --- PASS: TestControlRunningReplacementFinishesInWorker (0.01s) === RUN TestControlClosePendingAndRunning === RUN TestControlClosePendingAndRunning/pending === RUN TestControlClosePendingAndRunning/running 2026-10-09 11:36:08.285 [I] [server/control.go:721] client exit success --- PASS: TestControlClosePendingAndRunning (0.01s) --- PASS: TestControlClosePendingAndRunning/pending (0.00s) --- PASS: TestControlClosePendingAndRunning/running (0.00s) === RUN TestControlCloseAndReplacedAreIdempotent 2026-10-09 11:36:08.286 [I] [server/control.go:544] replaced by client [same-run] (control ID 8) 2026-10-09 11:36:08.286 [I] [server/control.go:544] replaced by client [same-run] (control ID 8) --- PASS: TestControlCloseAndReplacedAreIdempotent (0.00s) === RUN TestControlHeartbeatTimeoutInterruptsRead 2026-10-09 11:36:08.287 [W] [server/control.go:647] heartbeat timeout 2026-10-09 11:36:08.288 [I] [server/control.go:721] client exit success --- PASS: TestControlHeartbeatTimeoutInterruptsRead (0.00s) === RUN TestControlStartReplacementRacePairsMetrics 2026-10-09 11:36:08.289 [I] [server/control.go:544] replaced by client [same-run] (control ID 11) 2026-10-09 11:36:08.289 [I] [server/control.go:544] replaced by client [same-run] (control ID 13) 2026-10-09 11:36:08.289 [I] [server/control.go:544] replaced by client [same-run] (control ID 15) 2026-10-09 11:36:08.290 [I] [server/control.go:544] replaced by client [same-run] (control ID 17) 2026-10-09 11:36:08.290 [I] [server/control.go:544] replaced by client [same-run] (control ID 19) 2026-10-09 11:36:08.291 [I] [server/control.go:544] replaced by client [same-run] (control ID 21) 2026-10-09 11:36:08.291 [I] [server/control.go:544] replaced by client [same-run] (control ID 23) 2026-10-09 11:36:08.291 [I] [server/control.go:544] replaced by client [same-run] (control ID 25) 2026-10-09 11:36:08.291 [I] [server/control.go:544] replaced by client [same-run] (control ID 27) 2026-10-09 11:36:08.292 [I] [server/control.go:544] replaced by client [same-run] (control ID 29) 2026-10-09 11:36:08.292 [I] [server/control.go:544] replaced by client [same-run] (control ID 31) 2026-10-09 11:36:08.292 [I] [server/control.go:544] replaced by client [same-run] (control ID 33) 2026-10-09 11:36:08.292 [I] [server/control.go:544] replaced by client [same-run] (control ID 35) 2026-10-09 11:36:08.293 [I] [server/control.go:544] replaced by client [same-run] (control ID 37) 2026-10-09 11:36:08.293 [I] [server/control.go:544] replaced by client [same-run] (control ID 39) 2026-10-09 11:36:08.293 [I] [server/control.go:544] replaced by client [same-run] (control ID 41) 2026-10-09 11:36:08.294 [I] [server/control.go:544] replaced by client [same-run] (control ID 43) 2026-10-09 11:36:08.294 [I] [server/control.go:544] replaced by client [same-run] (control ID 45) 2026-10-09 11:36:08.295 [I] [server/control.go:544] replaced by client [same-run] (control ID 47) 2026-10-09 11:36:08.295 [I] [server/control.go:544] replaced by client [same-run] (control ID 49) 2026-10-09 11:36:08.295 [I] [server/control.go:544] replaced by client [same-run] (control ID 51) 2026-10-09 11:36:08.296 [I] [server/control.go:544] replaced by client [same-run] (control ID 53) 2026-10-09 11:36:08.296 [I] [server/control.go:544] replaced by client [same-run] (control ID 55) 2026-10-09 11:36:08.296 [I] [server/control.go:544] replaced by client [same-run] (control ID 57) 2026-10-09 11:36:08.297 [I] [server/control.go:544] replaced by client [same-run] (control ID 59) 2026-10-09 11:36:08.297 [I] [server/control.go:544] replaced by client [same-run] (control ID 61) 2026-10-09 11:36:08.297 [I] [server/control.go:544] replaced by client [same-run] (control ID 63) 2026-10-09 11:36:08.298 [I] [server/control.go:544] replaced by client [same-run] (control ID 65) 2026-10-09 11:36:08.298 [I] [server/control.go:544] replaced by client [same-run] (control ID 67) 2026-10-09 11:36:08.299 [I] [server/control.go:544] replaced by client [same-run] (control ID 69) 2026-10-09 11:36:08.299 [I] [server/control.go:544] replaced by client [same-run] (control ID 71) 2026-10-09 11:36:08.299 [I] [server/control.go:544] replaced by client [same-run] (control ID 73) 2026-10-09 11:36:08.299 [I] [server/control.go:544] replaced by client [same-run] (control ID 75) 2026-10-09 11:36:08.300 [I] [server/control.go:544] replaced by client [same-run] (control ID 77) 2026-10-09 11:36:08.300 [I] [server/control.go:544] replaced by client [same-run] (control ID 79) 2026-10-09 11:36:08.300 [I] [server/control.go:544] replaced by client [same-run] (control ID 81) 2026-10-09 11:36:08.301 [I] [server/control.go:544] replaced by client [same-run] (control ID 83) 2026-10-09 11:36:08.301 [I] [server/control.go:544] replaced by client [same-run] (control ID 85) 2026-10-09 11:36:08.301 [I] [server/control.go:544] replaced by client [same-run] (control ID 87) 2026-10-09 11:36:08.301 [I] [server/control.go:544] replaced by client [same-run] (control ID 89) 2026-10-09 11:36:08.302 [I] [server/control.go:544] replaced by client [same-run] (control ID 91) 2026-10-09 11:36:08.303 [I] [server/control.go:544] replaced by client [same-run] (control ID 93) 2026-10-09 11:36:08.303 [I] [server/control.go:721] client exit success 2026-10-09 11:36:08.304 [I] [server/control.go:544] replaced by client [same-run] (control ID 95) 2026-10-09 11:36:08.305 [I] [server/control.go:544] replaced by client [same-run] (control ID 97) 2026-10-09 11:36:08.305 [I] [server/control.go:544] replaced by client [same-run] (control ID 99) 2026-10-09 11:36:08.306 [I] [server/control.go:544] replaced by client [same-run] (control ID 101) 2026-10-09 11:36:08.307 [I] [server/control.go:544] replaced by client [same-run] (control ID 103) 2026-10-09 11:36:08.307 [I] [server/control.go:544] replaced by client [same-run] (control ID 105) 2026-10-09 11:36:08.308 [I] [server/control.go:544] replaced by client [same-run] (control ID 107) 2026-10-09 11:36:08.309 [I] [server/control.go:544] replaced by client [same-run] (control ID 109) 2026-10-09 11:36:08.309 [I] [server/control.go:544] replaced by client [same-run] (control ID 111) 2026-10-09 11:36:08.310 [I] [server/control.go:544] replaced by client [same-run] (control ID 113) 2026-10-09 11:36:08.311 [I] [server/control.go:544] replaced by client [same-run] (control ID 115) 2026-10-09 11:36:08.312 [I] [server/control.go:544] replaced by client [same-run] (control ID 117) 2026-10-09 11:36:08.313 [I] [server/control.go:544] replaced by client [same-run] (control ID 119) 2026-10-09 11:36:08.313 [I] [server/control.go:544] replaced by client [same-run] (control ID 121) 2026-10-09 11:36:08.314 [I] [server/control.go:544] replaced by client [same-run] (control ID 123) 2026-10-09 11:36:08.314 [I] [server/control.go:544] replaced by client [same-run] (control ID 125) 2026-10-09 11:36:08.315 [I] [server/control.go:544] replaced by client [same-run] (control ID 127) 2026-10-09 11:36:08.315 [I] [server/control.go:544] replaced by client [same-run] (control ID 129) 2026-10-09 11:36:08.316 [I] [server/control.go:544] replaced by client [same-run] (control ID 131) 2026-10-09 11:36:08.317 [I] [server/control.go:544] replaced by client [same-run] (control ID 133) 2026-10-09 11:36:08.317 [I] [server/control.go:544] replaced by client [same-run] (control ID 135) 2026-10-09 11:36:08.317 [I] [server/control.go:544] replaced by client [same-run] (control ID 137) 2026-10-09 11:36:08.318 [I] [server/control.go:544] replaced by client [same-run] (control ID 139) 2026-10-09 11:36:08.319 [I] [server/control.go:544] replaced by client [same-run] (control ID 141) 2026-10-09 11:36:08.320 [I] [server/control.go:544] replaced by client [same-run] (control ID 143) 2026-10-09 11:36:08.354 [I] [server/control.go:544] replaced by client [same-run] (control ID 145) 2026-10-09 11:36:08.355 [I] [server/control.go:721] client exit success 2026-10-09 11:36:08.355 [I] [server/control.go:544] replaced by client [same-run] (control ID 147) 2026-10-09 11:36:08.356 [I] [server/control.go:544] replaced by client [same-run] (control ID 149) 2026-10-09 11:36:08.356 [I] [server/control.go:544] replaced by client [same-run] (control ID 151) 2026-10-09 11:36:08.357 [I] [server/control.go:544] replaced by client [same-run] (control ID 153) 2026-10-09 11:36:08.357 [I] [server/control.go:544] replaced by client [same-run] (control ID 155) 2026-10-09 11:36:08.358 [I] [server/control.go:544] replaced by client [same-run] (control ID 157) 2026-10-09 11:36:08.358 [I] [server/control.go:544] replaced by client [same-run] (control ID 159) 2026-10-09 11:36:08.359 [I] [server/control.go:544] replaced by client [same-run] (control ID 161) 2026-10-09 11:36:08.359 [I] [server/control.go:544] replaced by client [same-run] (control ID 163) 2026-10-09 11:36:08.360 [I] [server/control.go:544] replaced by client [same-run] (control ID 165) 2026-10-09 11:36:08.360 [I] [server/control.go:544] replaced by client [same-run] (control ID 167) 2026-10-09 11:36:08.361 [I] [server/control.go:544] replaced by client [same-run] (control ID 169) 2026-10-09 11:36:08.362 [I] [server/control.go:544] replaced by client [same-run] (control ID 171) 2026-10-09 11:36:08.363 [I] [server/control.go:544] replaced by client [same-run] (control ID 173) 2026-10-09 11:36:08.363 [I] [server/control.go:544] replaced by client [same-run] (control ID 175) 2026-10-09 11:36:08.364 [I] [server/control.go:544] replaced by client [same-run] (control ID 177) 2026-10-09 11:36:08.364 [I] [server/control.go:544] replaced by client [same-run] (control ID 179) 2026-10-09 11:36:08.365 [I] [server/control.go:544] replaced by client [same-run] (control ID 181) 2026-10-09 11:36:08.365 [I] [server/control.go:544] replaced by client [same-run] (control ID 183) 2026-10-09 11:36:08.365 [I] [server/control.go:544] replaced by client [same-run] (control ID 185) 2026-10-09 11:36:08.366 [I] [server/control.go:544] replaced by client [same-run] (control ID 187) 2026-10-09 11:36:08.367 [I] [server/control.go:544] replaced by client [same-run] (control ID 189) 2026-10-09 11:36:08.367 [I] [server/control.go:544] replaced by client [same-run] (control ID 191) 2026-10-09 11:36:08.367 [I] [server/control.go:544] replaced by client [same-run] (control ID 193) 2026-10-09 11:36:08.368 [I] [server/control.go:544] replaced by client [same-run] (control ID 195) 2026-10-09 11:36:08.368 [I] [server/control.go:544] replaced by client [same-run] (control ID 197) 2026-10-09 11:36:08.369 [I] [server/control.go:544] replaced by client [same-run] (control ID 199) 2026-10-09 11:36:08.369 [I] [server/control.go:544] replaced by client [same-run] (control ID 201) 2026-10-09 11:36:08.370 [I] [server/control.go:544] replaced by client [same-run] (control ID 203) 2026-10-09 11:36:08.371 [I] [server/control.go:544] replaced by client [same-run] (control ID 205) 2026-10-09 11:36:08.371 [I] [server/control.go:544] replaced by client [same-run] (control ID 207) 2026-10-09 11:36:08.372 [I] [server/control.go:544] replaced by client [same-run] (control ID 209) --- PASS: TestControlStartReplacementRacePairsMetrics (0.09s) === RUN TestControlManagerRejectsStaleActivateAndRemove 2026-10-09 11:36:08.375 [I] [server/control.go:544] replaced by client [same-run] (control ID 211) --- PASS: TestControlManagerRejectsStaleActivateAndRemove (0.00s) === RUN TestControlManagerPreservesClientIDConflict --- PASS: TestControlManagerPreservesClientIDConflict (0.00s) === RUN TestControlManagerFailedLoginWriteReleasesRunWithoutStarting 2026-10-09 11:36:08.376 [I] [server/control.go:544] replaced by client [same-run] (control ID 215) --- PASS: TestControlManagerFailedLoginWriteReleasesRunWithoutStarting (0.00s) === RUN TestControlManagerCloseWaitsForInFlightLoginRun 2026-10-09 11:36:08.391 [I] [server/control.go:721] client exit success --- PASS: TestControlManagerCloseWaitsForInFlightLoginRun (0.01s) === RUN TestWriteWithDeadlineTimesOutAndClearsDeadline --- PASS: TestWriteWithDeadlineTimesOutAndClearsDeadline (0.05s) === RUN TestServiceAcceptConnectionTracksClientHelloPresence === RUN TestServiceAcceptConnectionTracksClientHelloPresence/absent_Hello === RUN TestServiceAcceptConnectionTracksClientHelloPresence/present_Hello_with_JSON_fallback === RUN TestServiceAcceptConnectionTracksClientHelloPresence/present_Hello_with_binary_codec --- PASS: TestServiceAcceptConnectionTracksClientHelloPresence (0.00s) --- PASS: TestServiceAcceptConnectionTracksClientHelloPresence/absent_Hello (0.00s) --- PASS: TestServiceAcceptConnectionTracksClientHelloPresence/present_Hello_with_JSON_fallback (0.00s) --- PASS: TestServiceAcceptConnectionTracksClientHelloPresence/present_Hello_with_binary_codec (0.00s) === RUN TestSharedPortHTTPListenerProtocols === RUN TestSharedPortHTTPListenerProtocols/HTTP/1.1 === RUN TestSharedPortHTTPListenerProtocols/HTTP/2_prior_knowledge --- PASS: TestSharedPortHTTPListenerProtocols (0.04s) --- PASS: TestSharedPortHTTPListenerProtocols/HTTP/1.1 (0.03s) --- PASS: TestSharedPortHTTPListenerProtocols/HTTP/2_prior_knowledge (0.00s) === RUN TestServiceControlHandoffSkipsStalePendingGeneration 2026-10-09 11:36:08.484 [I] [server/service.go:803] [shared-run] client login info: ip [remote] version [] hostname [] os [] arch [] 2026-10-09 11:36:08.484 [I] [server/service.go:803] [shared-run] client login info: ip [remote] version [] hostname [] os [] arch [] 2026-10-09 11:36:08.487 [I] [server/control.go:544] [shared-run] replaced by client [shared-run] (control ID 218) 2026-10-09 11:36:08.488 [I] [server/service.go:803] [shared-run] client login info: ip [remote] version [] hostname [] os [] arch [] 2026-10-09 11:36:08.488 [I] [server/control.go:544] [shared-run] replaced by client [shared-run] (control ID 219) 2026-10-09 11:36:08.488 [I] [server/control.go:721] [shared-run] client exit success 2026-10-09 11:36:08.488 [I] [server/control.go:721] [shared-run] client exit success --- PASS: TestServiceControlHandoffSkipsStalePendingGeneration (0.00s) === RUN TestServiceLoginResponseSynchronizationIsScopedToRun 2026-10-09 11:36:08.489 [I] [server/service.go:803] [shared-run] client login info: ip [remote] version [] hostname [] os [] arch [] 2026-10-09 11:36:08.513 [I] [server/control.go:544] [shared-run] replaced by client [shared-run] (control ID 222) 2026-10-09 11:36:08.513 [I] [server/control.go:721] [shared-run] client exit success 2026-10-09 11:36:08.513 [I] [server/control.go:721] client exit success --- PASS: TestServiceLoginResponseSynchronizationIsScopedToRun (0.02s) === RUN TestServiceVisitorAdmissionSerializesReplacement 2026-10-09 11:36:08.514 [I] [server/service.go:803] [shared-run] client login info: ip [remote] version [] hostname [] os [] arch [] 2026-10-09 11:36:08.514 [I] [server/service.go:803] [shared-run] client login info: ip [remote] version [] hostname [] os [] arch [] 2026-10-09 11:36:08.536 [I] [server/control.go:544] [shared-run] replaced by client [shared-run] (control ID 224) 2026-10-09 11:36:08.536 [I] [server/control.go:721] [shared-run] client exit success --- PASS: TestServiceVisitorAdmissionSerializesReplacement (0.02s) === RUN TestServiceWorkConnRoutingRequiresCurrentRunningControl 2026-10-09 11:36:08.536 [I] [server/service.go:803] [shared-run] client login info: ip [remote] version [] hostname [] os [] arch [] 2026-10-09 11:36:08.537 [W] [server/service.go:862] no client control found for run id [shared-run] 2026-10-09 11:36:08.537 [I] [server/control.go:721] [shared-run] client exit success --- PASS: TestServiceWorkConnRoutingRequiresCurrentRunningControl (0.00s) === RUN TestServiceWorkConnRoutingRejectsWireProtocolMismatch 2026-10-09 11:36:08.538 [I] [server/service.go:803] [shared-run] client login info: ip [remote] version [] hostname [] os [] arch [] --- PASS: TestServiceWorkConnRoutingRejectsWireProtocolMismatch (0.00s) === RUN TestServiceWorkConnRoutingClientHelloPolicy === RUN TestServiceWorkConnRoutingClientHelloPolicy/JSON_control_allows_work_connection_without_Hello 2026-10-09 11:36:08.538 [I] [server/service.go:803] [shared-run] client login info: ip [remote] version [] hostname [] os [] arch [] 2026-10-09 11:36:08.539 [I] [server/control.go:721] [shared-run] client exit success 2026-10-09 11:36:08.539 [I] [server/control.go:721] [shared-run] client exit success === RUN TestServiceWorkConnRoutingClientHelloPolicy/binary_control_allows_work_connection_without_Hello 2026-10-09 11:36:08.539 [I] [server/service.go:803] [shared-run] client login info: ip [remote] version [] hostname [] os [] arch [] 2026-10-09 11:36:08.540 [I] [server/control.go:721] [shared-run] client exit success === RUN TestServiceWorkConnRoutingClientHelloPolicy/JSON_control_rejects_work_connection_with_Hello 2026-10-09 11:36:08.540 [I] [server/service.go:803] [shared-run] client login info: ip [remote] version [] hostname [] os [] arch [] 2026-10-09 11:36:08.540 [I] [server/control.go:721] [shared-run] client exit success === RUN TestServiceWorkConnRoutingClientHelloPolicy/binary_control_rejects_work_connection_with_Hello 2026-10-09 11:36:08.541 [I] [server/service.go:803] [shared-run] client login info: ip [remote] version [] hostname [] os [] arch [] 2026-10-09 11:36:08.541 [I] [server/control.go:721] [shared-run] client exit success --- PASS: TestServiceWorkConnRoutingClientHelloPolicy (0.00s) --- PASS: TestServiceWorkConnRoutingClientHelloPolicy/JSON_control_allows_work_connection_without_Hello (0.00s) --- PASS: TestServiceWorkConnRoutingClientHelloPolicy/binary_control_allows_work_connection_without_Hello (0.00s) --- PASS: TestServiceWorkConnRoutingClientHelloPolicy/JSON_control_rejects_work_connection_with_Hello (0.00s) --- PASS: TestServiceWorkConnRoutingClientHelloPolicy/binary_control_rejects_work_connection_with_Hello (0.00s) === RUN TestServiceRegisterControlRejectsInvalidCodecSelection === RUN TestServiceRegisterControlRejectsInvalidCodecSelection/binary_codec_over_v1 === RUN TestServiceRegisterControlRejectsInvalidCodecSelection/unknown_v2_codec === RUN TestServiceRegisterControlRejectsInvalidCodecSelection/unknown_wire_protocol --- PASS: TestServiceRegisterControlRejectsInvalidCodecSelection (0.00s) --- PASS: TestServiceRegisterControlRejectsInvalidCodecSelection/binary_codec_over_v1 (0.00s) --- PASS: TestServiceRegisterControlRejectsInvalidCodecSelection/unknown_v2_codec (0.00s) --- PASS: TestServiceRegisterControlRejectsInvalidCodecSelection/unknown_wire_protocol (0.00s) === RUN TestServiceRegisterControlRejectsInvalidRunID === RUN TestServiceRegisterControlRejectsInvalidRunID/run_id_10 === RUN TestServiceRegisterControlRejectsInvalidRunID/run_id_65 --- PASS: TestServiceRegisterControlRejectsInvalidRunID (0.00s) --- PASS: TestServiceRegisterControlRejectsInvalidRunID/run_id_10 (0.00s) --- PASS: TestServiceRegisterControlRejectsInvalidRunID/run_id_65 (0.00s) === RUN TestServiceRegisterControlPoolCountBoundaries === RUN TestServiceRegisterControlPoolCountBoundaries/less_than_channel_offset 2026-10-09 11:36:08.543 [I] [server/service.go:803] [pool-count-run] client login info: ip [remote] version [] hostname [] os [] arch [] 2026-10-09 11:36:08.543 [W] [server/service.go:828] [pool-count-run] create new controller error: invalid pool count -11, must be non-negative === RUN TestServiceRegisterControlPoolCountBoundaries/channel_offset 2026-10-09 11:36:08.543 [I] [server/service.go:803] [pool-count-run] client login info: ip [remote] version [] hostname [] os [] arch [] 2026-10-09 11:36:08.543 [W] [server/service.go:828] [pool-count-run] create new controller error: invalid pool count -10, must be non-negative === RUN TestServiceRegisterControlPoolCountBoundaries/negative 2026-10-09 11:36:08.543 [I] [server/service.go:803] [pool-count-run] client login info: ip [remote] version [] hostname [] os [] arch [] 2026-10-09 11:36:08.544 [W] [server/service.go:828] [pool-count-run] create new controller error: invalid pool count -1, must be non-negative === RUN TestServiceRegisterControlPoolCountBoundaries/zero 2026-10-09 11:36:08.544 [I] [server/service.go:803] [pool-count-run] client login info: ip [remote] version [] hostname [] os [] arch [] === RUN TestServiceRegisterControlPoolCountBoundaries/capped_by_server_maximum 2026-10-09 11:36:08.544 [I] [server/service.go:803] [pool-count-run] client login info: ip [remote] version [] hostname [] os [] arch [] === RUN TestServiceRegisterControlPoolCountBoundaries/maximum_int_capped 2026-10-09 11:36:08.545 [I] [server/service.go:803] [pool-count-run] client login info: ip [remote] version [] hostname [] os [] arch [] --- PASS: TestServiceRegisterControlPoolCountBoundaries (0.00s) --- PASS: TestServiceRegisterControlPoolCountBoundaries/less_than_channel_offset (0.00s) --- PASS: TestServiceRegisterControlPoolCountBoundaries/channel_offset (0.00s) --- PASS: TestServiceRegisterControlPoolCountBoundaries/negative (0.00s) --- PASS: TestServiceRegisterControlPoolCountBoundaries/zero (0.00s) --- PASS: TestServiceRegisterControlPoolCountBoundaries/capped_by_server_maximum (0.00s) --- PASS: TestServiceRegisterControlPoolCountBoundaries/maximum_int_capped (0.00s) === RUN TestServiceWorkConnRoutingRejectsLostGeneration === RUN TestServiceWorkConnRoutingRejectsLostGeneration/replace 2026-10-09 11:36:08.546 [I] [server/service.go:803] [shared-run] client login info: ip [remote] version [] hostname [] os [] arch [] 2026-10-09 11:36:08.550 [I] [server/service.go:803] [shared-run] client login info: ip [remote] version [] hostname [] os [] arch [] 2026-10-09 11:36:08.551 [I] [server/control.go:544] [shared-run] replaced by client [shared-run] (control ID 235) 2026-10-09 11:36:08.551 [I] [server/control.go:721] [shared-run] client exit success === RUN TestServiceWorkConnRoutingRejectsLostGeneration/close 2026-10-09 11:36:08.552 [I] [server/service.go:803] [shared-run] client login info: ip [remote] version [] hostname [] os [] arch [] 2026-10-09 11:36:08.553 [I] [server/control.go:721] [shared-run] client exit success --- PASS: TestServiceWorkConnRoutingRejectsLostGeneration (0.01s) --- PASS: TestServiceWorkConnRoutingRejectsLostGeneration/replace (0.01s) --- PASS: TestServiceWorkConnRoutingRejectsLostGeneration/close (0.00s) === RUN TestServiceVisitorRoutingExcludesPendingUser 2026-10-09 11:36:08.555 [I] [server/service.go:803] [visitor-run] client login info: ip [remote] version [] hostname [] os [] arch [] 2026-10-09 11:36:08.566 [I] [server/control.go:721] [visitor-run] client exit success --- PASS: TestServiceVisitorRoutingExcludesPendingUser (0.01s) === RUN TestServiceVisitorRoutingCarriesControlPacketCodec 2026-10-09 11:36:08.567 [I] [server/service.go:803] [visitor-binary-run] client login info: ip [remote] version [] hostname [] os [] arch [] 2026-10-09 11:36:08.568 [I] [server/control.go:721] [visitor-binary-run] client exit success --- PASS: TestServiceVisitorRoutingCarriesControlPacketCodec (0.00s) === RUN TestServiceVisitorRoutingLegacyFallsBackToJSONPacketCodec --- PASS: TestServiceVisitorRoutingLegacyFallsBackToJSONPacketCodec (0.00s) PASS coverage: 36.7% of statements ok github.com/fatedier/frp/server 1.181s coverage: 36.7% of statements github.com/fatedier/frp/server/controller coverage: 0.0% of statements === RUN TestBaseGroup_WorkerFanOut --- PASS: TestBaseGroup_WorkerFanOut (0.00s) === RUN TestBaseGroup_WorkerStopsOnListenerClose --- PASS: TestBaseGroup_WorkerStopsOnListenerClose (0.00s) === RUN TestBaseGroup_WorkerClosesConnOnClosedChannel --- PASS: TestBaseGroup_WorkerClosesConnOnClosedChannel (0.01s) === RUN TestBaseGroup_CloseLastListenerTriggersCleanup --- PASS: TestBaseGroup_CloseLastListenerTriggersCleanup (0.00s) === RUN TestBaseGroup_CloseOneOfTwoListeners --- PASS: TestBaseGroup_CloseOneOfTwoListeners (0.00s) === RUN TestListener_Accept --- PASS: TestListener_Accept (0.00s) === RUN TestListener_AcceptAfterChannelClose --- PASS: TestListener_AcceptAfterChannelClose (0.00s) === RUN TestListener_AcceptAfterListenerClose --- PASS: TestListener_AcceptAfterListenerClose (0.00s) === RUN TestListener_DoubleClose --- PASS: TestListener_DoubleClose (0.00s) === RUN TestListener_Addr --- PASS: TestListener_Addr (0.00s) === RUN TestGetOrCreate_New --- PASS: TestGetOrCreate_New (0.00s) === RUN TestGetOrCreate_Existing --- PASS: TestGetOrCreate_Existing (0.00s) === RUN TestGet_ExistingAndMissing --- PASS: TestGet_ExistingAndMissing (0.00s) === RUN TestIsCurrent --- PASS: TestIsCurrent (0.00s) === RUN TestRemoveIf === RUN TestRemoveIf/removes_when_fn_returns_true === RUN TestRemoveIf/keeps_when_fn_returns_false === RUN TestRemoveIf/noop_on_missing_key --- PASS: TestRemoveIf (0.00s) --- PASS: TestRemoveIf/removes_when_fn_returns_true (0.00s) --- PASS: TestRemoveIf/keeps_when_fn_returns_false (0.00s) --- PASS: TestRemoveIf/noop_on_missing_key (0.00s) === RUN TestConcurrentGetOrCreateAndRemoveIf --- PASS: TestConcurrentGetOrCreateAndRemoveIf (0.00s) PASS coverage: 21.6% of statements ok github.com/fatedier/frp/server/group 0.532s coverage: 21.6% of statements === RUN TestGetConfFromConfigurerKeepsPluginFields --- PASS: TestGetConfFromConfigurerKeepsPluginFields (0.01s) === RUN TestBuildClientInfoRespIncludesWireProtocol --- PASS: TestBuildClientInfoRespIncludesWireProtocol (0.00s) === RUN TestBuildV2ProxySpecAllTypesAndRedaction === RUN TestBuildV2ProxySpecAllTypesAndRedaction/tcp === RUN TestBuildV2ProxySpecAllTypesAndRedaction/udp === RUN TestBuildV2ProxySpecAllTypesAndRedaction/http === RUN TestBuildV2ProxySpecAllTypesAndRedaction/https === RUN TestBuildV2ProxySpecAllTypesAndRedaction/tcpmux === RUN TestBuildV2ProxySpecAllTypesAndRedaction/stcp === RUN TestBuildV2ProxySpecAllTypesAndRedaction/sudp === RUN TestBuildV2ProxySpecAllTypesAndRedaction/xtcp --- PASS: TestBuildV2ProxySpecAllTypesAndRedaction (0.01s) --- PASS: TestBuildV2ProxySpecAllTypesAndRedaction/tcp (0.00s) --- PASS: TestBuildV2ProxySpecAllTypesAndRedaction/udp (0.00s) --- PASS: TestBuildV2ProxySpecAllTypesAndRedaction/http (0.00s) --- PASS: TestBuildV2ProxySpecAllTypesAndRedaction/https (0.00s) --- PASS: TestBuildV2ProxySpecAllTypesAndRedaction/tcpmux (0.00s) --- PASS: TestBuildV2ProxySpecAllTypesAndRedaction/stcp (0.00s) --- PASS: TestBuildV2ProxySpecAllTypesAndRedaction/sudp (0.00s) --- PASS: TestBuildV2ProxySpecAllTypesAndRedaction/xtcp (0.00s) === RUN TestBuildV2ProxyRespOfflineTypedShells === RUN TestBuildV2ProxyRespOfflineTypedShells/tcp === RUN TestBuildV2ProxyRespOfflineTypedShells/udp === RUN TestBuildV2ProxyRespOfflineTypedShells/http === RUN TestBuildV2ProxyRespOfflineTypedShells/https === RUN TestBuildV2ProxyRespOfflineTypedShells/tcpmux === RUN TestBuildV2ProxyRespOfflineTypedShells/stcp === RUN TestBuildV2ProxyRespOfflineTypedShells/xtcp === RUN TestBuildV2ProxyRespOfflineTypedShells/sudp --- PASS: TestBuildV2ProxyRespOfflineTypedShells (0.00s) --- PASS: TestBuildV2ProxyRespOfflineTypedShells/tcp (0.00s) --- PASS: TestBuildV2ProxyRespOfflineTypedShells/udp (0.00s) --- PASS: TestBuildV2ProxyRespOfflineTypedShells/http (0.00s) --- PASS: TestBuildV2ProxyRespOfflineTypedShells/https (0.00s) --- PASS: TestBuildV2ProxyRespOfflineTypedShells/tcpmux (0.00s) --- PASS: TestBuildV2ProxyRespOfflineTypedShells/stcp (0.00s) --- PASS: TestBuildV2ProxyRespOfflineTypedShells/xtcp (0.00s) --- PASS: TestBuildV2ProxyRespOfflineTypedShells/sudp (0.00s) === RUN TestBuildV2ProxySpecDoesNotPopulateMismatchedBlock --- PASS: TestBuildV2ProxySpecDoesNotPopulateMismatchedBlock (0.00s) === RUN TestAPIV2SystemInfoEnvelope --- PASS: TestAPIV2SystemInfoEnvelope (0.00s) === RUN TestAPIV2SystemPruneOfflineProxies --- PASS: TestAPIV2SystemPruneOfflineProxies (0.00s) === RUN TestAPIV2SystemPruneTypeErrorsUseEnvelope 2026-10-09 11:36:07.856 [W] [http/handler.go:80] http response [/api/v2/system/prune]: error: type is required 2026-10-09 11:36:07.857 [W] [http/handler.go:80] http response [/api/v2/system/prune]: error: type must be one of offline_proxies --- PASS: TestAPIV2SystemPruneTypeErrorsUseEnvelope (0.00s) === RUN TestAPIV2ClientListEnvelopePaginationAndFilters --- PASS: TestAPIV2ClientListEnvelopePaginationAndFilters (0.00s) === RUN TestAPIV2PageParamErrorsUseEnvelope 2026-10-09 11:36:07.862 [W] [http/handler.go:80] http response [/api/v2/clients]: error: page must be a positive integer 2026-10-09 11:36:07.862 [W] [http/handler.go:80] http response [/api/v2/clients]: error: pageSize must be between 1 and 200 2026-10-09 11:36:07.862 [W] [http/handler.go:80] http response [/api/v2/clients]: error: page is too large --- PASS: TestAPIV2PageParamErrorsUseEnvelope (0.00s) === RUN TestAPIV2ClientDetailEnvelope --- PASS: TestAPIV2ClientDetailEnvelope (0.00s) === RUN TestAPIV2ClientDetailEncodedKey --- PASS: TestAPIV2ClientDetailEncodedKey (0.00s) === RUN TestAPIV2ProxyListDetailAndUsers 2026-10-09 11:36:07.868 [W] [http/handler.go:80] http response [/api/v2/proxies]: error: type must be one of tcp, udp, http, https, tcpmux, stcp, xtcp, sudp --- PASS: TestAPIV2ProxyListDetailAndUsers (0.00s) === RUN TestAPIV2ProxyTrafficEnvelopeSchemaAndHistory --- PASS: TestAPIV2ProxyTrafficEnvelopeSchemaAndHistory (0.00s) === RUN TestAPIV2ProxyTrafficNotFoundEnvelope 2026-10-09 11:36:07.876 [W] [http/handler.go:80] http response [/api/v2/proxies/missing/traffic]: error: no proxy info found --- PASS: TestAPIV2ProxyTrafficNotFoundEnvelope (0.00s) === RUN TestAPIV2ProxyDetailAndTrafficEncodedName --- PASS: TestAPIV2ProxyDetailAndTrafficEncodedName (0.03s) === RUN TestAPIV2ProxyTrafficInvalidEncodedNameUses400Envelope 2026-10-09 11:36:07.907 [W] [http/handler.go:80] http response [/api/v2/proxies/%ZZ/traffic]: error: invalid proxy name --- PASS: TestAPIV2ProxyTrafficInvalidEncodedNameUses400Envelope (0.01s) === RUN TestMatchV2ProxyQueryMatchesSpecFields === RUN TestMatchV2ProxyQueryMatchesSpecFields/tcp_remote_port === RUN TestMatchV2ProxyQueryMatchesSpecFields/udp_remote_port === RUN TestMatchV2ProxyQueryMatchesSpecFields/remote_port_does_not_match_colon_form === RUN TestMatchV2ProxyQueryMatchesSpecFields/http_custom_domain === RUN TestMatchV2ProxyQueryMatchesSpecFields/https_subdomain === RUN TestMatchV2ProxyQueryMatchesSpecFields/subdomain_does_not_match_expanded_host === RUN TestMatchV2ProxyQueryMatchesSpecFields/tcpmux_custom_domain === RUN TestMatchV2ProxyQueryMatchesSpecFields/offline_shell_does_not_match_online_spec_fields === RUN TestMatchV2ProxyQueryMatchesSpecFields/offline_shell_does_not_contribute_zero_remote_port --- PASS: TestMatchV2ProxyQueryMatchesSpecFields (0.00s) --- PASS: TestMatchV2ProxyQueryMatchesSpecFields/tcp_remote_port (0.00s) --- PASS: TestMatchV2ProxyQueryMatchesSpecFields/udp_remote_port (0.00s) --- PASS: TestMatchV2ProxyQueryMatchesSpecFields/remote_port_does_not_match_colon_form (0.00s) --- PASS: TestMatchV2ProxyQueryMatchesSpecFields/http_custom_domain (0.00s) --- PASS: TestMatchV2ProxyQueryMatchesSpecFields/https_subdomain (0.00s) --- PASS: TestMatchV2ProxyQueryMatchesSpecFields/subdomain_does_not_match_expanded_host (0.00s) --- PASS: TestMatchV2ProxyQueryMatchesSpecFields/tcpmux_custom_domain (0.00s) --- PASS: TestMatchV2ProxyQueryMatchesSpecFields/offline_shell_does_not_match_online_spec_fields (0.00s) --- PASS: TestMatchV2ProxyQueryMatchesSpecFields/offline_shell_does_not_contribute_zero_remote_port (0.00s) === RUN TestLegacyAPIResponsesRemainBare --- PASS: TestLegacyAPIResponsesRemainBare (0.02s) PASS coverage: 75.7% of statements ok github.com/fatedier/frp/server/http 0.550s coverage: 75.7% of statements ? github.com/fatedier/frp/server/http/model [no test files] github.com/fatedier/frp/server/metrics coverage: 0.0% of statements === RUN TestManagerUsesClockForPortTimestamps --- PASS: TestManagerUsesClockForPortTimestamps (0.00s) === RUN TestManagerCleanReservedPortsWorkerUsesClockTicker --- PASS: TestManagerCleanReservedPortsWorkerUsesClockTicker (0.01s) PASS coverage: 63.4% of statements ok github.com/fatedier/frp/server/ports 0.420s coverage: 63.4% of statements === RUN TestWorkConnStartWritesStartWorkConn --- PASS: TestWorkConnStartWritesStartWorkConn (0.00s) === RUN TestGetWorkConnFromPoolStartWorkConnUnchangedForUDPWireV2 --- PASS: TestGetWorkConnFromPoolStartWorkConnUnchangedForUDPWireV2 (0.00s) === RUN TestGetWorkConnFromPoolLeavesRawTCPPayloadUnframed --- PASS: TestGetWorkConnFromPoolLeavesRawTCPPayloadUnframed (0.00s) === RUN TestSUDPBridgeTranscodesProxyV1ToVisitorV2 --- PASS: TestSUDPBridgeTranscodesProxyV1ToVisitorV2 (0.00s) === RUN TestSUDPBridgeTranscodesVisitorV2ToProxyV1 --- PASS: TestSUDPBridgeTranscodesVisitorV2ToProxyV1 (0.00s) === RUN TestSUDPBridgeTranscodesProxyV2BinaryToVisitorV2JSON --- PASS: TestSUDPBridgeTranscodesProxyV2BinaryToVisitorV2JSON (0.00s) === RUN TestSUDPBridgeTranscodesVisitorV2JSONToProxyV2Binary --- PASS: TestSUDPBridgeTranscodesVisitorV2JSONToProxyV2Binary (0.00s) === RUN TestSUDPBridgeForwardsProxyPing --- PASS: TestSUDPBridgeForwardsProxyPing (0.00s) === RUN TestSUDPBridgeDropsVisitorPing --- PASS: TestSUDPBridgeDropsVisitorPing (0.00s) === RUN TestSUDPBridgeRejectsUnknownVisitorMessage --- PASS: TestSUDPBridgeRejectsUnknownVisitorMessage (0.00s) === RUN TestSUDPBridgeRejectsMismatchedPacketCodecOnStream --- PASS: TestSUDPBridgeRejectsMismatchedPacketCodecOnStream (0.00s) === RUN TestSUDPBridgeDetectsMixedWireProtocol --- PASS: TestSUDPBridgeDetectsMixedWireProtocol (0.00s) === RUN TestSUDPBridgeDetectsMixedPacketEncoding === RUN TestSUDPBridgeDetectsMixedPacketEncoding/legacy_v1_aliases_explicit_v1 === RUN TestSUDPBridgeDetectsMixedPacketEncoding/v2_json_matches_v2_json === RUN TestSUDPBridgeDetectsMixedPacketEncoding/v2_binary_matches_v2_binary === RUN TestSUDPBridgeDetectsMixedPacketEncoding/v1_json_differs_from_v2_json === RUN TestSUDPBridgeDetectsMixedPacketEncoding/v2_json_differs_from_v2_binary === RUN TestSUDPBridgeDetectsMixedPacketEncoding/v2_binary_differs_from_v1_json --- PASS: TestSUDPBridgeDetectsMixedPacketEncoding (0.00s) --- PASS: TestSUDPBridgeDetectsMixedPacketEncoding/legacy_v1_aliases_explicit_v1 (0.00s) --- PASS: TestSUDPBridgeDetectsMixedPacketEncoding/v2_json_matches_v2_json (0.00s) --- PASS: TestSUDPBridgeDetectsMixedPacketEncoding/v2_binary_matches_v2_binary (0.00s) --- PASS: TestSUDPBridgeDetectsMixedPacketEncoding/v1_json_differs_from_v2_json (0.00s) --- PASS: TestSUDPBridgeDetectsMixedPacketEncoding/v2_json_differs_from_v2_binary (0.00s) --- PASS: TestSUDPBridgeDetectsMixedPacketEncoding/v2_binary_differs_from_v1_json (0.00s) === RUN TestSUDPBridgeRejectsInvalidEncodingMetadata === RUN TestSUDPBridgeRejectsInvalidEncodingMetadata/left_v1_binary === RUN TestSUDPBridgeRejectsInvalidEncodingMetadata/right_unknown_v2_codec === RUN TestSUDPBridgeRejectsInvalidEncodingMetadata/left_unknown_wire --- PASS: TestSUDPBridgeRejectsInvalidEncodingMetadata (0.00s) --- PASS: TestSUDPBridgeRejectsInvalidEncodingMetadata/left_v1_binary (0.00s) --- PASS: TestSUDPBridgeRejectsInvalidEncodingMetadata/right_unknown_v2_codec (0.00s) --- PASS: TestSUDPBridgeRejectsInvalidEncodingMetadata/left_unknown_wire (0.00s) === RUN TestSUDPJoinUsesRawPathForSameEncodingState --- PASS: TestSUDPJoinUsesRawPathForSameEncodingState (0.00s) === RUN TestWriteNatHoleSidUsesWireV2MessageFrame --- PASS: TestWriteNatHoleSidUsesWireV2MessageFrame (0.00s) === RUN TestWriteNatHoleSidUsesLegacyCodecForWireV1AndDefault === RUN TestWriteNatHoleSidUsesLegacyCodecForWireV1AndDefault/default === RUN TestWriteNatHoleSidUsesLegacyCodecForWireV1AndDefault/v1 --- PASS: TestWriteNatHoleSidUsesLegacyCodecForWireV1AndDefault (0.00s) --- PASS: TestWriteNatHoleSidUsesLegacyCodecForWireV1AndDefault/default (0.00s) --- PASS: TestWriteNatHoleSidUsesLegacyCodecForWireV1AndDefault/v1 (0.00s) PASS coverage: 13.5% of statements ok github.com/fatedier/frp/server/proxy 0.456s coverage: 13.5% of statements === RUN TestClientRegistryRegisterStoresWireProtocol --- PASS: TestClientRegistryRegisterStoresWireProtocol (0.00s) === RUN TestClientRegistryUsesClockForTimestamps --- PASS: TestClientRegistryUsesClockForTimestamps (0.01s) === RUN TestClientRegistryControlIDPreventsStaleOffline --- PASS: TestClientRegistryControlIDPreventsStaleOffline (0.00s) === RUN TestClientRegistryClientIDConflictSemantics --- PASS: TestClientRegistryClientIDConflictSemantics (0.00s) === RUN TestClientRegistrySameRunIDMovesBetweenClientKeys --- PASS: TestClientRegistrySameRunIDMovesBetweenClientKeys (0.00s) PASS coverage: 79.5% of statements ok github.com/fatedier/frp/server/registry 0.416s coverage: 79.5% of statements === RUN TestManagerNewConnCarriesWireProtocolAndUDPPacketCodec --- PASS: TestManagerNewConnCarriesWireProtocolAndUDPPacketCodec (0.00s) PASS coverage: 65.3% of statements ok github.com/fatedier/frp/server/visitor 0.322s coverage: 65.3% of statements go test -tags ",noweb" -v --cover ./pkg/... === RUN TestPingWithEmptySubjectFromLoginFails --- PASS: TestPingWithEmptySubjectFromLoginFails (0.00s) === RUN TestPingAfterLoginWithNewSubjectSucceeds --- PASS: TestPingAfterLoginWithNewSubjectSucceeds (0.00s) === RUN TestPingAfterLoginWithDifferentSubjectFails --- PASS: TestPingAfterLoginWithDifferentSubjectFails (0.00s) === RUN TestOidcAuthProviderFallsBackWhenNoExpiry --- PASS: TestOidcAuthProviderFallsBackWhenNoExpiry (0.04s) === RUN TestOidcAuthProviderCachesToken --- PASS: TestOidcAuthProviderCachesToken (0.01s) === RUN TestOidcAuthProviderRetriesOnInitialFailure --- PASS: TestOidcAuthProviderRetriesOnInitialFailure (0.01s) === RUN TestNewOidcAuthSetterRejectsInvalidStaticConfig --- PASS: TestNewOidcAuthSetterRejectsInvalidStaticConfig (0.00s) PASS coverage: 30.3% of statements ok github.com/fatedier/frp/pkg/auth 0.535s coverage: 30.3% of statements github.com/fatedier/frp/pkg/auth/legacy coverage: 0.0% of statements === RUN TestLoadServerConfig === RUN TestLoadServerConfig/toml === RUN TestLoadServerConfig/yaml === RUN TestLoadServerConfig/json --- PASS: TestLoadServerConfig (0.03s) --- PASS: TestLoadServerConfig/toml (0.02s) --- PASS: TestLoadServerConfig/yaml (0.00s) --- PASS: TestLoadServerConfig/json (0.00s) === RUN TestLoadServerConfigStrictMode === RUN TestLoadServerConfigStrictMode/toml-strict-false === RUN TestLoadServerConfigStrictMode/yaml-strict-false === RUN TestLoadServerConfigStrictMode/json-strict-false === RUN TestLoadServerConfigStrictMode/toml-strict-true === RUN TestLoadServerConfigStrictMode/yaml-strict-true === RUN TestLoadServerConfigStrictMode/json-strict-true --- PASS: TestLoadServerConfigStrictMode (0.01s) --- PASS: TestLoadServerConfigStrictMode/toml-strict-false (0.00s) --- PASS: TestLoadServerConfigStrictMode/yaml-strict-false (0.01s) --- PASS: TestLoadServerConfigStrictMode/json-strict-false (0.00s) --- PASS: TestLoadServerConfigStrictMode/toml-strict-true (0.00s) --- PASS: TestLoadServerConfigStrictMode/yaml-strict-true (0.00s) --- PASS: TestLoadServerConfigStrictMode/json-strict-true (0.00s) === RUN TestRenderWithTemplate === RUN TestRenderWithTemplate/toml === RUN TestRenderWithTemplate/yaml === RUN TestRenderWithTemplate/json === RUN TestRenderWithTemplate/template_numeric === RUN TestRenderWithTemplate/template_string === RUN TestRenderWithTemplate/template_quote --- PASS: TestRenderWithTemplate (0.01s) --- PASS: TestRenderWithTemplate/toml (0.00s) --- PASS: TestRenderWithTemplate/yaml (0.00s) --- PASS: TestRenderWithTemplate/json (0.00s) --- PASS: TestRenderWithTemplate/template_numeric (0.00s) --- PASS: TestRenderWithTemplate/template_string (0.00s) --- PASS: TestRenderWithTemplate/template_quote (0.00s) === RUN TestCustomStructStrictMode --- PASS: TestCustomStructStrictMode (0.01s) === RUN TestLoadClientConfigStrictMode_UnknownPluginField --- PASS: TestLoadClientConfigStrictMode_UnknownPluginField (0.00s) === RUN TestYAMLMergeInStrictMode --- PASS: TestYAMLMergeInStrictMode (0.00s) === RUN TestOptimizedYAMLProcessing --- PASS: TestOptimizedYAMLProcessing (0.00s) === RUN TestFilterClientConfigurers_PreserveRawNamesAndNoMutation --- PASS: TestFilterClientConfigurers_PreserveRawNamesAndNoMutation (0.00s) === RUN TestCompleteProxyConfigurers_PreserveRawNames --- PASS: TestCompleteProxyConfigurers_PreserveRawNames (0.00s) === RUN TestCompleteVisitorConfigurers_PreserveRawNames --- PASS: TestCompleteVisitorConfigurers_PreserveRawNames (0.00s) === RUN TestCompleteProxyConfigurers_Idempotent --- PASS: TestCompleteProxyConfigurers_Idempotent (0.00s) === RUN TestCompleteVisitorConfigurers_Idempotent --- PASS: TestCompleteVisitorConfigurers_Idempotent (0.00s) === RUN TestFilterClientConfigurers_FilterByStartAndEnabled --- PASS: TestFilterClientConfigurers_FilterByStartAndEnabled (0.00s) === RUN TestLoadClientConfigResult_DuplicateNames === RUN TestLoadClientConfigResult_DuplicateNames/duplicate_proxy_names === RUN TestLoadClientConfigResult_DuplicateNames/duplicate_visitor_names === RUN TestLoadClientConfigResult_DuplicateNames/unique_names === RUN TestLoadClientConfigResult_DuplicateNames/same_name_across_proxy_and_visitor --- PASS: TestLoadClientConfigResult_DuplicateNames (0.02s) --- PASS: TestLoadClientConfigResult_DuplicateNames/duplicate_proxy_names (0.00s) --- PASS: TestLoadClientConfigResult_DuplicateNames/duplicate_visitor_names (0.00s) --- PASS: TestLoadClientConfigResult_DuplicateNames/unique_names (0.00s) --- PASS: TestLoadClientConfigResult_DuplicateNames/same_name_across_proxy_and_visitor (0.00s) === RUN TestYAMLEdgeCases --- PASS: TestYAMLEdgeCases (0.00s) === RUN TestTOMLSyntaxErrorWithPosition --- PASS: TestTOMLSyntaxErrorWithPosition (0.00s) === RUN TestTOMLTypeMismatchErrorWithFieldInfo --- PASS: TestTOMLTypeMismatchErrorWithFieldInfo (0.00s) === RUN TestFindFieldLineInContent === RUN TestFindFieldLineInContent/serverAddr === RUN TestFindFieldLineInContent/serverPort === RUN TestFindFieldLineInContent/name === RUN TestFindFieldLineInContent/type === RUN TestFindFieldLineInContent/remotePort === RUN TestFindFieldLineInContent/nonexistent --- PASS: TestFindFieldLineInContent (0.00s) --- PASS: TestFindFieldLineInContent/serverAddr (0.00s) --- PASS: TestFindFieldLineInContent/serverPort (0.00s) --- PASS: TestFindFieldLineInContent/name (0.00s) --- PASS: TestFindFieldLineInContent/type (0.00s) --- PASS: TestFindFieldLineInContent/remotePort (0.00s) --- PASS: TestFindFieldLineInContent/nonexistent (0.00s) === RUN TestFormatDetection === RUN TestFormatDetection/config.toml === RUN TestFormatDetection/config.TOML === RUN TestFormatDetection/config.yaml === RUN TestFormatDetection/config.yml === RUN TestFormatDetection/config.json === RUN TestFormatDetection/config.ini === RUN TestFormatDetection/config --- PASS: TestFormatDetection (0.00s) --- PASS: TestFormatDetection/config.toml (0.00s) --- PASS: TestFormatDetection/config.TOML (0.00s) --- PASS: TestFormatDetection/config.yaml (0.00s) --- PASS: TestFormatDetection/config.yml (0.00s) --- PASS: TestFormatDetection/config.json (0.00s) --- PASS: TestFormatDetection/config.ini (0.00s) --- PASS: TestFormatDetection/config (0.00s) === RUN TestValidTOMLStillWorks --- PASS: TestValidTOMLStillWorks (0.00s) PASS coverage: 36.0% of statements ok github.com/fatedier/frp/pkg/config 0.874s coverage: 36.0% of statements github.com/fatedier/frp/pkg/config/legacy coverage: 0.0% of statements === RUN TestNewAggregator_CreatesConfigSourceWhenNil --- PASS: TestNewAggregator_CreatesConfigSourceWhenNil (0.00s) === RUN TestNewAggregator_WithoutStore --- PASS: TestNewAggregator_WithoutStore (0.00s) === RUN TestNewAggregator_WithStore --- PASS: TestNewAggregator_WithStore (0.00s) === RUN TestAggregator_SetStoreSource_Overwrite --- PASS: TestAggregator_SetStoreSource_Overwrite (0.01s) === RUN TestAggregator_MergeBySourceOrder --- PASS: TestAggregator_MergeBySourceOrder (0.05s) === RUN TestAggregator_DisabledEntryIsSourceLocalFilter --- PASS: TestAggregator_DisabledEntryIsSourceLocalFilter (0.02s) === RUN TestAggregator_VisitorMerge --- PASS: TestAggregator_VisitorMerge (0.01s) === RUN TestAggregator_Load_ReturnsSortedByName --- PASS: TestAggregator_Load_ReturnsSortedByName (0.00s) === RUN TestAggregator_Load_ReturnsDefensiveCopies --- PASS: TestAggregator_Load_ReturnsDefensiveCopies (0.00s) === RUN TestBaseSourceLoadReturnsClonedConfigurers --- PASS: TestBaseSourceLoadReturnsClonedConfigurers (0.00s) === RUN TestNewConfigSource --- PASS: TestNewConfigSource (0.00s) === RUN TestConfigSource_ReplaceAll --- PASS: TestConfigSource_ReplaceAll (0.00s) === RUN TestConfigSource_Load --- PASS: TestConfigSource_Load (0.00s) === RUN TestConfigSource_Load_FiltersDisabled --- PASS: TestConfigSource_Load_FiltersDisabled (0.00s) === RUN TestConfigSource_ReplaceAll_DoesNotApplyRuntimeDefaults --- PASS: TestConfigSource_ReplaceAll_DoesNotApplyRuntimeDefaults (0.00s) === RUN TestStoreSource_AddProxyAndVisitor_DoesNotApplyRuntimeDefaults --- PASS: TestStoreSource_AddProxyAndVisitor_DoesNotApplyRuntimeDefaults (0.04s) === RUN TestStoreSource_UpdateAndRemoveProxyAndVisitor --- PASS: TestStoreSource_UpdateAndRemoveProxyAndVisitor (0.05s) === RUN TestStoreSource_MutationRollsBackOnPersistFailure --- PASS: TestStoreSource_MutationRollsBackOnPersistFailure (0.03s) === RUN TestStoreSource_LoadFromFile_DoesNotApplyRuntimeDefaults --- PASS: TestStoreSource_LoadFromFile_DoesNotApplyRuntimeDefaults (0.00s) === RUN TestStoreSource_LoadFromFile_UnknownFieldsAreIgnored --- PASS: TestStoreSource_LoadFromFile_UnknownFieldsAreIgnored (0.01s) PASS coverage: 83.2% of statements ok github.com/fatedier/frp/pkg/config/source 1.127s coverage: 83.2% of statements === RUN TestBandwidthQuantity --- PASS: TestBandwidthQuantity (0.01s) === RUN TestBandwidthQuantity_MB --- PASS: TestBandwidthQuantity_MB (0.00s) === RUN TestBandwidthQuantity_InvalidUnit --- PASS: TestBandwidthQuantity_InvalidUnit (0.00s) === RUN TestBandwidthQuantity_InvalidNumber --- PASS: TestBandwidthQuantity_InvalidNumber (0.00s) === RUN TestPortsRangeSlice2String --- PASS: TestPortsRangeSlice2String (0.00s) === RUN TestNewPortsRangeSliceFromString --- PASS: TestNewPortsRangeSliceFromString (0.00s) PASS coverage: 71.0% of statements ok github.com/fatedier/frp/pkg/config/types 0.690s coverage: 71.0% of statements === RUN TestClientConfigComplete --- PASS: TestClientConfigComplete (0.00s) === RUN TestAuthClientConfig_Complete --- PASS: TestAuthClientConfig_Complete (0.00s) === RUN TestProxyCloneDeepCopy --- PASS: TestProxyCloneDeepCopy (0.00s) === RUN TestVisitorCloneDeepCopy --- PASS: TestVisitorCloneDeepCopy (0.00s) === RUN TestDecodeProxyConfigurerJSON_StrictPluginUnknownFields --- PASS: TestDecodeProxyConfigurerJSON_StrictPluginUnknownFields (0.01s) === RUN TestDecodeVisitorConfigurerJSON_StrictPluginUnknownFields --- PASS: TestDecodeVisitorConfigurerJSON_StrictPluginUnknownFields (0.00s) === RUN TestDecodeClientConfigJSON_StrictUnknownProxyField --- PASS: TestDecodeClientConfigJSON_StrictUnknownProxyField (0.00s) === RUN TestUnmarshalTypedProxyConfig --- PASS: TestUnmarshalTypedProxyConfig (0.01s) === RUN TestServerConfigComplete --- PASS: TestServerConfigComplete (0.00s) === RUN TestAuthServerConfig_Complete --- PASS: TestAuthServerConfig_Complete (0.00s) === RUN TestValueSource_Validate === RUN TestValueSource_Validate/nil_valueSource === RUN TestValueSource_Validate/unsupported_type === RUN TestValueSource_Validate/file_type_without_file_config === RUN TestValueSource_Validate/valid_file_type_with_absolute_path === RUN TestValueSource_Validate/valid_file_type_with_relative_path --- PASS: TestValueSource_Validate (0.00s) --- PASS: TestValueSource_Validate/nil_valueSource (0.00s) --- PASS: TestValueSource_Validate/unsupported_type (0.00s) --- PASS: TestValueSource_Validate/file_type_without_file_config (0.00s) --- PASS: TestValueSource_Validate/valid_file_type_with_absolute_path (0.00s) --- PASS: TestValueSource_Validate/valid_file_type_with_relative_path (0.00s) === RUN TestFileSource_Validate === RUN TestFileSource_Validate/nil_fileSource === RUN TestFileSource_Validate/empty_path === RUN TestFileSource_Validate/relative_path_(allowed) === RUN TestFileSource_Validate/absolute_path --- PASS: TestFileSource_Validate (0.00s) --- PASS: TestFileSource_Validate/nil_fileSource (0.00s) --- PASS: TestFileSource_Validate/empty_path (0.00s) --- PASS: TestFileSource_Validate/relative_path_(allowed) (0.00s) --- PASS: TestFileSource_Validate/absolute_path (0.00s) === RUN TestFileSource_Resolve === RUN TestFileSource_Resolve/valid_file_path === RUN TestFileSource_Resolve/non-existent_file === RUN TestFileSource_Resolve/path_traversal_attempt_(should_fail_validation) --- PASS: TestFileSource_Resolve (0.01s) --- PASS: TestFileSource_Resolve/valid_file_path (0.00s) --- PASS: TestFileSource_Resolve/non-existent_file (0.00s) --- PASS: TestFileSource_Resolve/path_traversal_attempt_(should_fail_validation) (0.00s) === RUN TestValueSource_Resolve === RUN TestValueSource_Resolve/valid_file_type === RUN TestValueSource_Resolve/unsupported_type === RUN TestValueSource_Resolve/file_type_with_path_traversal --- PASS: TestValueSource_Resolve (0.00s) --- PASS: TestValueSource_Resolve/valid_file_type (0.00s) --- PASS: TestValueSource_Resolve/unsupported_type (0.00s) --- PASS: TestValueSource_Resolve/file_type_with_path_traversal (0.00s) PASS coverage: 42.0% of statements ok github.com/fatedier/frp/pkg/config/v1 0.866s coverage: 42.0% of statements === RUN TestValidateAuthTokenSource === RUN TestValidateAuthTokenSource/empty_token_config === RUN TestValidateAuthTokenSource/valid_file_tokenSource === RUN TestValidateAuthTokenSource/literal_token_without_tokenSource === RUN TestValidateAuthTokenSource/literal_token_conflicts_with_file_tokenSource === RUN TestValidateAuthTokenSource/exec_tokenSource_requires_unsafe_feature === RUN TestValidateAuthTokenSource/exec_tokenSource_with_unsafe_feature_allowed === RUN TestValidateAuthTokenSource/literal_token_conflicts_with_exec_tokenSource_and_unsafe_feature_disabled === RUN TestValidateAuthTokenSource/literal_token_conflicts_with_exec_tokenSource_and_unsafe_feature_allowed === RUN TestValidateAuthTokenSource/invalid_file_tokenSource_is_wrapped === RUN TestValidateAuthTokenSource/unsupported_tokenSource_type_is_wrapped --- PASS: TestValidateAuthTokenSource (0.01s) --- PASS: TestValidateAuthTokenSource/empty_token_config (0.00s) --- PASS: TestValidateAuthTokenSource/valid_file_tokenSource (0.00s) --- PASS: TestValidateAuthTokenSource/literal_token_without_tokenSource (0.00s) --- PASS: TestValidateAuthTokenSource/literal_token_conflicts_with_file_tokenSource (0.00s) --- PASS: TestValidateAuthTokenSource/exec_tokenSource_requires_unsafe_feature (0.00s) --- PASS: TestValidateAuthTokenSource/exec_tokenSource_with_unsafe_feature_allowed (0.00s) --- PASS: TestValidateAuthTokenSource/literal_token_conflicts_with_exec_tokenSource_and_unsafe_feature_disabled (0.00s) --- PASS: TestValidateAuthTokenSource/literal_token_conflicts_with_exec_tokenSource_and_unsafe_feature_allowed (0.00s) --- PASS: TestValidateAuthTokenSource/invalid_file_tokenSource_is_wrapped (0.00s) --- PASS: TestValidateAuthTokenSource/unsupported_tokenSource_type_is_wrapped (0.00s) === RUN TestValidateClientAuthTokenSource === RUN TestValidateClientAuthTokenSource/empty_token_config === RUN TestValidateClientAuthTokenSource/valid_file_tokenSource === RUN TestValidateClientAuthTokenSource/literal_token_without_tokenSource === RUN TestValidateClientAuthTokenSource/literal_token_conflicts_with_file_tokenSource === RUN TestValidateClientAuthTokenSource/exec_tokenSource_requires_unsafe_feature === RUN TestValidateClientAuthTokenSource/exec_tokenSource_with_unsafe_feature_allowed === RUN TestValidateClientAuthTokenSource/literal_token_conflicts_with_exec_tokenSource_and_unsafe_feature_disabled === RUN TestValidateClientAuthTokenSource/literal_token_conflicts_with_exec_tokenSource_and_unsafe_feature_allowed === RUN TestValidateClientAuthTokenSource/invalid_file_tokenSource_is_wrapped === RUN TestValidateClientAuthTokenSource/unsupported_tokenSource_type_is_wrapped --- PASS: TestValidateClientAuthTokenSource (0.01s) --- PASS: TestValidateClientAuthTokenSource/empty_token_config (0.00s) --- PASS: TestValidateClientAuthTokenSource/valid_file_tokenSource (0.00s) --- PASS: TestValidateClientAuthTokenSource/literal_token_without_tokenSource (0.00s) --- PASS: TestValidateClientAuthTokenSource/literal_token_conflicts_with_file_tokenSource (0.00s) --- PASS: TestValidateClientAuthTokenSource/exec_tokenSource_requires_unsafe_feature (0.00s) --- PASS: TestValidateClientAuthTokenSource/exec_tokenSource_with_unsafe_feature_allowed (0.00s) --- PASS: TestValidateClientAuthTokenSource/literal_token_conflicts_with_exec_tokenSource_and_unsafe_feature_disabled (0.00s) --- PASS: TestValidateClientAuthTokenSource/literal_token_conflicts_with_exec_tokenSource_and_unsafe_feature_allowed (0.00s) --- PASS: TestValidateClientAuthTokenSource/invalid_file_tokenSource_is_wrapped (0.00s) --- PASS: TestValidateClientAuthTokenSource/unsupported_tokenSource_type_is_wrapped (0.00s) === RUN TestValidateServerAuthTokenSource === RUN TestValidateServerAuthTokenSource/empty_token_config === RUN TestValidateServerAuthTokenSource/valid_file_tokenSource === RUN TestValidateServerAuthTokenSource/literal_token_without_tokenSource === RUN TestValidateServerAuthTokenSource/literal_token_conflicts_with_file_tokenSource === RUN TestValidateServerAuthTokenSource/exec_tokenSource_requires_unsafe_feature === RUN TestValidateServerAuthTokenSource/exec_tokenSource_with_unsafe_feature_allowed === RUN TestValidateServerAuthTokenSource/literal_token_conflicts_with_exec_tokenSource_and_unsafe_feature_disabled === RUN TestValidateServerAuthTokenSource/literal_token_conflicts_with_exec_tokenSource_and_unsafe_feature_allowed === RUN TestValidateServerAuthTokenSource/invalid_file_tokenSource_is_wrapped === RUN TestValidateServerAuthTokenSource/unsupported_tokenSource_type_is_wrapped --- PASS: TestValidateServerAuthTokenSource (0.00s) --- PASS: TestValidateServerAuthTokenSource/empty_token_config (0.00s) --- PASS: TestValidateServerAuthTokenSource/valid_file_tokenSource (0.00s) --- PASS: TestValidateServerAuthTokenSource/literal_token_without_tokenSource (0.00s) --- PASS: TestValidateServerAuthTokenSource/literal_token_conflicts_with_file_tokenSource (0.00s) --- PASS: TestValidateServerAuthTokenSource/exec_tokenSource_requires_unsafe_feature (0.00s) --- PASS: TestValidateServerAuthTokenSource/exec_tokenSource_with_unsafe_feature_allowed (0.00s) --- PASS: TestValidateServerAuthTokenSource/literal_token_conflicts_with_exec_tokenSource_and_unsafe_feature_disabled (0.00s) --- PASS: TestValidateServerAuthTokenSource/literal_token_conflicts_with_exec_tokenSource_and_unsafe_feature_allowed (0.00s) --- PASS: TestValidateServerAuthTokenSource/invalid_file_tokenSource_is_wrapped (0.00s) --- PASS: TestValidateServerAuthTokenSource/unsupported_tokenSource_type_is_wrapped (0.00s) === RUN TestValidateClientFeatureGates === RUN TestValidateClientFeatureGates/VirtualNet_enabled === RUN TestValidateClientFeatureGates/VirtualNet_explicitly_disabled === RUN TestValidateClientFeatureGates/VirtualNet_disabled_by_default === RUN TestValidateClientFeatureGates/unknown_feature_gate --- PASS: TestValidateClientFeatureGates (0.00s) --- PASS: TestValidateClientFeatureGates/VirtualNet_enabled (0.00s) --- PASS: TestValidateClientFeatureGates/VirtualNet_explicitly_disabled (0.00s) --- PASS: TestValidateClientFeatureGates/VirtualNet_disabled_by_default (0.00s) --- PASS: TestValidateClientFeatureGates/unknown_feature_gate (0.00s) === RUN TestGetClientConfigRequirements === RUN TestGetClientConfigRequirements/no_requirements === RUN TestGetClientConfigRequirements/common_VirtualNet_address === RUN TestGetClientConfigRequirements/VirtualNet_proxy === RUN TestGetClientConfigRequirements/VirtualNet_visitor --- PASS: TestGetClientConfigRequirements (0.00s) --- PASS: TestGetClientConfigRequirements/no_requirements (0.00s) --- PASS: TestGetClientConfigRequirements/common_VirtualNet_address (0.00s) --- PASS: TestGetClientConfigRequirements/VirtualNet_proxy (0.00s) --- PASS: TestGetClientConfigRequirements/VirtualNet_visitor (0.00s) === RUN TestValidateClientFeatureGatesAreConfigScoped --- PASS: TestValidateClientFeatureGatesAreConfigScoped (0.00s) === RUN TestValidateIdentifiers === RUN TestValidateIdentifiers/run_id_accepts_printable_values === RUN TestValidateIdentifiers/run_id_rejects_empty === RUN TestValidateIdentifiers/run_id_rejects_control_character === RUN TestValidateIdentifiers/run_id_rejects_invalid_utf8 === RUN TestValidateIdentifiers/run_id_rejects_excessive_length --- PASS: TestValidateIdentifiers (0.00s) --- PASS: TestValidateIdentifiers/run_id_accepts_printable_values (0.00s) --- PASS: TestValidateIdentifiers/run_id_rejects_empty (0.00s) --- PASS: TestValidateIdentifiers/run_id_rejects_control_character (0.00s) --- PASS: TestValidateIdentifiers/run_id_rejects_invalid_utf8 (0.00s) --- PASS: TestValidateIdentifiers/run_id_rejects_excessive_length (0.00s) === RUN TestValidateOIDCClientCredentialsConfig === RUN TestValidateOIDCClientCredentialsConfig/valid === RUN TestValidateOIDCClientCredentialsConfig/invalid_token_endpoint_url === RUN TestValidateOIDCClientCredentialsConfig/missing_client_id === RUN TestValidateOIDCClientCredentialsConfig/scope_endpoint_param_is_not_allowed === RUN TestValidateOIDCClientCredentialsConfig/audience_conflict --- PASS: TestValidateOIDCClientCredentialsConfig (0.01s) --- PASS: TestValidateOIDCClientCredentialsConfig/valid (0.00s) --- PASS: TestValidateOIDCClientCredentialsConfig/invalid_token_endpoint_url (0.00s) --- PASS: TestValidateOIDCClientCredentialsConfig/missing_client_id (0.00s) --- PASS: TestValidateOIDCClientCredentialsConfig/scope_endpoint_param_is_not_allowed (0.00s) --- PASS: TestValidateOIDCClientCredentialsConfig/audience_conflict (0.00s) === RUN TestValidateDomainConfigForServerRejectsSubdomainHostCaseInsensitively === RUN TestValidateDomainConfigForServerRejectsSubdomainHostCaseInsensitively/lowercase_subdomain === RUN TestValidateDomainConfigForServerRejectsSubdomainHostCaseInsensitively/mixed_case_custom_domain === RUN TestValidateDomainConfigForServerRejectsSubdomainHostCaseInsensitively/mixed_case_wildcard_domain === RUN TestValidateDomainConfigForServerRejectsSubdomainHostCaseInsensitively/mixed_case_subdomain_host === RUN TestValidateDomainConfigForServerRejectsSubdomainHostCaseInsensitively/external_domain --- PASS: TestValidateDomainConfigForServerRejectsSubdomainHostCaseInsensitively (0.00s) --- PASS: TestValidateDomainConfigForServerRejectsSubdomainHostCaseInsensitively/lowercase_subdomain (0.00s) --- PASS: TestValidateDomainConfigForServerRejectsSubdomainHostCaseInsensitively/mixed_case_custom_domain (0.00s) --- PASS: TestValidateDomainConfigForServerRejectsSubdomainHostCaseInsensitively/mixed_case_wildcard_domain (0.00s) --- PASS: TestValidateDomainConfigForServerRejectsSubdomainHostCaseInsensitively/mixed_case_subdomain_host (0.00s) --- PASS: TestValidateDomainConfigForServerRejectsSubdomainHostCaseInsensitively/external_domain (0.00s) === RUN TestValidateServerConfigMaxPoolCount === RUN TestValidateServerConfigMaxPoolCount/negative === RUN TestValidateServerConfigMaxPoolCount/zero === RUN TestValidateServerConfigMaxPoolCount/positive === RUN TestValidateServerConfigMaxPoolCount/maximum_int64 --- PASS: TestValidateServerConfigMaxPoolCount (0.00s) --- PASS: TestValidateServerConfigMaxPoolCount/negative (0.00s) --- PASS: TestValidateServerConfigMaxPoolCount/zero (0.00s) --- PASS: TestValidateServerConfigMaxPoolCount/positive (0.00s) --- PASS: TestValidateServerConfigMaxPoolCount/maximum_int64 (0.00s) PASS coverage: 42.2% of statements ok github.com/fatedier/frp/pkg/config/v1/validation 1.072s coverage: 42.2% of statements ? github.com/fatedier/frp/pkg/errors [no test files] ? github.com/fatedier/frp/pkg/metrics [no test files] github.com/fatedier/frp/pkg/metrics/aggregate coverage: 0.0% of statements === RUN TestServerMetricsUsesClockForProxyTimestamps --- PASS: TestServerMetricsUsesClockForProxyTimestamps (0.00s) === RUN TestServerMetricsClearUselessInfoUsesClock --- PASS: TestServerMetricsClearUselessInfoUsesClock (0.01s) === RUN TestServerMetricsClearOfflineProxiesPreservesLegacyTotal --- PASS: TestServerMetricsClearOfflineProxiesPreservesLegacyTotal (0.00s) === RUN TestServerMetricsPruneOfflineProxiesReportsTotalStats --- PASS: TestServerMetricsPruneOfflineProxiesReportsTotalStats (0.00s) === RUN TestServerMetricsRunUsesClockTicker --- PASS: TestServerMetricsRunUsesClockTicker (0.01s) PASS coverage: 44.7% of statements ok github.com/fatedier/frp/pkg/metrics/mem 0.731s coverage: 44.7% of statements github.com/fatedier/frp/pkg/metrics/prometheus coverage: 0.0% of statements === RUN TestConnReadWriteMsg === RUN TestConnReadWriteMsg/v1 === RUN TestConnReadWriteMsg/v2 --- PASS: TestConnReadWriteMsg (0.01s) --- PASS: TestConnReadWriteMsg/v1 (0.01s) --- PASS: TestConnReadWriteMsg/v2 (0.00s) === RUN TestV1MessageTypeIDsAreStable --- PASS: TestV1MessageTypeIDsAreStable (0.00s) === RUN TestMessageTypeMapIsCompleteAndUnique --- PASS: TestMessageTypeMapIsCompleteAndUnique (0.00s) === RUN TestUDPPacketV2FrameSizes udp_benchmark_test.go:74: environment go=go1.27.1 goos=linux goarch=riscv64 gomaxprocs=64 udp_benchmark_test.go:80: frame payload=64 case=ipv4-remote json_bytes=152 binary_bytes=85 binary_saving_pct=44.08 udp_benchmark_test.go:80: frame payload=64 case=ipv4-local-remote json_bytes=198 binary_bytes=93 binary_saving_pct=53.03 udp_benchmark_test.go:80: frame payload=64 case=ipv6-remote json_bytes=154 binary_bytes=97 binary_saving_pct=37.01 udp_benchmark_test.go:80: frame payload=64 case=ipv6-local-remote json_bytes=214 binary_bytes=129 binary_saving_pct=39.72 udp_benchmark_test.go:80: frame payload=512 case=ipv4-remote json_bytes=748 binary_bytes=533 binary_saving_pct=28.74 udp_benchmark_test.go:80: frame payload=512 case=ipv4-local-remote json_bytes=794 binary_bytes=541 binary_saving_pct=31.86 udp_benchmark_test.go:80: frame payload=512 case=ipv6-remote json_bytes=750 binary_bytes=545 binary_saving_pct=27.33 udp_benchmark_test.go:80: frame payload=512 case=ipv6-local-remote json_bytes=810 binary_bytes=577 binary_saving_pct=28.77 udp_benchmark_test.go:80: frame payload=1200 case=ipv4-remote json_bytes=1664 binary_bytes=1221 binary_saving_pct=26.62 udp_benchmark_test.go:80: frame payload=1200 case=ipv4-local-remote json_bytes=1710 binary_bytes=1229 binary_saving_pct=28.13 udp_benchmark_test.go:80: frame payload=1200 case=ipv6-remote json_bytes=1666 binary_bytes=1233 binary_saving_pct=25.99 udp_benchmark_test.go:80: frame payload=1200 case=ipv6-local-remote json_bytes=1726 binary_bytes=1265 binary_saving_pct=26.71 udp_benchmark_test.go:80: frame payload=1472 case=ipv4-remote json_bytes=2028 binary_bytes=1493 binary_saving_pct=26.38 udp_benchmark_test.go:80: frame payload=1472 case=ipv4-local-remote json_bytes=2074 binary_bytes=1501 binary_saving_pct=27.63 udp_benchmark_test.go:80: frame payload=1472 case=ipv6-remote json_bytes=2030 binary_bytes=1505 binary_saving_pct=25.86 udp_benchmark_test.go:80: frame payload=1472 case=ipv6-local-remote json_bytes=2090 binary_bytes=1537 binary_saving_pct=26.46 --- PASS: TestUDPPacketV2FrameSizes (0.00s) === RUN TestUDPPacketBinaryRoundTrip --- PASS: TestUDPPacketBinaryRoundTrip (0.00s) === RUN TestUDPPacketBinarySizesAndOptionalLocalAddress === RUN TestUDPPacketBinarySizesAndOptionalLocalAddress/0 === RUN TestUDPPacketBinarySizesAndOptionalLocalAddress/32 === RUN TestUDPPacketBinarySizesAndOptionalLocalAddress/128 === RUN TestUDPPacketBinarySizesAndOptionalLocalAddress/512 === RUN TestUDPPacketBinarySizesAndOptionalLocalAddress/1200 === RUN TestUDPPacketBinarySizesAndOptionalLocalAddress/1472 === RUN TestUDPPacketBinarySizesAndOptionalLocalAddress/4096 === RUN TestUDPPacketBinarySizesAndOptionalLocalAddress/49107 === RUN TestUDPPacketBinarySizesAndOptionalLocalAddress/65507 --- PASS: TestUDPPacketBinarySizesAndOptionalLocalAddress (0.01s) --- PASS: TestUDPPacketBinarySizesAndOptionalLocalAddress/0 (0.00s) --- PASS: TestUDPPacketBinarySizesAndOptionalLocalAddress/32 (0.00s) --- PASS: TestUDPPacketBinarySizesAndOptionalLocalAddress/128 (0.00s) --- PASS: TestUDPPacketBinarySizesAndOptionalLocalAddress/512 (0.00s) --- PASS: TestUDPPacketBinarySizesAndOptionalLocalAddress/1200 (0.00s) --- PASS: TestUDPPacketBinarySizesAndOptionalLocalAddress/1472 (0.00s) --- PASS: TestUDPPacketBinarySizesAndOptionalLocalAddress/4096 (0.00s) --- PASS: TestUDPPacketBinarySizesAndOptionalLocalAddress/49107 (0.00s) --- PASS: TestUDPPacketBinarySizesAndOptionalLocalAddress/65507 (0.00s) === RUN TestUDPPacketBinaryMalformed --- PASS: TestUDPPacketBinaryMalformed (0.00s) === RUN TestUDPPacketBinaryEncodeRejectsInvalidPackets --- PASS: TestUDPPacketBinaryEncodeRejectsInvalidPackets (0.00s) === RUN TestV2BinaryUDPPacketReadWriterPreservesOtherMessages --- PASS: TestV2BinaryUDPPacketReadWriterPreservesOtherMessages (0.00s) === RUN TestV2BinaryUDPPacketReadWriterRoundTripAndCodecInvariant --- PASS: TestV2BinaryUDPPacketReadWriterRoundTripAndCodecInvariant (0.00s) === RUN TestNewUDPPacketReadWriterDefaultProtocolUsesV1 --- PASS: TestNewUDPPacketReadWriterDefaultProtocolUsesV1 (0.00s) === RUN TestNewUDPPacketReadWriterRejectsInvalidSelection === RUN TestNewUDPPacketReadWriterRejectsInvalidSelection/binary_codec_over_v1 === RUN TestNewUDPPacketReadWriterRejectsInvalidSelection/binary_codec_over_default_protocol === RUN TestNewUDPPacketReadWriterRejectsInvalidSelection/unknown_v2_codec === RUN TestNewUDPPacketReadWriterRejectsInvalidSelection/unknown_wire_protocol --- PASS: TestNewUDPPacketReadWriterRejectsInvalidSelection (0.00s) --- PASS: TestNewUDPPacketReadWriterRejectsInvalidSelection/binary_codec_over_v1 (0.00s) --- PASS: TestNewUDPPacketReadWriterRejectsInvalidSelection/binary_codec_over_default_protocol (0.00s) --- PASS: TestNewUDPPacketReadWriterRejectsInvalidSelection/unknown_v2_codec (0.00s) --- PASS: TestNewUDPPacketReadWriterRejectsInvalidSelection/unknown_wire_protocol (0.00s) === RUN TestV2ReadWriterRoundTrip --- PASS: TestV2ReadWriterRoundTrip (0.00s) === RUN TestNewReadWriter --- PASS: TestNewReadWriter (0.00s) === RUN TestNewReadWriterEncoding --- PASS: TestNewReadWriterEncoding (0.00s) === RUN TestV2MessageTypeIDsAreStable --- PASS: TestV2MessageTypeIDsAreStable (0.00s) === RUN TestV2MessageFrameEncoding --- PASS: TestV2MessageFrameEncoding (0.00s) === RUN TestDecodeV2MessageFrameInto --- PASS: TestDecodeV2MessageFrameInto (0.00s) === RUN TestDecodeV2MessageFrameRejectsInvalidFrame --- PASS: TestDecodeV2MessageFrameRejectsInvalidFrame (0.00s) === RUN TestDecodeV2MessageFrameIntoRejectsWrongTarget --- PASS: TestDecodeV2MessageFrameIntoRejectsWrongTarget (0.00s) === RUN TestEncodeV2MessageFrameRejectsUnknownMessage --- PASS: TestEncodeV2MessageFrameRejectsUnknownMessage (0.00s) === RUN FuzzDecodeUDPPacketBinary === RUN FuzzDecodeUDPPacketBinary/seed#0 === RUN FuzzDecodeUDPPacketBinary/seed#1 --- PASS: FuzzDecodeUDPPacketBinary (0.00s) --- PASS: FuzzDecodeUDPPacketBinary/seed#0 (0.00s) --- PASS: FuzzDecodeUDPPacketBinary/seed#1 (0.00s) PASS coverage: 76.6% of statements ok github.com/fatedier/frp/pkg/msg 0.599s coverage: 76.6% of statements === RUN TestAddUserPrefix --- PASS: TestAddUserPrefix (0.00s) === RUN TestStripUserPrefix --- PASS: TestStripUserPrefix (0.00s) === RUN TestBuildTargetServerProxyName --- PASS: TestBuildTargetServerProxyName (0.00s) PASS coverage: 100.0% of statements ok github.com/fatedier/frp/pkg/naming 0.703s coverage: 100.0% of statements === RUN TestAnalyzerUsesClockForRecordTimestamps --- PASS: TestAnalyzerUsesClockForRecordTimestamps (0.00s) === RUN TestDiscoverReusesLocalPortAndPreservesNATClassification === RUN TestDiscoverReusesLocalPortAndPreservesNATClassification/same_mapped_address === RUN TestDiscoverReusesLocalPortAndPreservesNATClassification/different_mapped_port --- PASS: TestDiscoverReusesLocalPortAndPreservesNATClassification (0.01s) --- PASS: TestDiscoverReusesLocalPortAndPreservesNATClassification/same_mapped_address (0.00s) --- PASS: TestDiscoverReusesLocalPortAndPreservesNATClassification/different_mapped_port (0.00s) === RUN TestDoSTUNRequestMapsLegacyAndModernAddresses === RUN TestDoSTUNRequestMapsLegacyAndModernAddresses/legacy === RUN TestDoSTUNRequestMapsLegacyAndModernAddresses/modern_takes_precedence --- PASS: TestDoSTUNRequestMapsLegacyAndModernAddresses (0.01s) --- PASS: TestDoSTUNRequestMapsLegacyAndModernAddresses/legacy (0.01s) --- PASS: TestDoSTUNRequestMapsLegacyAndModernAddresses/modern_takes_precedence (0.00s) === RUN TestSTUNResponseErrorsAndMissingAddresses === RUN TestSTUNResponseErrorsAndMissingAddresses/correlated_malformed_response === RUN TestSTUNResponseErrorsAndMissingAddresses/Binding_error_response === RUN TestSTUNResponseErrorsAndMissingAddresses/missing_mapped_address === RUN TestSTUNResponseErrorsAndMissingAddresses/missing_other_address --- PASS: TestSTUNResponseErrorsAndMissingAddresses (0.01s) --- PASS: TestSTUNResponseErrorsAndMissingAddresses/correlated_malformed_response (0.00s) --- PASS: TestSTUNResponseErrorsAndMissingAddresses/Binding_error_response (0.00s) --- PASS: TestSTUNResponseErrorsAndMissingAddresses/missing_mapped_address (0.00s) --- PASS: TestSTUNResponseErrorsAndMissingAddresses/missing_other_address (0.00s) === RUN TestSTUNTimeoutUsesCallerDeadlineWithoutRetry --- PASS: TestSTUNTimeoutUsesCallerDeadlineWithoutRetry (0.11s) === RUN TestSTUNClientLeavesSocketAndDeadlineWithCaller --- PASS: TestSTUNClientLeavesSocketAndDeadlineWithCaller (0.11s) PASS coverage: 27.5% of statements ok github.com/fatedier/frp/pkg/nathole 0.680s coverage: 27.5% of statements === RUN TestHTTPProxyHandleFragmentedConnectMethod --- PASS: TestHTTPProxyHandleFragmentedConnectMethod (0.03s) PASS coverage: 8.9% of statements ok github.com/fatedier/frp/pkg/plugin/client 0.895s coverage: 8.9% of statements github.com/fatedier/frp/pkg/plugin/client/internal/httpsserver coverage: 0.0% of statements === RUN TestManagerMutableContentAcrossOps === RUN TestManagerMutableContentAcrossOps/login === RUN TestManagerMutableContentAcrossOps/new_proxy === RUN TestManagerMutableContentAcrossOps/ping === RUN TestManagerMutableContentAcrossOps/new_work_conn === RUN TestManagerMutableContentAcrossOps/new_user_conn --- PASS: TestManagerMutableContentAcrossOps (0.00s) --- PASS: TestManagerMutableContentAcrossOps/login (0.00s) --- PASS: TestManagerMutableContentAcrossOps/new_proxy (0.00s) --- PASS: TestManagerMutableContentAcrossOps/ping (0.00s) --- PASS: TestManagerMutableContentAcrossOps/new_work_conn (0.00s) --- PASS: TestManagerMutableContentAcrossOps/new_user_conn (0.00s) === RUN TestManagerMutableContentRejectStopsChain --- PASS: TestManagerMutableContentRejectStopsChain (0.00s) === RUN TestManagerMutableContentPluginErrorLogLevel === RUN TestManagerMutableContentPluginErrorLogLevel/default_warning === RUN TestManagerMutableContentPluginErrorLogLevel/new_user_conn_info --- PASS: TestManagerMutableContentPluginErrorLogLevel (0.00s) --- PASS: TestManagerMutableContentPluginErrorLogLevel/default_warning (0.00s) --- PASS: TestManagerMutableContentPluginErrorLogLevel/new_user_conn_info (0.00s) === RUN TestManagerCloseProxyAggregatesErrors --- PASS: TestManagerCloseProxyAggregatesErrors (0.00s) PASS coverage: 52.3% of statements ok github.com/fatedier/frp/pkg/plugin/server 0.670s coverage: 52.3% of statements github.com/fatedier/frp/pkg/plugin/visitor coverage: 0.0% of statements github.com/fatedier/frp/pkg/policy/featuregate coverage: 0.0% of statements github.com/fatedier/frp/pkg/policy/security coverage: 0.0% of statements === RUN TestUdpPacket --- PASS: TestUdpPacket (0.00s) === RUN TestForwardUserConnReturnsWhenSendChannelIsClosed --- PASS: TestForwardUserConnReturnsWhenSendChannelIsClosed (0.01s) PASS coverage: 23.0% of statements ok github.com/fatedier/frp/pkg/proto/udp 0.639s coverage: 23.0% of statements === RUN TestFrameRoundTrip --- PASS: TestFrameRoundTrip (0.01s) === RUN TestReadFrameRejectsUnsupportedFlags --- PASS: TestReadFrameRejectsUnsupportedFlags (0.00s) === RUN TestReadFrameRejectsOversizedPayload --- PASS: TestReadFrameRejectsOversizedPayload (0.00s) === RUN TestCheckMagicV2ConsumesMagic --- PASS: TestCheckMagicV2ConsumesMagic (0.00s) === RUN TestWriteMagicIfV2 --- PASS: TestWriteMagicIfV2 (0.00s) === RUN TestCheckMagicV1PreservesReadBytes --- PASS: TestCheckMagicV1PreservesReadBytes (0.00s) === RUN TestValidateClientHello --- PASS: TestValidateClientHello (0.00s) === RUN TestValidateClientHelloRejectsInvalidCrypto --- PASS: TestValidateClientHelloRejectsInvalidCrypto (0.00s) === RUN TestPreferredAEADAlgorithms --- PASS: TestPreferredAEADAlgorithms (0.00s) === RUN TestNewServerHelloSelectsFirstSupportedAEADAlgorithm --- PASS: TestNewServerHelloSelectsFirstSupportedAEADAlgorithm (0.00s) === RUN TestUDPPacketCodecNegotiationFallbackAndValidation --- PASS: TestUDPPacketCodecNegotiationFallbackAndValidation (0.00s) === RUN TestNewClientCryptoContextValidatesServerHello --- PASS: TestNewClientCryptoContextValidatesServerHello (0.00s) === RUN TestNewCryptoContextBindsFullClientHelloPayload --- PASS: TestNewCryptoContextBindsFullClientHelloPayload (0.00s) === RUN TestNewClientCryptoContextRejectsUnknownServerSelection --- PASS: TestNewClientCryptoContextRejectsUnknownServerSelection (0.00s) === RUN TestNewClientCryptoContextRejectsUnadvertisedServerSelection --- PASS: TestNewClientCryptoContextRejectsUnadvertisedServerSelection (0.00s) PASS coverage: 81.9% of statements ok github.com/fatedier/frp/pkg/proto/wire 0.724s coverage: 81.9% of statements github.com/fatedier/frp/pkg/sdk/client coverage: 0.0% of statements === RUN TestParseExecPayload --- PASS: TestParseExecPayload (0.00s) === RUN TestParseExecPayloadRejectsMalformedPayloads === RUN TestParseExecPayloadRejectsMalformedPayloads/empty === RUN TestParseExecPayloadRejectsMalformedPayloads/short_length_prefix === RUN TestParseExecPayloadRejectsMalformedPayloads/declared_length_exceeds_remaining_payload === RUN TestParseExecPayloadRejectsMalformedPayloads/overflow_length --- PASS: TestParseExecPayloadRejectsMalformedPayloads (0.00s) --- PASS: TestParseExecPayloadRejectsMalformedPayloads/empty (0.00s) --- PASS: TestParseExecPayloadRejectsMalformedPayloads/short_length_prefix (0.00s) --- PASS: TestParseExecPayloadRejectsMalformedPayloads/declared_length_exceeds_remaining_payload (0.00s) --- PASS: TestParseExecPayloadRejectsMalformedPayloads/overflow_length (0.00s) === RUN TestWriteToClientSerializesChannelWrites --- PASS: TestWriteToClientSerializesChannelWrites (0.02s) PASS coverage: 2.6% of statements ok github.com/fatedier/frp/pkg/ssh 0.795s coverage: 2.6% of statements github.com/fatedier/frp/pkg/transport coverage: 0.0% of statements github.com/fatedier/frp/pkg/util/http coverage: 0.0% of statements github.com/fatedier/frp/pkg/util/jsonx coverage: 0.0% of statements === RUN TestNewBandwidthLimiterClampsBurstToTargetInt --- PASS: TestNewBandwidthLimiterClampsBurstToTargetInt (0.00s) === RUN TestNewBandwidthLimiterDisablesNonPositiveLimit --- PASS: TestNewBandwidthLimiterDisablesNonPositiveLimit (0.00s) === RUN TestReaderAndWriterRejectInvalidBurst === RUN TestReaderAndWriterRejectInvalidBurst/reader/0 === RUN TestReaderAndWriterRejectInvalidBurst/writer/0 === RUN TestReaderAndWriterRejectInvalidBurst/reader/-1 === RUN TestReaderAndWriterRejectInvalidBurst/writer/-1 --- PASS: TestReaderAndWriterRejectInvalidBurst (0.00s) --- PASS: TestReaderAndWriterRejectInvalidBurst/reader/0 (0.00s) --- PASS: TestReaderAndWriterRejectInvalidBurst/writer/0 (0.00s) --- PASS: TestReaderAndWriterRejectInvalidBurst/reader/-1 (0.00s) --- PASS: TestReaderAndWriterRejectInvalidBurst/writer/-1 (0.00s) PASS coverage: 39.5% of statements ok github.com/fatedier/frp/pkg/util/limit 0.613s coverage: 39.5% of statements github.com/fatedier/frp/pkg/util/log coverage: 0.0% of statements === RUN TestCounter --- PASS: TestCounter (0.00s) === RUN TestDateCounter --- PASS: TestDateCounter (0.01s) === RUN TestDateCounterRotate === RUN TestDateCounterRotate/same_day === RUN TestDateCounterRotate/clock_skew === RUN TestDateCounterRotate/one_day === RUN TestDateCounterRotate/two_days === RUN TestDateCounterRotate/all_reserved_days_elapsed --- PASS: TestDateCounterRotate (0.00s) --- PASS: TestDateCounterRotate/same_day (0.00s) --- PASS: TestDateCounterRotate/clock_skew (0.00s) --- PASS: TestDateCounterRotate/one_day (0.00s) --- PASS: TestDateCounterRotate/two_days (0.00s) --- PASS: TestDateCounterRotate/all_reserved_days_elapsed (0.00s) === RUN TestDateCounterGetLastDaysCountReturnsCopy --- PASS: TestDateCounterGetLastDaysCountReturnsCopy (0.00s) === RUN TestDateCounterClear --- PASS: TestDateCounterClear (0.00s) === RUN TestDateCounterConcurrentAccess --- PASS: TestDateCounterConcurrentAccess (0.01s) PASS coverage: 96.1% of statements ok github.com/fatedier/frp/pkg/util/metric 0.487s coverage: 96.1% of statements === RUN TestNewAEADCryptoReadWriterRoundTrip --- PASS: TestNewAEADCryptoReadWriterRoundTrip (0.01s) === RUN TestNewAEADCryptoReadWriterRejectsDifferentTranscript --- PASS: TestNewAEADCryptoReadWriterRejectsDifferentTranscript (0.00s) === RUN TestDeriveAEADControlKeysUsesDistinctDirections --- PASS: TestDeriveAEADControlKeysUsesDistinctDirections (0.00s) === RUN TestBuildProxyProtocolHeader --- PASS: TestBuildProxyProtocolHeader (0.00s) === RUN TestBuildProxyProtocolHeaderStruct --- PASS: TestBuildProxyProtocolHeaderStruct (0.00s) PASS coverage: 8.2% of statements ok github.com/fatedier/frp/pkg/util/net 0.667s coverage: 8.2% of statements github.com/fatedier/frp/pkg/util/system github.com/fatedier/frp/pkg/util/tcpmux coverage: 0.0% of statements === RUN TestRandId util_test.go:13: bdf8555227105ea3 --- PASS: TestRandId (0.02s) === RUN TestGetAuthKey --- PASS: TestGetAuthKey (0.00s) === RUN TestParseRangeNumbers --- PASS: TestParseRangeNumbers (0.00s) === RUN TestClonePtr --- PASS: TestClonePtr (0.00s) PASS coverage: 58.1% of statements ok github.com/fatedier/frp/pkg/util/util 0.571s coverage: 58.1% of statements github.com/fatedier/frp/pkg/util/version coverage: 0.0% of statements === RUN TestHTTPServerProtocols === RUN TestHTTPServerProtocols/HTTP/1.1 2026-10-09 11:36:34.673 [W] [httputil/reverseproxy.go:556] do http proxy request [host: 127.0.0.1:39795] error: no route found: 127.0.0.1 / === RUN TestHTTPServerProtocols/HTTP/2_prior_knowledge 2026-10-09 11:36:34.699 [W] [httputil/reverseproxy.go:556] do http proxy request [host: 127.0.0.1:39795] error: no route found: 127.0.0.1 / === RUN TestHTTPServerProtocols/HTTP/1.1_Upgrade_h2c 2026-10-09 11:36:34.708 [W] [httputil/reverseproxy.go:556] do http proxy request [host: 127.0.0.1:39795] error: no route found: 127.0.0.1 / --- PASS: TestHTTPServerProtocols (0.06s) --- PASS: TestHTTPServerProtocols/HTTP/1.1 (0.02s) --- PASS: TestHTTPServerProtocols/HTTP/2_prior_knowledge (0.03s) --- PASS: TestHTTPServerProtocols/HTTP/1.1_Upgrade_h2c (0.01s) === RUN TestCheckRouteAuthByRequest === RUN TestCheckRouteAuthByRequest/accepts_nil_route_config === RUN TestCheckRouteAuthByRequest/accepts_route_without_credentials === RUN TestCheckRouteAuthByRequest/accepts_authorization_header === RUN TestCheckRouteAuthByRequest/accepts_proxy_authorization_header === RUN TestCheckRouteAuthByRequest/rejects_authorization_fallback_for_proxy_request === RUN TestCheckRouteAuthByRequest/rejects_wrong_proxy_authorization_even_when_authorization_matches === RUN TestCheckRouteAuthByRequest/rejects_when_neither_header_matches === RUN TestCheckRouteAuthByRequest/rejects_proxy_authorization_on_direct_request --- PASS: TestCheckRouteAuthByRequest (0.00s) --- PASS: TestCheckRouteAuthByRequest/accepts_nil_route_config (0.00s) --- PASS: TestCheckRouteAuthByRequest/accepts_route_without_credentials (0.00s) --- PASS: TestCheckRouteAuthByRequest/accepts_authorization_header (0.00s) --- PASS: TestCheckRouteAuthByRequest/accepts_proxy_authorization_header (0.00s) --- PASS: TestCheckRouteAuthByRequest/rejects_authorization_fallback_for_proxy_request (0.00s) --- PASS: TestCheckRouteAuthByRequest/rejects_wrong_proxy_authorization_even_when_authorization_matches (0.00s) --- PASS: TestCheckRouteAuthByRequest/rejects_when_neither_header_matches (0.00s) --- PASS: TestCheckRouteAuthByRequest/rejects_proxy_authorization_on_direct_request (0.00s) === RUN TestGetRequestRouteUser === RUN TestGetRequestRouteUser/proxy_request_uses_proxy_authorization_username === RUN TestGetRequestRouteUser/connect_request_keeps_proxy_authorization_routing === RUN TestGetRequestRouteUser/direct_request_uses_authorization_username === RUN TestGetRequestRouteUser/proxy_request_does_not_fall_back_when_proxy_authorization_is_invalid --- PASS: TestGetRequestRouteUser (0.00s) --- PASS: TestGetRequestRouteUser/proxy_request_uses_proxy_authorization_username (0.00s) --- PASS: TestGetRequestRouteUser/connect_request_keeps_proxy_authorization_routing (0.00s) --- PASS: TestGetRequestRouteUser/direct_request_uses_authorization_username (0.00s) --- PASS: TestGetRequestRouteUser/proxy_request_does_not_fall_back_when_proxy_authorization_is_invalid (0.00s) === RUN TestGetHTTPSHostname --- PASS: TestGetHTTPSHostname (0.12s) === RUN TestRoutersGet === RUN TestRoutersGet/exact_host_and_user_match_with_normalized_domain === RUN TestRoutersGet/exact_host_and_empty_user_match === RUN TestRoutersGet/does_not_fall_back_from_named_user_to_empty_user === RUN TestRoutersGet/does_not_fall_back_to_wildcard_domains === RUN TestRoutersGet/does_not_fall_back_to_catch-all_domain --- PASS: TestRoutersGet (0.01s) --- PASS: TestRoutersGet/exact_host_and_user_match_with_normalized_domain (0.00s) --- PASS: TestRoutersGet/exact_host_and_empty_user_match (0.00s) --- PASS: TestRoutersGet/does_not_fall_back_from_named_user_to_empty_user (0.00s) --- PASS: TestRoutersGet/does_not_fall_back_to_wildcard_domains (0.00s) --- PASS: TestRoutersGet/does_not_fall_back_to_catch-all_domain (0.00s) === RUN TestRoutersGetByRoute === RUN TestRoutersGetByRoute/exact_domain_and_http_user === RUN TestRoutersGetByRoute/exact_domain_falls_back_to_all_users === RUN TestRoutersGetByRoute/wildcard_domain_uses_all_users_fallback === RUN TestRoutersGetByRoute/mixed-case_domain_is_normalized === RUN TestRoutersGetByRoute/exact_domain_wins_over_wildcard_domain === RUN TestRoutersGetByRoute/more_specific_wildcard_wins_over_broader_wildcard === RUN TestRoutersGetByRoute/wildcard_walk_checks_parent_domains === RUN TestRoutersGetByRoute/catch-all_domain_fallback === RUN TestRoutersGetByRoute/catch-all_domain_honors_http_user --- PASS: TestRoutersGetByRoute (0.00s) --- PASS: TestRoutersGetByRoute/exact_domain_and_http_user (0.00s) --- PASS: TestRoutersGetByRoute/exact_domain_falls_back_to_all_users (0.00s) --- PASS: TestRoutersGetByRoute/wildcard_domain_uses_all_users_fallback (0.00s) --- PASS: TestRoutersGetByRoute/mixed-case_domain_is_normalized (0.00s) --- PASS: TestRoutersGetByRoute/exact_domain_wins_over_wildcard_domain (0.00s) --- PASS: TestRoutersGetByRoute/more_specific_wildcard_wins_over_broader_wildcard (0.00s) --- PASS: TestRoutersGetByRoute/wildcard_walk_checks_parent_domains (0.00s) --- PASS: TestRoutersGetByRoute/catch-all_domain_fallback (0.00s) --- PASS: TestRoutersGetByRoute/catch-all_domain_honors_http_user (0.00s) === RUN TestRoutersGetByRouteNoMatch === RUN TestRoutersGetByRouteNoMatch/two-label_domain_does_not_enter_wildcard_walk === RUN TestRoutersGetByRouteNoMatch/missing_catch-all_remains_no_match === RUN TestRoutersGetByRouteNoMatch/wrong_path_remains_no_match --- PASS: TestRoutersGetByRouteNoMatch (0.00s) --- PASS: TestRoutersGetByRouteNoMatch/two-label_domain_does_not_enter_wildcard_walk (0.00s) --- PASS: TestRoutersGetByRouteNoMatch/missing_catch-all_remains_no_match (0.00s) --- PASS: TestRoutersGetByRouteNoMatch/wrong_path_remains_no_match (0.00s) === RUN TestRoutersConcurrentGetByRouteAndAdd --- PASS: TestRoutersConcurrentGetByRouteAndAdd (0.05s) PASS coverage: 50.2% of statements ok github.com/fatedier/frp/pkg/util/vhost 0.984s coverage: 50.2% of statements === RUN TestFastBackoffManagerUsesClock --- PASS: TestFastBackoffManagerUsesClock (0.00s) PASS coverage: 20.0% of statements ok github.com/fatedier/frp/pkg/util/wait 0.591s coverage: 20.0% of statements === RUN TestPrefixIsNotPartOfFormatString === RUN TestPrefixIsNotPartOfFormatString/error === RUN TestPrefixIsNotPartOfFormatString/warn === RUN TestPrefixIsNotPartOfFormatString/info === RUN TestPrefixIsNotPartOfFormatString/debug === RUN TestPrefixIsNotPartOfFormatString/trace --- PASS: TestPrefixIsNotPartOfFormatString (0.02s) --- PASS: TestPrefixIsNotPartOfFormatString/error (0.01s) --- PASS: TestPrefixIsNotPartOfFormatString/warn (0.00s) --- PASS: TestPrefixIsNotPartOfFormatString/info (0.00s) --- PASS: TestPrefixIsNotPartOfFormatString/debug (0.00s) --- PASS: TestPrefixIsNotPartOfFormatString/trace (0.00s) === RUN TestFormattingSemanticsArePreserved --- PASS: TestFormattingSemanticsArePreserved (0.00s) PASS coverage: 34.0% of statements ok github.com/fatedier/frp/pkg/util/xlog 0.614s coverage: 34.0% of statements github.com/fatedier/frp/pkg/virtual coverage: 0.0% of statements github.com/fatedier/frp/pkg/vnet coverage: 0.0% of statements >>> frp: Entering fakeroot... >>> frp-openrc*: Running split function openrc... 'etc/conf.d' -> '/home/buildozer/aports/community/frp/pkg/frp-openrc/etc/conf.d' 'etc/init.d' -> '/home/buildozer/aports/community/frp/pkg/frp-openrc/etc/init.d' >>> frp-openrc*: Preparing subpackage frp-openrc... >>> frp-openrc*: Running postcheck for frp-openrc >>> frp*: Running postcheck for frp >>> frp*: Preparing package frp... >>> frp*: Stripping binaries >>> frp*: Scanning shared objects >>> frp*: Tracing dependencies... so:libc.musl-riscv64.so.1 >>> frp*: Package size: 34.0 MB >>> frp*: Compressing data... >>> frp*: Create checksum... >>> frp*: Create frp-0.71.0-r0.apk >>> frp-openrc*: Tracing dependencies... >>> frp-openrc*: Package size: 717.0 B >>> frp-openrc*: Compressing data... >>> frp-openrc*: Create checksum... >>> frp-openrc*: Create frp-openrc-0.71.0-r0.apk >>> frp: Build complete at Fri, 09 Oct 2026 11:36:45 +0000 elapsed time 0h 3m 30s >>> frp: Cleaning up srcdir >>> frp: Cleaning up pkgdir >>> frp: Cleaning up tmpdir >>> frp: Uninstalling dependencies... (1/2) Purging .makedepends-frp (20261009.113318) (2/2) Purging go (1.27.1-r0) Executing busybox-1.38.0-r7.trigger OK: 1063.1 MiB in 113 packages >>> frp: Updating the community/riscv64 repository index... >>> frp: Signing the index...