test: improve logger test and search functionality
- Improve the logger test to include more specific assertions. - Add timestamp filtering to the logger search function. - Fix a bug in the logger search function that prevented it from correctly handling continuation lines. - Update redisclient tests to use the correct return type. Co-authored-by: mahmmoud.hassanein <mahmmoud.hassanein@gmail.com>
This commit is contained in:
@@ -81,16 +81,25 @@ fn test_logger() {
|
||||
create: false
|
||||
)!
|
||||
|
||||
println('/tmp/testlogs/${files[0]}')
|
||||
|
||||
content := file.read()!.trim_space()
|
||||
|
||||
items := logger.search()!
|
||||
assert items.len == 6 // still wrong: TODO
|
||||
items_stdout := logger.search(
|
||||
timestamp_from: ourtime.new('2022-11-1 20:14:35')!
|
||||
timestamp_to: ourtime.new('2025-11-1 20:14:35')!
|
||||
logtype: .stdout
|
||||
)!
|
||||
assert items_stdout.len == 2
|
||||
|
||||
items_error := logger.search(
|
||||
timestamp_from: ourtime.new('2022-11-1 20:14:35')!
|
||||
timestamp_to: ourtime.new('2025-11-1 20:14:35')!
|
||||
logtype: .error
|
||||
)!
|
||||
assert items_error.len == 4
|
||||
}
|
||||
|
||||
fn testsuite_end() {
|
||||
if os.exists('/tmp/testlogs') {
|
||||
os.rmdir_all('/tmp/testlogs')!
|
||||
}
|
||||
// if os.exists('/tmp/testlogs') {
|
||||
// os.rmdir_all('/tmp/testlogs')!
|
||||
// }
|
||||
}
|
||||
|
||||
@@ -30,7 +30,6 @@ pub fn (mut l Logger) search(args_ SearchArgs) ![]LogItem {
|
||||
// Get time range
|
||||
from_time := timestamp_from.unix()
|
||||
to_time := timestamp_to.unix()
|
||||
|
||||
if from_time > to_time {
|
||||
return error('from_time cannot be after to_time: ${from_time} < ${to_time}')
|
||||
}
|
||||
@@ -82,20 +81,30 @@ pub fn (mut l Logger) search(args_ SearchArgs) ![]LogItem {
|
||||
continue
|
||||
}
|
||||
|
||||
if collecting && line.len > 14 && line[13] == `-` {
|
||||
process(mut result, current_item, current_time, args, from_time, to_time)!
|
||||
collecting = false
|
||||
}
|
||||
|
||||
// Parse log line
|
||||
is_error := line.starts_with('E')
|
||||
if !collecting {
|
||||
// Start new item
|
||||
current_item = LogItem{
|
||||
timestamp: current_time
|
||||
cat: line_trim[2..12].trim_space()
|
||||
log: line_trim[15..].trim_space()
|
||||
cat: line[2..12].trim_space()
|
||||
log: line[15..].trim_space()
|
||||
logtype: if is_error { .error } else { .stdout }
|
||||
}
|
||||
// println('new current item: ${current_item}')
|
||||
collecting = true
|
||||
} else {
|
||||
// Continuation line
|
||||
current_item.log += '\n' + line_trim[15..]
|
||||
if line_trim.len < 16 {
|
||||
current_item.log += '\n'
|
||||
} else {
|
||||
current_item.log += '\n' + line[15..]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ import freeflowuniverse.herolib.core.redisclient
|
||||
fn setup() !&redisclient.Redis {
|
||||
mut redis := redisclient.core_get()!
|
||||
redis.selectdb(10) or { panic(err) }
|
||||
return &redis
|
||||
return redis
|
||||
}
|
||||
|
||||
fn cleanup(mut redis redisclient.Redis) ! {
|
||||
|
||||
@@ -8,7 +8,7 @@ fn setup() !&redisclient.Redis {
|
||||
mut redis := redisclient.core_get()!
|
||||
// Select db 10 to be away from default one '0'
|
||||
redis.selectdb(10) or { panic(err) }
|
||||
return &redis
|
||||
return redis
|
||||
}
|
||||
|
||||
fn cleanup(mut redis redisclient.Redis) ! {
|
||||
|
||||
Reference in New Issue
Block a user