1
+ from resources .constants import USER_DIR
1
2
import re
2
3
from clients .status_backend import StatusBackend
3
4
import pytest
5
+ import os
4
6
5
7
6
8
@pytest .mark .rpc
7
- @pytest .mark .skip ("waiting for status-backend to be executed on the same host/container" )
8
9
class TestLogging :
9
10
10
11
@pytest .mark .init
@@ -20,50 +21,42 @@ def test_logging(self, tmp_path):
20
21
assert backend_client is not None
21
22
22
23
# Init and login
23
- backend_client .init_status_backend (data_dir = str (tmp_path ))
24
- backend_client .create_account_and_login (data_dir = str (tmp_path ))
25
- key_uid = self .ensure_logged_in (backend_client )
24
+ backend_client .init_status_backend ()
25
+ backend_client .create_account_and_login ()
26
26
27
27
# Configure logging
28
- backend_client .rpc_valid_request ("wakuext_setLogLevel" , [{"logLevel" : "ERROR" }])
29
- backend_client .rpc_valid_request (
30
- "wakuext_setLogNamespaces" ,
31
- [{"logNamespaces" : "test1.test2:debug,test1.test2.test3:info" }],
32
- )
28
+ backend_client .api_valid_request ("SetLogLevel" , {"logLevel" : "ERROR" })
29
+ backend_client .api_valid_request ("SetLogNamespaces" , {"logNamespaces" : "test1.test2:debug,test1.test2.test3:info" })
30
+
31
+ log_pattern = [
32
+ r"DEBUG\s+test1\.test2\s+" ,
33
+ r"INFO\s+test1\.test2\s+" ,
34
+ r"INFO\s+test1\.test2\.test3\s+" ,
35
+ r"WARN\s+test1\.test2\s+" ,
36
+ r"WARN\s+test1\.test2\.test3\s+" ,
37
+ r"ERROR\s+test1\s+" ,
38
+ r"ERROR\s+test1\.test2\s+" ,
39
+ r"ERROR\s+test1\.test2\.test3\s+" ,
40
+ ]
33
41
34
- # Re-login (logging settings take effect after re-login)
35
- backend_client .logout ( )
36
- backend_client .login ( str ( key_uid ))
37
- self .ensure_logged_in ( backend_client )
42
+ # Ensure changes take effect at runtime
43
+ backend_client .rpc_valid_request ( "wakuext_logTest" )
44
+ geth_log = backend_client .extract_data ( os . path . join ( USER_DIR , "geth.log" ))
45
+ self .expect_logs ( geth_log , "test message" , log_pattern , count = 1 )
38
46
39
- # Test logging
47
+ # Ensure changes are persisted after re-login
48
+ backend_client .logout ()
49
+ backend_client .login (str (backend_client .find_key_uid ()))
50
+ backend_client .wait_for_login ()
40
51
backend_client .rpc_valid_request ("wakuext_logTest" )
41
- self .expect_logs (
42
- tmp_path / "geth.log" ,
43
- "test message" ,
44
- [
45
- r"DEBUG\s+test1\.test2" ,
46
- r"INFO\s+test1\.test2" ,
47
- r"INFO\s+test1\.test2\.test3" ,
48
- r"WARN\s+test1\.test2" ,
49
- r"WARN\s+test1\.test2\.test3" ,
50
- r"ERROR\s+test1" ,
51
- r"ERROR\s+test1\.test2" ,
52
- r"ERROR\s+test1\.test2\.test3" ,
53
- ],
54
- )
52
+ geth_log = backend_client .extract_data (os .path .join (USER_DIR , "geth.log" ))
53
+ self .expect_logs (geth_log , "test message" , log_pattern , count = 2 )
55
54
56
- def expect_logs (self , log_file , filter_keyword , expected_logs ):
55
+ def expect_logs (self , log_file , filter_keyword , expected_logs , count ):
57
56
with open (log_file , "r" ) as f :
58
57
log_content = f .read ()
59
58
60
59
filtered_logs = [line for line in log_content .splitlines () if filter_keyword in line ]
61
60
for expected_log in expected_logs :
62
- assert any ( re .search (expected_log , log ) for log in filtered_logs ) , f"Log entry not found: { expected_log } "
61
+ assert sum ( 1 for log in filtered_logs if re .search (expected_log , log )) == count , f"Log entry not found or count mismatch : { expected_log } "
63
62
64
- def ensure_logged_in (self , backend_client ):
65
- login_response = backend_client .wait_for_signal ("node.login" )
66
- backend_client .verify_json_schema (login_response , "signal_node_login" )
67
- key_uid = login_response .get ("event" , {}).get ("account" , {}).get ("key-uid" )
68
- assert key_uid is not None , "key-uid not found in login response"
69
- return key_uid
0 commit comments