70 lines
1.5 KiB
Go
70 lines
1.5 KiB
Go
package sshlog
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/cloudflare/cloudflared/logger"
|
|
capnp "zombiezen.com/go/capnproto2"
|
|
)
|
|
|
|
const sessionLogFileName = "test-session-logger.log"
|
|
|
|
func createSessionLogger(t *testing.T) *SessionLogger {
|
|
os.Remove(sessionLogFileName)
|
|
l := logger.NewOutputWriter(logger.NewMockWriteManager())
|
|
logger, err := NewSessionLogger(sessionLogFileName, l, time.Millisecond, 1024)
|
|
if err != nil {
|
|
t.Fatal("couldn't create the logger!", err)
|
|
}
|
|
return logger
|
|
}
|
|
|
|
func TestSessionLogWrite(t *testing.T) {
|
|
testStr := "hi"
|
|
logger := createSessionLogger(t)
|
|
defer func() {
|
|
logger.Close()
|
|
os.Remove(sessionLogFileName)
|
|
}()
|
|
|
|
logger.Write([]byte(testStr))
|
|
time.Sleep(2 * time.Millisecond)
|
|
f, err := os.Open(sessionLogFileName)
|
|
if err != nil {
|
|
t.Fatal("couldn't read the log file!", err)
|
|
}
|
|
defer f.Close()
|
|
|
|
msg, err := capnp.NewDecoder(f).Decode()
|
|
if err != nil {
|
|
t.Fatal("couldn't read the capnp msg file!", err)
|
|
}
|
|
|
|
sessionLog, err := ReadRootSessionLog(msg)
|
|
if err != nil {
|
|
t.Fatal("couldn't read the session log from the msg!", err)
|
|
}
|
|
|
|
timeStr, err := sessionLog.Timestamp()
|
|
if err != nil {
|
|
t.Fatal("couldn't read the Timestamp field!", err)
|
|
}
|
|
|
|
_, terr := time.Parse(time.RFC3339, timeStr)
|
|
if terr != nil {
|
|
t.Fatal("couldn't parse the Timestamp into the expected RFC3339 format", terr)
|
|
}
|
|
|
|
data, err := sessionLog.Content()
|
|
if err != nil {
|
|
t.Fatal("couldn't read the Content field!", err)
|
|
}
|
|
|
|
checkStr := string(data)
|
|
if checkStr != testStr {
|
|
t.Fatal("file data doesn't match!")
|
|
}
|
|
}
|