77from openapi_spec_validator import openapi_v2_spec_validator
88from openapi_spec_validator import openapi_v30_spec_validator
99from openapi_spec_validator import openapi_v32_spec_validator
10+ from openapi_spec_validator import shortcuts as shortcuts_module
1011from openapi_spec_validator import validate
1112from openapi_spec_validator import validate_spec
1213from openapi_spec_validator import validate_spec_url
1314from openapi_spec_validator import validate_url
15+ from openapi_spec_validator .settings import RESOLVED_CACHE_MAXSIZE_DEFAULT
1416from openapi_spec_validator .validation .exceptions import OpenAPIValidationError
1517from openapi_spec_validator .validation .exceptions import ValidatorDetectError
1618
@@ -23,6 +25,56 @@ def test_spec_schema_version_not_detected(self):
2325 validate (spec )
2426
2527
28+ def test_validate_uses_resolved_cache_maxsize_env (monkeypatch ):
29+ captured : dict [str , int ] = {}
30+ original_from_dict = shortcuts_module .SchemaPath .from_dict
31+ spec = {
32+ "openapi" : "3.0.0" ,
33+ "info" : {"title" : "Test API" , "version" : "0.0.1" },
34+ "paths" : {},
35+ }
36+
37+ def fake_from_dict (cls , * args , ** kwargs ):
38+ captured ["resolved_cache_maxsize" ] = kwargs ["resolved_cache_maxsize" ]
39+ return original_from_dict (* args , ** kwargs )
40+
41+ monkeypatch .setenv ("OPENAPI_SPEC_VALIDATOR_RESOLVED_CACHE_MAXSIZE" , "256" )
42+ monkeypatch .setattr (
43+ shortcuts_module .SchemaPath ,
44+ "from_dict" ,
45+ classmethod (fake_from_dict ),
46+ )
47+
48+ validate (spec , cls = OpenAPIV30SpecValidator )
49+
50+ assert captured ["resolved_cache_maxsize" ] == 256
51+
52+
53+ def test_validate_uses_default_resolved_cache_on_invalid_env (monkeypatch ):
54+ captured : dict [str , int ] = {}
55+ original_from_dict = shortcuts_module .SchemaPath .from_dict
56+ spec = {
57+ "openapi" : "3.0.0" ,
58+ "info" : {"title" : "Test API" , "version" : "0.0.1" },
59+ "paths" : {},
60+ }
61+
62+ def fake_from_dict (cls , * args , ** kwargs ):
63+ captured ["resolved_cache_maxsize" ] = kwargs ["resolved_cache_maxsize" ]
64+ return original_from_dict (* args , ** kwargs )
65+
66+ monkeypatch .setenv ("OPENAPI_SPEC_VALIDATOR_RESOLVED_CACHE_MAXSIZE" , "-1" )
67+ monkeypatch .setattr (
68+ shortcuts_module .SchemaPath ,
69+ "from_dict" ,
70+ classmethod (fake_from_dict ),
71+ )
72+
73+ validate (spec , cls = OpenAPIV30SpecValidator )
74+
75+ assert captured ["resolved_cache_maxsize" ] == RESOLVED_CACHE_MAXSIZE_DEFAULT
76+
77+
2678class TestLocalValidateSpecUrl :
2779 def test_spec_schema_version_not_detected (self , factory ):
2880 spec_path = "data/empty.yaml"
0 commit comments