session_logger_test.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package sshlog
  2. import (
  3. "os"
  4. "testing"
  5. "time"
  6. "github.com/cloudflare/cloudflared/logger"
  7. capnp "zombiezen.com/go/capnproto2"
  8. )
  9. const sessionLogFileName = "test-session-logger.log"
  10. func createSessionLogger(t *testing.T) *SessionLogger {
  11. os.Remove(sessionLogFileName)
  12. l := logger.NewOutputWriter(logger.NewMockWriteManager())
  13. logger, err := NewSessionLogger(sessionLogFileName, l, time.Millisecond, 1024)
  14. if err != nil {
  15. t.Fatal("couldn't create the logger!", err)
  16. }
  17. return logger
  18. }
  19. func TestSessionLogWrite(t *testing.T) {
  20. testStr := "hi"
  21. logger := createSessionLogger(t)
  22. defer func() {
  23. os.Remove(sessionLogFileName)
  24. }()
  25. logger.Write([]byte(testStr))
  26. logger.Close()
  27. f, err := os.Open(sessionLogFileName)
  28. if err != nil {
  29. t.Fatal("couldn't read the log file!", err)
  30. }
  31. defer f.Close()
  32. msg, err := capnp.NewDecoder(f).Decode()
  33. if err != nil {
  34. t.Fatal("couldn't read the capnp msg file!", err)
  35. }
  36. sessionLog, err := ReadRootSessionLog(msg)
  37. if err != nil {
  38. t.Fatal("couldn't read the session log from the msg!", err)
  39. }
  40. timeStr, err := sessionLog.Timestamp()
  41. if err != nil {
  42. t.Fatal("couldn't read the Timestamp field!", err)
  43. }
  44. _, terr := time.Parse(time.RFC3339, timeStr)
  45. if terr != nil {
  46. t.Fatal("couldn't parse the Timestamp into the expected RFC3339 format", terr)
  47. }
  48. data, err := sessionLog.Content()
  49. if err != nil {
  50. t.Fatal("couldn't read the Content field!", err)
  51. }
  52. checkStr := string(data)
  53. if checkStr != testStr {
  54. t.Fatal("file data doesn't match!")
  55. }
  56. }