Files
smartproxy/test-output.log
Juergen Kunz aa6ddbc4a6
Some checks failed
Default (tags) / security (push) Successful in 53s
Default (tags) / test (push) Failing after 31m2s
Default (tags) / release (push) Has been skipped
Default (tags) / metadata (push) Has been skipped
BREAKING_CHANGE(routing): refactor route configuration to support multiple targets
2025-07-21 08:52:07 +00:00

330 KiB

 
> @push.rocks/smartproxy@19.6.17 test /mnt/data/lossless/push.rocks/smartproxy
> (tstest test/**/test*.ts --verbose --timeout 60 --logfile)
 
 
🔍 Test Discovery
Mode: glob
Pattern: test/**/test*.ts
Found: 78 test file(s)
 
▶️ test/core/routing/test.domain-matcher.ts (1/78)
Runtime: node.js
Test starting: DomainMatcher - exact match
✅ DomainMatcher - exact match (0ms)
Test starting: DomainMatcher - case insensitive
✅ DomainMatcher - case insensitive (0ms)
Test starting: DomainMatcher - wildcard matching
✅ DomainMatcher - wildcard matching (0ms)
Test starting: DomainMatcher - FQDN normalization
✅ DomainMatcher - FQDN normalization (0ms)
Test starting: DomainMatcher - edge cases
✅ DomainMatcher - edge cases (0ms)
Test starting: DomainMatcher - specificity calculation
✅ DomainMatcher - specificity calculation (0ms)
Test starting: DomainMatcher - findAllMatches
✅ DomainMatcher - findAllMatches (0ms)
Summary: 7/7 PASSED in 1.3s
 
▶️ test/core/routing/test.ip-matcher.ts (2/78)
Runtime: node.js
Test starting: IpMatcher - exact match
✅ IpMatcher - exact match (0ms)
Test starting: IpMatcher - CIDR notation
✅ IpMatcher - CIDR notation (0ms)
Test starting: IpMatcher - wildcard matching
✅ IpMatcher - wildcard matching (0ms)
Test starting: IpMatcher - range matching
✅ IpMatcher - range matching (0ms)
Test starting: IpMatcher - IPv6-mapped IPv4
✅ IpMatcher - IPv6-mapped IPv4 (0ms)
Test starting: IpMatcher - IP validation
✅ IpMatcher - IP validation (0ms)
Test starting: IpMatcher - isAuthorized
✅ IpMatcher - isAuthorized (0ms)
Test starting: IpMatcher - specificity calculation
✅ IpMatcher - specificity calculation (1ms)
Test starting: IpMatcher - edge cases
✅ IpMatcher - edge cases (0ms)
Summary: 9/9 PASSED in 1.3s
 
▶️ test/core/routing/test.path-matcher.ts (3/78)
Runtime: node.js
Test starting: PathMatcher - exact match
✅ PathMatcher - exact match (0ms)
Test starting: PathMatcher - no match
✅ PathMatcher - no match (0ms)
Test starting: PathMatcher - parameter extraction
✅ PathMatcher - parameter extraction (0ms)
Test starting: PathMatcher - multiple parameters
✅ PathMatcher - multiple parameters (1ms)
Test starting: PathMatcher - wildcard matching
Error details:
Expected value to equal "users/123/profile"

Diff:
Line 1: - users/123/profile
Line 1: + /users/123/profile
❌ PathMatcher - wildcard matching (0ms)
⟦TSTEST:META:{"time":4,"retry":0,"error":{"message":"Expected value to equal \"users/123/profile\"","stack":"Error: Expected value to equal \"users/123/profile\"\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:299:15)\n at runDirectOrNegated (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:214:16)\n at Assertion.runCheck (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:279:5)\n at Assertion.customAssertion (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:294:17)\n at Assertion.toEqual (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:332:17)\n at Proxy.<anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.expect.wrapper.ts:33:38)\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/core/routing/test.path-matcher.ts:35:32)\n at TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:26)\n at TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:176:34)\n at Tap.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:528:39)"}}⟧
⟦TSTEST:ERROR⟧
{
"testNumber": 5,
"error": {
"message": "Expected value to equal \"users/123/profile\"",
"stack": "Error: Expected value to equal \"users/123/profile\"\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:299:15)\n at runDirectOrNegated (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:214:16)\n at Assertion.runCheck (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:279:5)\n at Assertion.customAssertion (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:294:17)\n at Assertion.toEqual (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:332:17)\n at Proxy.<anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.expect.wrapper.ts:33:38)\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/core/routing/test.path-matcher.ts:35:32)\n at TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:26)\n at TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:176:34)\n at Tap.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:528:39)"
}
}
Error details:
Error: Expected value to equal "users/123/profile"
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:299:15)
at runDirectOrNegated (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:214:16)
at Assertion.runCheck (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:279:5)
at Assertion.customAssertion (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:294:17)
at Assertion.toEqual (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:332:17)
at Proxy.<anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.expect.wrapper.ts:33:38)
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/core/routing/test.path-matcher.ts:35:32)
at TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:26)
at TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:176:34)
at Tap.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:528:39)
Error: Expected value to equal "users/123/profile"
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:299:15)
at runDirectOrNegated (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:214:16)
at Assertion.runCheck (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:279:5)
at Assertion.customAssertion (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:294:17)
at Assertion.toEqual (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:332:17)
at Proxy.<anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.expect.wrapper.ts:33:38)
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/core/routing/test.path-matcher.ts:35:32)
at TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:26)
at TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:176:34)
at Tap.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:528:39)
Test starting: PathMatcher - mixed parameters and wildcards
Error details:
Expected value to equal "users/123"

Diff:
Line 1: - users/123
Line 1: + /users/123
❌ PathMatcher - mixed parameters and wildcards (0ms)
⟦TSTEST:META:{"time":0,"retry":0,"error":{"message":"Expected value to equal \"users/123\"","stack":"Error: Expected value to equal \"users/123\"\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:299:15)\n at runDirectOrNegated (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:214:16)\n at Assertion.runCheck (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:279:5)\n at Assertion.customAssertion (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:294:17)\n at Assertion.toEqual (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:332:17)\n at Proxy.<anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.expect.wrapper.ts:33:38)\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/core/routing/test.path-matcher.ts:42:32)\n at TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:26)\n at TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:176:34)\n at Tap.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:528:39)"}}⟧
⟦TSTEST:ERROR⟧
{
"testNumber": 6,
"error": {
"message": "Expected value to equal \"users/123\"",
"stack": "Error: Expected value to equal \"users/123\"\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:299:15)\n at runDirectOrNegated (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:214:16)\n at Assertion.runCheck (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:279:5)\n at Assertion.customAssertion (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:294:17)\n at Assertion.toEqual (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:332:17)\n at Proxy.<anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.expect.wrapper.ts:33:38)\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/core/routing/test.path-matcher.ts:42:32)\n at TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:26)\n at TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:176:34)\n at Tap.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:528:39)"
}
}
Error details:
Error: Expected value to equal "users/123"
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:299:15)
at runDirectOrNegated (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:214:16)
at Assertion.runCheck (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:279:5)
at Assertion.customAssertion (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:294:17)
at Assertion.toEqual (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:332:17)
at Proxy.<anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.expect.wrapper.ts:33:38)
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/core/routing/test.path-matcher.ts:42:32)
at TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:26)
at TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:176:34)
at Tap.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:528:39)
Error: Expected value to equal "users/123"
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:299:15)
at runDirectOrNegated (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:214:16)
at Assertion.runCheck (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:279:5)
at Assertion.customAssertion (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:294:17)
at Assertion.toEqual (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:332:17)
at Proxy.<anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.expect.wrapper.ts:33:38)
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/core/routing/test.path-matcher.ts:42:32)
at TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:26)
at TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:176:34)
at Tap.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:528:39)
Test starting: PathMatcher - trailing slash normalization
✅ PathMatcher - trailing slash normalization (0ms)
Test starting: PathMatcher - root path handling
✅ PathMatcher - root path handling (0ms)
Test starting: PathMatcher - specificity calculation
✅ PathMatcher - specificity calculation (1ms)
Test starting: PathMatcher - findAllMatches
✅ PathMatcher - findAllMatches (1ms)
Test starting: PathMatcher - edge cases
✅ PathMatcher - edge cases (0ms)
Test 5 failed with status error:
|| PathMatcher - wildcard matching
|| for more information please take a look the logs above
Test 6 failed with status error:
|| PathMatcher - mixed parameters and wildcards
|| for more information please take a look the logs above
Summary: 9 passed, 2 failed of 11 tests in 1.3s
 
▶️ test/core/utils/test.async-utils.ts (4/78)
Runtime: node.js
Test starting: delay should pause execution for specified milliseconds
✅ delay should pause execution for specified milliseconds (102ms)
Test starting: retryWithBackoff should retry failed operations
✅ retryWithBackoff should retry failed operations (31ms)
Test starting: retryWithBackoff should throw after max attempts
✅ retryWithBackoff should throw after max attempts (11ms)
Test starting: withTimeout should complete operations within timeout
✅ withTimeout should complete operations within timeout (50ms)
Test starting: withTimeout should throw on timeout
✅ withTimeout should throw on timeout (50ms)
Test starting: parallelLimit should respect concurrency limit
✅ parallelLimit should respect concurrency limit (151ms)
Test starting: debounceAsync should debounce function calls
✅ debounceAsync should debounce function calls (151ms)
Test starting: AsyncMutex should ensure exclusive access
✅ AsyncMutex should ensure exclusive access (32ms)
Test starting: CircuitBreaker should open after failures
✅ CircuitBreaker should open after failures (151ms)
Summary: 9/9 PASSED in 2.0s
 
▶️ test/core/utils/test.binary-heap.ts (5/78)
Runtime: node.js
Test starting: should create empty heap
✅ should create empty heap (1ms)
Test starting: should insert and extract in correct order
✅ should insert and extract in correct order (1ms)
Test starting: should work with custom objects and comparator
✅ should work with custom objects and comparator (0ms)
Test starting: should support reverse order (max heap)
✅ should support reverse order (max heap) (0ms)
Test starting: should extract by predicate
✅ should extract by predicate (0ms)
Test starting: should extract by key
✅ should extract by key (0ms)
Test starting: should throw when using key operations without extractKey
✅ should throw when using key operations without extractKey (0ms)
Test starting: should handle duplicates correctly
✅ should handle duplicates correctly (0ms)
Test starting: should convert to array without modifying heap
✅ should convert to array without modifying heap (0ms)
Test starting: should clear the heap
✅ should clear the heap (0ms)
Test starting: should handle complex extraction patterns
✅ should handle complex extraction patterns (0ms)
Summary: 11/11 PASSED in 1.2s
 
▶️ test/core/utils/test.fs-utils.ts (6/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
Test starting: should create and check directory existence
✅ should create and check directory existence (1ms)
Test starting: should write and read text files
✅ should write and read text files (2ms)
Test starting: should write and read JSON files
✅ should write and read JSON files (1ms)
Test starting: should copy files
✅ should copy files (1ms)
Test starting: should move files
✅ should move files (1ms)
Test starting: should list files in directory
✅ should list files in directory (0ms)
Test starting: should list files with full paths
✅ should list files with full paths (1ms)
Test starting: should get file stats
✅ should get file stats (0ms)
Test starting: should handle non-existent files gracefully
✅ should handle non-existent files gracefully (0ms)
Test starting: should remove files
✅ should remove files (1ms)
Test starting: should ensure file exists
✅ should ensure file exists (0ms)
Test starting: should recursively list files
✅ should recursively list files (1ms)
Test starting: should clean up test directory
✅ should clean up test directory (1ms)
Summary: 13/13 PASSED in 2.2s
 
▶️ test/core/utils/test.ip-utils.ts (7/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
Test starting: ip-utils - normalizeIP
✅ ip-utils - normalizeIP (1ms)
Test starting: ip-utils - isGlobIPMatch
✅ ip-utils - isGlobIPMatch (3ms)
Test starting: ip-utils - isIPAuthorized
✅ ip-utils - isIPAuthorized (1ms)
Test starting: ip-utils - isPrivateIP
✅ ip-utils - isPrivateIP (0ms)
Test starting: ip-utils - isPublicIP
✅ ip-utils - isPublicIP (0ms)
Test starting: ip-utils - cidrToGlobPatterns
✅ ip-utils - cidrToGlobPatterns (0ms)
Summary: 6/6 PASSED in 2.3s
 
▶️ test/core/utils/test.lifecycle-component.ts (8/78)
Runtime: node.js
Test starting: should manage timers properly
✅ should manage timers properly (202ms)
Test starting: should manage event listeners properly
✅ should manage event listeners properly (0ms)
Test starting: should prevent timer execution after cleanup
✅ should prevent timer execution after cleanup (150ms)
Test starting: should handle child components
✅ should handle child components (100ms)
Test starting: should handle multiple cleanup calls gracefully
✅ should handle multiple cleanup calls gracefully (0ms)
Test starting: should clear specific timers
✅ should clear specific timers (151ms)
Test starting: should clear specific intervals
✅ should clear specific intervals (220ms)
Test starting: should handle once event listeners
✅ should handle once event listeners (1ms)
Test starting: should not create timers when shutting down
✅ should not create timers when shutting down (50ms)
Summary: 9/9 PASSED in 2.1s
 
▶️ test/core/utils/test.shared-security-manager.ts (9/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
Test starting: Shared Security Manager
✅ Shared Security Manager (1ms)
Summary: 1/1 PASSED in 2.2s
 
▶️ test/core/utils/test.validation-utils.ts (10/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
Test starting: validation-utils - isValidPort
✅ validation-utils - isValidPort (0ms)
Test starting: validation-utils - isValidDomainName
✅ validation-utils - isValidDomainName (0ms)
Test starting: validation-utils - isValidEmail
✅ validation-utils - isValidEmail (0ms)
Test starting: validation-utils - isValidCertificate
✅ validation-utils - isValidCertificate (1ms)
Test starting: validation-utils - isValidPrivateKey
✅ validation-utils - isValidPrivateKey (0ms)
Test starting: validation-utils - validateDomainOptions
✅ validation-utils - validateDomainOptions (0ms)
Test starting: validation-utils - validateAcmeOptions
✅ validation-utils - validateAcmeOptions (0ms)
Summary: 7/7 PASSED in 2.3s
 
▶️ test/test.acme-http-challenge.ts (11/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
info: Logger initialized
Test starting: should handle HTTP requests on port 80 for ACME challenges
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
debug Port 18080 is used by 1 routes: acme-test-route
info: SmartProxy starting with 1 ports: 18080
info: SmartProxy -> OK: Now listening on port 18080
info: No routes require certificate management
debug MetricsCollector started
info: New connection from ::ffff:127.0.0.1 on port 18080. Active connections: 1
info: Handling socket-handler action for route acme-test-route
info: SmartProxy shutting down...
info: NFTablesManager stopped
debug Port 18080 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 18080
info: All servers closed. Cleaning up active connections...
debug MetricsCollector stopped
info: SmartProxy shutdown complete.
✅ should handle HTTP requests on port 80 for ACME challenges (27ms)
Test starting: should parse HTTP headers correctly
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
debug Port 18081 is used by 1 routes: header-test-route
info: SmartProxy starting with 1 ports: 18081
info: SmartProxy -> OK: Now listening on port 18081
info: No routes require certificate management
debug MetricsCollector started
debug Connection 1zmgol0smz7892s0rtaqq closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 18081. Active connections: 1
info: Handling socket-handler action for route header-test-route
info: SmartProxy shutting down...
info: NFTablesManager stopped
debug Port 18081 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 18081
info: All servers closed. Cleaning up active connections...
debug MetricsCollector stopped
info: [SUMMARY] 1 HttpProxy connections terminated in 0s
info: SmartProxy shutdown complete.
✅ should parse HTTP headers correctly (5ms)
debug Connection 7d9dtenko8n68ci30cnx8u closed during immediate routing: immediate-route-client_closed
info: [SUMMARY] 1 HttpProxy connections terminated in 1s
Summary: 2/2 PASSED in 3.3s
 
▶️ test/test.acme-http01-challenge.ts (12/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
info: Logger initialized
Test starting: should correctly handle HTTP-01 challenge requests with initial data chunk
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
debug Port 8080 is used by 1 routes: acme-challenge-route
info: SmartProxy starting with 1 ports: 8080
info: SmartProxy -> OK: Now listening on port 8080
info: No routes require certificate management
debug MetricsCollector started
info: New connection from ::ffff:127.0.0.1 on port 8080. Active connections: 1
info: Handling socket-handler action for route acme-challenge-route
Received request: GET /.well-known/acme-challenge/test-acme-http01-challenge-token
debug Connection ctk31t255pd9c33wgs7iol closed during immediate routing: immediate-route-client_closed
info: SmartProxy shutting down...
info: NFTablesManager stopped
debug Port 8080 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 8080
info: All servers closed. Cleaning up active connections...
debug MetricsCollector stopped
info: [SUMMARY] 1 HttpProxy connections terminated in 0s
info: SmartProxy shutdown complete.
✅ should correctly handle HTTP-01 challenge requests with initial data chunk (113ms)
Test starting: should return 404 for non-existent challenge tokens
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
debug Port 8081 is used by 1 routes: acme-challenge-route
info: SmartProxy starting with 1 ports: 8081
info: SmartProxy -> OK: Now listening on port 8081
info: No routes require certificate management
debug MetricsCollector started
info: New connection from ::ffff:127.0.0.1 on port 8081. Active connections: 1
info: Handling socket-handler action for route acme-challenge-route
debug Connection b85l4hhzztejnaxzf4lee9 closed during immediate routing: immediate-route-client_closed
info: SmartProxy shutting down...
info: NFTablesManager stopped
debug Port 8081 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 8081
info: All servers closed. Cleaning up active connections...
debug MetricsCollector stopped
info: [SUMMARY] 1 HttpProxy connections terminated in 0s
info: SmartProxy shutdown complete.
✅ should return 404 for non-existent challenge tokens (103ms)
Summary: 2/2 PASSED in 3.4s
 
▶️ test/test.acme-route-creation.ts (13/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
info: Logger initialized
Test starting: should create ACME challenge route
info: Route manager configured with 2 routes across 2 ports
info: Updated RouteManager with 2 routes
debug Port 18443 is used by 1 routes: secure-route
debug Port 18080 is used by 1 routes: acme-challenge
info: SmartProxy starting with 2 ports: 18080, 18443
info: SmartProxy -> OK: Now listening on port 18080
info: SmartProxy -> OK: Now listening on port 18443
info: No routes require certificate management
debug MetricsCollector started
info: SmartProxy shutting down...
info: NFTablesManager stopped
debug Port 18080 reference count decreased to 0
debug Port 18443 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 18080
info: SmartProxy -> Stopped listening on port 18443
info: All servers closed. Cleaning up active connections...
debug MetricsCollector stopped
info: SmartProxy shutdown complete.
✅ should create ACME challenge route (6ms)
Test starting: should handle HTTP request parsing correctly
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
debug Port 18090 is used by 1 routes: test-static
info: SmartProxy starting with 1 ports: 18090
info: SmartProxy -> OK: Now listening on port 18090
info: No routes require certificate management
debug MetricsCollector started
info: New connection from ::ffff:127.0.0.1 on port 18090. Active connections: 1
info: Handling socket-handler action for route test-static
info: SmartProxy shutting down...
info: NFTablesManager stopped
debug Port 18090 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 18090
info: All servers closed. Cleaning up active connections...
debug MetricsCollector stopped
info: SmartProxy shutdown complete.
✅ should handle HTTP request parsing correctly (12ms)
debug Connection uczlsw6loqkmw2nt7506mi closed during immediate routing: immediate-route-client_closed
info: [SUMMARY] 1 HttpProxy connections terminated in 0s
Summary: 2/2 PASSED in 2.3s
 
▶️ test/test.acme-simple.ts (14/78)
Runtime: node.js
Test starting: should parse HTTP requests correctly
Test server listening on port 18091
✅ should parse HTTP requests correctly (8ms)
Test starting: should configure ACME challenge route
✅ should configure ACME challenge route (1ms)
Summary: 2/2 PASSED in 1.2s
 
▶️ test/test.acme-state-manager.node.ts (15/78)
Runtime: node.js
Test starting: AcmeStateManager should track challenge routes correctly
✅ AcmeStateManager should track challenge routes correctly (0ms)
Test starting: AcmeStateManager should track port allocations
✅ AcmeStateManager should track port allocations (0ms)
Test starting: AcmeStateManager should select primary route by priority
✅ AcmeStateManager should select primary route by priority (0ms)
Test starting: AcmeStateManager should handle clear operation
✅ AcmeStateManager should handle clear operation (1ms)
Summary: 4/4 PASSED in 1.2s
 
▶️ test/test.acme-timing-simple.ts (16/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
info: Logger initialized
Test starting: should defer certificate provisioning until ports are ready
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
WARN -> 1 configuration warnings found
WARN -> Port 80 is not configured for any routes but is needed for ACME challenges. Add a route listening on port 80 or ensure it's accessible for HTTP-01 challenges.
debug Port 8443 is used by 1 routes: test-route
info: SmartProxy starting with 1 ports: 8443
info: SmartProxy -> OK: Now listening on port 8443
Ports are now listening
info: Using route-level ACME configuration from route 'test-route' with email: test@local.dev
Creating mock cert manager
Mock cert manager initialized
info: Starting certificate provisioning now that ports are ready
Mock certificate provisioning (ports are ready)
debug MetricsCollector started
Operation order: [
'ports-starting',
'ports-ready',
'create-cert-manager',
'cert-manager-init',
'cert-provisioning'
]
info: SmartProxy shutting down...
info: Certificate manager stopped
info: NFTablesManager stopped
debug Port 8443 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 8443
info: All servers closed. Cleaning up active connections...
debug MetricsCollector stopped
info: SmartProxy shutdown complete.
✅ should defer certificate provisioning until ports are ready (6ms)
Summary: 1/1 PASSED in 2.3s
 
▶️ test/test.acme-timing.ts (17/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
info: Logger initialized
Test starting: should defer certificate provisioning until after ports are listening
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
WARN -> 1 configuration warnings found
WARN -> Port 8080 is not configured for any routes but is needed for ACME challenges. Add a route listening on port 8080 or ensure it's accessible for HTTP-01 challenges.
debug Port 8443 is used by 1 routes: test-acme-route
info: SmartProxy starting with 1 ports: 8443
[INFO] Route manager configured with 0 routes across 0 ports
[INFO] Updated RouteManager with 0 routes
[WARN] CertificateManager is deprecated - use SmartCertManager instead
[INFO] Loaded default certificates from filesystem (sync - deprecated)
Initialized HttpProxy on port 8845
[INFO] Updating route configurations (0 routes)
[INFO] Route manager configured with 0 routes across 0 ports
[INFO] Updated RouteManager with 0 routes
HttpRouter initialized with 0 routes (0 unique hosts)
[INFO] HttpRouter initialized with 0 routes (0 unique hosts)
HttpRouter initialized with 0 routes (0 unique hosts)
[INFO] HttpRouter initialized with 0 routes (0 unique hosts)
[INFO] Route configuration updated with 0 routes
[WARN] updateRoutes is deprecated - use SmartCertManager instead
[INFO] WebSocket handler initialized
[INFO] HttpProxy started on port 8845
info: SmartProxy -> OK: Now listening on port 8443
info: Using top-level ACME configuration with email: test@test.local
info: Starting certificate provisioning now that ports are ready
debug MetricsCollector started
info: SmartProxy shutting down...
info: Certificate manager stopped
info: NFTablesManager stopped
debug Port 8443 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 8443
info: All servers closed. Cleaning up active connections...
[INFO] Stopping HttpProxy server
[INFO] Closing 0 WebSocket connections
[INFO] Function cache cleared
[INFO] HttpProxy server stopped successfully
debug MetricsCollector stopped
info: SmartProxy shutdown complete.
✅ should defer certificate provisioning until after ports are listening (10ms)
Test starting: should have ACME challenge route ready before certificate provisioning
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
WARN -> 1 configuration warnings found
WARN -> Port 8080 is not configured for any routes but is needed for ACME challenges. Add a route listening on port 8080 or ensure it's accessible for HTTP-01 challenges.
debug Port 8443 is used by 1 routes: test-route
info: SmartProxy starting with 1 ports: 8443
[INFO] Route manager configured with 0 routes across 0 ports
[INFO] Updated RouteManager with 0 routes
[INFO] Loaded default certificates from filesystem (sync - deprecated)
Initialized HttpProxy on port 8846
[INFO] Updating route configurations (0 routes)
[INFO] Route manager configured with 0 routes across 0 ports
[INFO] Updated RouteManager with 0 routes
HttpRouter initialized with 0 routes (0 unique hosts)
[INFO] HttpRouter initialized with 0 routes (0 unique hosts)
HttpRouter initialized with 0 routes (0 unique hosts)
[INFO] HttpRouter initialized with 0 routes (0 unique hosts)
[INFO] Route configuration updated with 0 routes
[WARN] CertificateManager is deprecated - use SmartCertManager instead
[WARN] updateRoutes is deprecated - use SmartCertManager instead
[INFO] WebSocket handler initialized
[INFO] HttpProxy started on port 8846
info: SmartProxy -> OK: Now listening on port 8443
info: Using top-level ACME configuration with email: test@test.local
info: Starting certificate provisioning now that ports are ready
debug MetricsCollector started
info: SmartProxy shutting down...
info: Certificate manager stopped
info: NFTablesManager stopped
debug Port 8443 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 8443
info: All servers closed. Cleaning up active connections...
[INFO] Stopping HttpProxy server
[INFO] Closing 0 WebSocket connections
[INFO] Function cache cleared
[INFO] HttpProxy server stopped successfully
debug MetricsCollector stopped
info: SmartProxy shutdown complete.
✅ should have ACME challenge route ready before certificate provisioning (103ms)
Summary: 2/2 PASSED in 2.4s
 
▶️ test/test.certificate-acme-update.ts (18/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
info: Logger initialized
Test starting: SmartCertManager should call getCertificateForDomain with wildcard option
Testing SmartCertManager with SmartAcme v8.0.0 API...
Domain: example.com, DNS-01: true, Should include wildcard: true
Domain: example.com, DNS-01: false, Should include wildcard: false
Domain: sub.example.com, DNS-01: true, Should include wildcard: true
Domain: sub.example.com, DNS-01: false, Should include wildcard: false
Domain: *.example.com, DNS-01: true, Should include wildcard: false
Domain: *.example.com, DNS-01: false, Should include wildcard: false
Domain: test, DNS-01: true, Should include wildcard: false
Domain: test, DNS-01: false, Should include wildcard: false
Domain: my.sub.example.com, DNS-01: true, Should include wildcard: true
Domain: my.sub.example.com, DNS-01: false, Should include wildcard: false
All wildcard logic tests passed!
✅ SmartCertManager should call getCertificateForDomain with wildcard option (1ms)
Summary: 1/1 PASSED in 2.3s
 
▶️ test/test.certificate-provision.ts (19/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
info: Logger initialized
Test starting: SmartProxy should support custom certificate provision function
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
✅ SmartProxy should support custom certificate provision function (2ms)
Test starting: Custom certificate provision function should be called
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
WARN -> 1 configuration warnings found
WARN -> Port 9080 is not configured for any routes but is needed for ACME challenges. Add a route listening on port 9080 or ensure it's accessible for HTTP-01 challenges.
debug Port 9443 is used by 1 routes: custom-cert-route
info: SmartProxy starting with 1 ports: 9443
info: SmartProxy -> OK: Now listening on port 9443
info: Using top-level ACME configuration with email: test@example.com
debug Route update callback set successfully
❌ Custom certificate provision function should be called (0ms)
⟦TSTEST:META:{"time":1375,"retry":0,"error":{"message":"Error validating contact(s) :: contact email has forbidden domain \"example.com\"","stack":"Error: Error validating contact(s) :: contact email has forbidden domain \"example.com\"\n at AcmeApi.apiRequest (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/api.js:53:19)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async AcmeApi.createAccount (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/api.js:99:22)\n at async AcmeClient.createAccount (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/client.js:180:26)\n at async SmartAcme.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartacme@8.0.0_@aws-sdk+credential-providers@3.798.0_socks@2.8.4/node_modules/@push.rocks/smartacme/ts/smartacme.classes.smartacme.ts:142:5)\n at async SmartCertManager.initialize (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/certificate-manager.ts:153:7)\n at async SmartProxy.createCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:256:5)\n at async SmartProxy.testProxy2.createCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/test/test.certificate-provision.ts:129:25)\n at async SmartProxy.initializeCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:313:24)\n at async SmartProxy.start (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:386:5)"}}⟧
⟦TSTEST:ERROR⟧
{
"testNumber": 2,
"error": {
"message": "Error validating contact(s) :: contact email has forbidden domain \"example.com\"",
"stack": "Error: Error validating contact(s) :: contact email has forbidden domain \"example.com\"\n at AcmeApi.apiRequest (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/api.js:53:19)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async AcmeApi.createAccount (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/api.js:99:22)\n at async AcmeClient.createAccount (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/client.js:180:26)\n at async SmartAcme.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartacme@8.0.0_@aws-sdk+credential-providers@3.798.0_socks@2.8.4/node_modules/@push.rocks/smartacme/ts/smartacme.classes.smartacme.ts:142:5)\n at async SmartCertManager.initialize (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/certificate-manager.ts:153:7)\n at async SmartProxy.createCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:256:5)\n at async SmartProxy.testProxy2.createCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/test/test.certificate-provision.ts:129:25)\n at async SmartProxy.initializeCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:313:24)\n at async SmartProxy.start (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:386:5)"
}
}
Error details:
Error: Error validating contact(s) :: contact email has forbidden domain "example.com"
at AcmeApi.apiRequest (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/api.js:53:19)
at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
at async AcmeApi.createAccount (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/api.js:99:22)
at async AcmeClient.createAccount (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/client.js:180:26)
at async SmartAcme.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartacme@8.0.0_@aws-sdk+credential-providers@3.798.0_socks@2.8.4/node_modules/@push.rocks/smartacme/ts/smartacme.classes.smartacme.ts:142:5)
at async SmartCertManager.initialize (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/certificate-manager.ts:153:7)
at async SmartProxy.createCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:256:5)
at async SmartProxy.testProxy2.createCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/test/test.certificate-provision.ts:129:25)
at async SmartProxy.initializeCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:313:24)
at async SmartProxy.start (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:386:5)
Error: Error validating contact(s) :: contact email has forbidden domain "example.com"
at AcmeApi.apiRequest (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/api.js:53:19)
at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
at async AcmeApi.createAccount (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/api.js:99:22)
at async AcmeClient.createAccount (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/client.js:180:26)
at async SmartAcme.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartacme@8.0.0_@aws-sdk+credential-providers@3.798.0_socks@2.8.4/node_modules/@push.rocks/smartacme/ts/smartacme.classes.smartacme.ts:142:5)
at async SmartCertManager.initialize (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/certificate-manager.ts:153:7)
at async SmartProxy.createCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:256:5)
at async SmartProxy.testProxy2.createCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/test/test.certificate-provision.ts:129:25)
at async SmartProxy.initializeCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:313:24)
at async SmartProxy.start (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:386:5)
Test starting: Should fallback to ACME when custom provision fails
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
WARN -> 1 configuration warnings found
WARN -> Port 9080 is not configured for any routes but is needed for ACME challenges. Add a route listening on port 9080 or ensure it's accessible for HTTP-01 challenges.
debug Port 9444 is used by 1 routes: fallback-route
info: SmartProxy starting with 1 ports: 9444
info: SmartProxy -> OK: Now listening on port 9444
info: Using top-level ACME configuration with email: test@example.com
debug Route update callback set successfully
❌ Should fallback to ACME when custom provision fails (0ms)
⟦TSTEST:META:{"time":1092,"retry":0,"error":{"message":"Error validating contact(s) :: contact email has forbidden domain \"example.com\"","stack":"Error: Error validating contact(s) :: contact email has forbidden domain \"example.com\"\n at AcmeApi.apiRequest (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/api.js:53:19)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async AcmeApi.createAccount (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/api.js:99:22)\n at async AcmeClient.createAccount (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/client.js:180:26)\n at async SmartAcme.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartacme@8.0.0_@aws-sdk+credential-providers@3.798.0_socks@2.8.4/node_modules/@push.rocks/smartacme/ts/smartacme.classes.smartacme.ts:142:5)\n at async SmartCertManager.initialize (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/certificate-manager.ts:153:7)\n at async SmartProxy.createCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:256:5)\n at async SmartProxy.testProxy3.createCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/test/test.certificate-provision.ts:191:25)\n at async SmartProxy.initializeCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:313:24)\n at async SmartProxy.start (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:386:5)"}}⟧
⟦TSTEST:ERROR⟧
{
"testNumber": 3,
"error": {
"message": "Error validating contact(s) :: contact email has forbidden domain \"example.com\"",
"stack": "Error: Error validating contact(s) :: contact email has forbidden domain \"example.com\"\n at AcmeApi.apiRequest (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/api.js:53:19)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async AcmeApi.createAccount (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/api.js:99:22)\n at async AcmeClient.createAccount (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/client.js:180:26)\n at async SmartAcme.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartacme@8.0.0_@aws-sdk+credential-providers@3.798.0_socks@2.8.4/node_modules/@push.rocks/smartacme/ts/smartacme.classes.smartacme.ts:142:5)\n at async SmartCertManager.initialize (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/certificate-manager.ts:153:7)\n at async SmartProxy.createCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:256:5)\n at async SmartProxy.testProxy3.createCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/test/test.certificate-provision.ts:191:25)\n at async SmartProxy.initializeCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:313:24)\n at async SmartProxy.start (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:386:5)"
}
}
Error details:
Error: Error validating contact(s) :: contact email has forbidden domain "example.com"
at AcmeApi.apiRequest (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/api.js:53:19)
at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
at async AcmeApi.createAccount (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/api.js:99:22)
at async AcmeClient.createAccount (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/client.js:180:26)
at async SmartAcme.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartacme@8.0.0_@aws-sdk+credential-providers@3.798.0_socks@2.8.4/node_modules/@push.rocks/smartacme/ts/smartacme.classes.smartacme.ts:142:5)
at async SmartCertManager.initialize (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/certificate-manager.ts:153:7)
at async SmartProxy.createCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:256:5)
at async SmartProxy.testProxy3.createCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/test/test.certificate-provision.ts:191:25)
at async SmartProxy.initializeCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:313:24)
at async SmartProxy.start (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:386:5)
Error: Error validating contact(s) :: contact email has forbidden domain "example.com"
at AcmeApi.apiRequest (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/api.js:53:19)
at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
at async AcmeApi.createAccount (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/api.js:99:22)
at async AcmeClient.createAccount (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/client.js:180:26)
at async SmartAcme.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartacme@8.0.0_@aws-sdk+credential-providers@3.798.0_socks@2.8.4/node_modules/@push.rocks/smartacme/ts/smartacme.classes.smartacme.ts:142:5)
at async SmartCertManager.initialize (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/certificate-manager.ts:153:7)
at async SmartProxy.createCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:256:5)
at async SmartProxy.testProxy3.createCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/test/test.certificate-provision.ts:191:25)
at async SmartProxy.initializeCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:313:24)
at async SmartProxy.start (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:386:5)
Test starting: Should not fallback when certProvisionFallbackToAcme is false
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
WARN -> 2 configuration warnings found
WARN -> Routes with certificate: "auto" require ACME email configuration. Add email to either top-level "acme" config or individual route's "tls.acme" config.
WARN -> Port 80 is not configured for any routes but is needed for ACME challenges. Add a route listening on port 80 or ensure it's accessible for HTTP-01 challenges.
debug Port 9445 is used by 1 routes: no-fallback-route
info: SmartProxy starting with 1 ports: 9445
info: SmartProxy -> OK: Now listening on port 9445
❌ Should not fallback when certProvisionFallbackToAcme is false (0ms)
⟦TSTEST:META:{"time":1,"retry":0,"error":{"message":"Expected value to be true","stack":"Error: Expected value to be true\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:299:15)\n at runDirectOrNegated (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:214:16)\n at Proxy.runCheck (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:279:5)\n at Proxy.customAssertion (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:294:17)\n at BooleanMatchers.toBeTrue (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/namespaces/boolean.ts:11:27)\n at Proxy.toBeTrue (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:337:43)\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/test.certificate-provision.ts:273:23)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:20)\n at async TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:179:13)"}}⟧
⟦TSTEST:ERROR⟧
{
"testNumber": 4,
"error": {
"message": "Expected value to be true",
"stack": "Error: Expected value to be true\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:299:15)\n at runDirectOrNegated (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:214:16)\n at Proxy.runCheck (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:279:5)\n at Proxy.customAssertion (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:294:17)\n at BooleanMatchers.toBeTrue (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/namespaces/boolean.ts:11:27)\n at Proxy.toBeTrue (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:337:43)\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/test.certificate-provision.ts:273:23)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:20)\n at async TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:179:13)"
}
}
Error details:
Error: Expected value to be true
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:299:15)
at runDirectOrNegated (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:214:16)
at Proxy.runCheck (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:279:5)
at Proxy.customAssertion (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:294:17)
at BooleanMatchers.toBeTrue (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/namespaces/boolean.ts:11:27)
at Proxy.toBeTrue (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:337:43)
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/test.certificate-provision.ts:273:23)
at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
at async TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:20)
at async TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:179:13)
Error: Expected value to be true
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:299:15)
at runDirectOrNegated (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:214:16)
at Proxy.runCheck (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:279:5)
at Proxy.customAssertion (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:294:17)
at BooleanMatchers.toBeTrue (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/namespaces/boolean.ts:11:27)
at Proxy.toBeTrue (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:337:43)
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/test.certificate-provision.ts:273:23)
at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
at async TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:20)
at async TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:179:13)
Test starting: Should return http01 for unknown domains
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
WARN -> 1 configuration warnings found
WARN -> Port 9081 is not configured for any routes but is needed for ACME challenges. Add a route listening on port 9081 or ensure it's accessible for HTTP-01 challenges.
debug Port 9446 is used by 1 routes: unknown-domain-route
info: SmartProxy starting with 1 ports: 9446
info: SmartProxy -> OK: Now listening on port 9446
info: Using top-level ACME configuration with email: test@example.com
debug Route update callback set successfully
❌ Should return http01 for unknown domains (0ms)
⟦TSTEST:META:{"time":963,"retry":0,"error":{"message":"Error validating contact(s) :: contact email has forbidden domain \"example.com\"","stack":"Error: Error validating contact(s) :: contact email has forbidden domain \"example.com\"\n at AcmeApi.apiRequest (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/api.js:53:19)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async AcmeApi.createAccount (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/api.js:99:22)\n at async AcmeClient.createAccount (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/client.js:180:26)\n at async SmartAcme.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartacme@8.0.0_@aws-sdk+credential-providers@3.798.0_socks@2.8.4/node_modules/@push.rocks/smartacme/ts/smartacme.classes.smartacme.ts:142:5)\n at async SmartCertManager.initialize (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/certificate-manager.ts:153:7)\n at async SmartProxy.createCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:256:5)\n at async SmartProxy.testProxy5.createCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/test/test.certificate-provision.ts:329:25)\n at async SmartProxy.initializeCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:313:24)\n at async SmartProxy.start (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:386:5)"}}⟧
⟦TSTEST:ERROR⟧
{
"testNumber": 5,
"error": {
"message": "Error validating contact(s) :: contact email has forbidden domain \"example.com\"",
"stack": "Error: Error validating contact(s) :: contact email has forbidden domain \"example.com\"\n at AcmeApi.apiRequest (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/api.js:53:19)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async AcmeApi.createAccount (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/api.js:99:22)\n at async AcmeClient.createAccount (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/client.js:180:26)\n at async SmartAcme.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartacme@8.0.0_@aws-sdk+credential-providers@3.798.0_socks@2.8.4/node_modules/@push.rocks/smartacme/ts/smartacme.classes.smartacme.ts:142:5)\n at async SmartCertManager.initialize (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/certificate-manager.ts:153:7)\n at async SmartProxy.createCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:256:5)\n at async SmartProxy.testProxy5.createCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/test/test.certificate-provision.ts:329:25)\n at async SmartProxy.initializeCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:313:24)\n at async SmartProxy.start (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:386:5)"
}
}
Error details:
Error: Error validating contact(s) :: contact email has forbidden domain "example.com"
at AcmeApi.apiRequest (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/api.js:53:19)
at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
at async AcmeApi.createAccount (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/api.js:99:22)
at async AcmeClient.createAccount (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/client.js:180:26)
at async SmartAcme.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartacme@8.0.0_@aws-sdk+credential-providers@3.798.0_socks@2.8.4/node_modules/@push.rocks/smartacme/ts/smartacme.classes.smartacme.ts:142:5)
at async SmartCertManager.initialize (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/certificate-manager.ts:153:7)
at async SmartProxy.createCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:256:5)
at async SmartProxy.testProxy5.createCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/test/test.certificate-provision.ts:329:25)
at async SmartProxy.initializeCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:313:24)
at async SmartProxy.start (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:386:5)
Error: Error validating contact(s) :: contact email has forbidden domain "example.com"
at AcmeApi.apiRequest (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/api.js:53:19)
at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
at async AcmeApi.createAccount (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/api.js:99:22)
at async AcmeClient.createAccount (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/acme-client@5.4.0/node_modules/acme-client/src/client.js:180:26)
at async SmartAcme.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartacme@8.0.0_@aws-sdk+credential-providers@3.798.0_socks@2.8.4/node_modules/@push.rocks/smartacme/ts/smartacme.classes.smartacme.ts:142:5)
at async SmartCertManager.initialize (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/certificate-manager.ts:153:7)
at async SmartProxy.createCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:256:5)
at async SmartProxy.testProxy5.createCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/test/test.certificate-provision.ts:329:25)
at async SmartProxy.initializeCertificateManager (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:313:24)
at async SmartProxy.start (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/smart-proxy.ts:386:5)
Test starting: cleanup
info: SmartProxy shutting down...
info: NFTablesManager stopped
info: All servers closed. Cleaning up active connections...
debug MetricsCollector stopped
info: SmartProxy shutdown complete.
✅ cleanup (1ms)
Test 2 failed with status error:
|| Custom certificate provision function should be called
|| for more information please take a look the logs above
Test 3 failed with status error:
|| Should fallback to ACME when custom provision fails
|| for more information please take a look the logs above
Test 4 failed with status error:
|| Should not fallback when certProvisionFallbackToAcme is false
|| for more information please take a look the logs above
Test 5 failed with status error:
|| Should return http01 for unknown domains
|| for more information please take a look the logs above
Running tree kill with SIGTERM on process 831913
❌ Test file timeout (60000ms)
Error: Test file exceeded timeout of 60 seconds
Error details:
Test execution was terminated after 60 seconds
Running tree kill with SIGKILL on process 831913
 
⚠️ Error
Only 7 out of 6 completed!
 
⚠️ Error
The amount of received tests and expectedTests is unequal! Therefore the testfile failed
Summary: 2 passed, 5 failed of 7 tests in 60.1s
 
⚠️ Error
Only 7 out of 6 completed!
 
⚠️ Error
The amount of received tests and expectedTests is unequal! Therefore the testfile failed
Summary: 2 passed, 5 failed of 7 tests in 60.1s
 
▶️ test/test.certificate-provisioning.ts (20/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
info: Logger initialized
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
Test starting: should provision certificate automatically
WARN -> 1 configuration warnings found
WARN -> Port 9080 is not configured for any routes but is needed for ACME challenges. Add a route listening on port 9080 or ensure it's accessible for HTTP-01 challenges.
debug Port 9443 is used by 1 routes: test-route
info: SmartProxy starting with 1 ports: 9443
info: SmartProxy -> OK: Now listening on port 9443
info: Using route-level ACME configuration from route 'test-route' with email: test@test.local
info: Starting certificate provisioning now that ports are ready
debug MetricsCollector started
info: SmartProxy shutting down...
info: Certificate manager stopped
info: NFTablesManager stopped
debug Port 9443 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 9443
info: All servers closed. Cleaning up active connections...
debug MetricsCollector stopped
info: SmartProxy shutdown complete.
✅ should provision certificate automatically (4ms)
Test starting: should handle static certificates
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
debug Port 9444 is used by 1 routes: static-route
info: SmartProxy starting with 1 ports: 9444
info: SmartProxy -> OK: Now listening on port 9444
debug Route update callback set successfully
info: Certificate manager initialized. Deferring certificate provisioning until after ports are listening.
info: Starting certificate provisioning now that ports are ready
WARN -> HttpProxy not set, cannot apply certificate for domain static.example.com
info: Successfully loaded static certificate for static.example.com
debug MetricsCollector started
info: SmartProxy shutting down...
info: Certificate manager stopped
info: NFTablesManager stopped
debug Port 9444 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 9444
info: All servers closed. Cleaning up active connections...
debug MetricsCollector stopped
info: SmartProxy shutdown complete.
✅ should handle static certificates (4ms)
Test starting: should handle ACME challenge routes
info: Route manager configured with 2 routes across 2 ports
info: Updated RouteManager with 2 routes
debug Port 9445 is used by 1 routes: auto-cert-route
debug Port 9081 is used by 1 routes: port-9081-route
info: SmartProxy starting with 2 ports: 9445, 9081
info: SmartProxy -> OK: Now listening on port 9445
info: SmartProxy -> OK: Now listening on port 9081
info: Using route-level ACME configuration from route 'auto-cert-route' with email: acme@test.local
info: Starting certificate provisioning now that ports are ready
debug MetricsCollector started
info: SmartProxy shutting down...
info: Certificate manager stopped
info: NFTablesManager stopped
debug Port 9445 reference count decreased to 0
debug Port 9081 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 9445
info: SmartProxy -> Stopped listening on port 9081
info: All servers closed. Cleaning up active connections...
debug MetricsCollector stopped
info: SmartProxy shutdown complete.
✅ should handle ACME challenge routes (1ms)
Test starting: should renew certificates
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
WARN -> 1 configuration warnings found
WARN -> Port 9082 is not configured for any routes but is needed for ACME challenges. Add a route listening on port 9082 or ensure it's accessible for HTTP-01 challenges.
debug Port 9446 is used by 1 routes: renew-route
info: SmartProxy starting with 1 ports: 9446
info: SmartProxy -> OK: Now listening on port 9446
info: Using route-level ACME configuration from route 'renew-route' with email: renew@test.local
info: Starting certificate provisioning now that ports are ready
debug MetricsCollector started
info: SmartProxy shutting down...
info: Certificate manager stopped
info: NFTablesManager stopped
debug Port 9446 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 9446
info: All servers closed. Cleaning up active connections...
debug MetricsCollector stopped
info: SmartProxy shutdown complete.
✅ should renew certificates (1ms)
Summary: 4/4 PASSED in 2.3s
 
▶️ test/test.certificate-simple.ts (21/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
info: Logger initialized
Test starting: should create SmartProxy with certificate routes
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
✅ should create SmartProxy with certificate routes (2ms)
Test starting: should handle socket handler route type
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
✅ should handle socket handler route type (0ms)
Summary: 2/2 PASSED in 2.3s
 
▶️ test/test.cleanup-queue-bug.node.ts (22/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
info: Logger initialized
Test starting: cleanup queue bug - verify queue processing handles more than batch size

=== Cleanup Queue Bug Test ===
Purpose: Verify that the cleanup queue correctly processes all connections
even when there are more than the batch size (100)
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
debug Port 8588 is used by 1 routes: test-route
info: SmartProxy starting with 1 ports: 8588
info: SmartProxy -> OK: Now listening on port 8588
info: No routes require certificate management
debug MetricsCollector started
✓ Proxy started on port 8588

--- Creating 150 mock connections ---
Created 150 mock connections

--- Queueing all connections for cleanup ---
info: Cleaned up 50 connections
info: Cleaned up 50 connections
info: [SUMMARY] 50 connections terminated in 0s
info: [SUMMARY] 50 connections terminated in 0s
info: Cleaned up 50 connections
Cleanup queue size after queueing: 50
Active connections after initial batch: 50

--- Waiting for remaining cleanup batches to process ---
info: [SUMMARY] 50 connections terminated in 0s
Active connections: 0, Queue size: 0
All cleanup completed in 100ms

Final connection count: 0
Final cleanup queue size: 0
Termination stats: { incoming: { test_cleanup: 150 }, outgoing: {} }

--- Stopping proxy ---
info: SmartProxy shutting down...
info: NFTablesManager stopped
debug Port 8588 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 8588
info: All servers closed. Cleaning up active connections...
debug MetricsCollector stopped
info: SmartProxy shutdown complete.

✓ Test complete: Cleanup queue now correctly processes all connections
✅ cleanup queue bug - verify queue processing handles more than batch size (111ms)
Summary: 1/1 PASSED in 2.5s
 
▶️ test/test.connect-disconnect-cleanup.node.ts (23/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
info: Logger initialized
Test starting: should handle clients that connect and immediately disconnect without sending data

=== Testing Connect-Disconnect Cleanup ===
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
debug Port 8560 is used by 1 routes: test-route
info: SmartProxy starting with 1 ports: 8560
info: SmartProxy -> OK: Now listening on port 8560
info: No routes require certificate management
debug MetricsCollector started
✓ Proxy started on port 8560
Initial connection count: 0

--- Test 1: Immediate disconnect ---
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 1
debug Connection z4g8slckt7vtyuodqbii closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for z4g8slckt7vtyuodqbii
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 1
debug Connection 7fx7llyal68bm7to9p86ej closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for 7fx7llyal68bm7to9p86ej
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 1
debug Connection f1ziq2h21or2yp0u5v4ddm closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for f1ziq2h21or2yp0u5v4ddm
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 1
debug Connection zukzivxcejd2t333sl0xt closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for zukzivxcejd2t333sl0xt
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 1
debug Connection v43801kx99zqp24ok4tzi closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for v43801kx99zqp24ok4tzi
After 5 connect/disconnect cycles: 0 active connections
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 1
debug Connection 9obb1kcen3z1immr11gz9 closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for 9obb1kcen3z1immr11gz9
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 1
debug Connection ekriyzqdok8tcdzpt2ea1 closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for ekriyzqdok8tcdzpt2ea1
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 1
debug Connection o7md8vzt7fez3a8jz53a closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for o7md8vzt7fez3a8jz53a
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 1
debug Connection hben6esak3oxzttf8y37s closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for hben6esak3oxzttf8y37s
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 1
debug Connection y9iq1yeg7vun2d8piu36j closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for y9iq1yeg7vun2d8piu36j
After 10 connect/disconnect cycles: 0 active connections
After immediate disconnect test: 0 active connections

--- Test 2: Delayed disconnect ---
During delayed disconnect test: 0 active connections
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 1
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 2
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 3
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for kfngu0xyiejc5krrakogw9 to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection kfngu0xyiejc5krrakogw9: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection kfngu0xyiejc5krrakogw9 closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 3
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for 36ys39edifqz65pj2czir to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection 36ys39edifqz65pj2czir: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection 36ys39edifqz65pj2czir closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 3
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for u28bqn0f6akcvxj3kao3 to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection u28bqn0f6akcvxj3kao3: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection u28bqn0f6akcvxj3kao3 closed during immediate routing: immediate-route-client_closed
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for 9jrlpx2i0z7pqht1nuevc to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection 9jrlpx2i0z7pqht1nuevc: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection 9jrlpx2i0z7pqht1nuevc closed during immediate routing: immediate-route-client_closed
ERROR! Connection setup error for fvsdatr60nj7gqyclah0h to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection fvsdatr60nj7gqyclah0h: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
debug Connection fvsdatr60nj7gqyclah0h closed during immediate routing: immediate-route-client_closed
After delayed disconnect test: 0 active connections

--- Test 3: Mixed disconnect patterns ---
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 1
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 2
debug Connection jpe2u6zwa7rrkbdg9wac8k closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for jpe2u6zwa7rrkbdg9wac8k
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 2
debug Connection skmr4n5dktqg8e0k9q8d closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for skmr4n5dktqg8e0k9q8d
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 2
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 3
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for ph3gosnyrvfrruh227o to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection ph3gosnyrvfrruh227o: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection jz3my9vq4skyvg3lbmxdk closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for jz3my9vq4skyvg3lbmxdk
debug Connection ph3gosnyrvfrruh227o closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 2
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 3
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for 3ntc1ewmtshoeg2c7d74n to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection 3ntc1ewmtshoeg2c7d74n: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection 3ntc1ewmtshoeg2c7d74n closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 3
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for 2e8c58q77imfckvw0hqcq to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection 2e8c58q77imfckvw0hqcq: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection fjbx4c0duxitefvomsl0lf closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for fjbx4c0duxitefvomsl0lf
debug Connection 2e8c58q77imfckvw0hqcq closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 2
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 3
ERROR! Connection setup error for vl6gtrry9hobgqqrlzcokr to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection vl6gtrry9hobgqqrlzcokr: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
debug Connection lo9in7x1bwfdaxqe52lf0p closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for lo9in7x1bwfdaxqe52lf0p
debug Connection vl6gtrry9hobgqqrlzcokr closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 2
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 3
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for v2w1xbhsa4sfhtqkfu3bd to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection v2w1xbhsa4sfhtqkfu3bd: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection 0724p3xmk5mcquh3rm6zlre closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for 0724p3xmk5mcquh3rm6zlre
debug Connection v2w1xbhsa4sfhtqkfu3bd closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 2
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 3
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for s6m8rip71fbja60vbcfr7 to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection s6m8rip71fbja60vbcfr7: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection 234angsfx56jtq7cnuvq7l closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for 234angsfx56jtq7cnuvq7l
debug Connection s6m8rip71fbja60vbcfr7 closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 2
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 3
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for 35hof8ei6pzndz4r98hqc to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection 35hof8ei6pzndz4r98hqc: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection 1cx5822jzdh5kew1wpla8m closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for 1cx5822jzdh5kew1wpla8m
debug Connection 35hof8ei6pzndz4r98hqc closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 2
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 3
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for crrxjxn1e1qoz1ojdwhwj9 to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection crrxjxn1e1qoz1ojdwhwj9: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection cqvb8pv67tzldv8e1zu7 closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for cqvb8pv67tzldv8e1zu7
debug Connection crrxjxn1e1qoz1ojdwhwj9 closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 2
info: New connection from ::ffff:127.0.0.1 on port 8560. Active connections: 3
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for dg3k64rc6kkulpjqpkutom to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection dg3k64rc6kkulpjqpkutom: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
ERROR! Connection setup error for 26iizwpc0xder7cv3h20t to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection 26iizwpc0xder7cv3h20t: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
debug Connection 26iizwpc0xder7cv3h20t closed during immediate routing: immediate-route-client_closed
debug Connection dg3k64rc6kkulpjqpkutom closed during immediate routing: immediate-route-client_closed
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for ihnsujrjrehna6zyvgkqs to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection ihnsujrjrehna6zyvgkqs: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection ihnsujrjrehna6zyvgkqs closed during immediate routing: immediate-route-client_closed
During mixed test: 0 active connections

Final connection count: 0
info: SmartProxy shutting down...
info: NFTablesManager stopped
debug Port 8560 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 8560
info: All servers closed. Cleaning up active connections...
debug MetricsCollector stopped
info: [SUMMARY] 35 HttpProxy connections terminated in 3s
info: SmartProxy shutdown complete.
✓ Proxy stopped

Max connection count during immediate disconnect test: 0

✅ PASS: Connect-disconnect cleanup working correctly!
✅ should handle clients that connect and immediately disconnect without sending data (2627ms)
Test starting: should handle clients that error during connection

=== Testing Connection Error Cleanup ===
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
debug Port 8561 is used by 1 routes: test-route
info: SmartProxy starting with 1 ports: 8561
info: SmartProxy -> OK: Now listening on port 8561
info: No routes require certificate management
debug MetricsCollector started
✓ Proxy started on port 8561
Initial connection count: 0
info: New connection from ::ffff:127.0.0.1 on port 8561. Active connections: 1
info: New connection from ::ffff:127.0.0.1 on port 8561. Active connections: 2
✓ All error connections completed
info: New connection from ::ffff:127.0.0.1 on port 8561. Active connections: 3
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for wcpvigag82dadhm5ig21r to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection wcpvigag82dadhm5ig21r: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection wcpvigag82dadhm5ig21r closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8561. Active connections: 3
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for if9c8blul4bndfh8zoq0a to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection if9c8blul4bndfh8zoq0a: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection if9c8blul4bndfh8zoq0a closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8561. Active connections: 3
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for unnow458g1bm3793nte9r to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection unnow458g1bm3793nte9r: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection unnow458g1bm3793nte9r closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8561. Active connections: 3
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for ufpwhmocpxi6unyfljw229 to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection ufpwhmocpxi6unyfljw229: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection ufpwhmocpxi6unyfljw229 closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8561. Active connections: 3
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for o77vhbbwc8s4edyxazh9xz to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection o77vhbbwc8s4edyxazh9xz: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection o77vhbbwc8s4edyxazh9xz closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8561. Active connections: 3
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for 57bi5afer5o0uj5ms0tu71h to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection 57bi5afer5o0uj5ms0tu71h: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection 57bi5afer5o0uj5ms0tu71h closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8561. Active connections: 3
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for ogu3nplgadgaaa0knvlv3e to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection ogu3nplgadgaaa0knvlv3e: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection ogu3nplgadgaaa0knvlv3e closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8561. Active connections: 3
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for 3bf3u5awhvgwlappda8mg to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection 3bf3u5awhvgwlappda8mg: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection 3bf3u5awhvgwlappda8mg closed during immediate routing: immediate-route-client_closed
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for 2fc87e59pmj563r5jv5wa to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection 2fc87e59pmj563r5jv5wa: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection 2fc87e59pmj563r5jv5wa closed during immediate routing: immediate-route-client_closed
ERROR! Connection setup error for 8jvy2k1kyo29pj8630i0ag to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection 8jvy2k1kyo29pj8630i0ag: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection 8jvy2k1kyo29pj8630i0ag closed during immediate routing: immediate-route-client_closed
Final connection count: 0
info: SmartProxy shutting down...
info: NFTablesManager stopped
debug Port 8561 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 8561
info: All servers closed. Cleaning up active connections...
debug MetricsCollector stopped
info: [SUMMARY] 10 HttpProxy connections terminated in 0s
info: SmartProxy shutdown complete.
✓ Proxy stopped

✅ PASS: Connection error cleanup working correctly!
✅ should handle clients that error during connection (509ms)
Summary: 2/2 PASSED in 33.9s
 
▶️ test/test.connection-cleanup-comprehensive.node.ts (24/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
info: Logger initialized
Test starting: comprehensive connection cleanup test - all scenarios

=== Comprehensive Connection Cleanup Test ===
info: Route manager configured with 2 routes across 2 ports
info: Updated RouteManager with 2 routes
debug Port 8570 is used by 1 routes: non-tls-route
debug Port 8571 is used by 1 routes: tls-route
info: SmartProxy starting with 2 ports: 8570, 8571
info: SmartProxy -> OK: Now listening on port 8570
info: SmartProxy -> OK: Now listening on port 8571
info: No routes require certificate management
debug MetricsCollector started
✓ Proxy started on ports 8570 (non-TLS) and 8571 (TLS)
Initial connection count: 0

--- Test 1: Rapid ECONNREFUSED retries ---
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 1
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for zf6f23nln8evownmuo2k1g to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection zf6f23nln8evownmuo2k1g: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection zf6f23nln8evownmuo2k1g closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 1
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for c6qak6js5pogf1v4amna to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection c6qak6js5pogf1v4amna: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection c6qak6js5pogf1v4amna closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 1
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for msioo6bzopvcnbnvpm54p to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection msioo6bzopvcnbnvpm54p: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection msioo6bzopvcnbnvpm54p closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 1
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for 7olpugixxsrw91hetit77j to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection 7olpugixxsrw91hetit77j: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection 7olpugixxsrw91hetit77j closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 1
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for huul5v518v6gzkzo7pxk5p to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection huul5v518v6gzkzo7pxk5p: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection huul5v518v6gzkzo7pxk5p closed during immediate routing: immediate-route-client_closed
After 5 ECONNREFUSED retries: 0 active connections
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 1
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for z5ieea1klitshovosek1k to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection z5ieea1klitshovosek1k: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection z5ieea1klitshovosek1k closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 1
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for fra671xpfuew0se7nanab to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection fra671xpfuew0se7nanab: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection fra671xpfuew0se7nanab closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 1
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for 6xc11p6ix6amh852lhqbn to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection 6xc11p6ix6amh852lhqbn: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection 6xc11p6ix6amh852lhqbn closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 1
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for vkighf9nmdextd9gajxrc to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection vkighf9nmdextd9gajxrc: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection vkighf9nmdextd9gajxrc closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 1
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for buri0uelsbwmk7ywq6xh to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection buri0uelsbwmk7ywq6xh: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection buri0uelsbwmk7ywq6xh closed during immediate routing: immediate-route-client_closed
After 10 ECONNREFUSED retries: 0 active connections

--- Test 2: Connect without sending data ---
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 1
debug Connection pcktfu7jn3khmjrewx9eir closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for pcktfu7jn3khmjrewx9eir
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 1
debug Connection nd059veyl1jjad5qnwx4e closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for nd059veyl1jjad5qnwx4e
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 1
debug Connection q9bvrdsedycgeckjm6h08 closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for q9bvrdsedycgeckjm6h08
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 1
debug Connection k5r8box85qfogjagfcnl5s closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for k5r8box85qfogjagfcnl5s
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 1
debug Connection gor7e04mnput16sizffvl closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for gor7e04mnput16sizffvl
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 1
debug Connection zkeaje6668pnf6katww4bl closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for zkeaje6668pnf6katww4bl
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 1
debug Connection msl8etyyajfl60cuyqo59 closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for msl8etyyajfl60cuyqo59
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 1
debug Connection 5ikimuh068wmj04cuwzxnh closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for 5ikimuh068wmj04cuwzxnh
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 1
debug Connection aqkayqlsyorlqvrwhlvp closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for aqkayqlsyorlqvrwhlvp
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 1
debug Connection s2tozbqrogfz7aijs8vl6s closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for s2tozbqrogfz7aijs8vl6s
After connect-without-data test: 0 active connections

--- Test 3: TLS early disconnect ---
info: New connection from ::ffff:127.0.0.1 on port 8571. Active connections: 1
debug Connection s1uagbohwgzwhqbep163 ended before sending initial data
WARN -> Connection s1uagbohwgzwhqbep163 closed before sending initial data
info: New connection from ::ffff:127.0.0.1 on port 8571. Active connections: 1
debug Connection ttca3tp7gi32eje3eiu4 ended before sending initial data
WARN -> Connection ttca3tp7gi32eje3eiu4 closed before sending initial data
info: New connection from ::ffff:127.0.0.1 on port 8571. Active connections: 1
debug Connection jl7jlfcvk5b8ogys1iupu ended before sending initial data
WARN -> Connection jl7jlfcvk5b8ogys1iupu closed before sending initial data
info: New connection from ::ffff:127.0.0.1 on port 8571. Active connections: 1
debug Connection l0xx413gpheis6988yode ended before sending initial data
WARN -> Connection l0xx413gpheis6988yode closed before sending initial data
info: New connection from ::ffff:127.0.0.1 on port 8571. Active connections: 1
debug Connection iz2cmbrr6j01hlfh0clbjj ended before sending initial data
WARN -> Connection iz2cmbrr6j01hlfh0clbjj closed before sending initial data
info: New connection from ::ffff:127.0.0.1 on port 8571. Active connections: 1
debug Connection um5hc44ym8hedz6umy5qfk ended before sending initial data
WARN -> Connection um5hc44ym8hedz6umy5qfk closed before sending initial data
info: New connection from ::ffff:127.0.0.1 on port 8571. Active connections: 1
debug Connection pg1i86etdhyyognu1pytq ended before sending initial data
WARN -> Connection pg1i86etdhyyognu1pytq closed before sending initial data
info: New connection from ::ffff:127.0.0.1 on port 8571. Active connections: 1
debug Connection 568pppo5to7zkkrfat9u2f ended before sending initial data
WARN -> Connection 568pppo5to7zkkrfat9u2f closed before sending initial data
info: New connection from ::ffff:127.0.0.1 on port 8571. Active connections: 1
debug Connection st1nzucdd3skx500qdrul ended before sending initial data
WARN -> Connection st1nzucdd3skx500qdrul closed before sending initial data
info: New connection from ::ffff:127.0.0.1 on port 8571. Active connections: 1
debug Connection 7xkb7ynlc7g06vxkck5d3x8 ended before sending initial data
WARN -> Connection 7xkb7ynlc7g06vxkck5d3x8 closed before sending initial data
After TLS early disconnect test: 0 active connections

--- Test 4: Mixed chaos pattern ---
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 1
debug Connection l5f47791p0g8chtide7ux2 closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for l5f47791p0g8chtide7ux2
info: New connection from ::ffff:127.0.0.1 on port 8571. Active connections: 1
info: New connection from ::ffff:127.0.0.1 on port 8571. Active connections: 2
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 3
info: New connection from ::ffff:127.0.0.1 on port 8571. Active connections: 4
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 5
debug Connection pc0ke27lds2ryvh19nsok ended before sending initial data
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for hvd23lveq3ru5t0a0te38 to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection hvd23lveq3ru5t0a0te38: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
ERROR! Connection setup error for 8t5blofd7sp0j97z8euvj7r to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection 8t5blofd7sp0j97z8euvj7r: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
WARN -> Connection pc0ke27lds2ryvh19nsok closed before sending initial data
debug Connection 8t5blofd7sp0j97z8euvj7r closed during immediate routing: immediate-route-client_closed
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for b46chasw9pcntv4v39hkp to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection b46chasw9pcntv4v39hkp: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
ERROR! Connection setup error for bzxhmmcb9pqrhbyul1bd8 to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection bzxhmmcb9pqrhbyul1bd8: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection b46chasw9pcntv4v39hkp closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 1
info: New connection from ::ffff:127.0.0.1 on port 8571. Active connections: 2
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 3
info: New connection from ::ffff:127.0.0.1 on port 8571. Active connections: 4
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 5
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for 8z65n3wlhhaqx4jtb4jxsg to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection 8z65n3wlhhaqx4jtb4jxsg: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection 8z65n3wlhhaqx4jtb4jxsg closed during immediate routing: immediate-route-client_closed
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for x9v1bkf1r6k36lwrzcdwnz to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection x9v1bkf1r6k36lwrzcdwnz: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection 59j3o76c3at19p6v224er6 closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for 59j3o76c3at19p6v224er6
debug Connection x9v1bkf1r6k36lwrzcdwnz closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8571. Active connections: 3
info: New connection from ::ffff:127.0.0.1 on port 8571. Active connections: 4
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 5
info: New connection from ::ffff:127.0.0.1 on port 8571. Active connections: 6
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 7
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for a1kvb83a4dbrt1q5zubuw to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection a1kvb83a4dbrt1q5zubuw: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection 98e5dr4hjgtf37p95j5zcl ended before sending initial data
WARN -> Connection 98e5dr4hjgtf37p95j5zcl closed before sending initial data
debug Connection a1kvb83a4dbrt1q5zubuw closed during immediate routing: immediate-route-client_closed
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for j93pjbypycxr2c13vawc to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection j93pjbypycxr2c13vawc: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
ERROR! Connection setup error for chlcux73fcits9x1ddxbg to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection chlcux73fcits9x1ddxbg: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection chlcux73fcits9x1ddxbg closed during immediate routing: immediate-route-client_closed
ERROR! Connection setup error for dpurq2fol6gwu0el6obkec to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection dpurq2fol6gwu0el6obkec: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 3
info: New connection from ::ffff:127.0.0.1 on port 8571. Active connections: 4
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 5
info: New connection from ::ffff:127.0.0.1 on port 8571. Active connections: 6
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 7
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for 9r7efkmf366mkcv2rmi2w to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection 9r7efkmf366mkcv2rmi2w: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection 9r7efkmf366mkcv2rmi2w closed during immediate routing: immediate-route-client_closed
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for o337cwrdg0pxh8n2emu4u to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection o337cwrdg0pxh8n2emu4u: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection u3cp5ya9d964zv4zu909a closed during immediate routing: immediate-route-client_closed
debug Destroying outgoing connection for u3cp5ya9d964zv4zu909a
debug Connection o337cwrdg0pxh8n2emu4u closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8571. Active connections: 5
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 6
info: New connection from ::ffff:127.0.0.1 on port 8571. Active connections: 7
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 8
info: New connection from ::ffff:127.0.0.1 on port 8571. Active connections: 9
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for o7uj8ag2w8olebkdlwygw to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection o7uj8ag2w8olebkdlwygw: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection o7uj8ag2w8olebkdlwygw closed during immediate routing: immediate-route-client_closed
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for g6itie3murvgxy1kt28qiq to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection g6itie3murvgxy1kt28qiq: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection gtizlh04w39j15vop7cju ended before sending initial data
WARN -> Connection gtizlh04w39j15vop7cju closed before sending initial data
info: [SUMMARY] 50 HttpProxy connections terminated in 1s
debug Connection g6itie3murvgxy1kt28qiq closed during immediate routing: immediate-route-client_closed
ERROR! Connection setup error for l2l5brkqaf3q21v4aww2h to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection l2l5brkqaf3q21v4aww2h: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for gcu0g564rz5rznhdyjt50i to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection gcu0g564rz5rznhdyjt50i: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 5
info: New connection from ::ffff:127.0.0.1 on port 8570. Active connections: 6
info: New connection from ::ffff:127.0.0.1 on port 8571. Active connections: 7
info: New connection from ::ffff:127.0.0.1 on port 8571. Active connections: 8
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
ERROR! Connection setup error for 7dpd3osdzr5l37ynqa2m0o to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection 7dpd3osdzr5l37ynqa2m0o: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
debug Connection 7dpd3osdzr5l37ynqa2m0o closed during immediate routing: immediate-route-client_closed
ERROR! Connection setup error for jy7uj3i4skevp71qswjlgf to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999 (ECONNREFUSED)
ERROR! Connection jy7uj3i4skevp71qswjlgf: Target localhost:9999 refused connection. Check if the target service is running and listening on that port.
Socket connection error to localhost:9999: connect ECONNREFUSED 127.0.0.1:9999
debug Connection jy7uj3i4skevp71qswjlgf closed during immediate routing: immediate-route-client_closed
debug Connection ozwwrsk6j5hb4pdsgz7f9e ended before sending initial data
WARN -> Connection ozwwrsk6j5hb4pdsgz7f9e closed before sending initial data
debug Connection wpro3jrix6tuyupb29j4 ended before sending initial data
WARN -> Connection wpro3jrix6tuyupb29j4 closed before sending initial data
debug Connection giss9kkg85syhf5ipnubbe ended before sending initial data
WARN -> Connection giss9kkg85syhf5ipnubbe closed before sending initial data
debug Connection heegnj1ldgej7jp6rdnbuj ended before sending initial data
WARN -> Connection heegnj1ldgej7jp6rdnbuj closed before sending initial data
debug Connection 20v5tvlfq85rm8j1t8urbe ended before sending initial data
WARN -> Connection 20v5tvlfq85rm8j1t8urbe closed before sending initial data
✓ Chaos test completed
debug Connection zj9rtxtlfj8gallvtwbiw ended before sending initial data
WARN -> Connection zj9rtxtlfj8gallvtwbiw closed before sending initial data
After chaos test: 0 active connections

--- Test 5: NFTables route cleanup ---
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
debug Port 8572 is used by 1 routes: nftables-route
info: SmartProxy starting with 1 ports: 8572
[2025-07-20T13:16:32.571Z] [WARN] Command failed (attempt 1/3): nft list tables ip {"error":"Command failed: nft list tables ip\nOperation not permitted (you must be root)\nnetlink: Error: cache initialization failed: Operation not permitted\n"}
[2025-07-20T13:16:33.578Z] [WARN] Command failed (attempt 2/3): nft list tables ip {"error":"Command failed: nft list tables ip\nOperation not permitted (you must be root)\nnetlink: Error: cache initialization failed: Operation not permitted\n"}
[2025-07-20T13:16:34.585Z] [WARN] Command failed (attempt 3/3): nft list tables ip {"error":"Command failed: nft list tables ip\nOperation not permitted (you must be root)\nnetlink: Error: cache initialization failed: Operation not permitted\n"}
[2025-07-20T13:16:34.585Z] [ERROR] Failed to set up tables and chains: Failed after 3 attempts: Command failed: nft list tables ip
Operation not permitted (you must be root)
netlink: Error: cache initialization failed: Operation not permitted

Failed to provision NFTables rules for route nftables-route: Failed to set up nftables tables and chains
info: SmartProxy -> OK: Now listening on port 8572
info: No routes require certificate management
debug MetricsCollector started
info: New connection from ::ffff:127.0.0.1 on port 8572. Active connections: 1
info: NFTables forwarding
debug Connection bhuhcgca0gsxbqi086lpr closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8572. Active connections: 1
info: NFTables forwarding
debug Connection y4bm3bpcdhjli7ac9b7tn closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8572. Active connections: 1
info: NFTables forwarding
debug Connection elz81dgwu2j9qlehyg495u closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8572. Active connections: 1
info: NFTables forwarding
debug Connection phgzjmpiqtjyeg6d39aps closed during immediate routing: immediate-route-client_closed
info: New connection from ::ffff:127.0.0.1 on port 8572. Active connections: 1
info: NFTables forwarding
debug Connection c6ftdqzrgkinnfqeiyp8dp closed during immediate routing: immediate-route-client_closed
NFTables connections after test: 0
info: SmartProxy shutting down...
info: NFTablesManager stopped
debug Port 8572 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 8572
info: All servers closed. Cleaning up active connections...
debug MetricsCollector stopped
info: [SUMMARY] 15 HttpProxy connections terminated in 5s
info: SmartProxy shutdown complete.

Final connection count: 0
info: SmartProxy shutting down...
info: NFTablesManager stopped
debug Port 8570 reference count decreased to 0
debug Port 8571 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 8570
info: SmartProxy -> Stopped listening on port 8571
info: All servers closed. Cleaning up active connections...
debug MetricsCollector stopped
info: SmartProxy shutdown complete.
✓ Proxy stopped

✅ PASS: Comprehensive connection cleanup test passed!
All connection scenarios properly cleaned up:
- ECONNREFUSED rapid retries
- Connect without sending data
- TLS early disconnect
- Mixed chaos patterns
- NFTables connections
✅ comprehensive connection cleanup test - all scenarios (5729ms)
[DEPRECATION WARNING] executeWithRetrySync blocks the event loop and should not be used. Consider using the async executeWithRetry method instead.
Operation not permitted (you must be root)
netlink: Error: cache initialization failed: Operation not permitted
[2025-07-20T13:17:01.043Z] [WARN] Command failed (attempt 1/3): nft list tables ip {"error":"Command failed: nft list tables ip\nOperation not permitted (you must be root)\nnetlink: Error: cache initialization failed: Operation not permitted\n"}
Operation not permitted (you must be root)
netlink: Error: cache initialization failed: Operation not permitted
[2025-07-20T13:17:02.049Z] [WARN] Command failed (attempt 2/3): nft list tables ip {"error":"Command failed: nft list tables ip\nOperation not permitted (you must be root)\nnetlink: Error: cache initialization failed: Operation not permitted\n"}
Operation not permitted (you must be root)
netlink: Error: cache initialization failed: Operation not permitted
[2025-07-20T13:17:03.054Z] [WARN] Command failed (attempt 3/3): nft list tables ip {"error":"Command failed: nft list tables ip\nOperation not permitted (you must be root)\nnetlink: Error: cache initialization failed: Operation not permitted\n"}
[2025-07-20T13:17:03.054Z] [ERROR] Error cleaning up tables: Failed after 3 attempts: Command failed: nft list tables ip
Operation not permitted (you must be root)
netlink: Error: cache initialization failed: Operation not permitted

Summary: 1/1 PASSED in 35.5s
 
▶️ test/test.connection-forwarding.ts (25/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
info: Logger initialized
Test starting: setup test servers
TCP test server listening on port 7001
TLS test server listening on port 7002
✅ setup test servers (7ms)
Test starting: should forward TCP connections correctly
info: Route manager configured with 1 routes across 1 ports
info: Port 8080: 1 routes (TCP Forward Route)
info: Updated RouteManager with 1 routes
debug Port 8080 is used by 1 routes: TCP Forward Route
info: SmartProxy starting with 1 ports: 8080
info: SmartProxy -> OK: Now listening on port 8080
info: No routes require certificate management
debug MetricsCollector started
debug MetricsCollector: New connection recorded
info: New connection from ::ffff:127.0.0.1 on port 8080. Keep-Alive: Enabled. Active connections: 1
info: Route matched
debug Checking HttpProxy forwarding: port=8080, useHttpProxy=undefined, isHttpProxyPort=undefined, hasHttpProxy=false
info: Using basic forwarding to 127.0.0.1:7001 for connection nvh865fr17km2lugzckwm
info: Setting up direct connection nvh865fr17km2lugzckwm to 127.0.0.1:7001
Connected to proxy
info: Connection nvh865fr17km2lugzckwm established to target 127.0.0.1:7001
info: Connection established: ::ffff:127.0.0.1 -> 127.0.0.1:7001
Received: Connected to TCP test server
TCP Echo: Hello from client
info: SmartProxy shutting down...
info: NFTablesManager stopped
debug Port 8080 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 8080
info: All servers closed. Cleaning up active connections...
debug MetricsCollector stopped
info: SmartProxy shutdown complete.
✅ should forward TCP connections correctly (12ms)
Test starting: should handle TLS passthrough correctly
info: Route manager configured with 1 routes across 1 ports
info: Port 8443: 1 routes (TLS Passthrough Route)
info: Updated RouteManager with 1 routes
debug Port 8443 is used by 1 routes: TLS Passthrough Route
info: SmartProxy starting with 1 ports: 8443
info: SmartProxy -> OK: Now listening on port 8443
info: No routes require certificate management
debug MetricsCollector started
debug Connection nvh865fr17km2lugzckwm closed during immediate routing: immediate-route-client_closed
debug MetricsCollector: New connection recorded
info: New connection from ::ffff:127.0.0.1 on port 8443. Keep-Alive: Enabled. Active connections: 1
info: TLS connection with SNI
info: Route matched
info: Using TLS passthrough to 127.0.0.1:7002 for connection i25yix0vkufu0fkr8gr4tj
info: Setting up direct connection i25yix0vkufu0fkr8gr4tj to 127.0.0.1:7002
info: Connection i25yix0vkufu0fkr8gr4tj established to target 127.0.0.1:7002
[i25yix0vkufu0fkr8gr4tj] Forwarding 374 bytes of initial data to target
info: Connection established: ::ffff:127.0.0.1 -> 127.0.0.1:7002 (SNI: test.example.com)
info: TLS renegotiation handler installed for connection i25yix0vkufu0fkr8gr4tj with SNI test.example.com
Connected via TLS
TLS Received: Connected to TLS test server

info: SmartProxy shutting down...
info: NFTablesManager stopped
debug Port 8443 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 8443
info: All servers closed. Cleaning up active connections...
debug MetricsCollector stopped
info: [SUMMARY] 1 HttpProxy connections terminated in 0s
info: SmartProxy shutdown complete.
✅ should handle TLS passthrough correctly (10ms)
Test starting: should handle SNI-based forwarding
info: Route manager configured with 2 routes across 1 ports
info: Port 8443: 2 routes (Domain A Route, Domain B Route)
info: Updated RouteManager with 2 routes
debug Port 8443 is used by 2 routes: Domain A Route, Domain B Route
info: SmartProxy starting with 1 ports: 8443
info: SmartProxy -> OK: Now listening on port 8443
info: No routes require certificate management
debug MetricsCollector started
debug MetricsCollector: New connection recorded
info: New connection from ::ffff:127.0.0.1 on port 8443. Keep-Alive: Enabled. Active connections: 1
info: TLS connection with SNI
info: Route matched
info: Using TLS passthrough to 127.0.0.1:7002 for connection pz6gamc2wymn6s432i83z
info: Setting up direct connection pz6gamc2wymn6s432i83z to 127.0.0.1:7002
info: Connection pz6gamc2wymn6s432i83z established to target 127.0.0.1:7002
[pz6gamc2wymn6s432i83z] Forwarding 371 bytes of initial data to target
info: Connection established: ::ffff:127.0.0.1 -> 127.0.0.1:7002 (SNI: a.example.com)
info: TLS renegotiation handler installed for connection pz6gamc2wymn6s432i83z with SNI a.example.com
Connected to domain A
Domain A response: Connected to TLS test server

debug MetricsCollector: New connection recorded
info: New connection from ::ffff:127.0.0.1 on port 8443. Keep-Alive: Enabled. Active connections: 2
info: TLS connection with SNI
info: Route matched
info: Using TLS passthrough to 127.0.0.1:7002 for connection crlvaparay7acwg2aghmsf
info: Setting up direct connection crlvaparay7acwg2aghmsf to 127.0.0.1:7002
info: Connection crlvaparay7acwg2aghmsf established to target 127.0.0.1:7002
[crlvaparay7acwg2aghmsf] Forwarding 371 bytes of initial data to target
info: Connection established: ::ffff:127.0.0.1 -> 127.0.0.1:7002 (SNI: b.example.com)
info: TLS renegotiation handler installed for connection crlvaparay7acwg2aghmsf with SNI b.example.com
Connected to domain B
Domain B response: Connected to TLS test server

info: SmartProxy shutting down...
info: NFTablesManager stopped
debug Port 8443 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 8443
info: All servers closed. Cleaning up active connections...
debug MetricsCollector stopped
info: [SUMMARY] 1 HttpProxy connections terminated in 0s
info: SmartProxy shutdown complete.
✅ should handle SNI-based forwarding (10ms)
Test starting: cleanup
✅ cleanup (0ms)
Summary: 5/5 PASSED in 2.3s
 
▶️ test/test.connection-limits.node.ts (26/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
info: Logger initialized
Test starting: Setup test environment
[Test Server] Listening on localhost:5100
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
debug Port 5101 is used by 1 routes: test-route
info: SmartProxy starting with 1 ports: 5101
info: SmartProxy -> OK: Now listening on port 5101
info: No routes require certificate management
debug MetricsCollector started
✅ Setup test environment (11ms)
Test starting: Per-IP connection limits
info: New connection from ::ffff:127.0.0.1 on port 5101. Active connections: 1
info: New connection from ::ffff:127.0.0.1 on port 5101. Active connections: 2
info: New connection from ::ffff:127.0.0.1 on port 5101. Active connections: 3
info: Connection established: ::ffff:127.0.0.1 -> localhost:5100
❌ Per-IP connection limits (0ms)
⟦TSTEST:META:{"time":8,"retry":0,"error":{"message":"Expected string to include \"ECONNRESET\"","stack":"Error: Expected string to include \"ECONNRESET\"\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:299:15)\n at runDirectOrNegated (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:214:16)\n at Proxy.runCheck (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:279:5)\n at Proxy.customAssertion (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:294:17)\n at StringMatchers.toInclude (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/namespaces/string.ts:25:27)\n at Proxy.toInclude (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:355:60)\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/test.connection-limits.node.ts:125:25)\n at async TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:20)\n at async TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:179:13)\n at async Tap.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:532:9)"}}⟧
⟦TSTEST:ERROR⟧
{
"testNumber": 2,
"error": {
"message": "Expected string to include \"ECONNRESET\"",
"stack": "Error: Expected string to include \"ECONNRESET\"\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:299:15)\n at runDirectOrNegated (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:214:16)\n at Proxy.runCheck (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:279:5)\n at Proxy.customAssertion (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:294:17)\n at StringMatchers.toInclude (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/namespaces/string.ts:25:27)\n at Proxy.toInclude (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:355:60)\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/test.connection-limits.node.ts:125:25)\n at async TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:20)\n at async TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:179:13)\n at async Tap.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:532:9)"
}
}
Error details:
Error: Expected string to include "ECONNRESET"
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:299:15)
at runDirectOrNegated (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:214:16)
at Proxy.runCheck (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:279:5)
at Proxy.customAssertion (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:294:17)
at StringMatchers.toInclude (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/namespaces/string.ts:25:27)
at Proxy.toInclude (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:355:60)
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/test.connection-limits.node.ts:125:25)
at async TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:20)
at async TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:179:13)
at async Tap.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:532:9)
Error: Expected string to include "ECONNRESET"
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:299:15)
at runDirectOrNegated (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:214:16)
at Proxy.runCheck (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:279:5)
at Proxy.customAssertion (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:294:17)
at StringMatchers.toInclude (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/namespaces/string.ts:25:27)
at Proxy.toInclude (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:355:60)
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/test.connection-limits.node.ts:125:25)
at async TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:20)
at async TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:179:13)
at async Tap.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:532:9)
Test starting: Route-level connection limits
info: Connection established: ::ffff:127.0.0.1 -> localhost:5100
info: Connection established: ::ffff:127.0.0.1 -> localhost:5100
❌ Route-level connection limits (0ms)
⟦TSTEST:META:{"time":3,"retry":0,"error":{"message":"Expected string to include \"ECONNRESET\"","stack":"Error: Expected string to include \"ECONNRESET\"\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:299:15)\n at runDirectOrNegated (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:214:16)\n at Proxy.runCheck (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:279:5)\n at Proxy.customAssertion (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:294:17)\n at StringMatchers.toInclude (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/namespaces/string.ts:25:27)\n at Proxy.toInclude (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:355:60)\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/test.connection-limits.node.ts:149:25)\n at async TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:20)\n at async TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:179:13)\n at async Tap.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:532:9)"}}⟧
⟦TSTEST:ERROR⟧
{
"testNumber": 3,
"error": {
"message": "Expected string to include \"ECONNRESET\"",
"stack": "Error: Expected string to include \"ECONNRESET\"\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:299:15)\n at runDirectOrNegated (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:214:16)\n at Proxy.runCheck (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:279:5)\n at Proxy.customAssertion (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:294:17)\n at StringMatchers.toInclude (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/namespaces/string.ts:25:27)\n at Proxy.toInclude (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:355:60)\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/test.connection-limits.node.ts:149:25)\n at async TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:20)\n at async TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:179:13)\n at async Tap.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:532:9)"
}
}
Error details:
Error: Expected string to include "ECONNRESET"
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:299:15)
at runDirectOrNegated (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:214:16)
at Proxy.runCheck (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:279:5)
at Proxy.customAssertion (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:294:17)
at StringMatchers.toInclude (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/namespaces/string.ts:25:27)
at Proxy.toInclude (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:355:60)
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/test.connection-limits.node.ts:149:25)
at async TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:20)
at async TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:179:13)
at async Tap.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:532:9)
Error: Expected string to include "ECONNRESET"
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:299:15)
at runDirectOrNegated (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:214:16)
at Proxy.runCheck (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:279:5)
at Proxy.customAssertion (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:294:17)
at StringMatchers.toInclude (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/namespaces/string.ts:25:27)
at Proxy.toInclude (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:355:60)
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/test.connection-limits.node.ts:149:25)
at async TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:20)
at async TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:179:13)
at async Tap.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:532:9)
Test starting: Connection rate limiting
✅ Connection rate limiting (160ms)
Test starting: HttpProxy per-IP validation
[INFO] Route manager configured with 0 routes across 0 ports
[INFO] Updated RouteManager with 0 routes
[WARN] CertificateManager is deprecated - use SmartCertManager instead
[INFO] Loaded default certificates from filesystem (sync - deprecated)
[INFO] WebSocket handler initialized
[INFO] HttpProxy started on port 5102
info: SmartProxy shutting down...
info: NFTablesManager stopped
debug Port 5101 reference count decreased to 0
WARN -> [SUMMARY] Rejected 17 connections from 1 IPs in 5s (Maximum connections per IP (3) exceeded: 17)
Running tree kill with SIGTERM on process 833307
❌ Test file timeout (60000ms)
Error: Test file exceeded timeout of 60 seconds
Error details:
Test execution was terminated after 60 seconds
Running tree kill with SIGKILL on process 833307
 
⚠️ Error
Only 5 out of 8 completed!
 
⚠️ Error
The amount of received tests and expectedTests is unequal! Therefore the testfile failed
Summary: 2 passed, 3 failed of 5 tests in 60.1s
 
⚠️ Error
Only 5 out of 8 completed!
 
⚠️ Error
The amount of received tests and expectedTests is unequal! Therefore the testfile failed
Summary: 2 passed, 3 failed of 5 tests in 60.1s
 
▶️ test/test.fix-verification.ts (27/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
info: Logger initialized
Test starting: should verify certificate manager callback is preserved on updateRoutes
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
WARN -> 1 configuration warnings found
WARN -> Port 18080 is not configured for any routes but is needed for ACME challenges. Add a route listening on port 18080 or ensure it's accessible for HTTP-01 challenges.
debug Port 18443 is used by 1 routes: cert-route
info: SmartProxy starting with 1 ports: 18443
info: SmartProxy -> OK: Now listening on port 18443
info: Using top-level ACME configuration with email: test@local.test
info: Starting certificate provisioning now that ports are ready
debug MetricsCollector started
info: Updating routes (1 routes)
debug Port 18443 is used by 1 routes: cert-route
debug Port 18444 is used by 1 routes: updated-route
debug Current listening ports: 18443
debug Ports needed for new routes: 18444
info: Port 18443 no longer has any associated routes, will be released
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
info: Releasing 1 orphaned ports: 18443
debug Port 18443 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 18443
info: Binding to 1 new ports: 18444
info: SmartProxy -> OK: Now listening on port 18444
debug ACME port 80 is not already in use by other routes
info: Challenge route successfully removed from routes
info: SmartProxy shutting down...
info: Certificate manager stopped
info: NFTablesManager stopped
debug Port 18444 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 18444
info: All servers closed. Cleaning up active connections...
debug MetricsCollector stopped
info: SmartProxy shutdown complete.
Fix verified: Certificate manager callback is preserved on updateRoutes
✅ should verify certificate manager callback is preserved on updateRoutes (6ms)
Summary: 1/1 PASSED in 2.3s
 
▶️ test/test.forwarding-fix-verification.ts (28/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
info: Logger initialized
Test starting: setup test server
Test server listening on port 6789
✅ setup test server (2ms)
Test starting: regular forward route should work correctly
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
debug Port 7890 is used by 1 routes: Test Forward Route
info: SmartProxy starting with 1 ports: 7890
info: SmartProxy -> OK: Now listening on port 7890
info: No routes require certificate management
debug MetricsCollector started
info: New connection from ::ffff:127.0.0.1 on port 7890. Active connections: 1
Client connected to proxy
Test server: Client connected
info: Connection established: ::ffff:127.0.0.1 -> localhost:6789
Test server received: Test message
info: SmartProxy shutting down...
info: NFTablesManager stopped
debug Port 7890 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 7890
info: All servers closed. Cleaning up active connections...
debug MetricsCollector stopped
info: SmartProxy shutdown complete.
✅ regular forward route should work correctly (16ms)
✅ NFTables forward route should not terminate connections (requires root) (0ms)
Test skipped: Marked as skip
Test starting: cleanup
info: SmartProxy shutting down...
info: NFTablesManager stopped
info: All servers closed. Cleaning up active connections...
debug MetricsCollector stopped
info: SmartProxy shutdown complete.
✅ cleanup (0ms)
debug Connection n30849wpdo3seqc75cfma closed during immediate routing: immediate-route-client_closed
Test server: Client disconnected
info: [SUMMARY] 1 HttpProxy connections terminated in 0s
Summary: 4/4 PASSED in 2.4s
 
▶️ test/test.forwarding-regression.ts (29/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
info: Logger initialized
Test starting: forward connections should not be immediately closed
Test server listening on port 9090
info: Route manager configured with 1 routes across 1 ports
info: Port 8080: 1 routes (Forward Test Route)
info: Updated RouteManager with 1 routes
debug Port 8080 is used by 1 routes: Forward Test Route
info: SmartProxy starting with 1 ports: 8080
info: SmartProxy -> OK: Now listening on port 8080
info: No routes require certificate management
debug MetricsCollector started
debug MetricsCollector: New connection recorded
info: New connection from ::ffff:127.0.0.1 on port 8080. Keep-Alive: Enabled. Active connections: 1
info: Route matched
debug Checking HttpProxy forwarding: port=8080, useHttpProxy=undefined, isHttpProxyPort=undefined, hasHttpProxy=false
info: Using basic forwarding to 127.0.0.1:9090 for connection zm56pjb04saqdwnsasl3i
info: Setting up direct connection zm56pjb04saqdwnsasl3i to 127.0.0.1:9090
Client connected to proxy
Client connected to test server
info: Connection zm56pjb04saqdwnsasl3i established to target 127.0.0.1:9090
info: Connection established: ::ffff:127.0.0.1 -> 127.0.0.1:9090
Client received: Welcome from test server

Test server received: Hello from client
Client received: Echo: Hello from client
info: SmartProxy shutting down...
info: NFTablesManager stopped
debug Port 8080 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 8080
info: All servers closed. Cleaning up active connections...
debug MetricsCollector stopped
info: SmartProxy shutdown complete.
✅ forward connections should not be immediately closed (211ms)
debug Connection zm56pjb04saqdwnsasl3i closed during immediate routing: immediate-route-client_closed
Client connection closed
info: [SUMMARY] 1 HttpProxy connections terminated in 0s
Summary: 1/1 PASSED in 2.5s
 
▶️ test/test.forwarding.examples.ts (30/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
info: Logger initialized
Test starting: Route-based configuration examples
HTTP-only route created successfully: Basic HTTP Route
❌ Route-based configuration examples (0ms)
⟦TSTEST:META:{"time":1,"retry":0,"error":{"message":"Expected value to be true","stack":"Error: Expected value to be true\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:299:15)\n at runDirectOrNegated (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:214:16)\n at Proxy.runCheck (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:279:5)\n at Proxy.customAssertion (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:294:17)\n at BooleanMatchers.toBeTrue (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/namespaces/boolean.ts:11:27)\n at Proxy.toBeTrue (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:337:43)\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/test.forwarding.examples.ts:49:68)\n at TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:26)\n at TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:176:34)\n at Tap.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:528:39)"}}⟧
⟦TSTEST:ERROR⟧
{
"testNumber": 1,
"error": {
"message": "Expected value to be true",
"stack": "Error: Expected value to be true\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:299:15)\n at runDirectOrNegated (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:214:16)\n at Proxy.runCheck (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:279:5)\n at Proxy.customAssertion (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:294:17)\n at BooleanMatchers.toBeTrue (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/namespaces/boolean.ts:11:27)\n at Proxy.toBeTrue (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:337:43)\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/test.forwarding.examples.ts:49:68)\n at TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:26)\n at TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:176:34)\n at Tap.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:528:39)"
}
}
Error details:
Error: Expected value to be true
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:299:15)
at runDirectOrNegated (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:214:16)
at Proxy.runCheck (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:279:5)
at Proxy.customAssertion (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:294:17)
at BooleanMatchers.toBeTrue (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/namespaces/boolean.ts:11:27)
at Proxy.toBeTrue (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:337:43)
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/test.forwarding.examples.ts:49:68)
at TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:26)
at TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:176:34)
at Tap.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:528:39)
Error: Expected value to be true
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:299:15)
at runDirectOrNegated (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:214:16)
at Proxy.runCheck (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:279:5)
at Proxy.customAssertion (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:294:17)
at BooleanMatchers.toBeTrue (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/namespaces/boolean.ts:11:27)
at Proxy.toBeTrue (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:337:43)
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/test.forwarding.examples.ts:49:68)
at TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:26)
at TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:176:34)
at Tap.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:528:39)
Test 1 failed with status error:
|| Route-based configuration examples
|| for more information please take a look the logs above
Summary: 0 passed, 1 failed of 1 tests in 2.3s
 
▶️ test/test.forwarding.ts (31/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
Test starting: Route Helpers - Create HTTP routes
✅ Route Helpers - Create HTTP routes (1ms)
Test starting: Route Helpers - Create HTTPS terminate to HTTP routes
✅ Route Helpers - Create HTTPS terminate to HTTP routes (0ms)
Test starting: Route Helpers - Create HTTPS passthrough routes
✅ Route Helpers - Create HTTPS passthrough routes (1ms)
Test starting: Route Helpers - Create HTTPS to HTTPS routes
✅ Route Helpers - Create HTTPS to HTTPS routes (0ms)
Test starting: Route Helpers - Create complete HTTPS server with redirect
✅ Route Helpers - Create complete HTTPS server with redirect (0ms)
Summary: 5/5 PASSED in 2.3s
 
▶️ test/test.forwarding.unit.ts (32/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
Test starting: ForwardingHandlerFactory - apply defaults based on type
✅ ForwardingHandlerFactory - apply defaults based on type (1ms)
Test starting: ForwardingHandlerFactory - factory function for handlers
✅ ForwardingHandlerFactory - factory function for handlers (0ms)
Summary: 2/2 PASSED in 2.3s
 
▶️ test/test.http-fix-unit.ts (33/78)
Runtime: node.js
Test starting: should forward non-TLS connections on HttpProxy ports
Using HttpProxy for non-TLS connection on port 8080
Test passed: Non-TLS connections on HttpProxy ports are forwarded correctly
✅ should forward non-TLS connections on HttpProxy ports (1ms)
Test starting: should use direct connection for non-HttpProxy ports
Using basic forwarding for port 8080
Test passed: Non-HttpProxy ports use direct connection
✅ should use direct connection for non-HttpProxy ports (0ms)
Test starting: should handle ACME HTTP-01 challenges on port 80 with HttpProxy
Using HttpProxy for ACME challenge on port 80
Test passed: ACME HTTP-01 challenges on port 80 use HttpProxy
✅ should handle ACME HTTP-01 challenges on port 80 with HttpProxy (0ms)
Summary: 3/3 PASSED in 1.2s
 
▶️ test/test.http-fix-verification.ts (34/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
info: Logger initialized
Test starting: should detect and forward non-TLS connections on useHttpProxy ports
info: New connection from 127.0.0.1 on port 8080. Active connections: 1
❌ should detect and forward non-TLS connections on useHttpProxy ports (0ms)
⟦TSTEST:META:{"time":2,"retry":0,"error":{"message":"this.smartProxy.connectionManager.trackConnectionByRoute is not a function","stack":"TypeError: this.smartProxy.connectionManager.trackConnectionByRoute is not a function\n at RouteConnectionHandler.handleForwardAction (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/route-connection-handler.ts:751:39)\n at RouteConnectionHandler.routeConnection (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/route-connection-handler.ts:638:21)\n at RouteConnectionHandler.handleInitialData (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/route-connection-handler.ts:231:12)\n at RouteConnectionHandler.handleConnection (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/route-connection-handler.ts:170:10)\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/test.http-fix-verification.ts:118:11)\n at TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:26)\n at TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:176:34)\n at Tap.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:528:39)\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/test.http-fix-verification.ts:252:20)"}}⟧
⟦TSTEST:ERROR⟧
{
"testNumber": 1,
"error": {
"message": "this.smartProxy.connectionManager.trackConnectionByRoute is not a function",
"stack": "TypeError: this.smartProxy.connectionManager.trackConnectionByRoute is not a function\n at RouteConnectionHandler.handleForwardAction (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/route-connection-handler.ts:751:39)\n at RouteConnectionHandler.routeConnection (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/route-connection-handler.ts:638:21)\n at RouteConnectionHandler.handleInitialData (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/route-connection-handler.ts:231:12)\n at RouteConnectionHandler.handleConnection (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/route-connection-handler.ts:170:10)\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/test.http-fix-verification.ts:118:11)\n at TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:26)\n at TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:176:34)\n at Tap.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:528:39)\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/test.http-fix-verification.ts:252:20)"
}
}
Error details:
TypeError: this.smartProxy.connectionManager.trackConnectionByRoute is not a function
at RouteConnectionHandler.handleForwardAction (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/route-connection-handler.ts:751:39)
at RouteConnectionHandler.routeConnection (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/route-connection-handler.ts:638:21)
at RouteConnectionHandler.handleInitialData (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/route-connection-handler.ts:231:12)
at RouteConnectionHandler.handleConnection (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/route-connection-handler.ts:170:10)
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/test.http-fix-verification.ts:118:11)
at TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:26)
at TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:176:34)
at Tap.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:528:39)
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/test.http-fix-verification.ts:252:20)
TypeError: this.smartProxy.connectionManager.trackConnectionByRoute is not a function
at RouteConnectionHandler.handleForwardAction (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/route-connection-handler.ts:751:39)
at RouteConnectionHandler.routeConnection (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/route-connection-handler.ts:638:21)
at RouteConnectionHandler.handleInitialData (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/route-connection-handler.ts:231:12)
at RouteConnectionHandler.handleConnection (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/route-connection-handler.ts:170:10)
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/test.http-fix-verification.ts:118:11)
at TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:26)
at TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:176:34)
at Tap.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:528:39)
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/test.http-fix-verification.ts:252:20)
Test starting: should handle TLS connections normally
info: New connection from 127.0.0.1 on port 443. Active connections: 1
/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/route-connection-handler.ts:751
this.smartProxy.connectionManager.trackConnectionByRoute(record.routeId, record.id);
^


TypeError: this.smartProxy.connectionManager.trackConnectionByRoute is not a function
at RouteConnectionHandler.handleForwardAction (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/route-connection-handler.ts:751:39)
at RouteConnectionHandler.routeConnection (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/route-connection-handler.ts:638:21)
at processInitialData (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/route-connection-handler.ts:385:12)
at Object._dataHandler (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/smart-proxy/route-connection-handler.ts:446:7)
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/test.http-fix-verification.ts:243:16)
at TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:26)
at TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:176:34)
at Tap.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:528:39)

Node.js v23.8.0
 
⚠️ Error
Only 1 out of 2 completed!
 
⚠️ Error
The amount of received tests and expectedTests is unequal! Therefore the testfile failed
Summary: 0 passed, 1 failed of 1 tests in 2.2s
 
▶️ test/test.http-forwarding-fix.ts (35/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
info: Logger initialized
Test starting: should detect and forward non-TLS connections on HttpProxy ports
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
debug Port 8081 is used by 1 routes: test-http-forward
info: SmartProxy starting with 1 ports: 8081
Mock: HttpProxyBridge initialized
Mock: HttpProxyBridge started
info: SmartProxy -> OK: Now listening on port 8081 (HttpProxy forwarding enabled)
info: No routes require certificate management
debug MetricsCollector started
debug MetricsCollector: New connection recorded
info: New connection from ::ffff:127.0.0.1 on port 8081. Keep-Alive: Enabled. Active connections: 1
info: Route matched
debug Checking HttpProxy forwarding: port=8081, useHttpProxy=[8081], isHttpProxyPort=true, hasHttpProxy=true
info: Using HttpProxy for non-TLS connection jre2vz42dd8fwv54ytr2vu on port 8081
Mock: Connection forwarded to HttpProxy with args: jre2vz42dd8fwv54ytr2vu on port: 8081
Client connected to proxy on port 8081
debug Connection jre2vz42dd8fwv54ytr2vu closed during immediate routing: immediate-route-client_closed
About to stop proxy...
info: SmartProxy shutting down...
info: NFTablesManager stopped
debug Port 8081 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 8081
info: All servers closed. Cleaning up active connections...
Mock: HttpProxyBridge stopped
debug MetricsCollector stopped
info: [SUMMARY] 1 HttpProxy connections terminated in 0s
info: SmartProxy shutdown complete.
Proxy stopped
✅ should detect and forward non-TLS connections on HttpProxy ports (267ms)
Test starting: should properly detect non-TLS connections on HttpProxy ports
Target server listening on port 8182
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
debug Port 8082 is used by 1 routes: test-route
info: SmartProxy starting with 1 ports: 8082
Mock: HttpProxyBridge initialized
Mock: HttpProxyBridge started
info: SmartProxy -> OK: Now listening on port 8082 (HttpProxy forwarding enabled)
info: No routes require certificate management
debug MetricsCollector started
info: New connection from ::ffff:127.0.0.1 on port 8082. Active connections: 1
HttpProxy forward called with connectionId: 95zydwak23lsk0y0ozjkza
Connected to proxy
debug Connection 95zydwak23lsk0y0ozjkza closed during immediate routing: immediate-route-client_closed
info: SmartProxy shutting down...
info: NFTablesManager stopped
debug Port 8082 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 8082
info: All servers closed. Cleaning up active connections...
Mock: HttpProxyBridge stopped
debug MetricsCollector stopped
info: [SUMMARY] 1 HttpProxy connections terminated in 0s
info: SmartProxy shutdown complete.
✅ should properly detect non-TLS connections on HttpProxy ports (254ms)
Summary: 2/2 PASSED in 2.8s
 
▶️ test/test.http-port8080-forwarding.ts (36/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
info: Logger initialized
Test starting: should forward HTTP connections on port 8080
Target server listening on port 8181
info: Route manager configured with 1 routes across 1 ports
info: Port 8080: 1 routes (test-route)
info: Updated RouteManager with 1 routes
debug Port 8080 is used by 1 routes: test-route
info: SmartProxy starting with 1 ports: 8080
info: SmartProxy -> OK: Now listening on port 8080
info: No routes require certificate management
debug MetricsCollector started
Making HTTP request to proxy...
debug MetricsCollector: New connection recorded
info: New connection from ::ffff:127.0.0.1 on port 8080. Keep-Alive: Enabled. Active connections: 1
info: Route matched
debug Checking HttpProxy forwarding: port=8080, useHttpProxy=undefined, isHttpProxyPort=undefined, hasHttpProxy=false
info: Using basic forwarding to localhost:8181 for connection y05lajr7vqjonay9ddvjr
info: Setting up direct connection y05lajr7vqjonay9ddvjr to localhost:8181
info: Connection y05lajr7vqjonay9ddvjr established to target localhost:8181
info: Connection established: ::ffff:127.0.0.1 -> localhost:8181
Target server received: GET /.well-known/acme-challenge/test-token
Got response from proxy: 200
info: SmartProxy shutting down...
info: NFTablesManager stopped
debug Port 8080 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 8080
info: All servers closed. Cleaning up active connections...
debug MetricsCollector stopped
info: SmartProxy shutdown complete.
debug Connection y05lajr7vqjonay9ddvjr closed during immediate routing: immediate-route-client_closed
✅ should forward HTTP connections on port 8080 (5023ms)
Test starting: should handle basic HTTP request forwarding
Target server listening on port 8182
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
debug Port 8081 is used by 1 routes: simple-forward
info: SmartProxy starting with 1 ports: 8081
info: SmartProxy -> OK: Now listening on port 8081
info: No routes require certificate management
debug MetricsCollector started
Making HTTP request to proxy...
info: New connection from ::ffff:127.0.0.1 on port 8081. Active connections: 1
info: Connection established: ::ffff:127.0.0.1 -> localhost:8182
Target received: GET /test from test.local
Got response from proxy: 200
Received data chunk: Hello from target
info: SmartProxy shutting down...
info: NFTablesManager stopped
debug Port 8081 reference count decreased to 0
info: [SUMMARY] 1 HttpProxy connections terminated in 5s
info: SmartProxy -> Stopped listening on port 8081
info: All servers closed. Cleaning up active connections...
debug MetricsCollector stopped
info: SmartProxy shutdown complete.
debug Connection 7ao4scehajgaukg2zsboo closed during immediate routing: immediate-route-client_closed
info: [SUMMARY] 1 HttpProxy connections terminated in 0s
✅ should handle basic HTTP request forwarding (5003ms)
Summary: 2/2 PASSED in 12.4s
 
▶️ test/test.http-port8080-simple.ts (37/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
info: Logger initialized
Test starting: should handle ACME challenges on port 8080 with improved port binding intelligence
Target server listening on port 9001
Creating SmartProxy with ACME port 8080...
info: Route manager configured with 2 routes across 2 ports
info: Port 9003: 1 routes (test-route)
info: Port 9009: 1 routes (http-route)
info: Updated RouteManager with 2 routes
Mocking certificate manager...
Starting SmartProxy...
debug Port 9003 is used by 1 routes: test-route
debug Port 9009 is used by 1 routes: http-route
info: SmartProxy starting with 2 ports: 9003, 9009
info: SmartProxy -> OK: Now listening on port 9003
info: SmartProxy -> OK: Now listening on port 9009
info: Using top-level ACME configuration with email: test@example.com
info: Starting certificate provisioning now that ports are ready
Mock: Provisioning certificates
debug MetricsCollector started
Port binding attempts: [ 9003, 9009 ]
Actually bound ports: [ 9003, 9009 ]
Testing route update with port reuse...
info: Updating routes (3 routes)
debug Port 9003 is used by 1 routes: test-route
debug Port 9009 is used by 1 routes: http-route
debug Port 9003 is used by 1 routes: test-route
debug Port 9009 is used by 2 routes: http-route, additional-route
debug Current listening ports: 9003, 9009
debug Ports needed for new routes: 9003, 9009
info: Route manager configured with 3 routes across 2 ports
info: Port 9003: 1 routes (test-route)
info: Port 9009: 2 routes (http-route, additional-route)
info: Updated RouteManager with 3 routes
debug ACME port 9009 is already in use by other routes
info: Challenge route successfully removed from routes
Port binding attempts after update: []
Bound ports after update: [ 9003, 9009 ]
Port binding intelligence verified successfully!
Cleaning up...
info: SmartProxy shutting down...
info: Certificate manager stopped
info: NFTablesManager stopped
debug Port 9003 reference count decreased to 0
debug Port 9009 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 9003
info: SmartProxy -> Stopped listening on port 9009
info: All servers closed. Cleaning up active connections...
debug MetricsCollector stopped
info: SmartProxy shutdown complete.
✅ should handle ACME challenges on port 8080 with improved port binding intelligence (8ms)
Summary: 1/1 PASSED in 2.3s
 
▶️ test/test.http-proxy-security-limits.node.ts (38/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
Test starting: Setup HttpProxy SecurityManager
✅ Setup HttpProxy SecurityManager (0ms)
Test starting: HttpProxy IP connection tracking
✅ HttpProxy IP connection tracking (1ms)
Test starting: HttpProxy connection rate limiting
❌ HttpProxy connection rate limiting (0ms)
⟦TSTEST:META:{"time":0,"retry":0,"error":{"message":"Expected value to be true","stack":"Error: Expected value to be true\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:299:15)\n at runDirectOrNegated (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:214:16)\n at Proxy.runCheck (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:279:5)\n at Proxy.customAssertion (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:294:17)\n at BooleanMatchers.toBeTrue (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/namespaces/boolean.ts:11:27)\n at Proxy.toBeTrue (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:337:43)\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/test.http-proxy-security-limits.node.ts:51:28)\n at TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:26)\n at TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:176:34)\n at Tap.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:528:39)"}}⟧
⟦TSTEST:ERROR⟧
{
"testNumber": 3,
"error": {
"message": "Expected value to be true",
"stack": "Error: Expected value to be true\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:299:15)\n at runDirectOrNegated (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:214:16)\n at Proxy.runCheck (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:279:5)\n at Proxy.customAssertion (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:294:17)\n at BooleanMatchers.toBeTrue (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/namespaces/boolean.ts:11:27)\n at Proxy.toBeTrue (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:337:43)\n at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/test.http-proxy-security-limits.node.ts:51:28)\n at TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:26)\n at TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:176:34)\n at Tap.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:528:39)"
}
}
Error details:
Error: Expected value to be true
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:299:15)
at runDirectOrNegated (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:214:16)
at Proxy.runCheck (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:279:5)
at Proxy.customAssertion (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:294:17)
at BooleanMatchers.toBeTrue (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/namespaces/boolean.ts:11:27)
at Proxy.toBeTrue (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:337:43)
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/test.http-proxy-security-limits.node.ts:51:28)
at TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:26)
at TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:176:34)
at Tap.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:528:39)
Error: Expected value to be true
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:299:15)
at runDirectOrNegated (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:214:16)
at Proxy.runCheck (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:279:5)
at Proxy.customAssertion (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:294:17)
at BooleanMatchers.toBeTrue (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/namespaces/boolean.ts:11:27)
at Proxy.toBeTrue (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@push.rocks+smartexpect@2.5.0/node_modules/@push.rocks/smartexpect/ts/smartexpect.classes.assertion.ts:337:43)
at <anonymous> (/mnt/data/lossless/push.rocks/smartproxy/test/test.http-proxy-security-limits.node.ts:51:28)
at TapTest.currentTest.testFunction (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:514:26)
at TapTest.run (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.taptest.ts:176:34)
at Tap.start (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/@git.zone+tstest@2.3.1_@aws-sdk+credential-providers@3.798.0_socks@2.8.4_typescript@5.8.3/node_modules/@git.zone/tstest/ts_tapbundle/tapbundle.classes.tap.ts:528:39)
Test starting: HttpProxy CLIENT_IP header handling
✅ HttpProxy CLIENT_IP header handling (0ms)
Test starting: HttpProxy automatic cleanup
✅ HttpProxy automatic cleanup (102ms)
Test starting: Cleanup HttpProxy SecurityManager
✅ Cleanup HttpProxy SecurityManager (0ms)
Test 3 failed with status error:
|| HttpProxy connection rate limiting
|| for more information please take a look the logs above
Summary: 5 passed, 1 failed of 6 tests in 2.3s
 
▶️ test/test.httpproxy.function-targets.ts (39/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
info: Logger initialized
Test starting: setup HttpProxy function-based targets test environment
[INFO] Route manager configured with 0 routes across 0 ports
[INFO] Updated RouteManager with 0 routes
[WARN] CertificateManager is deprecated - use SmartCertManager instead
[INFO] Loaded default certificates from filesystem (sync - deprecated)
[INFO] WebSocket handler initialized
[INFO] HttpProxy started on port 0
HttpProxy actual listening port: 44271
✅ setup HttpProxy function-based targets test environment (5ms)
Test starting: should support static host/port routes
[INFO] Updating route configurations (1 routes)
[INFO] Route manager configured with 1 routes across 1 ports
[INFO] Updated RouteManager with 1 routes
HttpRouter initialized with 1 routes (1 unique hosts)
[INFO] HttpRouter initialized with 1 routes (1 unique hosts)
HttpRouter initialized with 1 routes (1 unique hosts)
[WARN] updateRoutes is deprecated - use SmartCertManager instead
[INFO] HttpRouter initialized with 1 routes (1 unique hosts)
[INFO] Route configuration updated with 1 routes
✅ should support static host/port routes (56ms)
Test starting: should support function-based host
[INFO] Updating route configurations (1 routes)
[INFO] Route manager configured with 1 routes across 1 ports
[INFO] Updated RouteManager with 1 routes
HttpRouter initialized with 1 routes (1 unique hosts)
[INFO] HttpRouter initialized with 1 routes (1 unique hosts)
HttpRouter initialized with 1 routes (1 unique hosts)
[INFO] HttpRouter initialized with 1 routes (1 unique hosts)
[WARN] updateRoutes is deprecated - use SmartCertManager instead
[INFO] Route configuration updated with 1 routes
✅ should support function-based host (45ms)
Test starting: should support function-based port
[INFO] Updating route configurations (1 routes)
[INFO] Route manager configured with 1 routes across 1 ports
[INFO] Updated RouteManager with 1 routes
HttpRouter initialized with 1 routes (1 unique hosts)
[INFO] HttpRouter initialized with 1 routes (1 unique hosts)
HttpRouter initialized with 1 routes (1 unique hosts)
[INFO] HttpRouter initialized with 1 routes (1 unique hosts)
[INFO] Route configuration updated with 1 routes
[WARN] updateRoutes is deprecated - use SmartCertManager instead
✅ should support function-based port (44ms)
Test starting: should support function-based host AND port
[INFO] Updating route configurations (1 routes)
[INFO] Route manager configured with 1 routes across 1 ports
[INFO] Updated RouteManager with 1 routes
HttpRouter initialized with 1 routes (1 unique hosts)
[INFO] HttpRouter initialized with 1 routes (1 unique hosts)
HttpRouter initialized with 1 routes (1 unique hosts)
[INFO] HttpRouter initialized with 1 routes (1 unique hosts)
[INFO] Route configuration updated with 1 routes
[WARN] updateRoutes is deprecated - use SmartCertManager instead
✅ should support function-based host AND port (44ms)
Test starting: should support context-based routing with path
[INFO] Updating route configurations (1 routes)
[INFO] Route manager configured with 1 routes across 1 ports
[INFO] Updated RouteManager with 1 routes
HttpRouter initialized with 1 routes (1 unique hosts)
[INFO] HttpRouter initialized with 1 routes (1 unique hosts)
HttpRouter initialized with 1 routes (1 unique hosts)
[INFO] HttpRouter initialized with 1 routes (1 unique hosts)
[INFO] Route configuration updated with 1 routes
[WARN] updateRoutes is deprecated - use SmartCertManager instead
✅ should support context-based routing with path (46ms)
Test starting: cleanup HttpProxy function-based targets test environment
Test server closed successfully
HTTP/2 test server closed successfully
Stopping HttpProxy...
[INFO] Stopping HttpProxy server
[INFO] Closing 0 WebSocket connections
[INFO] Function cache cleared
[INFO] HttpProxy server stopped successfully
HttpProxy stopped successfully
✅ cleanup HttpProxy function-based targets test environment (2ms)
Summary: 7/7 PASSED in 2.5s
 
▶️ test/test.httpproxy.ts (40/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
info: Logger initialized
Test starting: setup test environment
[TEST] Loading and validating certificates
[TEST] Certificates loaded and validated
[TEST SERVER] Creating WebSocket server
Test server listening on port 3100
✅ setup test environment (3ms)
Test starting: should create proxy instance
[INFO] Route manager configured with 0 routes across 0 ports
[INFO] Updated RouteManager with 0 routes
[WARN] CertificateManager is deprecated - use SmartCertManager instead
[INFO] Loaded default certificates from filesystem (sync - deprecated)
✅ should create proxy instance (2ms)
Test starting: should create proxy instance with extended options
[INFO] Route manager configured with 0 routes across 0 ports
[INFO] Updated RouteManager with 0 routes
[WARN] CertificateManager is deprecated - use SmartCertManager instead
[INFO] Loaded default certificates from filesystem (sync - deprecated)
✅ should create proxy instance with extended options (0ms)
Test starting: should start the proxy server
[INFO] Route manager configured with 0 routes across 0 ports
[INFO] Updated RouteManager with 0 routes
[INFO] Loaded default certificates from filesystem (sync - deprecated)
[WARN] CertificateManager is deprecated - use SmartCertManager instead
[INFO] Updating route configurations (1 routes)
[INFO] Route manager configured with 1 routes across 1 ports
[INFO] Updated RouteManager with 1 routes
HttpRouter initialized with 1 routes (2 unique hosts)
[INFO] HttpRouter initialized with 1 routes (2 unique hosts)
HttpRouter initialized with 1 routes (2 unique hosts)
[WARN] updateRoutes is deprecated - use SmartCertManager instead
[INFO] HttpRouter initialized with 1 routes (2 unique hosts)
[INFO] Route configuration updated with 1 routes
[INFO] WebSocket handler initialized
[INFO] HttpProxy started on port 3001
✅ should start the proxy server (4ms)
Test starting: should route HTTPS requests based on host header
[TEST] Making HTTPS request: {
hostname: 'localhost',
port: 3001,
path: '/',
method: 'GET',
headers: { host: 'push.rocks' }
}
[TEST SERVER] Received HTTP request: {
url: '/',
method: 'GET',
headers: { host: 'localhost:3100', connection: 'keep-alive' }
}
[TEST] Received HTTPS response: {
statusCode: 200,
headers: {
'access-control-allow-origin': '*',
'access-control-allow-methods': 'GET, POST, PUT, DELETE, OPTIONS',
'access-control-allow-headers': 'Content-Type, Authorization',
'access-control-max-age': '86400',
server: 'NetworkProxy',
'content-type': 'text/plain',
date: 'Sun, 20 Jul 2025 13:18:47 GMT',
connection: 'keep-alive',
'keep-alive': 'timeout=5',
'transfer-encoding': 'chunked'
}
}
[TEST] Response completed: { data: 'Hello from test server!' }
✅ should route HTTPS requests based on host header (56ms)
Test starting: should handle unknown host headers
[TEST] Making HTTPS request: {
hostname: 'localhost',
port: 3001,
path: '/',
method: 'GET',
headers: { host: 'unknown.host' }
}
[WARN] No route configuration for host: unknown.host
[TEST] Received HTTPS response: {
statusCode: 404,
headers: {
'access-control-allow-origin': '*',
'access-control-allow-methods': 'GET, POST, PUT, DELETE, OPTIONS',
'access-control-allow-headers': 'Content-Type, Authorization',
'access-control-max-age': '86400',
server: 'NetworkProxy',
date: 'Sun, 20 Jul 2025 13:18:47 GMT',
connection: 'keep-alive',
'content-length': '47'
}
}
[TEST] Response completed: { data: 'Not Found: No route configuration for this host' }
✅ should handle unknown host headers (5ms)
Test starting: should support WebSocket connections
[TEST] Testing WebSocket connection
[TEST] Creating WebSocket to wss://localhost:3001/ with host header: push.rocks
[TEST] WebSocket connected
[TEST] Sending WebSocket message: Hello WebSocket!
[TEST SERVER] Received WebSocket upgrade request: {
url: '/',
method: 'GET',
headers: {
host: 'localhost:3100',
upgrade: 'websocket',
connection: 'Upgrade',
'sec-websocket-key': 'ON2Sz/WSh791AGV0Ntb4Yw==',
'sec-websocket-version': '13',
'sec-websocket-protocol': undefined
}
}
[TEST SERVER] Handling WebSocket upgrade
Test server: WebSocket headers: [
'HTTP/1.1 101 Switching Protocols',
'Upgrade: websocket',
'Connection: Upgrade',
'Sec-WebSocket-Accept: Mu1VkcnDG6ULmepX5/X6Uzq29XM='
]
[TEST SERVER] WebSocket connection upgraded
[TEST SERVER] WebSocket connection established: {
url: '/',
headers: {
host: 'localhost:3100',
upgrade: 'websocket',
connection: 'Upgrade',
'sec-websocket-key': 'ON2Sz/WSh791AGV0Ntb4Yw==',
'sec-websocket-version': '13',
'sec-websocket-protocol': undefined
}
}
[TEST] No message received after 2 seconds
[TEST] WebSocket test error: Error: Message timeout
at Timeout._onTimeout (/mnt/data/lossless/push.rocks/smartproxy/test/test.httpproxy.ts:363:49)
at listOnTimeout (node:internal/timers:614:17)
at process.processTimers (node:internal/timers:549:7)
[TEST] WebSocket test failed, continuing with other tests
✅ should support WebSocket connections (3010ms)
Test starting: should handle custom headers
[INFO] Adding default headers { 'X-Proxy-Header': 'test-value' }
[INFO] Updated default response headers
[TEST] Making HTTPS request: {
hostname: 'localhost',
port: 3001,
path: '/',
method: 'GET',
headers: { host: 'push.rocks' }
}
[ERROR] Error closing wsOutgoing: TypeError: First argument must be a valid error code number
at Sender.close (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/ws@8.18.2/node_modules/ws/lib/sender.js:187:13)
at WebSocket.close (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/ws@8.18.2/node_modules/ws/lib/websocket.js:315:18)
at WebSocket.<anonymous> (/mnt/data/lossless/push.rocks/smartproxy/ts/proxies/http-proxy/websocket-handler.ts:503:26)
at WebSocket.emit (node:events:519:35)
at WebSocket.emitClose (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/ws@8.18.2/node_modules/ws/lib/websocket.js:272:10)
at TLSSocket.socketOnClose (/mnt/data/lossless/push.rocks/smartproxy/node_modules/.pnpm/ws@8.18.2/node_modules/ws/lib/websocket.js:1341:15)
at TLSSocket.emit (node:events:519:35)
at node:net:351:12
at Socket.done (node:_tls_wrap:650:7)
at Object.onceWrapper (node:events:622:26)
[TEST SERVER] Received HTTP request: {
url: '/',
method: 'GET',
headers: { host: 'localhost:3100', connection: 'keep-alive' }
}
[TEST] Received HTTPS response: {
statusCode: 200,
headers: {
'access-control-allow-origin': '*',
'access-control-allow-methods': 'GET, POST, PUT, DELETE, OPTIONS',
'access-control-allow-headers': 'Content-Type, Authorization',
'access-control-max-age': '86400',
'x-proxy-header': 'test-value',
server: 'NetworkProxy',
'content-type': 'text/plain',
date: 'Sun, 20 Jul 2025 13:18:50 GMT',
connection: 'keep-alive',
'keep-alive': 'timeout=5',
'transfer-encoding': 'chunked'
}
}
[TEST] Response completed: { data: 'Hello from test server!' }
✅ should handle custom headers (5ms)
Test starting: should handle CORS preflight requests
[TEST] Making HTTPS request: {
hostname: 'localhost',
port: 3001,
path: '/',
method: 'OPTIONS',
headers: {
host: 'push.rocks',
origin: 'https://example.com',
'access-control-request-method': 'POST',
'access-control-request-headers': 'content-type'
}
}
[TEST] Received HTTPS response: {
statusCode: 204,
headers: {
'access-control-allow-origin': '*',
'access-control-allow-methods': 'GET, POST, PUT, DELETE, OPTIONS',
'access-control-allow-headers': 'Content-Type, Authorization',
'access-control-max-age': '86400',
date: 'Sun, 20 Jul 2025 13:18:50 GMT',
connection: 'keep-alive'
}
}
[TEST] Response completed: { data: '' }
✅ should handle CORS preflight requests (1ms)
Test starting: should track connections and metrics
✅ should track connections and metrics (1ms)
Test starting: should update capacity settings
[INFO] Updated max connections to 2000
[INFO] Updated keep-alive timeout to 60000ms
[INFO] Updated connection pool size to 25
✅ should update capacity settings (0ms)
Test starting: should handle certificate requests
✅ should handle certificate requests (0ms)
Test starting: should update certificates directly
[WARN] requestCertificate is deprecated - use SmartCertManager instead
[INFO] Updating certificate for test.example.com
[INFO] Certificate updated for test.example.com
✅ should update certificates directly (0ms)
Test starting: cleanup
[TEST] Starting cleanup
[TEST] Terminating 1 WebSocket clients
[TEST] Closing WebSocket server
[TEST SERVER] WebSocket connection closed: { code: 1006, reason: '', wasClean: false }
Test server: WebSocket server closed
[TEST] WebSocket server closed
[TEST] Closing test server
[TEST] Test server closed
[TEST] Stopping proxy
[INFO] Stopping HttpProxy server
[INFO] Closing 0 WebSocket connections
[INFO] Function cache cleared
[INFO] HttpProxy server stopped successfully
[TEST] Proxy stopped successfully
[TEST] Cleanup complete
✅ cleanup (1ms)
[TEST] WebSocket server close timeout
[TEST] Test server close timeout
[TEST] Proxy stop timeout
Summary: 14/14 PASSED in 7.4s
 
▶️ test/test.keepalive-support.node.ts (41/78)
Runtime: node.js
called svDb() on >SmartDataDbDoc._createdAt<
called svDb() on >SmartDataDbDoc._updatedAt<
info: Logger initialized
Test starting: keepalive support - verify keepalive connections are properly handled

=== KeepAlive Support Test ===
Purpose: Verify that keepalive connections are not prematurely cleaned up
✓ Echo backend started on port 9998

--- Test 1: Standard KeepAlive Treatment ---
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
debug Port 8590 is used by 1 routes: keepalive-route
info: SmartProxy starting with 1 ports: 8590
info: SmartProxy -> OK: Now listening on port 8590
info: No routes require certificate management
debug MetricsCollector started
✓ Proxy with standard keepalive started on port 8590
info: New connection from ::ffff:127.0.0.1 on port 8590. Active connections: 1
Client connected
info: Connection established: ::ffff:127.0.0.1 -> localhost:9998
Received echo: Hello keepalive
KeepAlive connection 0gfejvdhf245g3t9m4232f: hasKeepAlive=true
WARN -> Timeout event on outgoing keep-alive connection 0gfejvdhf245g3t9m4232f from ::ffff:127.0.0.1 after 1h. Connection preserved.
WARN -> Timeout event on incoming keep-alive connection 0gfejvdhf245g3t9m4232f from ::ffff:127.0.0.1 after 1h. Connection preserved.
Socket timeout: server
Socket timeout: immediate-route-client
Socket timeout: client
Connections after 6s wait: 1
info: SmartProxy shutting down...
info: NFTablesManager stopped
debug Port 8590 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 8590
info: All servers closed. Cleaning up active connections...
debug MetricsCollector stopped
info: SmartProxy shutdown complete.
debug Connection 0gfejvdhf245g3t9m4232f closed during immediate routing: immediate-route-client_closed
Backend socket error (expected during cleanup): ECONNRESET

--- Test 2: Extended KeepAlive Treatment ---
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
debug Port 8591 is used by 1 routes: keepalive-extended
info: SmartProxy starting with 1 ports: 8591
info: SmartProxy -> OK: Now listening on port 8591
info: No routes require certificate management
debug MetricsCollector started
✓ Proxy with extended keepalive started on port 8591
info: New connection from ::ffff:127.0.0.1 on port 8591. Active connections: 1
Client connected with extended timeout
info: Connection established: ::ffff:127.0.0.1 -> localhost:9998
Extended connection assnnwem5hkzviq224859: hasKeepAlive=true, treatment=extended
info: [SUMMARY] 1 HttpProxy connections terminated in 4s
Connections after 3s (base timeout exceeded): 1
info: SmartProxy shutting down...
info: NFTablesManager stopped
debug Port 8591 reference count decreased to 0
info: SmartProxy -> Stopped listening on port 8591
info: All servers closed. Cleaning up active connections...
debug MetricsCollector stopped
info: SmartProxy shutdown complete.
debug Connection assnnwem5hkzviq224859 closed during immediate routing: immediate-route-client_closed

--- Test 3: Immortal KeepAlive Treatment ---
info: Route manager configured with 1 routes across 1 ports
info: Updated RouteManager with 1 routes
debug Port 8592 is used by 1 routes: keepalive-immortal
info: SmartProxy starting with 1 ports: 8592
info: SmartProxy -> OK: Now listening on port 8592
info: No routes require certificate management
debug MetricsCollector started
✓ Proxy with immortal keepalive started on port 8592
info: New connection from ::ffff:127.0.0.1 on port 8592. Active connections: 1
Client connected with immortal treatment
info: Connection established: ::ffff:127.0.0.1 -> localhost:9998