package node import ( "bytes" "encoding/json" "sync" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) // --- bufpool.go tests --- func TestGetBuffer_ReturnsResetBuffer(t *testing.T) { t.Run("buffer is initially empty", func(t *testing.T) { buf := getBuffer() defer putBuffer(buf) assert.Equal(t, 0, buf.Len(), "buffer from pool should have zero length") }) t.Run("buffer is reset after reuse", func(t *testing.T) { buf := getBuffer() buf.WriteString("stale data that should be cleared") putBuffer(buf) buf2 := getBuffer() defer putBuffer(buf2) assert.Equal(t, 0, buf2.Len(), "reused buffer should be reset (no stale data)") }) } func TestPutBuffer_DiscardsOversizedBuffers(t *testing.T) { t.Run("buffer at 64KB limit is pooled", func(t *testing.T) { buf := getBuffer() buf.Grow(65536) putBuffer(buf) buf2 := getBuffer() defer putBuffer(buf2) assert.Equal(t, 0, buf2.Len()) }) t.Run("buffer exceeding 64KB is discarded", func(t *testing.T) { buf := getBuffer() large := make([]byte, 65537) buf.Write(large) assert.Greater(t, buf.Cap(), 65536, "buffer should have grown past 64KB") putBuffer(buf) buf2 := getBuffer() defer putBuffer(buf2) assert.LessOrEqual(t, buf2.Cap(), 65536, "pool should not return an oversized buffer") }) } func TestBufPool_BufferIndependence(t *testing.T) { buf1 := getBuffer() buf2 := getBuffer() buf1.WriteString("buffer-one") buf2.WriteString("buffer-two") assert.Equal(t, "buffer-one", buf1.String()) assert.Equal(t, "buffer-two", buf2.String()) buf1.WriteString("-extra") assert.Equal(t, "buffer-one-extra", buf1.String()) assert.Equal(t, "buffer-two", buf2.String()) putBuffer(buf1) putBuffer(buf2) } func TestMarshalJSON_BasicTypes(t *testing.T) { tests := []struct { name string input interface{} }{ { name: "string value", input: "hello", }, { name: "integer value", input: 42, }, { name: "float value", input: 3.14, }, { name: "boolean value", input: true, }, { name: "nil value", input: nil, }, { name: "struct value", input: PingPayload{SentAt: 1234567890}, }, { name: "map value", input: map[string]interface{}{"key": "value", "num": 42}, }, { name: "slice value", input: []int{1, 2, 3}, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { got, err := MarshalJSON(tt.input) require.NoError(t, err) expected, err := json.Marshal(tt.input) require.NoError(t, err) assert.JSONEq(t, string(expected), string(got), "MarshalJSON output should match json.Marshal") }) } } func TestMarshalJSON_NoTrailingNewline(t *testing.T) { data, err := MarshalJSON(map[string]string{"key": "value"}) require.NoError(t, err) assert.NotEqual(t, byte('\n'), data[len(data)-1], "MarshalJSON should strip the trailing newline added by json.Encoder") } func TestMarshalJSON_HTMLEscaping(t *testing.T) { input := map[string]string{"html": ""} data, err := MarshalJSON(input) require.NoError(t, err) assert.Contains(t, string(data), "