293 lines
7.7 KiB
Go
293 lines
7.7 KiB
Go
|
//
|
||
|
// Copyright 2019 AT&T Intellectual Property
|
||
|
// Copyright 2019 Nokia
|
||
|
//
|
||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
// you may not use this file except in compliance with the License.
|
||
|
// You may obtain a copy of the License at
|
||
|
//
|
||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||
|
//
|
||
|
// Unless required by applicable law or agreed to in writing, software
|
||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
// See the License for the specific language governing permissions and
|
||
|
// limitations under the License.
|
||
|
|
||
|
// This source code is part of the near-RT RIC (RAN Intelligent Controller)
|
||
|
// platform project (RICP).
|
||
|
|
||
|
|
||
|
package logger
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
"go.uber.org/zap"
|
||
|
"go.uber.org/zap/zapcore"
|
||
|
"io"
|
||
|
"os"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestInitDebugLoggerSuccess(t *testing.T) {
|
||
|
log, err := InitLogger(DebugLevel)
|
||
|
assert.Nil(t, err)
|
||
|
assert.NotNil(t, log)
|
||
|
assert.True(t, log.Logger.Core().Enabled(zap.DebugLevel))
|
||
|
}
|
||
|
|
||
|
func TestInitInfoLoggerSuccess(t *testing.T) {
|
||
|
log, err := InitLogger(InfoLevel)
|
||
|
assert.Nil(t, err)
|
||
|
assert.NotNil(t, log)
|
||
|
assert.True(t, log.Logger.Core().Enabled(zap.InfoLevel))
|
||
|
}
|
||
|
|
||
|
func TestInitWarnLoggerSuccess(t *testing.T) {
|
||
|
log, err := InitLogger(WarnLevel)
|
||
|
assert.Nil(t, err)
|
||
|
assert.NotNil(t, log)
|
||
|
assert.True(t, log.Logger.Core().Enabled(zap.WarnLevel))
|
||
|
}
|
||
|
|
||
|
func TestInitErrorLoggerSuccess(t *testing.T) {
|
||
|
log, err := InitLogger(ErrorLevel)
|
||
|
assert.Nil(t, err)
|
||
|
assert.NotNil(t, log)
|
||
|
assert.True(t, log.Logger.Core().Enabled(zap.ErrorLevel))
|
||
|
}
|
||
|
|
||
|
func TestInitDPanicLoggerSuccess(t *testing.T) {
|
||
|
log, err := InitLogger(DPanicLevel)
|
||
|
assert.Nil(t, err)
|
||
|
assert.NotNil(t, log)
|
||
|
assert.True(t, log.Logger.Core().Enabled(zap.DPanicLevel))
|
||
|
}
|
||
|
|
||
|
func TestInitPanicLoggerSuccess(t *testing.T) {
|
||
|
log, err := InitLogger(PanicLevel)
|
||
|
assert.Nil(t, err)
|
||
|
assert.NotNil(t, log)
|
||
|
assert.True(t, log.Logger.Core().Enabled(zap.PanicLevel))
|
||
|
}
|
||
|
|
||
|
func TestInitInfoLoggerFailure(t *testing.T) {
|
||
|
log, err := InitLogger(99)
|
||
|
assert.NotNil(t, err)
|
||
|
assert.Nil(t, log)
|
||
|
}
|
||
|
|
||
|
func TestSyncSuccess(t *testing.T){
|
||
|
logFile, err := os.Create("./loggerTest.txt")
|
||
|
if err != nil{
|
||
|
t.Errorf("logger_test.TestSyncSuccess - failed to create file, error: %s", err)
|
||
|
}
|
||
|
old := os.Stdout
|
||
|
os.Stdout = logFile
|
||
|
log, err := InitLogger(DebugLevel)
|
||
|
if err != nil {
|
||
|
t.Errorf("logger_test.TestSyncSuccess - failed to initialize logger, error: %s", err)
|
||
|
}
|
||
|
err = log.Sync()
|
||
|
assert.Nil(t, err)
|
||
|
|
||
|
os.Stdout = old
|
||
|
logFile, err = os.Open("./loggerTest.txt")
|
||
|
if err != nil{
|
||
|
t.Errorf("logger_test.TestSyncSuccess - failed to open file, error: %s", err)
|
||
|
}
|
||
|
var buf bytes.Buffer
|
||
|
_, err = io.Copy(&buf, logFile)
|
||
|
if err != nil {
|
||
|
t.Errorf("logger_test.TestSyncSuccess - failed to copy bytes, error: %s", err)
|
||
|
}
|
||
|
debugRecord,_ :=buf.ReadString('\n')
|
||
|
errorRecord,_ :=buf.ReadString('\n')
|
||
|
|
||
|
assert.NotEmpty(t, debugRecord)
|
||
|
assert.Empty(t, errorRecord)
|
||
|
err = os.Remove("./loggerTest.txt")
|
||
|
if err != nil {
|
||
|
t.Errorf("logger_test.TestSyncSuccess - failed to remove file, error: %s", err)
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
func TestSyncFailure(t *testing.T){
|
||
|
log, err := InitLogger(DebugLevel)
|
||
|
err = log.Sync()
|
||
|
assert.NotNil(t, err)
|
||
|
}
|
||
|
|
||
|
func TestDebugEnabledFalse(t *testing.T){
|
||
|
entryNum, log := countRecords(InfoLevel, t)
|
||
|
assert.False(t, log.DebugEnabled())
|
||
|
assert.Equal(t,3, entryNum)
|
||
|
}
|
||
|
|
||
|
func TestDebugEnabledTrue(t *testing.T){
|
||
|
entryNum, log := countRecords(DebugLevel, t)
|
||
|
assert.True(t, log.DebugEnabled())
|
||
|
assert.Equal(t,4, entryNum)
|
||
|
}
|
||
|
|
||
|
func TestDPanicfDebugLevel(t *testing.T){
|
||
|
assert.True(t,validateRecordExists(DebugLevel, zap.DPanicLevel, t))
|
||
|
}
|
||
|
|
||
|
func TestDPanicfInfoLevel(t *testing.T){
|
||
|
assert.True(t,validateRecordExists(InfoLevel, zap.DPanicLevel, t))
|
||
|
}
|
||
|
|
||
|
func TestErrorfDebugLevel(t *testing.T) {
|
||
|
assert.True(t,validateRecordExists(DebugLevel, zap.ErrorLevel, t))
|
||
|
}
|
||
|
|
||
|
func TestErrorfInfoLevel(t *testing.T) {
|
||
|
assert.True(t,validateRecordExists(InfoLevel, zap.ErrorLevel, t))
|
||
|
}
|
||
|
|
||
|
func TestInfofDebugLevel(t *testing.T) {
|
||
|
assert.True(t,validateRecordExists(DebugLevel, zap.InfoLevel, t))
|
||
|
}
|
||
|
|
||
|
func TestInfofInfoLevel(t *testing.T) {
|
||
|
assert.True(t,validateRecordExists(InfoLevel, zap.InfoLevel, t))
|
||
|
}
|
||
|
|
||
|
func TestDebugfDebugLevel(t *testing.T) {
|
||
|
assert.True(t,validateRecordExists(DebugLevel, zap.DebugLevel, t))
|
||
|
}
|
||
|
|
||
|
func TestDebugfInfoLevel(t *testing.T) {
|
||
|
assert.False(t,validateRecordExists(InfoLevel, zap.DebugLevel, t))
|
||
|
}
|
||
|
|
||
|
func TestInfofFatalLevel(t *testing.T) {
|
||
|
assert.False(t,validateRecordExists(FatalLevel, zap.InfoLevel, t))
|
||
|
}
|
||
|
|
||
|
func TestDebugfFatalLevel(t *testing.T) {
|
||
|
assert.False(t,validateRecordExists(FatalLevel, zap.DebugLevel, t))
|
||
|
}
|
||
|
|
||
|
func TestWarnfWarnLevel(t *testing.T) {
|
||
|
assert.True(t,validateRecordExists(WarnLevel, zap.WarnLevel, t))
|
||
|
}
|
||
|
|
||
|
func TestWarnfDebugLevel(t *testing.T) {
|
||
|
assert.True(t,validateRecordExists(DebugLevel, zap.WarnLevel, t))
|
||
|
}
|
||
|
|
||
|
func TestWarnfInfoLevel(t *testing.T) {
|
||
|
assert.True(t,validateRecordExists(InfoLevel, zap.WarnLevel, t))
|
||
|
}
|
||
|
|
||
|
func TestWarnfFatalLevel(t *testing.T) {
|
||
|
assert.False(t,validateRecordExists(FatalLevel, zap.WarnLevel, t))
|
||
|
}
|
||
|
|
||
|
func TestLogLevelTokenToLevel(t *testing.T) {
|
||
|
level, ok := LogLevelTokenToLevel("deBug")
|
||
|
assert.True(t, ok)
|
||
|
assert.True(t, level == DebugLevel)
|
||
|
|
||
|
level, ok = LogLevelTokenToLevel("infO")
|
||
|
assert.True(t, ok)
|
||
|
assert.True(t, level == InfoLevel)
|
||
|
|
||
|
level, ok = LogLevelTokenToLevel("Warn")
|
||
|
assert.True(t, ok)
|
||
|
assert.True(t, level == WarnLevel)
|
||
|
|
||
|
level, ok = LogLevelTokenToLevel("eRror")
|
||
|
assert.True(t, ok)
|
||
|
assert.True(t, level == ErrorLevel)
|
||
|
|
||
|
level, ok = LogLevelTokenToLevel("Dpanic ")
|
||
|
assert.True(t, ok)
|
||
|
assert.True(t, level == DPanicLevel)
|
||
|
|
||
|
level, ok = LogLevelTokenToLevel(" panic ")
|
||
|
assert.True(t, ok)
|
||
|
assert.True(t, level == PanicLevel)
|
||
|
|
||
|
level, ok = LogLevelTokenToLevel("fatal")
|
||
|
assert.True(t, ok)
|
||
|
assert.True(t, level == FatalLevel)
|
||
|
|
||
|
level, ok = LogLevelTokenToLevel("zzz")
|
||
|
assert.False(t, ok)
|
||
|
assert.True(t, level > FatalLevel)
|
||
|
|
||
|
}
|
||
|
func countRecords(logLevel LogLevel, t *testing.T) (int, *Logger){
|
||
|
old := os.Stdout
|
||
|
r, w, _ :=os.Pipe()
|
||
|
os.Stdout = w
|
||
|
log, err := InitLogger(logLevel)
|
||
|
if err != nil {
|
||
|
t.Errorf("logger_test.TestSyncFailure - failed to initialize logger, error: %s", err)
|
||
|
}
|
||
|
log.Infof("%v, %v, %v", 1, "abc", 0.1)
|
||
|
log.Debugf("%v, %v, %v", 1, "abc", 0.1)
|
||
|
log.Errorf("%v, %v, %v", 1, "abc", 0.1)
|
||
|
log.DPanicf("%v, %v, %v", 1, "abc", 0.1)
|
||
|
err = w.Close()
|
||
|
if err != nil {
|
||
|
t.Errorf("logger_test.TestSyncFailure - failed to close writer, error: %s", err)
|
||
|
}
|
||
|
os.Stdout = old
|
||
|
var buf bytes.Buffer
|
||
|
_, err = io.Copy(&buf, r)
|
||
|
if err != nil {
|
||
|
t.Errorf("logger_test.TestSyncFailure - failed to copy bytes, error: %s", err)
|
||
|
}
|
||
|
entryNum := 0
|
||
|
s,_:= buf.ReadString('\n')
|
||
|
for len(s) > 0{
|
||
|
entryNum +=1
|
||
|
s,_= buf.ReadString('\n')
|
||
|
}
|
||
|
return entryNum, log
|
||
|
}
|
||
|
|
||
|
func validateRecordExists(logLevel LogLevel, recordLevel zapcore.Level, t *testing.T) bool {
|
||
|
old := os.Stdout
|
||
|
r, w, _ :=os.Pipe()
|
||
|
os.Stdout = w
|
||
|
log, err := InitLogger(logLevel)
|
||
|
if err != nil {
|
||
|
t.Errorf("logger_test.TestSyncFailure - failed to initialize logger, error: %s", err)
|
||
|
}
|
||
|
switch recordLevel{
|
||
|
case zap.DebugLevel:
|
||
|
log.Debugf("%v, %v, %v", 1, "abc", 0.1)
|
||
|
case zap.InfoLevel:
|
||
|
log.Infof("%v, %v, %v", 1, "abc", 0.1)
|
||
|
case zap.WarnLevel:
|
||
|
log.Warnf("%v, %v, %v", 1, "abc", 0.1)
|
||
|
case zap.ErrorLevel:
|
||
|
log.Errorf("%v, %v, %v", 1, "abc", 0.1)
|
||
|
case zap.DPanicLevel:
|
||
|
log.DPanicf("%v, %v, %v", 1, "abc", 0.1)
|
||
|
}
|
||
|
err = w.Close()
|
||
|
if err != nil {
|
||
|
t.Errorf("logger_test.TestSyncFailure - failed to close writer, error: %s", err)
|
||
|
}
|
||
|
os.Stdout = old
|
||
|
var buf bytes.Buffer
|
||
|
_, err = io.Copy(&buf, r)
|
||
|
if err != nil {
|
||
|
t.Errorf("logger_test.TestSyncFailure - failed to copy bytes, error: %s", err)
|
||
|
}
|
||
|
entryNum := 0
|
||
|
s,_:= buf.ReadString('\n')
|
||
|
for len(s) > 0{
|
||
|
entryNum +=1
|
||
|
s,_= buf.ReadString('\n')
|
||
|
}
|
||
|
return entryNum == 1
|
||
|
}
|