Add optional resource usage limitations to number of rendering calls, length of rendering output and/or number of variable/capture assignments

This commit is contained in:
Florian Weingarten
2013-05-30 17:04:26 -04:00
parent 50b2ebee56
commit 8760b5e8c4
7 changed files with 56 additions and 14 deletions
+23
View File
@@ -71,4 +71,27 @@ class TemplateTest < Test::Unit::TestCase
assert_equal '1', t.render(assigns)
@global = nil
end
def test_resource_limits
t = Template.parse("0123456789")
t.resource_limits = { :render_length_limit => 5 }
assert_raises(Liquid::MemoryError) { t.render() }
t.resource_limits = { :render_length_limit => 10 }
assert_equal "0123456789", t.render()
assert_not_nil t.resource_limits[:render_length_current]
t = Template.parse("{% for a in (1..100) %} foo {% endfor %}")
t.resource_limits = { :render_score_limit => 50 }
assert_raises(Liquid::MemoryError) { t.render() }
t.resource_limits = { :render_score_limit => 200 }
assert_equal (" foo " * 100), t.render()
assert_not_nil t.resource_limits[:render_score_current]
t = Template.parse("{% assign foo = 42 %}{% assign bar = 23 %}")
t.resource_limits = { :assign_score_limit => 1 }
assert_raises(Liquid::MemoryError) { t.render() }
t.resource_limits = { :assign_score_limit => 2 }
assert_equal "", t.render()
assert_not_nil t.resource_limits[:assign_score_current]
end
end # TemplateTest