Replaced legacy `*.orly` module imports with `next.orly.dev/pkg` paths across the codebase for consistency. Removed legacy `go.mod` files from sub-packages, consolidating dependency management. Added Dockerfiles and configurations for benchmarking environments.
72 lines
1.6 KiB
Go
72 lines
1.6 KiB
Go
package event
|
|
|
|
import (
|
|
"bufio"
|
|
"bytes"
|
|
"testing"
|
|
"time"
|
|
|
|
"lol.mleku.dev/chk"
|
|
"next.orly.dev/pkg/encoders/event/examples"
|
|
"next.orly.dev/pkg/utils"
|
|
)
|
|
|
|
func TestTMarshalBinary_UnmarshalBinary(t *testing.T) {
|
|
scanner := bufio.NewScanner(bytes.NewBuffer(examples.Cache))
|
|
scanner.Buffer(make([]byte, 0, 1_000_000_000), 1_000_000_000)
|
|
var rem, out []byte
|
|
var err error
|
|
now := time.Now()
|
|
var counter int
|
|
for scanner.Scan() {
|
|
// Create new event objects and buffer for each iteration
|
|
buf := new(bytes.Buffer)
|
|
ea, eb := New(), New()
|
|
|
|
chk.E(scanner.Err())
|
|
b := scanner.Bytes()
|
|
c := make([]byte, 0, len(b))
|
|
c = append(c, b...)
|
|
if rem, err = ea.Unmarshal(c); chk.E(err) {
|
|
t.Fatal(err)
|
|
}
|
|
if len(rem) != 0 {
|
|
t.Fatalf(
|
|
"some of input remaining after marshal/unmarshal: '%s'",
|
|
rem,
|
|
)
|
|
}
|
|
// Reset buffer before marshaling
|
|
buf.Reset()
|
|
ea.MarshalBinary(buf)
|
|
|
|
// Create a new buffer for unmarshaling
|
|
buf2 := bytes.NewBuffer(buf.Bytes())
|
|
if err = eb.UnmarshalBinary(buf2); chk.E(err) {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// Marshal unmarshaled binary event back to JSON
|
|
unmarshaledJSON := eb.Serialize()
|
|
defer func(ev *E) {
|
|
eb.Free()
|
|
}(eb)
|
|
|
|
// Compare the two JSON representations
|
|
if !utils.FastEqual(b, unmarshaledJSON) {
|
|
t.Fatalf(
|
|
"JSON representations don't match after binary marshaling/unmarshaling:\nOriginal: %s\nUnmarshaled: %s",
|
|
b, unmarshaledJSON,
|
|
)
|
|
}
|
|
|
|
counter++
|
|
out = out[:0]
|
|
}
|
|
chk.E(scanner.Err())
|
|
t.Logf(
|
|
"unmarshaled json, marshaled binary, unmarshaled binary, %d events in %v av %v per event",
|
|
counter, time.Since(now), time.Since(now)/time.Duration(counter),
|
|
)
|
|
}
|