mirror of
https://github.com/neocities/neocities.git
synced 2025-04-25 01:32:36 +02:00
clean up tests to reflect new purging code
This commit is contained in:
parent
d0936bce67
commit
9d3b86302d
8 changed files with 12 additions and 240 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
|
|
@ -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
|
|
|
@ -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
|
|
|
@ -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
|
|
|
@ -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
|
|
|
@ -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
|
|
|
@ -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
|
|
Loading…
Add table
Reference in a new issue