Fix FTBFS due to Ruby 3.1 / Psych 4.0 test incompatibility.

Resolves: rhbz#2113704
This commit is contained in:
Vít Ondruch 2022-09-08 12:48:39 +02:00
parent 4f55e72333
commit 343ba3adf5
2 changed files with 185 additions and 1 deletions

View File

@ -0,0 +1,174 @@
From 25158fabc2c83862de90f319b7dffc9e60904dac Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
Date: Tue, 30 Aug 2022 09:07:15 +0200
Subject: [PATCH 1/4] Permit `Time` class loading from YAML.
Since Psych 4.0, the `safe_load` is used as default loading mechanism.
There are just a few permitted classes and `Time` is not one of them
[[1]]. This results it test failure:
~~~
Error: test_converting_to_yaml(DocumentTest::TestSimpleConventionallyNamedDocument): Psych::DisallowedClass: Tried to load unspecified class: Time
~~~
Please also note that in YAML specs 1.2, the `timestamp` is not
listed as supported tag anymore [[2]].
Given that:
1) ronn-ng does not provide any supported way of loading the serialized
YAML.
2) The `to_yaml` does not appear to be used internally/externally
anywhere.
3) If there were users of this functionality, it would have been already
know, reported and fixed at this moment.
The best course of action is fixing the test case by listing the `Time`
as valid class for parsing.
Fixes #80
[1]: https://docs.ruby-lang.org/en/master/Psych.html#method-c-safe_load
[2]: https://github.com/yaml/yaml-spec/issues/268
---
test/test_ronn_document.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test/test_ronn_document.rb b/test/test_ronn_document.rb
index 75788dc..a86793f 100644
--- a/test/test_ronn_document.rb
+++ b/test/test_ronn_document.rb
@@ -146,7 +146,7 @@ def canonicalize(text)
'toc' => [['NAME', 'NAME']],
'organization' => nil,
'manual' => nil
- }, YAML.load(@doc.to_yaml))
+ }, YAML.load(@doc.to_yaml, permitted_classes: [Time]))
end
test 'converting to json' do
From c8aaa0235ed0dd41ea7ea83e5133ae494cbf072a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
Date: Tue, 30 Aug 2022 09:59:07 +0200
Subject: [PATCH 2/4] Check if `YAML.load` supports `permitted_classes` kwarg.
This is due to Ruby 3.1 + Psych 4.0 changed changed `YAML.load` to use
`safe_load` by default.
---
test/test_ronn_document.rb | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/test/test_ronn_document.rb b/test/test_ronn_document.rb
index a86793f..c9c08c7 100644
--- a/test/test_ronn_document.rb
+++ b/test/test_ronn_document.rb
@@ -137,6 +137,15 @@ def canonicalize(text)
test 'converting to yaml' do
require 'yaml'
+ # Check if `permitted_classes` keyword argument is available. That means
+ # `safe_load` is the default loading mechanism, i.e. Ruby 3.1 + Psych 4.0
+ # are used.
+ kwargs = !(YAML.method(:load).parameters & [[:key, :permitted_classes]]).empty?
+ loaded_yaml = if kwargs
+ YAML.load(@doc.to_yaml, permitted_classes: [Time])
+ else
+ YAML.load(@doc.to_yaml)
+ end
assert_equal({
'section' => '1',
'name' => 'hello',
@@ -146,7 +155,7 @@ def canonicalize(text)
'toc' => [['NAME', 'NAME']],
'organization' => nil,
'manual' => nil
- }, YAML.load(@doc.to_yaml, permitted_classes: [Time]))
+ }, loaded_yaml)
end
test 'converting to json' do
From d7bbcd7ef4461bd28eb3e9fc1880f7a5d5d46d88 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
Date: Tue, 30 Aug 2022 10:09:19 +0200
Subject: [PATCH 3/4] Extract the YAML loading logic into function
This is to make the test case less poluted. Can be dropped once only
Ruby 3.1+ is supported.
---
test/test_ronn_document.rb | 23 +++++++++++++----------
1 file changed, 13 insertions(+), 10 deletions(-)
diff --git a/test/test_ronn_document.rb b/test/test_ronn_document.rb
index c9c08c7..ae6f72a 100644
--- a/test/test_ronn_document.rb
+++ b/test/test_ronn_document.rb
@@ -12,6 +12,18 @@ def canonicalize(text)
.tr('"', "'")
end
+ def yaml_load(yaml)
+ # Check if `permitted_classes` keyword argument is available. That means
+ # `safe_load` is the default loading mechanism, i.e. Ruby 3.1 + Psych 4.0
+ # are used.
+ kwargs = !(YAML.method(:load).parameters & [[:key, :permitted_classes]]).empty?
+ if kwargs
+ YAML.load(yaml, permitted_classes: [Time])
+ else
+ YAML.load(yaml)
+ end
+ end
+
test 'new with path' do
doc = Ronn::Document.new(SIMPLE_FILE)
assert_equal File.read(SIMPLE_FILE), doc.data
@@ -137,15 +149,6 @@ def canonicalize(text)
test 'converting to yaml' do
require 'yaml'
- # Check if `permitted_classes` keyword argument is available. That means
- # `safe_load` is the default loading mechanism, i.e. Ruby 3.1 + Psych 4.0
- # are used.
- kwargs = !(YAML.method(:load).parameters & [[:key, :permitted_classes]]).empty?
- loaded_yaml = if kwargs
- YAML.load(@doc.to_yaml, permitted_classes: [Time])
- else
- YAML.load(@doc.to_yaml)
- end
assert_equal({
'section' => '1',
'name' => 'hello',
@@ -155,7 +158,7 @@ def canonicalize(text)
'toc' => [['NAME', 'NAME']],
'organization' => nil,
'manual' => nil
- }, loaded_yaml)
+ }, yaml_load(@doc.to_yaml))
end
test 'converting to json' do
From 7c49ae1926728987ca97e014931bb9148aa868b1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
Date: Tue, 30 Aug 2022 10:25:46 +0200
Subject: [PATCH 4/4] Use symbol array literal.
This should make Rubocop happy.
---
test/test_ronn_document.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test/test_ronn_document.rb b/test/test_ronn_document.rb
index ae6f72a..aa97a88 100644
--- a/test/test_ronn_document.rb
+++ b/test/test_ronn_document.rb
@@ -16,7 +16,7 @@ def yaml_load(yaml)
# Check if `permitted_classes` keyword argument is available. That means
# `safe_load` is the default loading mechanism, i.e. Ruby 3.1 + Psych 4.0
# are used.
- kwargs = !(YAML.method(:load).parameters & [[:key, :permitted_classes]]).empty?
+ kwargs = !(YAML.method(:load).parameters & [%i[key permitted_classes]]).empty?
if kwargs
YAML.load(yaml, permitted_classes: [Time])
else

View File

@ -3,11 +3,15 @@
Name: rubygem-%{gem_name}
Version: 0.9.1
Release: 5%{?dist}
Release: 6%{?dist}
Summary: Builds man pages from Markdown
License: MIT
URL: https://github.com/apjanke/ronn-ng
Source0: https://rubygems.org/gems/%{gem_name}-%{version}.gem
# Fix Ruby 3.1 / Psych 4.0 test compatibility.
# https://github.com/apjanke/ronn-ng/issues/80
# https://github.com/apjanke/ronn-ng/pull/81
Patch0: rubygem-ronn-ng-0.9.1-Permit-Time-class-loading-from-YAML.patch
BuildRequires: ruby(release)
BuildRequires: rubygems-devel
BuildRequires: ruby
@ -40,6 +44,8 @@ Documentation for %{name}.
%prep
%setup -q -n %{gem_name}-%{version}
%patch0 -p1
# Upstream specifies mustache==0.7, but we have 1.1 and it seems to work fine...
%gemspec_remove_dep -g mustache "~> 0.7"
@ -108,6 +114,10 @@ popd
%{gem_instdir}/test
%changelog
* Thu Sep 08 2022 Vít Ondruch <vondruch@redhat.com> - 0.9.1-6
- Fix FTBFS due to Ruby 3.1 / Psych 4.0 test incompatibility.
Resolves: rhbz#2113704
* Sat Jul 23 2022 Fedora Release Engineering <releng@fedoraproject.org> - 0.9.1-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild