Files
quic-go/qlog/qlog_dir_test.go
2025-11-14 04:04:40 +03:00

71 lines
2.1 KiB
Go

package qlog
import (
"context"
"encoding/json"
"os"
"path/filepath"
"strings"
"testing"
"git.geeks-team.ru/gr1ffon/quic-go/internal/protocol"
"git.geeks-team.ru/gr1ffon/quic-go/qlogwriter"
"github.com/stretchr/testify/require"
)
func TestQLOGDIRSet(t *testing.T) {
tmpDir := t.TempDir()
connID, _ := protocol.GenerateConnectionIDForInitial()
qlogDir := filepath.Join(tmpDir, "qlogs")
t.Setenv("QLOGDIR", qlogDir)
t.Run("default connection tracer", func(t *testing.T) {
tracer := DefaultConnectionTracer(context.Background(), true, connID)
testQLOGDIRSet(t, qlogDir, tracer, []string{EventSchema})
})
t.Run("default connection tracer with schemas", func(t *testing.T) {
tracer := DefaultConnectionTracerWithSchemas(context.Background(), true, connID, []string{"urn:ietf:params:qlog:events:foobar"})
testQLOGDIRSet(t, qlogDir, tracer, []string{EventSchema, "urn:ietf:params:qlog:events:foobar"})
})
}
func testQLOGDIRSet(t *testing.T, qlogDir string, tracer qlogwriter.Trace, expectedEventSchemas []string) {
require.NotNil(t, tracer)
// adding and closing a producer makes the tracer close the file
recorder := tracer.AddProducer()
recorder.Close()
_, err := os.Stat(qlogDir)
qlogDirCreated := !os.IsNotExist(err)
require.True(t, qlogDirCreated)
entries, err := os.ReadDir(qlogDir)
require.NoError(t, err)
require.Len(t, entries, 1)
data, err := os.ReadFile(filepath.Join(qlogDir, entries[0].Name()))
require.NoError(t, err)
var obj map[string]any
require.NoError(t, json.Unmarshal([]byte(strings.Split(string(data), "\n")[0])[1:], &obj))
require.Contains(t, obj, "trace")
require.IsType(t, obj["trace"], map[string]any{})
require.Contains(t, obj["trace"], "event_schemas")
var eventSchemas []string
for _, v := range obj["trace"].(map[string]any)["event_schemas"].([]any) {
eventSchemas = append(eventSchemas, v.(string))
}
require.Equal(t, eventSchemas, expectedEventSchemas)
}
func TestQLOGDIRNotSet(t *testing.T) {
connID, _ := protocol.GenerateConnectionIDForInitial()
t.Setenv("QLOGDIR", "")
tracer := DefaultConnectionTracer(context.Background(), true, connID)
require.Nil(t, tracer)
}