Remove rescue block and add test for error bubbling in InputSchema validation

This commit is contained in:
Tyler Rowsell 2025-06-09 10:02:29 -04:00
commit 934a5e8db4
No known key found for this signature in database
GPG key ID: 0B7F267BCD08BF19
2 changed files with 18 additions and 12 deletions

View file

@ -38,18 +38,14 @@ module MCP
def validate_schema! def validate_schema!
schema = to_h schema = to_h
begin schema_reader = JSON::Schema::Reader.new(
schema_reader = JSON::Schema::Reader.new( accept_uri: false,
accept_uri: false, accept_file: ->(path) { path.to_s.start_with?(Gem.loaded_specs["json-schema"].full_gem_path) },
accept_file: ->(path) { path.to_s.start_with?(Gem.loaded_specs["json-schema"].full_gem_path) }, )
) metaschema = JSON::Validator.validator_for_name("draft4").metaschema
metaschema = JSON::Validator.validator_for_name("draft4").metaschema errors = JSON::Validator.fully_validate(metaschema, schema, schema_reader: schema_reader)
errors = JSON::Validator.fully_validate(metaschema, schema, schema_reader: schema_reader) if errors.any?
if errors.any? raise ArgumentError, "Invalid JSON Schema: #{errors.join(", ")}"
raise ArgumentError, "Invalid JSON Schema: #{errors.join(", ")}"
end
rescue StandardError => e
raise ArgumentError, "Invalid JSON Schema: #{e.message}"
end end
end end
end end

View file

@ -51,6 +51,16 @@ module MCP
schema.validate_arguments({ foo: 123 }) schema.validate_arguments({ foo: 123 })
end end
end end
test "unexpected errors bubble up from validate_arguments" do
schema = InputSchema.new(properties: { foo: { type: "string" } }, required: [:foo])
JSON::Validator.stub(:fully_validate, ->(*) { raise "unexpected error" }) do
assert_raises(RuntimeError) do
schema.validate_arguments({ foo: "bar" })
end
end
end
end end
end end
end end