require 'helpers/download_helper'
class DownloadTest < ActionDispatch::IntegrationTest
+ def getport service
+ File.read(File.expand_path("../../../../../tmp/#{service}.port", __FILE__))
+ end
+
setup do
- portfile = File.expand_path '../../../../../tmp/keep-web-ssl.port', __FILE__
- @kwport = File.read portfile
+ @kwport = getport 'keep-web-ssl'
+ @kwdport = getport 'keep-web-dl-ssl'
Rails.configuration.keep_web_url = "https://localhost:#{@kwport}/c=%{uuid_or_pdh}"
+ Rails.configuration.keep_web_download_url = "https://localhost:#{@kwdport}/c=%{uuid_or_pdh}"
CollectionsController.any_instance.expects(:file_enumerator).never
# Make sure Capybara can download files.
# Keep data isn't populated by fixtures, so we have to write any
# data we expect to read.
- unless /^acbd/ =~ `echo -n foo | arv-put --no-progress --raw -` && $?.success?
- raise $?.to_s
+ ['foo', 'w a z', "Hello world\n"].each do |data|
+ md5 = `echo -n #{data.shellescape} | arv-put --no-progress --raw -`
+ assert_match /^#{Digest::MD5.hexdigest(data)}/, md5
+ assert $?.success?, $?
end
end
['uuid', 'portable_data_hash'].each do |id_type|
- test "download from keep-web by #{id_type} using a reader token" do
+ test "preview from keep-web by #{id_type} using a reader token" do
uuid_or_pdh = api_fixture('collections')['foo_file'][id_type]
token = api_fixture('api_client_authorizations')['active_all_collections']['api_token']
visit "/collections/download/#{uuid_or_pdh}/#{token}/"
within "#collection_files" do
- click_link "foo"
+ click_link 'foo'
end
- wait_for_download 'foo', 'foo'
+ assert_no_selector 'a'
+ assert_text 'foo'
+ end
+
+ test "preview anonymous content from keep-web by #{id_type}" do
+ Rails.configuration.anonymous_user_token =
+ api_fixture('api_client_authorizations')['anonymous']['api_token']
+ uuid_or_pdh =
+ api_fixture('collections')['public_text_file'][id_type]
+ visit "/collections/#{uuid_or_pdh}"
+ within "#collection_files" do
+ find('[title~=View]').click
+ end
+ assert_no_selector 'a'
+ assert_text 'Hello world'
+ end
+
+ test "download anonymous content from keep-web by #{id_type}" do
+ Rails.configuration.anonymous_user_token =
+ api_fixture('api_client_authorizations')['anonymous']['api_token']
+ uuid_or_pdh =
+ api_fixture('collections')['public_text_file'][id_type]
+ visit "/collections/#{uuid_or_pdh}"
+ within "#collection_files" do
+ find('[title~=Download]').click
+ end
+ wait_for_download 'Hello world.txt', "Hello world\n"
+ end
+ end
+
+ test "download from keep-web using a session token" do
+ uuid = api_fixture('collections')['w_a_z_file']['uuid']
+ token = api_fixture('api_client_authorizations')['active']['api_token']
+ visit page_with_token('active', "/collections/#{uuid}")
+ within "#collection_files" do
+ find('[title~=Download]').click
end
+ wait_for_download 'w a z', 'w a z'
end
def wait_for_download filename, expect_data
keepweb = subprocess.Popen(
['keep-web',
'-allow-anonymous',
- '-attachment-only-host=localhost:'+str(keepwebport),
+ '-attachment-only-host=download:'+str(keepwebport),
'-listen=:'+str(keepwebport)],
env=env, stdin=open('/dev/null'), stdout=logf, stderr=logf)
with open(_pidfile('keep-web'), 'w') as f:
return
nginxconf = {}
nginxconf['KEEPWEBPORT'] = _getport('keep-web')
+ nginxconf['KEEPWEBDLSSLPORT'] = find_available_port()
nginxconf['KEEPWEBSSLPORT'] = find_available_port()
nginxconf['KEEPPROXYPORT'] = _getport('keepproxy')
nginxconf['KEEPPROXYSSLPORT'] = find_available_port()
'-g', 'pid '+_pidfile('nginx')+';',
'-c', conffile],
env=env, stdin=open('/dev/null'), stdout=sys.stderr)
+ _setport('keep-web-dl-ssl', nginxconf['KEEPWEBDLSSLPORT'])
_setport('keep-web-ssl', nginxconf['KEEPWEBSSLPORT'])
_setport('keepproxy-ssl', nginxconf['KEEPPROXYSSLPORT'])
_setport('arv-git-httpd-ssl', nginxconf['GITSSLPORT'])