Skip to content

Commit 4a5bc5d

Browse files
committed
Work done with tests, and bug patch
1 parent c40facb commit 4a5bc5d

File tree

11 files changed

+510
-14
lines changed

11 files changed

+510
-14
lines changed

.gitignore

+5
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,8 @@
1313

1414
# Dependency directories (remove the comment below to include it)
1515
# vendor/
16+
17+
18+
# Ignore tests cover
19+
cover.html
20+
cover.tmp

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
module github.com/meduvia/godolog
22

3-
go 1.17
3+
go 1.18

log/main.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -60,15 +60,15 @@ func FlagCompareOneMoreThanTwo(one FlagLevel, two FlagLevel) bool {
6060
case FlagVerbose:
6161
return false
6262
case FlagDebug:
63-
return (two != FlagVerbose)
63+
return !(two != FlagVerbose)
6464
case FlagInfo:
65-
return (two != FlagVerbose && two != FlagDebug)
65+
return !(two != FlagVerbose && two != FlagDebug)
6666
case FlagWarn:
67-
return (two != FlagVerbose && two != FlagDebug && two != FlagInfo)
67+
return !(two != FlagVerbose && two != FlagDebug && two != FlagInfo)
6868
case FlagError:
69-
return (two != FlagVerbose && two != FlagDebug && two != FlagInfo && two != FlagWarn)
69+
return !(two != FlagVerbose && two != FlagDebug && two != FlagInfo && two != FlagWarn)
7070
case FlagFatal:
71-
return (two != FlagVerbose && two != FlagDebug && two != FlagInfo && two != FlagWarn && two != FlagError)
71+
return !(two != FlagVerbose && two != FlagDebug && two != FlagInfo && two != FlagWarn && two != FlagError)
7272
case FlagNone:
7373
return true
7474
default:

log/main_test.go

+231
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,231 @@
1+
package log_test
2+
3+
import (
4+
"encoding/json"
5+
"math/rand"
6+
"testing"
7+
8+
"github.com/meduvia/godolog/log"
9+
)
10+
11+
func TestCreateLog(t *testing.T) {
12+
product := "App"
13+
service := "Service"
14+
location := "EU01-D01-R01-N01"
15+
level := log.FlagDebug
16+
code := "OP-R403"
17+
message := "Rest API Error 403"
18+
logobj_create := log.CreateLog(product, service, location, level, code, message)
19+
logobj_test := &log.Log{
20+
Product: product,
21+
Service: service,
22+
Location: location,
23+
Timestamp: logobj_create.Timestamp, // this line is to bypass the error caused by timestamp missmatch
24+
Level: level,
25+
Code: code,
26+
Message: message,
27+
}
28+
if *logobj_create != *logobj_test {
29+
t.Error("Error field attribution")
30+
}
31+
}
32+
33+
func TestLogToJSONString(t *testing.T) {
34+
product := "App"
35+
service := "Service"
36+
location := "EU01-D01-R01-N01"
37+
level := log.FlagDebug
38+
code := "OP-R403"
39+
message := "Rest API Error 403"
40+
logobj_create := log.CreateLog(product, service, location, level, code, message)
41+
logobj_test := &log.Log{
42+
Product: product,
43+
Service: service,
44+
Location: location,
45+
Timestamp: logobj_create.Timestamp, // this line is to bypass the error caused by timestamp missmatch
46+
Level: level,
47+
Code: code,
48+
Message: message,
49+
}
50+
logobj_create_jsonstring, err := logobj_create.ToJSONString()
51+
if err != nil {
52+
t.Error("Error json string func")
53+
}
54+
logobj_test_jsonstring, err := json.Marshal(logobj_test)
55+
if logobj_create_jsonstring != string(logobj_test_jsonstring) {
56+
t.Error("Error field attribution")
57+
}
58+
}
59+
60+
func FuzzLogToJSONString(f *testing.F) {
61+
log_level_avaliable := []log.FlagLevel{log.FlagVerbose, log.FlagDebug, log.FlagWarn, log.FlagError, log.FlagFatal}
62+
product := "App"
63+
service := "Service"
64+
location := "EU01-D01-R01-N01"
65+
level := 10
66+
code := "OP-R403"
67+
message := "Rest API Error 403"
68+
f.Add(product, service, location, level, code, message)
69+
f.Fuzz(func(t *testing.T, product string, service string, location string, level_raw int, code string, message string) {
70+
level := log_level_avaliable[rand.Intn(len(log_level_avaliable))]
71+
logobj_create := log.CreateLog(product, service, location, level, code, message)
72+
logobj_test := &log.Log{
73+
Product: product,
74+
Service: service,
75+
Location: location,
76+
Timestamp: logobj_create.Timestamp, // this line is to bypass the error caused by timestamp missmatch
77+
Level: level,
78+
Code: code,
79+
Message: message,
80+
}
81+
logobj_create_jsonstring, err := logobj_create.ToJSONString()
82+
if err != nil {
83+
f.Error("Error json string func")
84+
}
85+
logobj_test_jsonstring, err := json.Marshal(logobj_test)
86+
if logobj_create_jsonstring != string(logobj_test_jsonstring) {
87+
f.Error("Error field attribution")
88+
}
89+
println(logobj_create_jsonstring)
90+
})
91+
}
92+
93+
func TestFlagCompareOneMoreThanTwo(t *testing.T) {
94+
t.Run("Test Verbose always false", func(t *testing.T) {
95+
one := log.FlagVerbose
96+
tocompare_up := []log.FlagLevel{log.FlagVerbose, log.FlagDebug, log.FlagInfo, log.FlagWarn, log.FlagError, log.FlagFatal}
97+
tocompare_down := []log.FlagLevel{}
98+
// upper or eq flag => log should be displayed
99+
for _, flag := range tocompare_up {
100+
if log.FlagCompareOneMoreThanTwo(one, flag) != false {
101+
t.Fail()
102+
}
103+
}
104+
// down => log should be discarded
105+
for _, flag := range tocompare_down {
106+
if log.FlagCompareOneMoreThanTwo(one, flag) != true {
107+
t.Fail()
108+
}
109+
}
110+
})
111+
t.Run("Test Debug ", func(t *testing.T) {
112+
one := log.FlagDebug
113+
tocompare_up := []log.FlagLevel{log.FlagDebug, log.FlagInfo, log.FlagWarn, log.FlagError, log.FlagFatal}
114+
tocompare_down := []log.FlagLevel{log.FlagVerbose}
115+
// upper or eq flag => log should be displayed
116+
for _, flag := range tocompare_up {
117+
if log.FlagCompareOneMoreThanTwo(one, flag) != false {
118+
t.Fail()
119+
}
120+
}
121+
// down => log should be discarded
122+
for _, flag := range tocompare_down {
123+
if log.FlagCompareOneMoreThanTwo(one, flag) != true {
124+
t.Fail()
125+
}
126+
}
127+
})
128+
t.Run("Test Info", func(t *testing.T) {
129+
one := log.FlagInfo
130+
tocompare_up := []log.FlagLevel{log.FlagInfo, log.FlagWarn, log.FlagError, log.FlagFatal}
131+
tocompare_down := []log.FlagLevel{log.FlagVerbose, log.FlagDebug}
132+
// upper or eq flag => log should be displayed
133+
for _, flag := range tocompare_up {
134+
if log.FlagCompareOneMoreThanTwo(one, flag) != false {
135+
t.Fail()
136+
}
137+
}
138+
// down => log should be discarded
139+
for _, flag := range tocompare_down {
140+
if log.FlagCompareOneMoreThanTwo(one, flag) != true {
141+
t.Fail()
142+
}
143+
}
144+
})
145+
t.Run("Test Warn", func(t *testing.T) {
146+
one := log.FlagWarn
147+
tocompare_up := []log.FlagLevel{log.FlagWarn, log.FlagError, log.FlagFatal}
148+
tocompare_down := []log.FlagLevel{log.FlagVerbose, log.FlagDebug, log.FlagInfo}
149+
// upper or eq flag => log should be displayed
150+
for _, flag := range tocompare_up {
151+
if log.FlagCompareOneMoreThanTwo(one, flag) != false {
152+
t.Fail()
153+
}
154+
}
155+
// down => log should be discarded
156+
for _, flag := range tocompare_down {
157+
if log.FlagCompareOneMoreThanTwo(one, flag) != true {
158+
t.Fail()
159+
}
160+
}
161+
})
162+
t.Run("Test Error", func(t *testing.T) {
163+
one := log.FlagError
164+
tocompare_up := []log.FlagLevel{log.FlagError, log.FlagFatal}
165+
tocompare_down := []log.FlagLevel{log.FlagVerbose, log.FlagDebug, log.FlagInfo, log.FlagWarn}
166+
// upper or eq flag => log should be displayed
167+
for _, flag := range tocompare_up {
168+
if log.FlagCompareOneMoreThanTwo(one, flag) != false {
169+
t.Fail()
170+
}
171+
}
172+
// down => log should be discarded
173+
for _, flag := range tocompare_down {
174+
if log.FlagCompareOneMoreThanTwo(one, flag) != true {
175+
t.Fail()
176+
}
177+
}
178+
})
179+
t.Run("Test Fatal", func(t *testing.T) {
180+
one := log.FlagFatal
181+
tocompare_up := []log.FlagLevel{log.FlagFatal}
182+
tocompare_down := []log.FlagLevel{log.FlagVerbose, log.FlagDebug, log.FlagInfo, log.FlagWarn, log.FlagError}
183+
// upper or eq flag => log should be displayed
184+
for _, flag := range tocompare_up {
185+
if log.FlagCompareOneMoreThanTwo(one, flag) != false {
186+
t.Fail()
187+
}
188+
}
189+
// down => log should be discarded
190+
for _, flag := range tocompare_down {
191+
if log.FlagCompareOneMoreThanTwo(one, flag) != true {
192+
t.Fail()
193+
}
194+
}
195+
})
196+
t.Run("Test None == true", func(t *testing.T) {
197+
one := log.FlagNone
198+
tocompare_up := []log.FlagLevel{}
199+
tocompare_down := []log.FlagLevel{log.FlagVerbose, log.FlagDebug, log.FlagInfo, log.FlagWarn, log.FlagError, log.FlagFatal}
200+
// upper or eq flag => log should be displayed
201+
for _, flag := range tocompare_up {
202+
if log.FlagCompareOneMoreThanTwo(one, flag) != false {
203+
t.Fail()
204+
}
205+
}
206+
// down => log should be discarded
207+
for _, flag := range tocompare_down {
208+
if log.FlagCompareOneMoreThanTwo(one, flag) != true {
209+
t.Fail()
210+
}
211+
}
212+
})
213+
t.Run("Test Default", func(t *testing.T) {
214+
var one log.FlagLevel = "default"
215+
tocompare_up := []log.FlagLevel{log.FlagVerbose, log.FlagDebug, log.FlagInfo, log.FlagWarn, log.FlagError, log.FlagFatal}
216+
tocompare_down := []log.FlagLevel{}
217+
// upper or eq flag => log should be displayed
218+
for _, flag := range tocompare_up {
219+
if log.FlagCompareOneMoreThanTwo(one, flag) != false {
220+
t.Fail()
221+
}
222+
}
223+
// down => log should be discarded
224+
for _, flag := range tocompare_down {
225+
if log.FlagCompareOneMoreThanTwo(one, flag) != true {
226+
t.Fail()
227+
}
228+
}
229+
})
230+
231+
}

loginstance/docs.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
// This package manage the logger instance
2-
package log
2+
package loginstance

loginstance/main.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package log
1+
package loginstance
22

33
import (
44
"github.com/meduvia/godolog/log"
@@ -10,9 +10,9 @@ type LogInstance struct {
1010
level log.FlagLevel
1111
}
1212

13-
func NewLogInstance(logbackend *writer.WriterInstance, level log.FlagLevel) *LogInstance{
13+
func NewLogInstance(logwriter *writer.WriterInstance, level log.FlagLevel) *LogInstance{
1414
return &LogInstance{
15-
writer: logbackend,
15+
writer: logwriter,
1616
level: level,
1717
}
1818
}

loginstance/main_test.go

+78
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package loginstance_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/meduvia/godolog/log"
7+
"github.com/meduvia/godolog/loginstance"
8+
"github.com/meduvia/godolog/writer"
9+
)
10+
11+
type ConsoleWriterBack struct {
12+
logfunc func (string)
13+
}
14+
15+
func (console *ConsoleWriterBack) Debug(message string) {
16+
console.logfunc(message)
17+
}
18+
func (console *ConsoleWriterBack) Info(message string) {
19+
console.logfunc(message)
20+
}
21+
func (console *ConsoleWriterBack) Warn(message string) {
22+
console.logfunc(message)
23+
}
24+
func (console *ConsoleWriterBack) Error(message string) {
25+
console.logfunc(message)
26+
}
27+
28+
func TestLogInstance(t *testing.T) {
29+
var last_log string = "null"
30+
logfunc := func (message string) {
31+
last_log = message
32+
}
33+
var logback writer.ConsoleWriterInterface = &ConsoleWriterBack{
34+
logfunc: logfunc,
35+
}
36+
logwriter := writer.NewConsoleWriter(&logback)
37+
logmgr := loginstance.NewLogInstance(&logwriter, log.FlagVerbose)
38+
39+
product := "App"
40+
service := "Service"
41+
location := "EU01-D01-R01-N01"
42+
level := log.FlagDebug
43+
code := "OP-R403"
44+
message := "Rest API Error 403"
45+
logmgr.Log(product, service, location, level, code, message)
46+
if (last_log == "null") {
47+
t.Fail() // Log was not sended
48+
}
49+
}
50+
51+
52+
func TestLogInstanceLevel(t *testing.T) {
53+
var last_log string = "null"
54+
logfunc := func (message string) {
55+
last_log = message
56+
}
57+
var logback writer.ConsoleWriterInterface = &ConsoleWriterBack{
58+
logfunc: logfunc,
59+
}
60+
logwriter := writer.NewConsoleWriter(&logback)
61+
logmgr := loginstance.NewLogInstance(&logwriter, log.FlagDebug)
62+
63+
product := "App"
64+
service := "Service"
65+
location := "EU01-D01-R01-N01"
66+
code := "OP-R403"
67+
message := "Rest API Error 403"
68+
level_not_pass := log.FlagVerbose
69+
level_pass := log.FlagError
70+
logmgr.Log(product, service, location, level_not_pass, code, message)
71+
if (last_log != "null") {
72+
t.Fail() // log was sended but should be filtered
73+
}
74+
logmgr.Log(product, service, location, level_pass, code, message)
75+
if (last_log == "null") {
76+
t.Fail() // log should be displayed
77+
}
78+
}

makefile

+10
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
11
dev:
22
go run .
33

4+
test:
5+
go test ./...
6+
test_cover:
7+
go test ./... --cover
8+
9+
test_cover_profile:
10+
go test ./... --cover -coverprofile=cover.tmp
11+
go tool cover -html=cover.tmp -o cover.html
12+
13+
.PHONY: dev test test_cover

0 commit comments

Comments
 (0)