2023-08-21 03:50:38 +00:00
|
|
|
package quicreuse
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"io"
|
|
|
|
"os"
|
|
|
|
"strings"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/klauspost/compress/zstd"
|
|
|
|
"github.com/quic-go/quic-go"
|
|
|
|
"github.com/quic-go/quic-go/logging"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
)
|
|
|
|
|
|
|
|
func createLogDir(t *testing.T) string {
|
|
|
|
dir, err := os.MkdirTemp("", "libp2p-quic-transport-test")
|
|
|
|
require.NoError(t, err)
|
|
|
|
t.Cleanup(func() { os.RemoveAll(dir) })
|
|
|
|
return dir
|
|
|
|
}
|
|
|
|
|
|
|
|
func getFile(t *testing.T, dir string) os.FileInfo {
|
|
|
|
files, err := os.ReadDir(dir)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.Len(t, files, 1)
|
|
|
|
info, err := files[0].Info()
|
|
|
|
require.NoError(t, err)
|
|
|
|
return info
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestSaveQlog(t *testing.T) {
|
|
|
|
qlogDir := createLogDir(t)
|
|
|
|
logger := newQlogger(qlogDir, logging.PerspectiveServer, quic.ConnectionIDFromBytes([]byte{0xde, 0xad, 0xbe, 0xef}))
|
|
|
|
file := getFile(t, qlogDir)
|
2024-06-08 11:32:45 +00:00
|
|
|
require.Equal(t, ".", string(file.Name()[0]))
|
2023-08-21 03:50:38 +00:00
|
|
|
require.Truef(t, strings.HasSuffix(file.Name(), ".qlog.swp"), "expected %s to have the .qlog.swp file ending", file.Name())
|
|
|
|
// close the logger. This should move the file.
|
|
|
|
require.NoError(t, logger.Close())
|
|
|
|
file = getFile(t, qlogDir)
|
2024-06-08 11:32:45 +00:00
|
|
|
require.NotEqual(t, ".", string(file.Name()[0]))
|
2023-08-21 03:50:38 +00:00
|
|
|
require.Truef(t, strings.HasSuffix(file.Name(), ".qlog.zst"), "expected %s to have the .qlog.zst file ending", file.Name())
|
|
|
|
require.Contains(t, file.Name(), "server")
|
|
|
|
require.Contains(t, file.Name(), "deadbeef")
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestQlogBuffering(t *testing.T) {
|
|
|
|
qlogDir := createLogDir(t)
|
|
|
|
logger := newQlogger(qlogDir, logging.PerspectiveServer, quic.ConnectionIDFromBytes([]byte("connid")))
|
|
|
|
initialSize := getFile(t, qlogDir).Size()
|
|
|
|
// Do a small write.
|
|
|
|
// Since the writter is buffered, this should not be written to disk yet.
|
|
|
|
logger.Write([]byte("foobar"))
|
|
|
|
require.Equal(t, getFile(t, qlogDir).Size(), initialSize)
|
|
|
|
// Close the logger. This should flush the buffer to disk.
|
|
|
|
require.NoError(t, logger.Close())
|
|
|
|
finalSize := getFile(t, qlogDir).Size()
|
|
|
|
t.Logf("initial log file size: %d, final log file size: %d\n", initialSize, finalSize)
|
|
|
|
require.Greater(t, finalSize, initialSize)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestQlogCompression(t *testing.T) {
|
|
|
|
qlogDir := createLogDir(t)
|
|
|
|
logger := newQlogger(qlogDir, logging.PerspectiveServer, quic.ConnectionIDFromBytes([]byte("connid")))
|
|
|
|
logger.Write([]byte("foobar"))
|
|
|
|
require.NoError(t, logger.Close())
|
|
|
|
compressed, err := os.ReadFile(qlogDir + "/" + getFile(t, qlogDir).Name())
|
|
|
|
require.NoError(t, err)
|
2024-06-08 11:32:45 +00:00
|
|
|
require.NotEqual(t, "foobar", compressed)
|
2023-08-21 03:50:38 +00:00
|
|
|
c, err := zstd.NewReader(bytes.NewReader(compressed))
|
|
|
|
require.NoError(t, err)
|
|
|
|
data, err := io.ReadAll(c)
|
|
|
|
require.NoError(t, err)
|
2024-06-08 11:32:45 +00:00
|
|
|
require.Equal(t, []byte("foobar"), data)
|
2023-08-21 03:50:38 +00:00
|
|
|
}
|