forked from quic-go/quic-go
* qlog: implement a Trace and a Writer struct * qlog: rename Trace to FileSeq * split qlog trace writer and QUIC qlog events into separate packages * use the new qlog.Recorder instead of the logging.ConnectionTracer
43 lines
1.0 KiB
Go
43 lines
1.0 KiB
Go
package qlog
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func checkEncoding(t *testing.T, data []byte, expected map[string]any) {
|
|
t.Helper()
|
|
|
|
m := make(map[string]any)
|
|
require.NoError(t, json.Unmarshal(data, &m))
|
|
require.Len(t, m, len(expected))
|
|
|
|
for key, value := range expected {
|
|
switch v := value.(type) {
|
|
case bool, string, map[string]any:
|
|
require.Equal(t, v, m[key])
|
|
case int:
|
|
require.Equal(t, float64(v), m[key])
|
|
case [][]float64: // used in the ACK frame
|
|
require.Contains(t, m, key)
|
|
outerSlice, ok := m[key].([]any)
|
|
require.True(t, ok)
|
|
require.Len(t, outerSlice, len(v))
|
|
for i, innerExpected := range v {
|
|
innerSlice, ok := outerSlice[i].([]any)
|
|
require.True(t, ok)
|
|
require.Len(t, innerSlice, len(innerExpected))
|
|
for j, expectedValue := range innerExpected {
|
|
v, ok := innerSlice[j].(float64)
|
|
require.True(t, ok)
|
|
require.Equal(t, expectedValue, v)
|
|
}
|
|
}
|
|
default:
|
|
t.Fatalf("unexpected type: %T", v)
|
|
}
|
|
}
|
|
}
|