Start the Go rewrite: jsjson, awg-ctrl port, differential bench

- internal/jsjson: JSON.stringify-compatible encoder and order-preserving decoder,
  tested against fixtures produced by Node itself
- internal/ctrl: awg-ctrl in Go (params, vpn:// keys, users, peers, sync, 3.1
  upgrade, CAKE shaping, metrics, monitor job, Express-compatible HTTP layer)
- internal/iauth, internal/logx: internal Ed25519 tokens and logging
- tools/diffbench: Docker bench with stubbed awg/ip/tc/nft that runs one scenario
  against the TS and Go implementations for comparison
This commit is contained in:
2026-10-14 13:27:24 +00:00
parent 53d5a08bbd
commit 59e076c1de
28 changed files with 4960 additions and 0 deletions
+274
View File
@@ -0,0 +1,274 @@
{
"strings": [
{
"in": "",
"out": "\"\""
},
{
"in": "plain",
"out": "\"plain\""
},
{
"in": "кириллица",
"out": "\"кириллица\""
},
{
"in": "emoji 😀",
"out": "\"emoji 😀\""
},
{
"in": "<r 2><b 0x85>",
"out": "\"<r 2><b 0x85>\""
},
{
"in": "a&b<c>d",
"out": "\"a&b<c>d\""
},
{
"in": "slash/и\\обратный",
"out": "\"slash/и\\\\обратный\""
},
{
"in": "quote\"q",
"out": "\"quote\\\"q\""
},
{
"in": "line\nbreak",
"out": "\"line\\nbreak\""
},
{
"in": "tab\tcr\r",
"out": "\"tab\\tcr\\r\""
},
{
"in": "\b\f",
"out": "\"\\b\\f\""
},
{
"in": "\u0000\u0001\u001f",
"out": "\"\\u0000\\u0001\\u001f\""
},
{
"in": "

",
"out": "\"

\""
},
{
"in": "I2 = ",
"out": "\"I2 = \""
},
{
"in": " spaces ",
"out": "\" spaces \""
},
{
"in": "ü",
"out": "\"ü\""
},
{
"in": "日本語",
"out": "\"日本語\""
}
],
"numbers": [
{
"in": 0,
"out": "0",
"str": "0"
},
{
"in": 0,
"out": "0",
"str": "0"
},
{
"in": 1,
"out": "1",
"str": "1"
},
{
"in": -1,
"out": "-1",
"str": "-1"
},
{
"in": 1376,
"out": "1376",
"str": "1376"
},
{
"in": 47619,
"out": "47619",
"str": "47619"
},
{
"in": 0.1,
"out": "0.1",
"str": "0.1"
},
{
"in": 0.5,
"out": "0.5",
"str": "0.5"
},
{
"in": 1.5,
"out": "1.5",
"str": "1.5"
},
{
"in": 2.5,
"out": "2.5",
"str": "2.5"
},
{
"in": 100.25,
"out": "100.25",
"str": "100.25"
},
{
"in": 1e+21,
"out": "1e+21",
"str": "1e+21"
},
{
"in": 100000000000000000000,
"out": "100000000000000000000",
"str": "100000000000000000000"
},
{
"in": 123456789012345680000,
"out": "123456789012345680000",
"str": "123456789012345680000"
},
{
"in": 1e-7,
"out": "1e-7",
"str": "1e-7"
},
{
"in": 0.000001,
"out": "0.000001",
"str": "0.000001"
},
{
"in": 0.000001234,
"out": "0.000001234",
"str": "0.000001234"
},
{
"in": 1.7976931348623157e+308,
"out": "1.7976931348623157e+308",
"str": "1.7976931348623157e+308"
},
{
"in": 5e-324,
"out": "5e-324",
"str": "5e-324"
},
{
"in": 3.14159,
"out": "3.14159",
"str": "3.14159"
},
{
"in": -273.15,
"out": "-273.15",
"str": "-273.15"
},
{
"in": 9007199254740992,
"out": "9007199254740992",
"str": "9007199254740992"
},
{
"in": 9007199254740994,
"out": "9007199254740994",
"str": "9007199254740994"
},
{
"in": 0.30000000000000004,
"out": "0.30000000000000004",
"str": "0.30000000000000004"
},
{
"in": 250.5,
"out": "250.5",
"str": "250.5"
},
{
"in": "NaN",
"out": "null",
"str": "NaN"
},
{
"in": "Infinity",
"out": "null",
"str": "Infinity"
},
{
"in": "-Infinity",
"out": "null",
"str": "-Infinity"
}
],
"objects": [
{
"in": {
"a": 1,
"b": "x",
"c": [
1,
2,
{
"d": null
}
],
"e": true,
"f": false
},
"compact": "{\"a\":1,\"b\":\"x\",\"c\":[1,2,{\"d\":null}],\"e\":true,\"f\":false}",
"indent2": "{\n \"a\": 1,\n \"b\": \"x\",\n \"c\": [\n 1,\n 2,\n {\n \"d\": null\n }\n ],\n \"e\": true,\n \"f\": false\n}"
},
{
"in": {
"rekey": false,
"endpoints": [
"1.2.3.4:443"
],
"servers": [
{
"id": 0,
"name": "VPN & <co>
",
"awg": {
"Jc": "6",
"I1": "<r 2>"
}
}
]
},
"compact": "{\"rekey\":false,\"endpoints\":[\"1.2.3.4:443\"],\"servers\":[{\"id\":0,\"name\":\"VPN & <co>
\",\"awg\":{\"Jc\":\"6\",\"I1\":\"<r 2>\"}}]}",
"indent2": "{\n \"rekey\": false,\n \"endpoints\": [\n \"1.2.3.4:443\"\n ],\n \"servers\": [\n {\n \"id\": 0,\n \"name\": \"VPN & <co>
\",\n \"awg\": {\n \"Jc\": \"6\",\n \"I1\": \"<r 2>\"\n }\n }\n ]\n}"
},
{
"in": {
"empty": {},
"arr": [],
"nested": {
"x": []
}
},
"compact": "{\"empty\":{},\"arr\":[],\"nested\":{\"x\":[]}}",
"indent2": "{\n \"empty\": {},\n \"arr\": [],\n \"nested\": {\n \"x\": []\n }\n}"
},
{
"in": [],
"compact": "[]",
"indent2": "[]"
},
{
"in": {},
"compact": "{}",
"indent2": "{}"
}
]
}