X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/3167e5659918f4679d48bcc7f1fda4c3e4ef096f..69e9a3e41a8d381adc095718a73a8a99a7943a5a:/services/api/test/integration/database_reset_test.rb diff --git a/services/api/test/integration/database_reset_test.rb b/services/api/test/integration/database_reset_test.rb index 84f8a19a77..a9b64b335f 100644 --- a/services/api/test/integration/database_reset_test.rb +++ b/services/api/test/integration/database_reset_test.rb @@ -1,21 +1,73 @@ require 'test_helper' class DatabaseResetTest < ActionDispatch::IntegrationTest - teardown do - restore_configuration - # We made configuration changes here that affect routing. - Rails.application.reload_routes! - end - - test "reset fails when not configured" do - Rails.configuration.enable_remote_database_reset = false - Rails.application.reload_routes! - post '/database/reset', {}, auth(:admin) - assert_response 404 + slow_test "reset fails when Rails.env != 'test'" do + rails_env_was = Rails.env + begin + Rails.env = 'production' + Rails.application.reload_routes! + post '/database/reset', {}, auth(:admin) + assert_response 404 + ensure + Rails.env = rails_env_was + Rails.application.reload_routes! + end end test "reset fails with non-admin token" do post '/database/reset', {}, auth(:active) assert_response 403 end + + slow_test "database reset doesn't break basic CRUD operations" do + active_auth = auth(:active) + admin_auth = auth(:admin) + + authorize_with :admin + post '/database/reset', {}, admin_auth + assert_response :success + + post '/arvados/v1/specimens', {specimen: '{}'}, active_auth + assert_response :success + new_uuid = json_response['uuid'] + + get '/arvados/v1/specimens/'+new_uuid, {}, active_auth + assert_response :success + + put('/arvados/v1/specimens/'+new_uuid, + {specimen: '{"properties":{}}'}, active_auth) + assert_response :success + + delete '/arvados/v1/specimens/'+new_uuid, {}, active_auth + assert_response :success + + get '/arvados/v1/specimens/'+new_uuid, {}, active_auth + assert_response 404 + end + + slow_test "roll back database change" do + active_auth = auth(:active) + admin_auth = auth(:admin) + + old_uuid = specimens(:owned_by_active_user).uuid + authorize_with :admin + post '/database/reset', {}, admin_auth + assert_response :success + + delete '/arvados/v1/specimens/' + old_uuid, {}, active_auth + assert_response :success + post '/arvados/v1/specimens', {specimen: '{}'}, active_auth + assert_response :success + new_uuid = json_response['uuid'] + + # Reset to fixtures. + post '/database/reset', {}, admin_auth + assert_response :success + + # New specimen should disappear. Old specimen should reappear. + get '/arvados/v1/specimens/'+new_uuid, {}, active_auth + assert_response 404 + get '/arvados/v1/specimens/'+old_uuid, {}, active_auth + assert_response :success + end end