clean up tests to reflect new purging code

This commit is contained in:
Kyle Drake 2017-10-15 11:26:42 -07:00
parent d0936bce67
commit 9d3b86302d
8 changed files with 12 additions and 240 deletions

View file

@ -18,15 +18,14 @@ describe 'site_files' do
before do before do
@site = Fabricate :site @site = Fabricate :site
ThumbnailWorker.jobs.clear ThumbnailWorker.jobs.clear
PurgeCacheOrderWorker.jobs.clear PurgeCacheWorker.jobs.clear
PurgeCacheWorker.jobs.clear PurgeCacheWorker.jobs.clear
ScreenshotWorker.jobs.clear ScreenshotWorker.jobs.clear
end end
describe 'delete' do describe 'delete' do
before do before do
DeleteCacheWorker.jobs.clear PurgeCacheWorker.jobs.clear
DeleteCacheOrderWorker.jobs.clear
end end
it 'works' do it 'works' do
@ -34,7 +33,7 @@ describe 'site_files' do
uploaded_file = Rack::Test::UploadedFile.new('./tests/files/test.jpg', 'image/jpeg') uploaded_file = Rack::Test::UploadedFile.new('./tests/files/test.jpg', 'image/jpeg')
upload 'files[]' => uploaded_file upload 'files[]' => uploaded_file
PurgeCacheOrderWorker.jobs.clear PurgeCacheWorker.jobs.clear
@site.reload.space_used.must_equal initial_space_used + uploaded_file.size @site.reload.space_used.must_equal initial_space_used + uploaded_file.size
@site.actual_space_used.must_equal @site.space_used @site.actual_space_used.must_equal @site.space_used
@ -47,22 +46,11 @@ describe 'site_files' do
@site.reload.space_used.must_equal initial_space_used @site.reload.space_used.must_equal initial_space_used
@site.actual_space_used.must_equal @site.space_used @site.actual_space_used.must_equal @site.space_used
PurgeCacheOrderWorker.jobs.length.must_equal 0 args = PurgeCacheWorker.jobs.first['args']
DeleteCacheOrderWorker.jobs.length.must_equal 1
args = DeleteCacheOrderWorker.jobs.first['args']
args[0].must_equal @site.username args[0].must_equal @site.username
args[1].must_equal '/test.jpg' args[1].must_equal '/test.jpg'
end end
it 'flushes surf for index.html' do
uploaded_file = Rack::Test::UploadedFile.new('./tests/files/index.html', 'text/html')
upload 'files[]' => uploaded_file
delete_file filename: '/index.html'
DeleteCacheOrderWorker.jobs.length.must_equal 3
DeleteCacheOrderWorker.jobs.collect {|j| j['args'].last}.must_equal ['/index.html', '/?surf=1', '/']
end
it 'property deletes directories with regexp special chars in them' do it 'property deletes directories with regexp special chars in them' do
upload 'dir' => '8)', 'files[]' => Rack::Test::UploadedFile.new('./tests/files/test.jpg', 'image/jpeg') upload 'dir' => '8)', 'files[]' => Rack::Test::UploadedFile.new('./tests/files/test.jpg', 'image/jpeg')
delete_file filename: '8)' delete_file filename: '8)'
@ -177,10 +165,10 @@ describe 'site_files' do
@site.title.must_equal 'Hello?' @site.title.must_equal 'Hello?'
# Purge cache needs to flush / and index.html for either scenario. # Purge cache needs to flush / and index.html for either scenario.
PurgeCacheOrderWorker.jobs.length.must_equal 3 PurgeCacheWorker.jobs.length.must_equal 3
first_purge = PurgeCacheOrderWorker.jobs.first first_purge = PurgeCacheWorker.jobs.first
surf_purge = PurgeCacheOrderWorker.jobs[1] surf_purge = PurgeCacheWorker.jobs[1]
dirname_purge = PurgeCacheOrderWorker.jobs.last dirname_purge = PurgeCacheWorker.jobs.last
username, pathname = first_purge['args'] username, pathname = first_purge['args']
username.must_equal @site.username username.must_equal @site.username
@ -222,7 +210,7 @@ describe 'site_files' do
'dir' => 'subdir', 'dir' => 'subdir',
'files[]' => Rack::Test::UploadedFile.new('./tests/files/index.html', 'text/html') 'files[]' => Rack::Test::UploadedFile.new('./tests/files/index.html', 'text/html')
) )
PurgeCacheOrderWorker.jobs.select {|j| j['args'].last == '/subdir/'}.length.must_equal 1 PurgeCacheWorker.jobs.select {|j| j['args'].last == '/subdir/'}.length.must_equal 1
end end
it 'succeeds with valid file' do it 'succeeds with valid file' do
@ -232,7 +220,7 @@ describe 'site_files' do
last_response.body.must_match /successfully uploaded/i last_response.body.must_match /successfully uploaded/i
File.exists?(@site.files_path('test.jpg')).must_equal true File.exists?(@site.files_path('test.jpg')).must_equal true
username, path = PurgeCacheOrderWorker.jobs.first['args'] username, path = PurgeCacheWorker.jobs.first['args']
username.must_equal @site.username username.must_equal @site.username
path.must_equal '/test.jpg' path.must_equal '/test.jpg'
@ -295,18 +283,10 @@ describe 'site_files' do
last_response.body.must_match /successfully uploaded/i last_response.body.must_match /successfully uploaded/i
File.exists?(@site.files_path('derpie/derptest/test.jpg')).must_equal true File.exists?(@site.files_path('derpie/derptest/test.jpg')).must_equal true
PurgeCacheOrderWorker.jobs.length.must_equal 1 PurgeCacheWorker.jobs.length.must_equal 1
username, path = PurgeCacheOrderWorker.jobs.first['args'] username, path = PurgeCacheWorker.jobs.first['args']
path.must_equal '/derpie/derptest/test.jpg'
PurgeCacheOrderWorker.drain
PurgeCacheWorker.jobs.length.must_equal 2
ip, username, path = PurgeCacheWorker.jobs.first['args']
ip.must_equal '10.0.0.1'
username.must_equal @site.username username.must_equal @site.username
path.must_equal '/derpie/derptest/test.jpg' path.must_equal '/derpie/derptest/test.jpg'
PurgeCacheWorker.jobs.last['args'].first.must_equal '10.0.0.2'
ThumbnailWorker.jobs.length.must_equal 1 ThumbnailWorker.jobs.length.must_equal 1
ThumbnailWorker.drain ThumbnailWorker.drain

View file

@ -1,21 +0,0 @@
require_relative '../environment.rb'
describe DeleteCacheWorker do
before do
PurgeCacheOrderWorker.jobs.clear
PurgeCacheWorker.jobs.clear
end
it 'queues up purges' do
DeleteCacheOrderWorker.new.perform('kyledrake', '/test.jpg')
job_one_args = DeleteCacheWorker.jobs.first['args']
job_two_args = DeleteCacheWorker.jobs.last['args']
job_one_args[0].must_equal '10.0.0.1'
job_one_args[1].must_equal 'kyledrake'
job_one_args[2].must_equal '/test.jpg'
job_two_args[0].must_equal '10.0.0.2'
job_two_args[1].must_equal 'kyledrake'
job_two_args[2].must_equal '/test.jpg'
end
end

View file

@ -1,53 +0,0 @@
require_relative '../environment.rb'
=begin
describe DeleteCacheWorker do
before do
@test_ip = '10.0.0.1'
end
it 'handles 404 without exception' do
stub_request(:get, "http://#{@test_ip}/:cache/purge/test.jpg").
with(headers: {'Host' => 'kyledrake.neocities.org'})
.to_return(status: 404)
worker = DeleteCacheWorker.new
worker.perform @test_ip, 'kyledrake', '/test.jpg'
end
it 'sends a purge request' do
stub_request(:get, "http://#{@test_ip}/:cache/purge/test.jpg").
with(headers: {'Host' => 'kyledrake.neocities.org'})
.to_return(status: 200)
worker = DeleteCacheWorker.new
worker.perform @test_ip, 'kyledrake', '/test.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 = DeleteCacheWorker.new
worker.perform @test_ip, 'kyledrake', '/te st.jpg'
assert_requested :get, url
end
it 'works without forward slash' do
stub_request(:get, "http://#{@test_ip}/:cache/purge/test.jpg").
with(headers: {'Host' => 'kyledrake.neocities.org'})
.to_return(status: 200)
worker = DeleteCacheWorker.new
worker.perform @test_ip, 'kyledrake', 'test.jpg'
end
end
=end

View file

@ -1,21 +0,0 @@
require_relative '../environment.rb'
describe PurgeCacheWorker do
before do
PurgeCacheOrderWorker.jobs.clear
PurgeCacheWorker.jobs.clear
end
it 'queues up purges' do
PurgeCacheOrderWorker.new.perform('kyledrake', '/test.jpg')
job_one_args = PurgeCacheWorker.jobs.first['args']
job_two_args = PurgeCacheWorker.jobs.last['args']
job_one_args[0].must_equal '10.0.0.1'
job_one_args[1].must_equal 'kyledrake'
job_one_args[2].must_equal '/test.jpg'
job_two_args[0].must_equal '10.0.0.2'
job_two_args[1].must_equal 'kyledrake'
job_two_args[2].must_equal '/test.jpg'
end
end

View file

@ -1,52 +0,0 @@
require_relative '../environment.rb'
describe PurgeCacheWorker do
before do
@test_ip = '10.0.0.1'
end
it 'handles 404 without exception' do
stub_request(:head, "https://#{@test_ip}/test.jpg").
with(headers: {'Host' => 'kyledrake.neocities.org', 'Cache-Purge' => '1'})
.to_return(status: 404)
worker = PurgeCacheWorker.new
worker.perform @test_ip, 'kyledrake', '/test.jpg'
end
it 'sends a purge request' do
stub_request(:head, "https://#{@test_ip}/test.jpg").
with(headers: {'Host' => 'kyledrake.neocities.org', 'Cache-Purge' => '1'})
.to_return(status: 200)
worker = PurgeCacheWorker.new
worker.perform @test_ip, 'kyledrake', '/test.jpg'
assert_requested :head, "https://#{@test_ip}/test.jpg"
end
it 'handles spaces correctly' do
stub_request(:head, "https://#{@test_ip}/te st.jpg").
with(headers: {'Host' => 'kyledrake.neocities.org', 'Cache-Purge' => '1'})
.to_return(status: 200)
url = Addressable::URI.encode_component(
"https://#{@test_ip}/te st.jpg",
Addressable::URI::CharacterClasses::QUERY
)
worker = PurgeCacheWorker.new
worker.perform @test_ip, 'kyledrake', '/te st.jpg'
assert_requested :head, url
end
it 'works without forward slash' do
stub_request(:head, "https://#{@test_ip}/test.jpg").
with(headers: {'Host' => 'kyledrake.neocities.org', 'Cache-Purge' => '1'})
.to_return(status: 200)
worker = PurgeCacheWorker.new
worker.perform @test_ip, 'kyledrake', 'test.jpg'
end
end

View file

@ -1,20 +0,0 @@
class DeleteCacheOrderWorker
include Sidekiq::Worker
sidekiq_options queue: :deletecacheorder, retry: 1000, backtrace: true, average_scheduled_poll_interval: 1
sidekiq_retry_in do |count|
return 10 if count < 10
180
end
def perform(username, path)
#proxy_ips = Resolv.getaddresses($config['cache_purge_ips_uri']).keep_if {|r| !r.match(/:/)}
proxy_ips = $config['proxy_ips']
return if proxy_ips.nil? || proxy_ips.empty?
proxy_ips.each do |proxy_ip|
DeleteCacheWorker.perform_async proxy_ip, username, path
end
end
end

View file

@ -1,21 +0,0 @@
require 'open-uri'
# PurgeCacheWorker refreshes the cache, this actually deletes it.
# This is because when the file is 404ing the PurgeCacheWorker
# will just sit on the stale cache, even though it's not supposed to.
# It's some nginx bug. I'm not going to deal with it.
class DeleteCacheWorker
HTTP_TIMEOUT = 10
include Sidekiq::Worker
sidekiq_options queue: :deletecache, retry: 3, backtrace: false, average_scheduled_poll_interval: 1
sidekiq_retry_in do |count|
return 10 if count < 10
180
end
def perform(proxy_ip, username, path)
$redis_proxy.publish 'proxy', {cmd: 'purge', path: "#{username}#{path}"}.to_msgpack
end
end

View file

@ -1,20 +0,0 @@
class PurgeCacheOrderWorker
include Sidekiq::Worker
sidekiq_options queue: :purgecacheorder, retry: 1000, backtrace: true, average_scheduled_poll_interval: 1
sidekiq_retry_in do |count|
return 10 if count < 10
180
end
def perform(username, path)
proxy_ips = $config['proxy_ips']
#proxy_ips = Resolv.getaddresses($config['cache_purge_ips_uri']).keep_if {|r| !r.match(/:/)}
return if proxy_ips.nil? || proxy_ips.empty?
proxy_ips.each do |proxy_ip|
PurgeCacheWorker.perform_async proxy_ip, username, path
end
end
end