5824: Fix -attachment-only-host test config. Test more preview/download variants.
authorTom Clegg <tom@curoverse.com>
Wed, 11 Nov 2015 23:29:39 +0000 (18:29 -0500)
committerTom Clegg <tom@curoverse.com>
Wed, 11 Nov 2015 23:29:39 +0000 (18:29 -0500)
apps/workbench/test/integration/download_test.rb
sdk/python/tests/nginx.conf
sdk/python/tests/run_test_server.py

index cf4246cef8e711d74ef3582b73a7a7da4914bd90..ed91ae08695ee96aaabde519e82781ffe4528ea1 100644 (file)
@@ -2,10 +2,15 @@ require 'integration_helper'
 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.
@@ -14,21 +19,59 @@ class DownloadTest < ActionDispatch::IntegrationTest
 
     # 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
index b14c674523f067469cbdfebd96dd035597b4bb44..2b8b6ca1c4ad531c29bfd1c9a149da7c9bdf3599 100644 (file)
@@ -42,4 +42,16 @@ http {
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     }
   }
+  server {
+    listen *:{{KEEPWEBDLSSLPORT}} ssl default_server;
+    server_name ~.*;
+    ssl_certificate {{SSLCERT}};
+    ssl_certificate_key {{SSLKEY}};
+    location  / {
+      proxy_pass http://keep-web;
+      proxy_set_header Host download:{{KEEPWEBPORT}};
+      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+      proxy_redirect //download:{{KEEPWEBPORT}}/ https://$host:{{KEEPWEBDLSSLPORT}}/;
+    }
+  }
 }
index a83566aa669fde27b6a2718aa3baaca8fd360fdb..adb8652edc952ab80eb67c0b8a8708da3fb954bd 100644 (file)
@@ -508,7 +508,7 @@ def run_keep_web():
     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:
@@ -526,6 +526,7 @@ def run_nginx():
         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()
@@ -552,6 +553,7 @@ def run_nginx():
          '-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'])