Ensemble de scripts Ruby pour vérifier le comportement d'un frontal web (headers, redirections, certificat SSL/TLS, ...)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

93 lines
2.4 KiB

require 'test_helper'
require "mechanize"
class HTTPCacheTest < Minitest::Test
include WebserverHelper
def setup
@agent = Mechanize.new { |a|
a.follow_redirect = false
}
end
def test_varnish_hit
skip("Pas de test avec Varnish") if ENV["VARNISH"] == "0"
[
"https://#{domain}/",
].each do |url|
# Pour assurer la mise en cache par Varnish
page = @agent.get(url)
assert_has_header "x-varnish", page, "for #{url}"
assert_has_header "x-cache", page, "for #{url}"
# On laisse un peu de temps au cache pour se réchauffer
sleep(0.1)
# On refait la requête en espérant avoir un HIT
@agent.reset
page = @agent.get(url)
assert_x_cache_hit page, "for #{url}"
end
end
def test_homepage_first_visit
[
"https://#{domain}/",
].each do |url|
page = @agent.get(url)
assert_status_ok page, "for #{url}"
assert_has_etag page, "for #{url}"
assert_has_last_modified page, "for #{url}"
# assert_max_age "300", page, "for #{url}"
# refute_must_revalidate page, "for #{url}"
assert_public page, "for #{url}"
end
end
def test_homepage_second_visit
[
"https://#{domain}/",
].each do |url|
page1 = @agent.get(url)
assert_status_ok page1, "for #{url} on 1st visit"
if last_modified = last_modified_header(page1)
# il faut reinitialiser l'agent pour vider le cache et l'historique
@agent.reset
page2a = @agent.get(url, [], nil, {
"If-Modified-Since" => last_modified
})
assert_status_not_modified page2a, "for #{url} on 2nd visit with Last-Modified"
else
flunk "Expected to find a Last-Modified header for #{url} on 1st visit"
end
if etag_header(page1)
# il faut reinitialiser l'agent pour vider le cache et l'historique
@agent.reset
page2b = @agent.get(url, [], nil, {
"If-None-Match" => etag_header(page1)
})
assert_status_not_modified page2b, "for #{url} on 2nd visit with ETag"
else
flunk "Expected to fin an ETag header for #{url} on 1st visit"
end
end
end
def test_login_first_visit
[
"https://#{domain}/login",
].each do |url|
page = @agent.get(url)
assert_max_age "0", page, "for #{url}"
assert_must_revalidate page, "for #{url}"
assert_private page, "for #{url}"
end
end
end