mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-11-14 04:05:17 +00:00
76 lines
2.5 KiB
Go
76 lines
2.5 KiB
Go
|
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)
|
||
|
require.Equal(t, string(file.Name()[0]), ".")
|
||
|
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)
|
||
|
require.NotEqual(t, string(file.Name()[0]), ".")
|
||
|
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)
|
||
|
require.NotEqual(t, compressed, "foobar")
|
||
|
c, err := zstd.NewReader(bytes.NewReader(compressed))
|
||
|
require.NoError(t, err)
|
||
|
data, err := io.ReadAll(c)
|
||
|
require.NoError(t, err)
|
||
|
require.Equal(t, data, []byte("foobar"))
|
||
|
}
|