mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-07-28 19:58:11 +08:00
Refactor: Task Executor (#15154)
### What problem does this PR solve?
1. Break huge function into smaller pieces
2. Add unit test for the smaller pieces function
3. Layer-ed design
a. infra layer - task_context.py, recording_context.py,
write_operation_interceptor.py, ...
b. service layer - *_service.py
c. business layer - task_handler.py
4. Default behavior: use "refactor-ed version" - can switch to original
version by change env variable
### Type of change
- [x] Bug Fix (non-breaking change which fixes an issue)
- [x] Refactoring
- [x] Performance Improvement
---------
Co-authored-by: Liu An <asiro@qq.com>
Co-authored-by: Zhichang Yu <yuzhichang@gmail.com>
This commit is contained in:
208
test/unit_test/common/test_settings_queue.py
Normal file
208
test/unit_test/common/test_settings_queue.py
Normal file
@@ -0,0 +1,208 @@
|
||||
#
|
||||
# Copyright 2025 The InfiniFlow Authors. All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
"""Test cases for get_svr_queue_name and get_svr_queue_names functions in common.settings."""
|
||||
|
||||
from common.settings import get_svr_queue_name, get_svr_queue_names
|
||||
|
||||
|
||||
class TestGetSvrQueueName:
|
||||
"""Test cases for get_svr_queue_name function."""
|
||||
|
||||
def test_default_suffix(self):
|
||||
"""Test that default suffix is 'common'."""
|
||||
|
||||
result = get_svr_queue_name(0)
|
||||
assert result == "te.0.common"
|
||||
|
||||
def test_priority_zero(self):
|
||||
"""Test queue name with priority 0 (low)."""
|
||||
|
||||
result = get_svr_queue_name(0)
|
||||
assert result == "te.0.common"
|
||||
|
||||
def test_priority_one(self):
|
||||
"""Test queue name with priority 1 (high)."""
|
||||
|
||||
result = get_svr_queue_name(1)
|
||||
assert result == "te.1.common"
|
||||
|
||||
def test_explicit_suffix_common(self):
|
||||
"""Test with explicit 'common' suffix."""
|
||||
|
||||
result = get_svr_queue_name(0, "common")
|
||||
assert result == "te.0.common"
|
||||
|
||||
def test_suffix_parameter_ignored(self):
|
||||
"""Test that suffix parameter is currently ignored (hardcoded to 'common').
|
||||
|
||||
Note: The function signature accepts a suffix parameter but currently
|
||||
hardcodes 'common' in the return value. This test documents this behavior.
|
||||
"""
|
||||
|
||||
# Even with different suffix values, result should be the same
|
||||
result_default = get_svr_queue_name(0, "common")
|
||||
result_resume = get_svr_queue_name(0, "resume")
|
||||
result_graphrag = get_svr_queue_name(0, "graphrag")
|
||||
|
||||
# All should return the same value since suffix is hardcoded
|
||||
assert result_default == result_resume == result_graphrag == "te.0.common"
|
||||
|
||||
def test_format_structure(self):
|
||||
"""Test that queue name follows expected format: {SVR_QUEUE_NAME}.{priority}.common."""
|
||||
|
||||
for priority in [0, 1]:
|
||||
result = get_svr_queue_name(priority)
|
||||
parts = result.split(".")
|
||||
assert len(parts) == 3
|
||||
assert parts[0] == "te" # SVR_QUEUE_NAME
|
||||
assert parts[1] == str(priority)
|
||||
assert parts[2] == "common"
|
||||
|
||||
def test_different_priorities_produce_different_results(self):
|
||||
"""Test that different priorities produce different queue names."""
|
||||
|
||||
result_0 = get_svr_queue_name(0)
|
||||
result_1 = get_svr_queue_name(1)
|
||||
|
||||
assert result_0 != result_1
|
||||
assert result_0 == "te.0.common"
|
||||
assert result_1 == "te.1.common"
|
||||
|
||||
def test_with_various_priority_values(self):
|
||||
"""Test with various priority values beyond 0 and 1."""
|
||||
|
||||
# Test with other priority values to ensure format is correct
|
||||
for priority in [2, 5, 10, 100]:
|
||||
result = get_svr_queue_name(priority)
|
||||
expected = f"te.{priority}.common"
|
||||
assert result == expected
|
||||
|
||||
def test_returns_string_type(self):
|
||||
"""Test that function returns a string."""
|
||||
|
||||
result = get_svr_queue_name(0)
|
||||
assert isinstance(result, str)
|
||||
|
||||
def test_no_whitespace_issues(self):
|
||||
"""Test that queue name has no unexpected whitespace."""
|
||||
|
||||
for priority in [0, 1]:
|
||||
result = get_svr_queue_name(priority)
|
||||
assert " " not in result
|
||||
assert "\t" not in result
|
||||
assert "\n" not in result
|
||||
|
||||
|
||||
class TestGetSvrQueueNames:
|
||||
"""Test cases for get_svr_queue_names function."""
|
||||
|
||||
def test_returns_list(self):
|
||||
"""Test that function returns a list."""
|
||||
|
||||
result = get_svr_queue_names("common")
|
||||
assert isinstance(result, list)
|
||||
|
||||
def test_returns_two_queues(self):
|
||||
"""Test that function returns exactly two queue names."""
|
||||
|
||||
result = get_svr_queue_names("common")
|
||||
assert len(result) == 2
|
||||
|
||||
def test_sorted_high_to_low(self):
|
||||
"""Test that queue names are sorted from high priority to low priority."""
|
||||
|
||||
result = get_svr_queue_names("common")
|
||||
assert result[0] == "te.1.common" # High priority first
|
||||
assert result[1] == "te.0.common" # Low priority second
|
||||
|
||||
def test_expected_values(self):
|
||||
"""Test that returned values match expected queue names."""
|
||||
|
||||
result = get_svr_queue_names("common")
|
||||
expected = ["te.1.common", "te.0.common"]
|
||||
assert result == expected
|
||||
|
||||
def test_suffix_parameter_passed_through(self):
|
||||
"""Test that suffix parameter is passed to get_svr_queue_name.
|
||||
|
||||
Note: Since get_svr_queue_name currently hardcodes 'common' as the suffix,
|
||||
different suffix values will still produce the same result.
|
||||
"""
|
||||
|
||||
# All suffixes should produce same result due to hardcoded suffix in get_svr_queue_name
|
||||
result_common = get_svr_queue_names("common")
|
||||
result_resume = get_svr_queue_names("resume")
|
||||
result_graphrag = get_svr_queue_names("graphrag")
|
||||
|
||||
expected = ["te.1.common", "te.0.common"]
|
||||
assert result_common == expected
|
||||
assert result_resume == expected # suffix is currently ignored
|
||||
assert result_graphrag == expected # suffix is currently ignored
|
||||
|
||||
def test_all_elements_are_strings(self):
|
||||
"""Test that all elements in the returned list are strings."""
|
||||
|
||||
result = get_svr_queue_names("common")
|
||||
for item in result:
|
||||
assert isinstance(item, str)
|
||||
|
||||
def test_consistent_results(self):
|
||||
"""Test that multiple calls return consistent results."""
|
||||
|
||||
result1 = get_svr_queue_names("common")
|
||||
result2 = get_svr_queue_names("common")
|
||||
result3 = get_svr_queue_names("common")
|
||||
|
||||
assert result1 == result2 == result3
|
||||
|
||||
def test_with_empty_suffix(self):
|
||||
"""Test with empty string suffix."""
|
||||
|
||||
result = get_svr_queue_names("")
|
||||
# Should still work since suffix is ignored
|
||||
assert result == ["te.1.common", "te.0.common"]
|
||||
|
||||
|
||||
class TestGetSvrQueueNameWithMockedConstant:
|
||||
"""Test cases with mocked SVR_QUEUE_NAME constant."""
|
||||
|
||||
def test_with_custom_queue_name(self):
|
||||
"""Test with a custom SVR_QUEUE_NAME constant."""
|
||||
# Need to patch where the constant is imported in settings module
|
||||
import common.settings as settings_mod
|
||||
|
||||
original_value = settings_mod.SVR_QUEUE_NAME
|
||||
try:
|
||||
settings_mod.SVR_QUEUE_NAME = "custom_queue"
|
||||
result = settings_mod.get_svr_queue_name(0)
|
||||
assert result == "custom_queue.0.common"
|
||||
|
||||
result = settings_mod.get_svr_queue_name(1)
|
||||
assert result == "custom_queue.1.common"
|
||||
finally:
|
||||
settings_mod.SVR_QUEUE_NAME = original_value
|
||||
|
||||
def test_with_custom_queue_names(self):
|
||||
"""Test get_svr_queue_names with a custom SVR_QUEUE_NAME constant."""
|
||||
import common.settings as settings_mod
|
||||
|
||||
original_value = settings_mod.SVR_QUEUE_NAME
|
||||
try:
|
||||
settings_mod.SVR_QUEUE_NAME = "custom_queue"
|
||||
result = settings_mod.get_svr_queue_names("common")
|
||||
assert result == ["custom_queue.1.common", "custom_queue.0.common"]
|
||||
finally:
|
||||
settings_mod.SVR_QUEUE_NAME = original_value
|
||||
Reference in New Issue
Block a user