2c8eaf1039024bc9e70bd70edfb7892e90cec311
[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
18 package logger
19
20 import (
21         "bytes"
22         "github.com/stretchr/testify/assert"
23         "go.uber.org/zap"
24         "go.uber.org/zap/zapcore"
25         "io"
26         "os"
27         "testing"
28 )
29
30 func TestInitDebugLoggerSuccess(t *testing.T) {
31         log, err := InitLogger(DebugLevel)
32         assert.Nil(t, err)
33         assert.NotNil(t, log)
34         assert.True(t, log.Logger.Core().Enabled(zap.DebugLevel))
35 }
36
37 func TestInitInfoLoggerSuccess(t *testing.T) {
38         log, err := InitLogger(InfoLevel)
39         assert.Nil(t, err)
40         assert.NotNil(t, log)
41         assert.True(t, log.Logger.Core().Enabled(zap.InfoLevel))
42 }
43
44 func TestInitInfoLoggerFailure(t *testing.T) {
45         log, err := InitLogger(99)
46         assert.NotNil(t, err)
47         assert.Nil(t, log)
48 }
49
50 func TestSyncSuccess(t *testing.T){
51         logFile, err := os.Create("./loggerTest.txt")
52         if err != nil{
53                 t.Errorf("logger_test.TestSyncSuccess - failed to create file, error: %s", err)
54         }
55         old := os.Stdout
56         os.Stdout = logFile
57         log, err := InitLogger(DebugLevel)
58         if err != nil {
59                 t.Errorf("logger_test.TestSyncSuccess - failed to initialize logger, error: %s", err)
60         }
61         err = log.Sync()
62         assert.Nil(t, err)
63         
64         os.Stdout = old
65         logFile, err = os.Open("./loggerTest.txt")
66         if err != nil{
67                 t.Errorf("logger_test.TestSyncSuccess - failed to open file, error: %s", err)
68         }
69         var buf bytes.Buffer
70         _, err = io.Copy(&buf, logFile)
71         if err != nil {
72                 t.Errorf("logger_test.TestSyncSuccess - failed to copy bytes, error: %s", err)
73         }
74         debugRecord,_ :=buf.ReadString('\n')
75         errorRecord,_ :=buf.ReadString('\n')
76
77         assert.NotEmpty(t, debugRecord)
78         assert.Empty(t, errorRecord)
79         err = os.Remove("./loggerTest.txt")
80         if err != nil {
81                 t.Errorf("logger_test.TestSyncSuccess - failed to remove file, error: %s", err)
82         }
83
84 }
85
86 func TestSyncFailure(t *testing.T){
87         log, err := InitLogger(DebugLevel)
88         err = log.Sync()
89         assert.NotNil(t, err)
90 }
91
92 func TestDebugEnabledFalse(t *testing.T){
93         entryNum, log := countRecords(InfoLevel, t)
94         assert.False(t, log.DebugEnabled())
95         assert.Equal(t,3, entryNum)
96 }
97
98 func TestDebugEnabledTrue(t *testing.T){
99         entryNum, log := countRecords(DebugLevel, t)
100         assert.True(t, log.DebugEnabled())
101         assert.Equal(t,4, entryNum)
102 }
103
104 func TestDPanicfDebugLevel(t *testing.T){
105         assert.True(t,validateRecordExists(DebugLevel, zap.DPanicLevel, t))
106 }
107
108 func TestDPanicfInfoLevel(t *testing.T){
109         assert.True(t,validateRecordExists(InfoLevel, zap.DPanicLevel, t))
110 }
111
112 func TestErrorfDebugLevel(t *testing.T)  {
113         assert.True(t,validateRecordExists(DebugLevel, zap.ErrorLevel, t))
114 }
115
116 func TestErrorfInfoLevel(t *testing.T)  {
117         assert.True(t,validateRecordExists(InfoLevel, zap.ErrorLevel, t))
118 }
119
120 func TestInfofDebugLevel(t *testing.T)  {
121         assert.True(t,validateRecordExists(DebugLevel, zap.InfoLevel, t))
122 }
123
124 func TestInfofInfoLevel(t *testing.T)  {
125         assert.True(t,validateRecordExists(InfoLevel, zap.InfoLevel, t))
126 }
127
128 func TestDebugfDebugLevel(t *testing.T)  {
129         assert.True(t,validateRecordExists(DebugLevel, zap.DebugLevel, t))
130 }
131
132 func TestDebugfInfoLevel(t *testing.T)  {
133         assert.False(t,validateRecordExists(InfoLevel, zap.DebugLevel, t))
134 }
135
136 func TestInfofFatalLevel(t *testing.T)  {
137         assert.False(t,validateRecordExists(FatalLevel, zap.InfoLevel, t))
138 }
139
140 func TestDebugfFatalLevel(t *testing.T)  {
141         assert.False(t,validateRecordExists(FatalLevel, zap.DebugLevel, t))
142 }
143
144 func TestLogLevelTokenToLevel(t *testing.T) {
145         level, ok := LogLevelTokenToLevel("deBug")
146         assert.True(t, ok)
147         assert.True(t, level == DebugLevel)
148
149         level, ok = LogLevelTokenToLevel("infO")
150         assert.True(t, ok)
151         assert.True(t, level == InfoLevel)
152
153         level, ok = LogLevelTokenToLevel("Warn")
154         assert.True(t, ok)
155         assert.True(t, level == WarnLevel)
156
157         level, ok = LogLevelTokenToLevel("eRror")
158         assert.True(t, ok)
159         assert.True(t, level == ErrorLevel)
160
161         level, ok = LogLevelTokenToLevel("Dpanic ")
162         assert.True(t, ok)
163         assert.True(t, level == DPanicLevel)
164
165         level, ok = LogLevelTokenToLevel("    panic ")
166         assert.True(t, ok)
167         assert.True(t, level == PanicLevel)
168
169         level, ok = LogLevelTokenToLevel("fatal")
170         assert.True(t, ok)
171         assert.True(t, level == FatalLevel)
172
173         level, ok = LogLevelTokenToLevel("zzz")
174         assert.False(t, ok)
175         assert.True(t, level > FatalLevel)
176
177 }
178 func countRecords(logLevel LogLevel, t *testing.T) (int, *Logger){
179         old := os.Stdout
180         r, w, _ :=os.Pipe()
181         os.Stdout = w
182         log, err := InitLogger(logLevel)
183         if err != nil {
184                 t.Errorf("logger_test.TestSyncFailure - failed to initialize logger, error: %s", err)
185         }
186         log.Infof("%v, %v, %v", 1, "abc", 0.1)
187         log.Debugf("%v, %v, %v", 1, "abc", 0.1)
188         log.Errorf("%v, %v, %v", 1, "abc", 0.1)
189         log.DPanicf("%v, %v, %v", 1, "abc", 0.1)
190         err = w.Close()
191         if err != nil {
192                 t.Errorf("logger_test.TestSyncFailure - failed to close writer, error: %s", err)
193         }
194         os.Stdout = old
195         var buf bytes.Buffer
196         _, err = io.Copy(&buf, r)
197         if err != nil {
198                 t.Errorf("logger_test.TestSyncFailure - failed to copy bytes, error: %s", err)
199         }
200         entryNum := 0
201         s,_:= buf.ReadString('\n')
202         for len(s) > 0{
203                 entryNum +=1
204                 s,_= buf.ReadString('\n')
205         }
206         return entryNum, log
207 }
208
209 func validateRecordExists(logLevel LogLevel, recordLevel zapcore.Level, t *testing.T) bool {
210         old := os.Stdout
211         r, w, _ :=os.Pipe()
212         os.Stdout = w
213         log, err := InitLogger(logLevel)
214         if err != nil {
215                 t.Errorf("logger_test.TestSyncFailure - failed to initialize logger, error: %s", err)
216         }
217         switch recordLevel{
218                 case  zap.DebugLevel:
219                         log.Debugf("%v, %v, %v", 1, "abc", 0.1)
220                 case zap.InfoLevel:
221                         log.Infof("%v, %v, %v", 1, "abc", 0.1)
222                 case zap.ErrorLevel:
223                         log.Errorf("%v, %v, %v", 1, "abc", 0.1)
224                 case zap.DPanicLevel:
225                         log.DPanicf("%v, %v, %v", 1, "abc", 0.1)
226         }
227         err = w.Close()
228         if err != nil {
229                 t.Errorf("logger_test.TestSyncFailure - failed to close writer, error: %s", err)
230         }
231         os.Stdout = old
232         var buf bytes.Buffer
233         _, err = io.Copy(&buf, r)
234         if err != nil {
235                 t.Errorf("logger_test.TestSyncFailure - failed to copy bytes, error: %s", err)
236         }
237         entryNum := 0
238         s,_:= buf.ReadString('\n')
239         for len(s) > 0{
240                 entryNum +=1
241                 s,_= buf.ReadString('\n')
242         }
243         return entryNum == 1
244 }