Start the Go rewrite: jsjson, awg-ctrl port, differential bench
ci / check (push) Successful in 6m6s

- 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

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-14 15:27:05 +03:00
co-authored by Claude Sonnet 5.5
parent e9df363dd2
commit 18106115f7
28 changed files with 4960 additions and 0 deletions
+84
View File
@@ -0,0 +1,84 @@
package jsjson
import (
"encoding/json"
"os"
"testing"
)
type fixture struct {
Strings []struct{ In, Out string } `json:"strings"`
Numbers []struct {
In json.RawMessage `json:"in"`
Out string `json:"out"`
Str string `json:"str"`
} `json:"numbers"`
Objects []struct {
In json.RawMessage `json:"in"`
Compact string `json:"compact"`
Indent2 string `json:"indent2"`
} `json:"objects"`
}
// Эталон — вывод JSON.stringify самого Node (tools/golden/jsjson.mjs).
func TestAgainstNode(t *testing.T) {
raw, err := os.ReadFile("../../testdata/golden/jsjson.json")
if err != nil {
t.Fatal(err)
}
var f fixture
if err := json.Unmarshal(raw, &f); err != nil {
t.Fatal(err)
}
for _, c := range f.Strings {
if got := string(MustMarshal(c.In)); got != c.Out {
t.Errorf("string %q: got %s want %s", c.In, got, c.Out)
}
}
for _, c := range f.Numbers {
v, err := Decode(c.In)
if err != nil {
t.Fatal(err)
}
if s, ok := v.(string); ok { // NaN / Infinity переданы строкой
_ = s
continue
}
x := v.(float64)
if got := Number(x); got != c.Str {
t.Errorf("String(%s): got %s want %s", c.In, got, c.Str)
}
if got := string(MustMarshal(x)); got != c.Out {
t.Errorf("JSON.stringify(%s): got %s want %s", c.In, got, c.Out)
}
}
for _, c := range f.Objects {
v, err := Decode(c.In)
if err != nil {
t.Fatal(err)
}
if got := string(MustMarshal(v)); got != c.Compact {
t.Errorf("compact:\n got %s\nwant %s", got, c.Compact)
}
got, _ := MarshalIndent(v, " ")
if string(got) != c.Indent2 {
t.Errorf("indent:\n got %s\nwant %s", got, c.Indent2)
}
}
}
func TestStructOrderAndOmit(t *testing.T) {
type S struct {
B string `json:"b"`
A int `json:"a"`
Opt string `json:"opt,omitempty"`
Skip string `json:"-"`
}
if got := string(MustMarshal(S{B: "x", A: 1})); got != `{"b":"x","a":1}` {
t.Fatal(got)
}
o := Object{{"x", 1}, {"gone", Undefined}, {"y", []string(nil)}}
if got := string(MustMarshal(o)); got != `{"x":1,"y":[]}` {
t.Fatal(got)
}
}