fix cache purge test url and encode spaces

This commit is contained in:
Kyle Drake 2015-07-02 19:40:42 -07:00
parent 4b87c818e7
commit a5fdbfe4a7
2 changed files with 30 additions and 9 deletions

View file

@ -6,34 +6,50 @@ describe PurgeCacheWorker do
end
it 'throws exception without 200 or 404 http status' do
stub_request(:get, "http://#{@test_ip}/:cache/purgetest.jpg").
stub_request(:get, "http://#{@test_ip}/:cache/purge/test.jpg").
with(headers: {'Host' => 'kyledrake.neocities.org'})
.to_return(status: 503)
worker = PurgeCacheWorker.new
proc {
worker.perform @test_ip, 'kyledrake', 'test.jpg'
worker.perform @test_ip, 'kyledrake', '/test.jpg'
}.must_raise RestClient::ServiceUnavailable
end
it 'handles 404 without exception' do
stub_request(:get, "http://#{@test_ip}/:cache/purgetest.jpg").
stub_request(:get, "http://#{@test_ip}/:cache/purge/test.jpg").
with(headers: {'Host' => 'kyledrake.neocities.org'})
.to_return(status: 404)
worker = PurgeCacheWorker.new
worker.perform @test_ip, 'kyledrake', 'test.jpg'
worker.perform @test_ip, 'kyledrake', '/test.jpg'
end
it 'sends a purge request' do
stub_request(:get, "http://#{@test_ip}/:cache/purgetest.jpg").
stub_request(:get, "http://#{@test_ip}/:cache/purge/test.jpg").
with(headers: {'Host' => 'kyledrake.neocities.org'})
.to_return(status: 200)
worker = PurgeCacheWorker.new
worker.perform @test_ip, 'kyledrake', 'test.jpg'
worker.perform @test_ip, 'kyledrake', '/test.jpg'
assert_requested :get, "http://#{@test_ip}/:cache/purgetest.jpg"
assert_requested :get, "http://#{@test_ip}/:cache/purge/test.jpg"
end
it 'handles spaces correctly' do
stub_request(:get, "http://#{@test_ip}/:cache/purge/te st.jpg").
with(headers: {'Host' => 'kyledrake.neocities.org'})
.to_return(status: 200)
url = Addressable::URI.encode_component(
"http://#{@test_ip}/:cache/purge/te st.jpg",
Addressable::URI::CharacterClasses::QUERY
)
worker = PurgeCacheWorker.new
worker.perform @test_ip, 'kyledrake', '/te st.jpg'
assert_requested :get, url
end
end

View file

@ -1,3 +1,5 @@
require 'open-uri'
class PurgeCacheWorker
include Sidekiq::Worker
sidekiq_options queue: :purgecache, retry: 1000, backtrace: false, average_scheduled_poll_interval: 1
@ -8,9 +10,12 @@ class PurgeCacheWorker
end
def perform(proxy_ip, username, path)
url = "http://#{proxy_ip}/:cache/purge#{path}"
url = Addressable::URI.encode_component(
"http://#{proxy_ip}/:cache/purge#{path}",
Addressable::URI::CharacterClasses::QUERY
)
begin
RestClient.get(url, host: "#{username}.neocities.org")
RestClient.get(url, host: URI::encode("#{username}.neocities.org"))
rescue RestClient::ResourceNotFound
end
end