1+ #
2+ # Licensed under the Apache License, Version 2.0 (the "License");
3+ # you may not use this file except in compliance with the License.
4+ # You may obtain a copy of the License at
5+ #
6+ # http://www.apache.org/licenses/LICENSE-2.0
7+ #
8+ # Unless required by applicable law or agreed to in writing, software
9+ # distributed under the License is distributed on an "AS IS" BASIS,
10+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11+ # See the License for the specific language governing permissions and
12+ # limitations under the License.
13+ # This file is a part of the vllm-ascend project.
14+ # Adapted from vllm/tests/lora/test_layers.py
15+
16+
17+ from unittest .mock import patch
18+ import os
19+
20+ from tests .ut .base import TestBase
21+ from vllm_ascend .envs import env_variables
22+
23+
24+ class TestEnvVariables (TestBase ):
25+ """验证 env_variables 中所有环境变量的解析逻辑"""
26+
27+ # 与 env_variables 完全匹配的默认值映射
28+ _default_values = {
29+ "MAX_JOBS" : None ,
30+ "CMAKE_BUILD_TYPE" : None ,
31+ "COMPILE_CUSTOM_KERNELS" : True ,
32+ "CXX_COMPILER" : None ,
33+ "C_COMPILER" : None ,
34+ "SOC_VERSION" : "ASCEND910B1" ,
35+ "VERBOSE" : False ,
36+ "ASCEND_HOME_PATH" : None ,
37+ "HCCN_PATH" : "/usr/local/Ascend/driver/tools/hccn_tool" ,
38+ "HCCL_SO_PATH" : None ,
39+ "PROMPT_DEVICE_ID" : None ,
40+ "DECODE_DEVICE_ID" : None ,
41+ "LLMDATADIST_COMM_PORT" : "26000" ,
42+ "LLMDATADIST_SYNC_CACHE_WAIT_TIME" : "5000" ,
43+ "VLLM_VERSION" : None ,
44+ "VLLM_ASCEND_TRACE_RECOMPILES" : False ,
45+ "VLLM_ENABLE_FUSED_EXPERTS_ALLGATHER_EP" : False ,
46+ "VLLM_ASCEND_ENABLE_DBO" : False ,
47+ "VLLM_ASCEND_MODEL_EXECUTE_TIME_OBSERVE" : False ,
48+ "MOE_ALL2ALL_BUFFER" : False ,
49+ "USE_OPTIMIZED_MODEL" : True ,
50+ "SELECT_GATING_TOPK_SOTFMAX_EXPERTS" : False ,
51+ "VLLM_ASCEND_KV_CACHE_MEGABYTES_FLOATING_TOLERANCE" : 64 ,
52+ "VLLM_ASCEND_ENABLE_TOPK_TOPP_OPTIMIZATION" : False ,
53+ "DISAGGREGATED_PREFILL_RANK_TABLE_PATH" : None ,
54+ "VLLM_ASCEND_LLMDD_RPC_IP" : "0.0.0.0" ,
55+ "VLLM_LLMDD_RPC_PORT" : 5557 ,
56+ "VLLM_ASCEND_MLA_PA" : False ,
57+ "VLLM_ASCEND_ENABLE_MATMUL_ALLREDUCE" : False
58+ }
59+
60+ # 与 env_variables 完全匹配的测试值映射
61+ _test_values = {
62+ "MAX_JOBS" : ("8" , "8" ),
63+ "CMAKE_BUILD_TYPE" : ("Debug" , "Debug" ),
64+ "COMPILE_CUSTOM_KERNELS" : ("0" , False ),
65+ "CXX_COMPILER" : ("/usr/bin/g++" , "/usr/bin/g++" ),
66+ "C_COMPILER" : ("/usr/bin/gcc" , "/usr/bin/gcc" ),
67+ "SOC_VERSION" : ("ASCEND910A" , "ASCEND910A" ),
68+ "VERBOSE" : ("1" , True ),
69+ "ASCEND_HOME_PATH" : ("/opt/ascend" , "/opt/ascend" ),
70+ "HCCN_PATH" : ("/custom/hccn_tool" , "/custom/hccn_tool" ),
71+ "HCCL_SO_PATH" : ("libhccl_custom.so" , "libhccl_custom.so" ),
72+ "PROMPT_DEVICE_ID" : ("1" , "1" ),
73+ "DECODE_DEVICE_ID" : ("2" , "2" ),
74+ "LLMDATADIST_COMM_PORT" : ("27000" , "27000" ),
75+ "LLMDATADIST_SYNC_CACHE_WAIT_TIME" : ("6000" , "6000" ),
76+ "VLLM_VERSION" : ("0.9.1" , "0.9.1" ),
77+ "VLLM_ASCEND_TRACE_RECOMPILES" : ("1" , True ),
78+ "VLLM_ENABLE_FUSED_EXPERTS_ALLGATHER_EP" : ("1" , True ),
79+ "VLLM_ASCEND_ENABLE_DBO" : ("1" , True ),
80+ "VLLM_ASCEND_MODEL_EXECUTE_TIME_OBSERVE" : ("1" , True ),
81+ "MOE_ALL2ALL_BUFFER" : ("1" , True ),
82+ "USE_OPTIMIZED_MODEL" : ("0" , False ),
83+ "SELECT_GATING_TOPK_SOTFMAX_EXPERTS" : ("1" , True ),
84+ "VLLM_ASCEND_KV_CACHE_MEGABYTES_FLOATING_TOLERANCE" : ("128" , 128 ),
85+ "VLLM_ASCEND_ENABLE_TOPK_TOPP_OPTIMIZATION" : ("1" , True ),
86+ "DISAGGREGATED_PREFILL_RANK_TABLE_PATH" : ("/path/to/rank_table.json" , "/path/to/rank_table.json" ),
87+ "VLLM_ASCEND_LLMDD_RPC_IP" : ("192.168.1.1" , "192.168.1.1" ),
88+ "VLLM_LLMDD_RPC_PORT" : ("5558" , 5558 ),
89+ "VLLM_ASCEND_MLA_PA" : ("1" , True ),
90+ "VLLM_ASCEND_ENABLE_MATMUL_ALLREDUCE" : ("1" , True )
91+ }
92+
93+ def setUp (self ):
94+ env_keys = set (env_variables .keys ())
95+ # 检查默认值是否覆盖所有变量
96+ self .assertEqual (
97+ env_keys , set (self ._default_values .keys ()),
98+ "错误:_default_values 未覆盖所有环境变量,请检查是否有遗漏或多余的键"
99+ )
100+ # 检查测试值是否覆盖所有变量
101+ self .assertEqual (
102+ env_keys , set (self ._test_values .keys ()),
103+ "错误:_test_values 未覆盖所有环境变量,请检查是否有遗漏或多余的键"
104+ )
105+
106+ def test_default_values (self ):
107+ """测试所有环境变量未设置时的默认值"""
108+ for var_name , getter in env_variables .items ():
109+ with self .subTest (var_name = var_name ):
110+ with patch .dict (os .environ , {}, clear = True ): # 清空环境变量
111+ actual = getter ()
112+ expected = self ._default_values [var_name ]
113+ self .assertEqual (
114+ actual , expected ,
115+ f"{ var_name } 默认值错误:预期 { expected } ,实际 { actual } "
116+ )
117+
118+ def test_set_values (self ):
119+ """测试所有环境变量设置后的解析结果"""
120+ for var_name , getter in env_variables .items ():
121+ with self .subTest (var_name = var_name ):
122+ input_val , expected = self ._test_values [var_name ]
123+ with patch .dict (os .environ , {var_name : input_val }): # 设置环境变量
124+ actual = getter ()
125+ self .assertEqual (
126+ actual , expected ,
127+ f"{ var_name } 解析错误:输入 { input_val } ,预期 { expected } ,实际 { actual } "
128+ )
0 commit comments