+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
class DatabaseController < ApplicationController
- skip_before_filter :find_object_by_uuid
- skip_before_filter :render_404_if_no_object
- before_filter :admin_required
+ skip_before_action :find_object_by_uuid
+ skip_before_action :render_404_if_no_object
+ before_action :admin_required
+ around_action :silence_logs, only: [:reset]
+
def reset
raise ArvadosModel::PermissionDeniedError unless Rails.env == 'test'
# use @example.com email addresses when creating user records, so
# we can tell they're not valuable.
user_uuids = User.
- where('email is null or email not like ?', '%@example.com').
+ where('email is null or (email not like ? and email not like ?)', '%@example.com', '%.example.com').
collect(&:uuid)
- fixture_uuids =
- YAML::load_file(File.expand_path('../../../test/fixtures/users.yml',
- __FILE__)).
- values.collect { |u| u['uuid'] }
+ fnm = File.expand_path('../../../test/fixtures/users.yml', __FILE__)
+ fixture_uuids = File.open(fnm) do |f|
+ YAML.safe_load(f, filename: fnm, permitted_classes: [Time]).values.collect { |u| u['uuid'] }
+ end
unexpected_uuids = user_uuids - fixture_uuids
if unexpected_uuids.any?
logger.error("Running in test environment, but non-fixture users exist: " +
- "#{unexpected_uuids}")
+ "#{unexpected_uuids}" + "\nMaybe test users without @example.com email addresses were created?")
raise ArvadosModel::PermissionDeniedError
end
# create_fixtures() is a no-op for cached fixture sets, so
# uncache them all.
- ActiveRecord::Fixtures.reset_cache
- ActiveRecord::Fixtures.
+ ActiveRecord::FixtureSet.reset_cache
+ ActiveRecord::FixtureSet.
create_fixtures(Rails.root.join('test', 'fixtures'), fixturesets)
- # Dump cache of permissions etc.
+ # Reset cache and global state
Rails.cache.clear
ActiveRecord::Base.connection.clear_query_cache
raise
end
+ require 'update_permissions'
+
+ refresh_permissions
+ refresh_trashed
+
# Done.
send_json success: true
end
+
+ protected
+
+ def silence_logs
+ Rails.logger.info("(logging level temporarily raised to :error, see #{__FILE__})")
+ orig = ActiveRecord::Base.logger.level
+ ActiveRecord::Base.logger.level = :error
+ begin
+ yield
+ ensure
+ ActiveRecord::Base.logger.level = orig
+ end
+ end
end