X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/d446d49dd75f14f3b454fa89190068b4e475c946..e20590d485505f58f7745d74a311ca539c9be940:/services/api/app/controllers/database_controller.rb diff --git a/services/api/app/controllers/database_controller.rb b/services/api/app/controllers/database_controller.rb index 64818da375..69453959d2 100644 --- a/services/api/app/controllers/database_controller.rb +++ b/services/api/app/controllers/database_controller.rb @@ -1,7 +1,13 @@ +# 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' @@ -10,8 +16,8 @@ class DatabaseController < ApplicationController # 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'). - collect &:uuid + 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__)). @@ -19,7 +25,7 @@ class DatabaseController < ApplicationController 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 @@ -29,6 +35,10 @@ class DatabaseController < ApplicationController fixturesets = Dir.glob(Rails.root.join('test', 'fixtures', '*.yml')). collect { |yml| yml.match(/([^\/]*)\.yml$/)[1] } + # Don't reset keep_services: clients need to discover our + # integration-testing keepstores, not test fixtures. + fixturesets -= %w[keep_services] + table_names = '"' + ActiveRecord::Base.connection.tables.join('","') + '"' attempts_left = 20 @@ -47,8 +57,8 @@ class DatabaseController < ApplicationController # 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. @@ -67,7 +77,25 @@ class DatabaseController < ApplicationController 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