90 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import json
 | |
| import requests
 | |
| import time
 | |
| 
 | |
| import pytest
 | |
| 
 | |
| from .conftest import API_PREFIX
 | |
| 
 | |
| 
 | |
| LINES_TO_TEST = 10
 | |
| 
 | |
| 
 | |
| @pytest.mark.parametrize(
 | |
|     "log_level, context",
 | |
|     [
 | |
|         # No filtering
 | |
|         (None, None),
 | |
|         # Filter log level
 | |
|         ("info", None),
 | |
|         ("info,debug", None),
 | |
|         # Filter context
 | |
|         (None, "general"),
 | |
|         (None, "general,worker"),
 | |
|         # Filter both
 | |
|         ("info,debug", "general,worker"),
 | |
|     ],
 | |
| )
 | |
| @pytest.mark.timeout(1800)
 | |
| def test_stream_crawl_logs_wacz(
 | |
|     admin_auth_headers,
 | |
|     default_org_id,
 | |
|     large_crawl_id,
 | |
|     large_crawl_finished,
 | |
|     log_level,
 | |
|     context,
 | |
| ):
 | |
|     """Test that streaming logs after crawl concludes from WACZs works."""
 | |
|     api_url = f"{API_PREFIX}/orgs/{default_org_id}/crawls/{large_crawl_id}/logs"
 | |
|     if log_level and context:
 | |
|         api_url = api_url + f"?logLevel={log_level}&context={context}"
 | |
|     elif log_level:
 | |
|         api_url = api_url + f"?logLevel={log_level}"
 | |
|     elif context:
 | |
|         api_url = api_url + f"?context={context}"
 | |
| 
 | |
|     log_levels = []
 | |
|     contexts = []
 | |
|     if log_level:
 | |
|         log_levels = log_level.split(",")
 | |
|     if context:
 | |
|         contexts = context.split(",")
 | |
| 
 | |
|     with requests.get(api_url, headers=admin_auth_headers, stream=True) as r:
 | |
|         assert r.status_code == 200
 | |
| 
 | |
|         last_timestamp = None
 | |
|         line_index = 0
 | |
| 
 | |
|         # Wait for stream content
 | |
|         if not r.content:
 | |
|             while True:
 | |
|                 if r.content:
 | |
|                     break
 | |
|                 time.sleep(5)
 | |
| 
 | |
|         for line in r.iter_lines():
 | |
|             if line_index >= LINES_TO_TEST:
 | |
|                 r.close()
 | |
|                 return
 | |
| 
 | |
|             line = line.decode("utf-8")
 | |
|             log_line_dict = json.loads(line)
 | |
| 
 | |
|             assert log_line_dict["logLevel"]
 | |
|             if log_level:
 | |
|                 assert log_line_dict["logLevel"] in log_levels
 | |
| 
 | |
|             assert log_line_dict["context"]
 | |
|             if context:
 | |
|                 assert log_line_dict["context"] in contexts
 | |
|             assert log_line_dict["details"] or log_line_dict["details"] == {}
 | |
| 
 | |
|             timestamp = log_line_dict["timestamp"]
 | |
|             assert timestamp
 | |
|             if last_timestamp:
 | |
|                 assert timestamp >= last_timestamp
 | |
|             last_timestamp = timestamp
 | |
| 
 | |
|             line_index += 1
 |