Files
smartproxy/test-output.log

2750 lines
330 KiB
Plaintext
Raw Normal View History

> @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