ref: refs/heads/dmacvicar_log_viewer commit f3976a983540abc789f693930267f9bd538fd11a Author: Klaus Kämpf <kkaempf@suse.de> Date: Wed Sep 9 15:26:13 2009 +0200 Fix setting RAILS_ENV to 'test' early (bnc#533178) Apparently, using RAILS_ENV (the constant) vs. ENV['RAILS_ENV'] (the environment) isn't completely standardized leading to many confusions. config/environment.rb now sets RAILS_ENV (the constant) early. Loading test resources is now controlled outside of environment.rb, within the respective testsuites. Setting RESOURCE_REGISTRATION_TESTING prevents registering all plugin resources now. This finally allowed to fix bnc#533178 in setting ENV['RAILS_ENV'] to "test" sufficiently early. This commit also fixes various test cases to use relative pathes instead of absolute ones. --- plugins/basesystem/test/test_helper.rb | 2 +- plugins/commandline/test/test_helper.rb | 1 + .../test/functional/language_controller_test.rb | 2 +- plugins/language/test/test_helper.rb | 2 +- plugins/network/test/test_helper.rb | 1 + plugins/patches/test/test_helper.rb | 1 + plugins/samba_server/test/test_helper.rb | 1 + plugins/securities/test/test_helper.rb | 1 + plugins/services/test/test_helper.rb | 1 + plugins/status/test/test_helper.rb | 1 + plugins/system/test/test_helper.rb | 1 + plugins/time/test/test_helper.rb | 1 + plugins/users/test/test_helper.rb | 1 + webservice/config/environment.rb | 51 +++++++------------ webservice/lib/resource_registration.rb | 28 ++++++++++- .../test/functional/resources_controller_test.rb | 14 ++++-- .../test/functional/resources_registration_test.rb | 49 +++++++++++-------- webservice/test/functional/resources_route_test.rb | 22 +++------ 18 files changed, 102 insertions(+), 78 deletions(-) diff --git a/plugins/basesystem/test/test_helper.rb b/plugins/basesystem/test/test_helper.rb index 9433250..0d099c3 100644 --- a/plugins/basesystem/test/test_helper.rb +++ b/plugins/basesystem/test/test_helper.rb @@ -1,9 +1,9 @@ +ENV["RAILS_ENV"] = "test" # find the rails parent require File.join(File.dirname(__FILE__), '..', 'config', 'rails_parent') # first config rails require File.expand_path( File.join("config","environment"), RailsParent.parent ) # then enable testing, this will get the routing right -ENV["RAILS_ENV"] = "test" require 'test_help' class ActiveSupport::TestCase diff --git a/plugins/commandline/test/test_helper.rb b/plugins/commandline/test/test_helper.rb index 7d67910..f2b67f9 100644 --- a/plugins/commandline/test/test_helper.rb +++ b/plugins/commandline/test/test_helper.rb @@ -1,3 +1,4 @@ +ENV["RAILS_ENV"] = "test" # find the rails parent require File.join(File.dirname(__FILE__), '..', 'config', 'rails_parent') # first config rails diff --git a/plugins/language/test/functional/language_controller_test.rb b/plugins/language/test/functional/language_controller_test.rb index 10eaee1..bb934b0 100644 --- a/plugins/language/test/functional/language_controller_test.rb +++ b/plugins/language/test/functional/language_controller_test.rb @@ -8,7 +8,7 @@ class LanguageControllerTest < ActionController::TestCase fixtures :accounts def setup - @model_class = Language +# @model_class = Language @controller = LanguageController.new @request = ActionController::TestRequest.new # http://railsforum.com/viewtopic.php?id=1719 diff --git a/plugins/language/test/test_helper.rb b/plugins/language/test/test_helper.rb index 7d67910..54d2979 100644 --- a/plugins/language/test/test_helper.rb +++ b/plugins/language/test/test_helper.rb @@ -1,9 +1,9 @@ +ENV["RAILS_ENV"] = "test" # find the rails parent require File.join(File.dirname(__FILE__), '..', 'config', 'rails_parent') # first config rails require File.expand_path( File.join("config","environment"), RailsParent.parent ) # then enable testing, this will get the routing right -ENV["RAILS_ENV"] = "test" require 'test_help' class ActiveSupport::TestCase diff --git a/plugins/network/test/test_helper.rb b/plugins/network/test/test_helper.rb index 7d67910..f2b67f9 100644 --- a/plugins/network/test/test_helper.rb +++ b/plugins/network/test/test_helper.rb @@ -1,3 +1,4 @@ +ENV["RAILS_ENV"] = "test" # find the rails parent require File.join(File.dirname(__FILE__), '..', 'config', 'rails_parent') # first config rails diff --git a/plugins/patches/test/test_helper.rb b/plugins/patches/test/test_helper.rb index 7d67910..f2b67f9 100644 --- a/plugins/patches/test/test_helper.rb +++ b/plugins/patches/test/test_helper.rb @@ -1,3 +1,4 @@ +ENV["RAILS_ENV"] = "test" # find the rails parent require File.join(File.dirname(__FILE__), '..', 'config', 'rails_parent') # first config rails diff --git a/plugins/samba_server/test/test_helper.rb b/plugins/samba_server/test/test_helper.rb index 7d67910..f2b67f9 100644 --- a/plugins/samba_server/test/test_helper.rb +++ b/plugins/samba_server/test/test_helper.rb @@ -1,3 +1,4 @@ +ENV["RAILS_ENV"] = "test" # find the rails parent require File.join(File.dirname(__FILE__), '..', 'config', 'rails_parent') # first config rails diff --git a/plugins/securities/test/test_helper.rb b/plugins/securities/test/test_helper.rb index 7d67910..f2b67f9 100644 --- a/plugins/securities/test/test_helper.rb +++ b/plugins/securities/test/test_helper.rb @@ -1,3 +1,4 @@ +ENV["RAILS_ENV"] = "test" # find the rails parent require File.join(File.dirname(__FILE__), '..', 'config', 'rails_parent') # first config rails diff --git a/plugins/services/test/test_helper.rb b/plugins/services/test/test_helper.rb index 7d67910..f2b67f9 100644 --- a/plugins/services/test/test_helper.rb +++ b/plugins/services/test/test_helper.rb @@ -1,3 +1,4 @@ +ENV["RAILS_ENV"] = "test" # find the rails parent require File.join(File.dirname(__FILE__), '..', 'config', 'rails_parent') # first config rails diff --git a/plugins/status/test/test_helper.rb b/plugins/status/test/test_helper.rb index 7d67910..f2b67f9 100644 --- a/plugins/status/test/test_helper.rb +++ b/plugins/status/test/test_helper.rb @@ -1,3 +1,4 @@ +ENV["RAILS_ENV"] = "test" # find the rails parent require File.join(File.dirname(__FILE__), '..', 'config', 'rails_parent') # first config rails diff --git a/plugins/system/test/test_helper.rb b/plugins/system/test/test_helper.rb index 7d67910..f2b67f9 100644 --- a/plugins/system/test/test_helper.rb +++ b/plugins/system/test/test_helper.rb @@ -1,3 +1,4 @@ +ENV["RAILS_ENV"] = "test" # find the rails parent require File.join(File.dirname(__FILE__), '..', 'config', 'rails_parent') # first config rails diff --git a/plugins/time/test/test_helper.rb b/plugins/time/test/test_helper.rb index 7d67910..f2b67f9 100644 --- a/plugins/time/test/test_helper.rb +++ b/plugins/time/test/test_helper.rb @@ -1,3 +1,4 @@ +ENV["RAILS_ENV"] = "test" # find the rails parent require File.join(File.dirname(__FILE__), '..', 'config', 'rails_parent') # first config rails diff --git a/plugins/users/test/test_helper.rb b/plugins/users/test/test_helper.rb index 7d67910..f2b67f9 100644 --- a/plugins/users/test/test_helper.rb +++ b/plugins/users/test/test_helper.rb @@ -1,3 +1,4 @@ +ENV["RAILS_ENV"] = "test" # find the rails parent require File.join(File.dirname(__FILE__), '..', 'config', 'rails_parent') # first config rails diff --git a/webservice/config/environment.rb b/webservice/config/environment.rb index ec75b87..d1af80e 100644 --- a/webservice/config/environment.rb +++ b/webservice/config/environment.rb @@ -4,6 +4,10 @@ # you don't control web/app server and can't set it the proper way # ENV['RAILS_ENV'] ||= 'production' +# Hmm, don't know if this is the right place for this +# but http://groups.google.com/group/sdruby/browse_thread/thread/5239824b058ac936 doesn't know any better +RAILS_ENV = ENV['RAILS_ENV'] + # Specifies gem version of Rails to use when vendor/rails is not present # RAILS_GEM_VERSION = '2.1.0' unless defined? RAILS_GEM_VERSION @@ -20,11 +24,7 @@ init = Rails::Initializer.run do |config| # you must remove the Active Record framework. # config.frameworks -= [ :active_record, :active_resource, :action_mailer ] - config.gem 'test-unit', :lib => 'test/unit' if ENV['RAILS_ENV'] == 'test' or - # FIXME: 'rake test' in plugins sets test mode too late, script/server sets both variables - # to 'development' so this should not be set in real development mode - (RAILS_ENV == 'development' and ENV['RAILS_ENV'].nil?) - + config.gem 'test-unit', :lib => 'test/unit' if ENV['RAILS_ENV'] == 'test' # Specify gems that this application depends on. # They can then be installed with "rake gems:install" on new installations. @@ -80,34 +80,21 @@ init = Rails::Initializer.run do |config| # allows to find plugin in development tree locations # avoiding installing plugins to see them - config.plugin_paths << File.join(RAILS_ROOT, '..', 'plugins') if RAILS_ENV == "development" + config.plugin_paths << File.join(RAILS_ROOT, '..', 'plugins') if ENV['RAILS_ENV'] == "development" or ENV['RAILS_ENV'] == "test" end -# load lib/resource_registration.rb -require "resource_registration" - -case RAILS_ENV - when "test" - class TestPlugin - def directory - "test/resource_fixtures/good" - end - end - ResourceRegistration.register_plugin TestPlugin.new - - USER_ROLES_CONFIG = File.join(File.dirname(__FILE__), "../test/fixtures/yast_user_roles") - - when "development", "production" - init.loaded_plugins.each do |plugin| - ResourceRegistration.register_plugin(plugin) - end - - USER_ROLES_CONFIG = "/etc/yast_user_roles" - - else - $stderr.puts "No ResourceRegistration triggered" +# don't load all plugins while just testing resource registration +unless defined? RESOURCE_REGISTRATION_TESTING + STDERR.puts "\n*** registering plugins ***\n" + # load lib/resource_registration.rb + require "resource_registration" + + init.loaded_plugins.each do |plugin| + ResourceRegistration.register_plugin(plugin) + end -end - -ResourceRegistration.route ResourceRegistration.resources + USER_ROLES_CONFIG = "/etc/yast_user_roles" + ResourceRegistration.route ResourceRegistration.resources + +end diff --git a/webservice/lib/resource_registration.rb b/webservice/lib/resource_registration.rb index 92a0c0d..a2fb733 100644 --- a/webservice/lib/resource_registration.rb +++ b/webservice/lib/resource_registration.rb @@ -1,6 +1,18 @@ # load resources and populate database + +class ResourceRegistrationError < StandardError +end + +class ResourceRegistrationPathError < ResourceRegistrationError +end + +class ResourceRegistrationFormatError < ResourceRegistrationError +end + class ResourceRegistration + @@in_production = (ENV['RAILS_ENV'] == "production") + @@resources = Hash.new def self.resources @@resources @@ -12,7 +24,7 @@ private log.error msg return else - raise msg + raise ResourceRegistrationFormatError.new( msg ) end end @@ -33,7 +45,6 @@ public def self.register(file, interface = nil, controller = nil) require 'yaml' - @@in_production = (RAILS_ENV == "production") name = name || File.basename(file, ".*") begin resource = YAML.load(File.open(file)) || Hash.new @@ -76,18 +87,29 @@ public # def self.register_plugin(plugin) res_path = File.join(plugin.directory, 'config') + if defined? RESOURCE_REGISTRATION_TESTING + raise ResourceRegistrationPathError.new("Could not access plugin directory: #{res_path}") unless File.exists?( res_path ) + end # $stderr.puts "checking #{res_path}" Dir.glob(File.join(res_path, 'routes.rb')).each do |route| basename = File.basename(plugin.directory) -# $stderr.puts "***Error: Plugin #{basename} does private routing, please remove #{basename}/config/routes.rb." + raise ResourceRegistrationFormatError.new "Plugin #{basename} does private routing, please remove #{basename}/config/routes.rb." end res_path = File.join(res_path, 'resources') + if defined? RESOURCE_REGISTRATION_TESTING + raise ResourceRegistrationPathError.new("Could not access plugin directory: #{res_path}") unless File.exists?( res_path ) + end # $stderr.puts "self.register_plugin #{res_path}" + registration_count = 0 Dir.glob(File.join(res_path, '**/*.y*ml')).each do |descriptor| # $stderr.puts "checking #{descriptor}" next unless descriptor =~ %r{#{res_path}/((\w+)/)?(\w+).y(a)?ml$} # $stderr.puts "registering #{descriptor}" self.register(descriptor) + registration_count += 1 + end + if defined? RESOURCE_REGISTRATION_TESTING + raise ResourceRegistrationPathError.new("Could not find any YAML file with resource description below #{res_path}") unless registration_count > 0 end end diff --git a/webservice/test/functional/resources_controller_test.rb b/webservice/test/functional/resources_controller_test.rb index 3b652af..0c41226 100644 --- a/webservice/test/functional/resources_controller_test.rb +++ b/webservice/test/functional/resources_controller_test.rb @@ -3,24 +3,28 @@ # # This tests proper returns for resource inspection # -require File.expand_path(File.dirname(__FILE__) + "/../test_helper") class TestPlugin attr_reader :directory def initialize path - @directory = path + @directory = File.join(File.dirname(__FILE__), "..", path) end end -class ResourcesControllerTest < ActionController::TestCase +USER_ROLES_CONFIG = File.join(File.dirname(__FILE__), "..", "fixtures", "yast_user_roles") + +RESOURCE_REGISTRATION_TESTING = true # prevent plugin registration in environment.rb +require File.join(File.dirname(__FILE__), "..", "test_helper") +require File.join(File.dirname(__FILE__), "..", "..", "lib", "resource_registration") - require File.expand_path(File.dirname(__FILE__) + "/../../lib/resource_registration") +class ResourcesControllerTest < ActionController::TestCase def setup # set up test routing ResourceRegistration.reset - plugin = TestPlugin.new "test/resource_fixtures/good" + plugin = TestPlugin.new "resource_fixtures/good" ResourceRegistration.register_plugin plugin + ResourceRegistration.route ResourceRegistration.resources end test "resources access root" do diff --git a/webservice/test/functional/resources_registration_test.rb b/webservice/test/functional/resources_registration_test.rb index 4507b17..99e7c71 100644 --- a/webservice/test/functional/resources_registration_test.rb +++ b/webservice/test/functional/resources_registration_test.rb @@ -5,23 +5,30 @@ # # See resource_route_test.rb for resource route tests. # -require File.expand_path(File.dirname(__FILE__) + "/../test_helper") - class TestPlugin attr_reader :directory def initialize path - @directory = path + @directory = File.join(File.dirname(__FILE__), "..", path) end end +unless defined? USER_ROLES_CONFIG + USER_ROLES_CONFIG = File.join(File.dirname(__FILE__), "..", "fixtures", "yast_user_roles") +end + +unless defined? RESOURCE_REGISTRATION_TESTING + RESOURCE_REGISTRATION_TESTING = true # prevent plugin registration in environment.rb +end + +require File.join(File.dirname(__FILE__), "..", "test_helper") +require File.join(File.dirname(__FILE__), "..", "..", "lib", "resource_registration") + class ResourceRegistrationTest < ActiveSupport::TestCase - require File.expand_path(File.dirname(__FILE__) + "/../../lib/resource_registration") - # Create resources from .yml file test "resource creation" do - plugin = TestPlugin.new "test/resource_fixtures/good" + plugin = TestPlugin.new "resource_fixtures/good" ResourceRegistration.register_plugin plugin assert !ResourceRegistration.resources.empty? @@ -30,7 +37,7 @@ class ResourceRegistrationTest < ActiveSupport::TestCase # Create nested resources from .yml file test "resource creation nested" do - plugin = TestPlugin.new "test/resource_fixtures/nested" + plugin = TestPlugin.new "resource_fixtures/nested" ResourceRegistration.register_plugin plugin assert !ResourceRegistration.resources.empty? @@ -39,15 +46,15 @@ class ResourceRegistrationTest < ActiveSupport::TestCase # Catch errors in interface test "bad interface" do - plugin = TestPlugin.new "test/resource_fixtures/bad_interface" - assert_raise RuntimeError do + plugin = TestPlugin.new "resource_fixtures/bad_interface" + assert_raise ResourceRegistrationFormatError do ResourceRegistration.register_plugin plugin end end test "no interface" do - plugin = TestPlugin.new "test/resource_fixtures/no_interface" - assert_raise RuntimeError do + plugin = TestPlugin.new "resource_fixtures/no_interface" + assert_raise ResourceRegistrationFormatError do ResourceRegistration.register_plugin plugin end end @@ -55,14 +62,14 @@ class ResourceRegistrationTest < ActiveSupport::TestCase # Catch errors in controller test "no controller" do - plugin = TestPlugin.new "test/resource_fixtures/no_controller" - assert_raise RuntimeError do + plugin = TestPlugin.new "resource_fixtures/no_controller" + assert_raise ResourceRegistrationFormatError do ResourceRegistration.register_plugin plugin end end test "bad controller, go fix web-client to use modules" do - plugin = TestPlugin.new "test/resource_fixtures/bad_controller" + plugin = TestPlugin.new "resource_fixtures/bad_controller" # assert_raise RuntimeError do ResourceRegistration.register_plugin plugin # end @@ -71,8 +78,8 @@ class ResourceRegistrationTest < ActiveSupport::TestCase # Catch pluralization error test "interface is singular but not flagged as such" do - plugin = TestPlugin.new "test/resource_fixtures/bad_singular" - assert_raise RuntimeError do + plugin = TestPlugin.new "resource_fixtures/bad_singular" + assert_raise ResourceRegistrationFormatError do ResourceRegistration.register_plugin plugin end end @@ -80,8 +87,8 @@ class ResourceRegistrationTest < ActiveSupport::TestCase # Catch nested singular, which is not supported (yet?) test "nesting inside a singular resource" do - plugin = TestPlugin.new "test/resource_fixtures/nested_singular" - assert_raise RuntimeError do + plugin = TestPlugin.new "resource_fixtures/nested_singular" + assert_raise ResourceRegistrationFormatError do ResourceRegistration.register_plugin plugin end end @@ -125,8 +132,10 @@ class ResourceRegistrationTest < ActiveSupport::TestCase # Complain about private routing test "complain about private routing" do - plugin = TestPlugin.new "test/resource_fixtures/private_routing" - assert ResourceRegistration.register_plugin plugin + plugin = TestPlugin.new "resource_fixtures/private_routing" + assert_raise ResourceRegistrationFormatError do + ResourceRegistration.register_plugin plugin + end end end diff --git a/webservice/test/functional/resources_route_test.rb b/webservice/test/functional/resources_route_test.rb index d7c0c42..33930d2 100644 --- a/webservice/test/functional/resources_route_test.rb +++ b/webservice/test/functional/resources_route_test.rb @@ -3,29 +3,30 @@ # # This tests route creation from the resource database # -require File.expand_path(File.dirname(__FILE__) + "/../test_helper") - class TestPlugin attr_reader :directory def initialize path - @directory = path + @directory = File.join(File.dirname(__FILE__), "..", path) end end +RESOURCE_REGISTRATION_TESTING = true # prevent plugin registration in environment.rb +require File.join(File.dirname(__FILE__), "..", "test_helper") +require File.join(File.dirname(__FILE__), "..", "..", "lib", "resource_registration") + class ResourceRouteTest < ActiveSupport::TestCase # See http://pennysmalls.com/2009/03/04/rails-23-breakage-and-fixage/ include ActionController::Assertions::RoutingAssertions - require "lib/resource_registration" - # config/initializers/resource_registration.rb sets it up test "resource route initialization" do - plugin = TestPlugin.new "test/resource_fixtures/good" + plugin = TestPlugin.new "resource_fixtures/good" ResourceRegistration.reset ResourceRegistration.register_plugin plugin + ResourceRegistration.route ResourceRegistration.resources # $stderr.puts ActionController::Routing::Routes.routes @@ -45,14 +46,5 @@ class ResourceRouteTest < ActiveSupport::TestCase end end end - - test "plugin private routing" do - searchdir = File.join(File.dirname(__FILE__),"..","..","..","plugins") - Dir.foreach(searchdir) { |filename| - unless filename[0].chr == "." - assert !File.exist?(File.join(searchdir,filename,"config","routes.rb")), "Plugin #{filename} contains private routing" - end - } - end end -- To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org For additional commands, e-mail: yast-commit+help@opensuse.org