Files
ragflow/test/unit_test/common/test_settings_queue.py
Jack f0cb7a544b 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>
2026-05-27 21:54:17 +08:00

209 lines
7.5 KiB
Python

#
# 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