uquic/internal/utils/log_test.go
2023-10-26 22:48:59 -06:00

144 lines
3.9 KiB
Go

package utils
import (
"bytes"
"log"
"os"
"time"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)
var _ = Describe("Log", func() {
var b *bytes.Buffer
BeforeEach(func() {
b = &bytes.Buffer{}
log.SetOutput(b)
})
AfterEach(func() {
log.SetOutput(os.Stdout)
DefaultLogger.SetLogLevel(LogLevelNothing)
})
It("the log level has the correct numeric value", func() {
Expect(LogLevelNothing).To(BeEquivalentTo(0))
Expect(LogLevelError).To(BeEquivalentTo(1))
Expect(LogLevelInfo).To(BeEquivalentTo(2))
Expect(LogLevelDebug).To(BeEquivalentTo(3))
})
It("log level nothing", func() {
DefaultLogger.SetLogLevel(LogLevelNothing)
DefaultLogger.Debugf("debug")
DefaultLogger.Infof("info")
DefaultLogger.Errorf("err")
Expect(b.String()).To(BeEmpty())
})
It("log level err", func() {
DefaultLogger.SetLogLevel(LogLevelError)
DefaultLogger.Debugf("debug")
DefaultLogger.Infof("info")
DefaultLogger.Errorf("err")
Expect(b.String()).To(ContainSubstring("err\n"))
Expect(b.String()).ToNot(ContainSubstring("info"))
Expect(b.String()).ToNot(ContainSubstring("debug"))
})
It("log level info", func() {
DefaultLogger.SetLogLevel(LogLevelInfo)
DefaultLogger.Debugf("debug")
DefaultLogger.Infof("info")
DefaultLogger.Errorf("err")
Expect(b.String()).To(ContainSubstring("err\n"))
Expect(b.String()).To(ContainSubstring("info\n"))
Expect(b.String()).ToNot(ContainSubstring("debug"))
})
It("log level debug", func() {
DefaultLogger.SetLogLevel(LogLevelDebug)
DefaultLogger.Debugf("debug")
DefaultLogger.Infof("info")
DefaultLogger.Errorf("err")
Expect(b.String()).To(ContainSubstring("err\n"))
Expect(b.String()).To(ContainSubstring("info\n"))
Expect(b.String()).To(ContainSubstring("debug\n"))
})
It("doesn't add a timestamp if the time format is empty", func() {
DefaultLogger.SetLogLevel(LogLevelDebug)
DefaultLogger.SetLogTimeFormat("")
DefaultLogger.Debugf("debug")
Expect(b.String()).To(Equal("debug\n"))
})
It("adds a timestamp", func() {
format := "Jan 2, 2006"
DefaultLogger.SetLogTimeFormat(format)
DefaultLogger.SetLogLevel(LogLevelInfo)
DefaultLogger.Infof("info")
t, err := time.Parse(format, b.String()[:b.Len()-6])
Expect(err).ToNot(HaveOccurred())
Expect(t).To(BeTemporally("~", time.Now(), 48*time.Hour))
})
It("says whether debug is enabled", func() {
Expect(DefaultLogger.Debug()).To(BeFalse())
DefaultLogger.SetLogLevel(LogLevelDebug)
Expect(DefaultLogger.Debug()).To(BeTrue())
})
It("adds a prefix", func() {
DefaultLogger.SetLogLevel(LogLevelDebug)
prefixLogger := DefaultLogger.WithPrefix("prefix")
prefixLogger.Debugf("debug")
Expect(b.String()).To(ContainSubstring("prefix"))
Expect(b.String()).To(ContainSubstring("debug"))
})
It("adds multiple prefixes", func() {
DefaultLogger.SetLogLevel(LogLevelDebug)
prefixLogger := DefaultLogger.WithPrefix("prefix1")
prefixPrefixLogger := prefixLogger.WithPrefix("prefix2")
prefixPrefixLogger.Debugf("debug")
Expect(b.String()).To(ContainSubstring("prefix"))
Expect(b.String()).To(ContainSubstring("debug"))
})
Context("reading from env", func() {
BeforeEach(func() {
Expect(DefaultLogger.(*defaultLogger).logLevel).To(Equal(LogLevelNothing))
})
It("reads DEBUG", func() {
os.Setenv(logEnv, "DEBUG")
Expect(readLoggingEnv()).To(Equal(LogLevelDebug))
})
It("reads debug", func() {
os.Setenv(logEnv, "debug")
Expect(readLoggingEnv()).To(Equal(LogLevelDebug))
})
It("reads INFO", func() {
os.Setenv(logEnv, "INFO")
readLoggingEnv()
Expect(readLoggingEnv()).To(Equal(LogLevelInfo))
})
It("reads ERROR", func() {
os.Setenv(logEnv, "ERROR")
Expect(readLoggingEnv()).To(Equal(LogLevelError))
})
It("does not error reading invalid log levels from env", func() {
os.Setenv(logEnv, "")
Expect(readLoggingEnv()).To(Equal(LogLevelNothing))
os.Setenv(logEnv, "asdf")
Expect(readLoggingEnv()).To(Equal(LogLevelNothing))
})
})
})