summaryrefslogtreecommitdiff
path: root/test/paths_test.rb
diff options
context:
space:
mode:
authorDan Allen <dan.j.allen@gmail.com>2018-04-11 23:10:57 -0600
committerDan Allen <dan.j.allen@gmail.com>2018-04-14 19:55:42 -0600
commit710b25ebca3322f153b291a309011e620666d4dc (patch)
tree311362dced1cbd426b4e18d9855154aacdc55984 /test/paths_test.rb
parent3002af4b0aeb1e9e9a84d7a5e8f40c43eb2bf798 (diff)
use helpers to assert log messages in tests
- add assert_message helper for asserting a single message - add assert_messages helper for asserting multiple messages - rewrite paths and reader tests to assert log messages instead of stderr stream - assert message about illegal reference to parent is only reported on first violation when resolving system path - use instance variable to store shared logger in tests
Diffstat (limited to 'test/paths_test.rb')
-rw-r--r--test/paths_test.rb106
1 files changed, 45 insertions, 61 deletions
diff --git a/test/paths_test.rb b/test/paths_test.rb
index 2e40eef2..d761b6bd 100644
--- a/test/paths_test.rb
+++ b/test/paths_test.rb
@@ -104,9 +104,15 @@ context 'Path Resolver' do
context 'System Paths' do
JAIL = '/home/doctor/docs'
+ default_logger = Asciidoctor::LoggerManager.logger
def setup
@resolver = Asciidoctor::PathResolver.new
+ @logger = (Asciidoctor::LoggerManager.logger = Asciidoctor::MemoryLogger.new)
+ end
+
+ teardown do
+ Asciidoctor::LoggerManager.logger = default_logger
end
test 'raises security error if jail is not an absolute path' do
@@ -126,23 +132,19 @@ context 'Path Resolver' do
#end
test 'prevents access to paths outside of jail' do
- result, warnings = redirect_streams do |_, err|
- [(@resolver.system_path '../../../../../css', %(#{JAIL}/assets/stylesheets), JAIL), err.string]
- end
+ result = @resolver.system_path '../../../../../css', %(#{JAIL}/assets/stylesheets), JAIL
assert_equal %(#{JAIL}/css), result
- assert_includes warnings, 'path has illegal reference to ancestor of jail'
+ assert_message @logger, :WARN, 'path has illegal reference to ancestor of jail, auto-recovering'
- result, warnings = redirect_streams do |_, err|
- [(@resolver.system_path '/../../../../../css', %(#{JAIL}/assets/stylesheets), JAIL), err.string]
- end
+ @logger.clear
+ result = @resolver.system_path '/../../../../../css', %(#{JAIL}/assets/stylesheets), JAIL
assert_equal %(#{JAIL}/css), result
- assert_includes warnings, 'path is outside of jail'
+ assert_message @logger, :WARN, 'path is outside of jail, auto-recovering'
- result, warnings = redirect_streams do |_, err|
- [(@resolver.system_path '../../../css', '../../..', JAIL), err.string]
- end
+ @logger.clear
+ result = @resolver.system_path '../../../css', '../../..', JAIL
assert_equal %(#{JAIL}/css), result
- assert_includes warnings, 'path has illegal reference to ancestor of jail'
+ assert_message @logger, :WARN, 'path has illegal reference to ancestor of jail, auto-recovering'
end
test 'throws exception for illegal path access if recover is false' do
@@ -172,30 +174,25 @@ context 'Path Resolver' do
end
test 'treats absolute target outside of jail as relative when jail is specified' do
- result, warnings = redirect_streams do |_, err|
- [(@resolver.system_path '/', "#{JAIL}/assets/stylesheets", JAIL), err.string]
- end
+ result = @resolver.system_path '/', "#{JAIL}/assets/stylesheets", JAIL
assert_equal JAIL, result
- assert_includes warnings, 'outside of jail'
+ assert_message @logger, :WARN, 'path is outside of jail, auto-recovering'
- result, warnings = redirect_streams do |_, err|
- [(@resolver.system_path '/foo', "#{JAIL}/assets/stylesheets", JAIL), err.string]
- end
+ @logger.clear
+ result = @resolver.system_path '/foo', "#{JAIL}/assets/stylesheets", JAIL
assert_equal "#{JAIL}/foo", result
- assert_includes warnings, 'outside of jail'
+ assert_message @logger, :WARN, 'path is outside of jail, auto-recovering'
- result, warnings = redirect_streams do |_, err|
- [(@resolver.system_path '/../foo', "#{JAIL}/assets/stylesheets", JAIL), err.string]
- end
+ @logger.clear
+ result = @resolver.system_path '/../foo', "#{JAIL}/assets/stylesheets", JAIL
assert_equal "#{JAIL}/foo", result
- assert_includes warnings, 'outside of jail'
+ assert_message @logger, :WARN, 'path is outside of jail, auto-recovering'
+ @logger.clear
@resolver.file_separator = '\\'
- result, warnings = redirect_streams do |_, err|
- [(@resolver.system_path 'baz.adoc', 'C:/foo', 'C:/bar'), err.string]
- end
+ result = @resolver.system_path 'baz.adoc', 'C:/foo', 'C:/bar'
assert_equal 'C:/bar/baz.adoc', result
- assert_includes warnings, 'outside of jail'
+ assert_message @logger, :WARN, 'path is outside of jail, auto-recovering'
end
test 'allows use of absolute target or start if resolved path is sub-path of jail' do
@@ -215,24 +212,20 @@ context 'Path Resolver' do
end
test 'warns if start is not contained within jail' do
- result, warnings = redirect_streams do |_, err|
- [(@resolver.system_path 'images/tiger.png', '/etc', JAIL), err.string]
- end
+ result = @resolver.system_path 'images/tiger.png', '/etc', JAIL
assert_equal %(#{JAIL}/images/tiger.png), result
- assert_includes warnings, 'path is outside of jail'
+ assert_message @logger, :WARN, 'path is outside of jail, auto-recovering'
- result, warnings = redirect_streams do |_, err|
- [(@resolver.system_path '.', '/etc', JAIL), err.string]
- end
+ @logger.clear
+ result = @resolver.system_path '.', '/etc', JAIL
assert_equal JAIL, result
- assert_includes warnings, 'path is outside of jail'
+ assert_message @logger, :WARN, 'path is outside of jail, auto-recovering'
+ @logger.clear
@resolver.file_separator = '\\'
- result, warnings = redirect_streams do |_, err|
- [(@resolver.system_path '.', 'C:/foo', 'C:/bar'), err.string]
- end
+ result = @resolver.system_path '.', 'C:/foo', 'C:/bar'
assert_equal 'C:/bar', result
- assert_includes warnings, 'path is outside of jail'
+ assert_message @logger, :WARN, 'path is outside of jail, auto-recovering'
end
test 'allows start path to be parent of jail if resolved target is inside jail' do
@@ -242,18 +235,15 @@ context 'Path Resolver' do
end
test 'relocates target to jail if resolved value fails outside of jail' do
- result, warnings = redirect_streams do |_, err|
- [(@resolver.system_path 'bar/baz.adoc', JAIL, "#{JAIL}/foo"), err.string]
- end
+ result = @resolver.system_path 'bar/baz.adoc', JAIL, "#{JAIL}/foo"
assert_equal %(#{JAIL}/foo/bar/baz.adoc), result
- assert_includes warnings, 'path is outside of jail'
+ assert_message @logger, :WARN, 'path is outside of jail, auto-recovering'
+ @logger.clear
@resolver.file_separator = '\\'
- result, warnings = redirect_streams do |_, err|
- [(@resolver.system_path 'bar/baz.adoc', 'D:/', 'C:/foo'), err.string]
- end
+ result = @resolver.system_path 'bar/baz.adoc', 'D:/', 'C:/foo'
assert_equal 'C:/foo/bar/baz.adoc', result
- assert_includes warnings, 'path is outside of jail'
+ assert_message @logger, :WARN, '~outside of jail root'
end
test 'raises security error if start is not contained within jail and recover is disabled' do
@@ -310,11 +300,8 @@ context 'Path Resolver' do
assert_equal '/home/doctor/docs', (@resolver.system_path nil, '/home/doctor/docs')
assert_equal '/home/doctor/docs', (@resolver.system_path nil, '/home/doctor/./docs')
assert_equal %(#{pwd}/assets/images), (@resolver.system_path nil, 'assets/images')
- result, warnings = redirect_streams do |_, err|
- [(@resolver.system_path '', '../assets/images', JAIL), err.string]
- end
- assert_equal %(#{JAIL}/assets/images), result
- assert_includes warnings, 'path has illegal reference to ancestor of jail'
+ @resolver.system_path '', '../assets/images', JAIL
+ assert_message @logger, :WARN, 'path has illegal reference to ancestor of jail, auto-recovering'
end
test 'posixifies windows paths' do
@@ -327,17 +314,14 @@ context 'Path Resolver' do
assert_equal 'C:/data/docs', (@resolver.system_path '..', 'C:\\data\\docs\\assets', 'C:\\data\\docs')
- result, warnings = redirect_streams do |_, err|
- [(@resolver.system_path '..\\..', 'C:\\data\\docs\\assets', 'C:\\data\\docs'), err.string]
- end
+ result = @resolver.system_path '..\\..', 'C:\\data\\docs\\assets', 'C:\\data\\docs'
assert_equal 'C:/data/docs', result
- assert_includes warnings, 'path has illegal reference to ancestor of jail'
+ assert_message @logger, :WARN, 'path has illegal reference to ancestor of jail, auto-recovering'
- result, warnings = redirect_streams do |_, err|
- [(@resolver.system_path '..\\..\\css', 'C:\\data\\docs\\assets', 'C:\\data\\docs'), err.string]
- end
+ @logger.clear
+ result = @resolver.system_path '..\\..\\css', 'C:\\data\\docs\\assets', 'C:\\data\\docs'
assert_equal 'C:/data/docs/css', result
- assert_includes warnings, 'path has illegal reference to ancestor of jail'
+ assert_message @logger, :WARN, 'path has illegal reference to ancestor of jail, auto-recovering'
end
test 'should calculate relative path' do