fatedier
01413c3853
test/e2e: use shared deadline for proxy readiness and fix doc comment
...
- Use a single deadline in waitForClientProxyReady so total wait across
all proxies does not exceed the given timeout
- Fix WaitForOutput doc comment to accurately describe single pattern
with count semantics
2026-03-09 18:45:12 +08:00
fatedier
adcd2e64b6
test/e2e: replace RunProcesses client sleep with log-based proxy readiness detection
...
Replace the fixed 1500ms sleep in RunProcesses with event-driven proxy
registration detection by monitoring frpc log output for "start proxy
success" messages.
Key changes:
- Add thread-safe SafeBuffer to replace bytes.Buffer in Process, enabling
concurrent read/write of process output during execution
- Add Process.WaitForOutput() to poll process output for pattern matches
with timeout and early exit on process termination
- Add waitForClientProxyReady() that uses config.LoadClientConfig() to
extract proxy names, then waits for each proxy's success log
- For visitor-only clients (no deterministic readiness signal), fall back
to the original sleep with elapsed time deducted
2026-03-09 13:46:13 +08:00
fatedier
48e8901466
test/e2e: optimize RunFrps/RunFrpc with process exit detection ( #5225 )
...
* test/e2e: optimize RunFrps/RunFrpc with process exit detection
Refactor Process to track subprocess lifecycle via a done channel,
replacing direct cmd.Wait() in Stop() to avoid double-Wait races.
RunFrps/RunFrpc now use select on the done channel instead of fixed
sleeps, allowing short-lived processes (verify, startup failures) to
return immediately while preserving existing timeout behavior for
long-running daemons.
* test/e2e: guard Process against double-Start and Stop-before-Start
Add started flag to prevent double-Start panics and allow Stop to
return immediately when the process was never started. Use sync.Once
for closing the done channel as defense-in-depth against double close.
2026-03-09 10:28:47 +08:00
fatedier
bcd2424c24
test/e2e: optimize e2e test time by replacing sleeps with TCP readiness checks ( #5223 )
...
Replace the fixed 500ms sleep after each frps startup in RunProcesses
with a TCP dial-based readiness check that polls the server bind port.
This reduces the e2e suite wall time from ~97s to ~43s.
Also simplify the RunProcesses API to accept a single server template
string instead of a slice, matching how every call site uses it.
2026-03-08 23:41:33 +08:00
fatedier
c7ac12ea0f
server/group: refactor with shared abstractions and fix concurrency issues ( #5222 )
...
* server/group: refactor group package with shared abstractions and fix concurrency issues
Extract common patterns into reusable components:
- groupRegistry[G]: generic concurrent map for group lifecycle management
- baseGroup: shared plumbing for listener-based groups (TCP, HTTPS, TCPMux)
- Listener: unified virtual listener replacing 3 identical implementations
Fix concurrency issues:
- Stale-pointer race: isCurrent check + errGroupStale + controller retry loops
- Worker generation safety: pass realLn and acceptCh as params instead of reading mutable fields
- Connection leak: close conn on worker panic recovery path
- ABBA deadlock in HTTP UnRegister: consistent lock ordering (group.mu -> registry.mu)
- Round-robin overflow in HTTPGroup: use unsigned modulo
Add unit tests (17 tests) for registry, listener, and baseGroup.
Add TCPMux group load balancing e2e test.
* server/group: replace tautological assertion with require.NotPanics
* server/group: remove blank line between doc comment and type declaration
2026-03-08 18:57:21 +08:00
Oleksandr Redko
535eb3db35
refactor: use maps.Clone and slices.Concat ( #5220 )
2026-03-08 10:38:16 +08:00
Oleksandr Redko
c2454e7114
refactor: fix modernize lint issues ( #5215 )
2026-03-07 23:10:19 +08:00
Oleksandr Redko
bd200b1a3b
fix: typos in comments, tests, functions ( #5216 )
2026-03-07 18:43:04 +08:00
fatedier
fbeb6ca43a
refactor: restructure API packages into client/http and server/http with typed proxy/visitor models ( #5193 )
2026-03-04 17:38:43 +08:00
fatedier
01997deb98
add persistent proxy/visitor store with CRUD API and web UI ( #5188 )
2026-03-02 01:09:59 +08:00
fatedier
33428ab538
add e2e tests for exec-based token source ( #5111 )
2026-01-04 14:45:51 +08:00
fatedier
1cf325bb0c
https: add load balancing group support ( #5032 )
2025-10-28 17:37:18 +08:00
fatedier
f9065a6a78
add tokenSource support for auth configuration ( #4865 )
2025-07-03 13:17:21 +08:00
fatedier
43cf1688e4
update golangci-lint version ( #4817 )
2025-06-25 11:40:23 +08:00
fatedier
3fa76b72f3
add proxy protocol support for UDP proxies ( #4810 )
2025-06-25 11:40:23 +08:00
fatedier
3c8d648ddc
vnet: fix issues ( #4771 )
2025-04-27 15:46:22 +08:00
Gabriel Marin
092e5d3f94
client, pkg, server, test: replaced 'interface{}' with 'any' ( #4611 )
2025-01-02 11:24:08 +08:00
fatedier
ae73ec2fed
added a 30s timeout for frpc subcommands to avoid long delays ( #4359 )
2024-07-30 18:12:22 +08:00
fatedier
69cc422edf
client plugin: added plugin tls2raw ( #4341 )
2024-07-25 14:28:17 +08:00
fatedier
939c490768
Add http2http client plugin with hostHeaderRewrite and requestHeaders support ( #4275 )
2024-06-12 17:30:10 +08:00
fatedier
e81b36c5ba
support responseHeaders.set for proxy type http ( #4192 )
2024-04-29 15:53:45 +08:00
fatedier
dd7e2e8473
return 504 instead of 404 for proxy type http request timeout ( #4151 )
2024-04-11 20:19:08 +08:00
fatedier
590ccda677
fix x-forwarded-for header ( #4111 )
2024-03-28 16:47:27 +08:00
fatedier
3585f5c0c0
support range ports mapping by go template ( #4073 )
2024-03-15 17:23:16 +08:00
fatedier
e6ec5a509b
update release notes ( #4055 )
2024-03-12 15:14:13 +08:00
fatedier
43ba7bd338
use new log package ( #4054 )
2024-03-12 13:58:53 +08:00
fatedier
3529158f31
proxy supports configuring annotations, which will be displayed in the frps dashboard ( #4000 )
2024-02-19 16:28:27 +08:00
fatedier
d01f4a3ec1
cmd: use hyphen instead of underscore ( #3898 )
2023-12-27 10:44:13 +08:00
fatedier
256b87321d
improve e2e port allocator ( #3882 )
2023-12-21 22:46:08 +08:00
fatedier
95cf418963
ssh: return informations to client ( #3821 )
2023-12-01 20:18:13 +08:00
fatedier
7c799ee921
add e2e tests for ssh tunnel ( #3805 )
2023-11-28 13:48:32 +08:00
fatedier
69ae2b0b69
optimize some code ( #3801 )
2023-11-27 15:47:49 +08:00
Aarni Koskela
f5d5a00eef
Fix various typos ( #3783 )
2023-11-22 14:30:22 +08:00
fatedier
526e809bd5
update for strict config ( #3779 )
2023-11-16 21:03:36 +08:00
fatedier
01a0d557ef
fix legacy ini proxy conversion panic ( #3667 )
2023-10-11 16:53:03 +08:00
fatedier
7cc67e852e
fix that transport.tls.disableCustomTLSFirstByte doesn't take effect ( #3660 )
2023-10-11 11:49:40 +08:00
fatedier
bae0b4d7c0
optimize the code of the command line ( #3614 )
2023-09-15 10:33:32 +08:00
fatedier
74255f711e
config: add some validations ( #3610 )
2023-09-13 18:59:51 +08:00
fatedier
7cd02f5bd8
add e2e tests for v1 config ( #3608 )
2023-09-13 16:32:39 +08:00
fatedier
c95311d1a0
support yaml/json/toml configuration format, make ini deprecated ( #3599 )
2023-09-06 10:18:02 +08:00
fatedier
46ff40543a
update github actions ( #3538 )
2023-07-21 10:30:46 +08:00
fatedier
efcc028a3d
fix a race condition issue ( #3536 )
2023-07-20 22:32:32 +08:00
fatedier
fc4e787fe2
frpc: support stop command ( #3511 )
2023-06-30 17:35:37 +08:00
fatedier
801e8c6742
support wss between frpc and frps ( #3503 )
2023-06-29 11:20:45 +08:00
fatedier
685d7618f3
change default value of tls_enable and disable_custom_tls_first_byte ( #3494 )
2023-06-26 00:10:27 +08:00
fatedier
15a245766e
fix the issue of duplicate xtcp proxies will cause the previous proxy to become ineffective ( #3489 )
2023-06-16 00:41:06 +08:00
fatedier
9ba6a06470
e2e: update
2023-06-04 20:11:07 +08:00
fatedier
de85c9455a
stcp, xtcp, sudp: support allow_users and specified server user ( #3472 )
2023-06-02 16:06:29 +08:00
fatedier
c7a0cfc66d
xtcp: when connection timeout occurs, support fallback to STCP ( #3460 )
2023-05-30 10:55:00 +08:00
fatedier
4915852b9c
use constant time comparison ( #3452 )
2023-05-29 00:27:27 +08:00