Fix release notes
[ric-plt/e2mgr.git] / E2Manager / logger / logger_test.go
1 //
2 // Copyright 2019 AT&T Intellectual Property
3 // Copyright 2019 Nokia
4 //
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //      http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16
17 //  This source code is part of the near-RT RIC (RAN Intelligent Controller)
18 //  platform project (RICP).
19
20
21 package logger
22
23 import (
24         "bytes"
25         "github.com/stretchr/testify/assert"
26         "go.uber.org/zap"
27         "go.uber.org/zap/zapcore"
28         "io"
29         "os"
30         "testing"
31 )
32
33 func TestInitDebugLoggerSuccess(t *testing.T) {
34         log, err := InitLogger(DebugLevel)
35         assert.Nil(t, err)
36         assert.NotNil(t, log)
37         assert.True(t, log.Logger.Core().Enabled(zap.DebugLevel))
38 }
39
40 func TestInitInfoLoggerSuccess(t *testing.T) {
41         log, err := InitLogger(InfoLevel)
42         assert.Nil(t, err)
43         assert.NotNil(t, log)
44         assert.True(t, log.Logger.Core().Enabled(zap.InfoLevel))
45 }
46
47 func TestInitInfoLoggerFailure(t *testing.T) {
48         log, err := InitLogger(99)
49         assert.NotNil(t, err)
50         assert.Nil(t, log)
51 }
52
53 func TestSyncSuccess(t *testing.T){
54         logFile, err := os.Create("./loggerTest.txt")
55         if err != nil{
56                 t.Errorf("logger_test.TestSyncSuccess - failed to create file, error: %s", err)
57         }
58         old := os.Stdout
59         os.Stdout = logFile
60         log, err := InitLogger(DebugLevel)
61         if err != nil {
62                 t.Errorf("logger_test.TestSyncSuccess - failed to initialize logger, error: %s", err)
63         }
64         err = log.Sync()
65         assert.Nil(t, err)
66         
67         os.Stdout = old
68         logFile, err = os.Open("./loggerTest.txt")
69         if err != nil{
70                 t.Errorf("logger_test.TestSyncSuccess - failed to open file, error: %s", err)
71         }
72         var buf bytes.Buffer
73         _, err = io.Copy(&buf, logFile)
74         if err != nil {
75                 t.Errorf("logger_test.TestSyncSuccess - failed to copy bytes, error: %s", err)
76         }
77         debugRecord,_ :=buf.ReadString('\n')
78         errorRecord,_ :=buf.ReadString('\n')
79
80         assert.NotEmpty(t, debugRecord)
81         assert.Empty(t, errorRecord)
82         err = os.Remove("./loggerTest.txt")
83         if err != nil {
84                 t.Errorf("logger_test.TestSyncSuccess - failed to remove file, error: %s", err)
85         }
86
87 }
88
89 func TestSyncFailure(t *testing.T){
90         log, err := InitLogger(DebugLevel)
91         err = log.Sync()
92         assert.NotNil(t, err)
93 }
94
95 func TestDebugEnabledFalse(t *testing.T){
96         entryNum, log := countRecords(InfoLevel, t)
97         assert.False(t, log.DebugEnabled())
98         assert.Equal(t,3, entryNum)
99 }
100
101 func TestDebugEnabledTrue(t *testing.T){
102         entryNum, log := countRecords(DebugLevel, t)
103         assert.True(t, log.DebugEnabled())
104         assert.Equal(t,4, entryNum)
105 }
106
107 func TestDPanicfDebugLevel(t *testing.T){
108         assert.True(t,validateRecordExists(DebugLevel, zap.DPanicLevel, t))
109 }
110
111 func TestDPanicfInfoLevel(t *testing.T){
112         assert.True(t,validateRecordExists(InfoLevel, zap.DPanicLevel, t))
113 }
114
115 func TestErrorfDebugLevel(t *testing.T)  {
116         assert.True(t,validateRecordExists(DebugLevel, zap.ErrorLevel, t))
117 }
118
119 func TestErrorfInfoLevel(t *testing.T)  {
120         assert.True(t,validateRecordExists(InfoLevel, zap.ErrorLevel, t))
121 }
122
123 func TestInfofDebugLevel(t *testing.T)  {
124         assert.True(t,validateRecordExists(DebugLevel, zap.InfoLevel, t))
125 }
126
127 func TestInfofInfoLevel(t *testing.T)  {
128         assert.True(t,validateRecordExists(InfoLevel, zap.InfoLevel, t))
129 }
130
131 func TestDebugfDebugLevel(t *testing.T)  {
132         assert.True(t,validateRecordExists(DebugLevel, zap.DebugLevel, t))
133 }
134
135 func TestDebugfInfoLevel(t *testing.T)  {
136         assert.False(t,validateRecordExists(InfoLevel, zap.DebugLevel, t))
137 }
138
139 func TestInfofFatalLevel(t *testing.T)  {
140         assert.False(t,validateRecordExists(FatalLevel, zap.InfoLevel, t))
141 }
142
143 func TestDebugfFatalLevel(t *testing.T)  {
144         assert.False(t,validateRecordExists(FatalLevel, zap.DebugLevel, t))
145 }
146
147 func TestLogLevelTokenToLevel(t *testing.T) {
148         level, ok := LogLevelTokenToLevel("deBug")
149         assert.True(t, ok)
150         assert.True(t, level == DebugLevel)
151
152         level, ok = LogLevelTokenToLevel("infO")
153         assert.True(t, ok)
154         assert.True(t, level == InfoLevel)
155
156         level, ok = LogLevelTokenToLevel("Warn")
157         assert.True(t, ok)
158         assert.True(t, level == WarnLevel)
159
160         level, ok = LogLevelTokenToLevel("eRror")
161         assert.True(t, ok)
162         assert.True(t, level == ErrorLevel)
163
164         level, ok = LogLevelTokenToLevel("Dpanic ")
165         assert.True(t, ok)
166         assert.True(t, level == DPanicLevel)
167
168         level, ok = LogLevelTokenToLevel("    panic ")
169         assert.True(t, ok)
170         assert.True(t, level == PanicLevel)
171
172         level, ok = LogLevelTokenToLevel("fatal")
173         assert.True(t, ok)
174         assert.True(t, level == FatalLevel)
175
176         level, ok = LogLevelTokenToLevel("zzz")
177         assert.False(t, ok)
178         assert.True(t, level > FatalLevel)
179
180 }
181 func countRecords(logLevel LogLevel, t *testing.T) (int, *Logger){
182         old := os.Stdout
183         r, w, _ :=os.Pipe()
184         os.Stdout = w
185         log, err := InitLogger(logLevel)
186         if err != nil {
187                 t.Errorf("logger_test.TestSyncFailure - failed to initialize logger, error: %s", err)
188         }
189         log.Infof("%v, %v, %v", 1, "abc", 0.1)
190         log.Debugf("%v, %v, %v", 1, "abc", 0.1)
191         log.Errorf("%v, %v, %v", 1, "abc", 0.1)
192         log.DPanicf("%v, %v, %v", 1, "abc", 0.1)
193         err = w.Close()
194         if err != nil {
195                 t.Errorf("logger_test.TestSyncFailure - failed to close writer, error: %s", err)
196         }
197         os.Stdout = old
198         var buf bytes.Buffer
199         _, err = io.Copy(&buf, r)
200         if err != nil {
201                 t.Errorf("logger_test.TestSyncFailure - failed to copy bytes, error: %s", err)
202         }
203         entryNum := 0
204         s,_:= buf.ReadString('\n')
205         for len(s) > 0{
206                 entryNum +=1
207                 s,_= buf.ReadString('\n')
208         }
209         return entryNum, log
210 }
211
212 func validateRecordExists(logLevel LogLevel, recordLevel zapcore.Level, t *testing.T) bool {
213         old := os.Stdout
214         r, w, _ :=os.Pipe()
215         os.Stdout = w
216         log, err := InitLogger(logLevel)
217         if err != nil {
218                 t.Errorf("logger_test.TestSyncFailure - failed to initialize logger, error: %s", err)
219         }
220         switch recordLevel{
221                 case  zap.DebugLevel:
222                         log.Debugf("%v, %v, %v", 1, "abc", 0.1)
223                 case zap.InfoLevel:
224                         log.Infof("%v, %v, %v", 1, "abc", 0.1)
225                 case zap.ErrorLevel:
226                         log.Errorf("%v, %v, %v", 1, "abc", 0.1)
227                 case zap.DPanicLevel:
228                         log.DPanicf("%v, %v, %v", 1, "abc", 0.1)
229         }
230         err = w.Close()
231         if err != nil {
232                 t.Errorf("logger_test.TestSyncFailure - failed to close writer, error: %s", err)
233         }
234         os.Stdout = old
235         var buf bytes.Buffer
236         _, err = io.Copy(&buf, r)
237         if err != nil {
238                 t.Errorf("logger_test.TestSyncFailure - failed to copy bytes, error: %s", err)
239         }
240         entryNum := 0
241         s,_:= buf.ReadString('\n')
242         for len(s) > 0{
243                 entryNum +=1
244                 s,_= buf.ReadString('\n')
245         }
246         return entryNum == 1
247 }