Commit ebd822e937e759294c71374a29c405259f7940c4
1 parent
098f1c0d
Exists in
master
and in
28 other branches
plugin-tests-task: refactor to allow independent plugin test run
Making every plugin run its tests with independently, with only its migrations and only it enabled.
Showing
5 changed files
with
88 additions
and
52 deletions
Show diff stats
lib/noosfero.rb
lib/tasks/plugins_tests.rake
| 1 | -all_plugins = Dir.glob('plugins/*').map { |f| File.basename(f) } - ['template'] | 1 | +@all_plugins = Dir.glob('plugins/*').map { |f| File.basename(f) } - ['template'] |
| 2 | +@all_tasks = [:units, :functionals, :integration, :cucumber, :selenium] | ||
| 3 | + | ||
| 2 | def enabled_plugins | 4 | def enabled_plugins |
| 3 | Dir.glob('config/plugins/*').map { |f| File.basename(f) } - ['README'] | 5 | Dir.glob('config/plugins/*').map { |f| File.basename(f) } - ['README'] |
| 4 | end | 6 | end |
| 5 | -disabled_plugins = all_plugins - enabled_plugins | 7 | + |
| 8 | +@original_enabled_plugins = enabled_plugins | ||
| 9 | + | ||
| 10 | +def disabled_plugins | ||
| 11 | + @all_plugins - enabled_plugins | ||
| 12 | +end | ||
| 13 | + | ||
| 14 | +def enable_plugins(plugins = nil) | ||
| 15 | + if plugins == '*' || plugins.nil? | ||
| 16 | + sh './script/noosfero-plugins', '-q', 'enableall' | ||
| 17 | + else | ||
| 18 | + plugins = Array(plugins) | ||
| 19 | + sh './script/noosfero-plugins', '-q', 'enable', *plugins | ||
| 20 | + end | ||
| 21 | +end | ||
| 22 | + | ||
| 23 | +def disable_plugins(plugins = nil) | ||
| 24 | + if plugins == '*' || plugins.nil? | ||
| 25 | + sh './script/noosfero-plugins', '-q', 'disableall' | ||
| 26 | + else | ||
| 27 | + plugins = Array(plugins) | ||
| 28 | + sh './script/noosfero-plugins', '-q', 'disable', *plugins | ||
| 29 | + end | ||
| 30 | +end | ||
| 31 | + | ||
| 32 | +def rollback_plugins_state | ||
| 33 | + puts | ||
| 34 | + puts "==> Rolling back plugins to their original states..." | ||
| 35 | + disable_plugins | ||
| 36 | + enable_plugins(@original_enabled_plugins) | ||
| 37 | +end | ||
| 6 | 38 | ||
| 7 | task 'db:test:plugins:prepare' do | 39 | task 'db:test:plugins:prepare' do |
| 8 | if Dir.glob('config/plugins/*/db/migrate/*.rb').empty? | 40 | if Dir.glob('config/plugins/*/db/migrate/*.rb').empty? |
| 9 | puts "I: skipping database setup, enabled plugins have no migrations" | 41 | puts "I: skipping database setup, enabled plugins have no migrations" |
| 10 | else | 42 | else |
| 11 | - Rake::Task['db:test:prepare'].invoke | 43 | + Rake::Task['db:test:prepare'].execute |
| 12 | sh 'rake db:migrate RAILS_ENV=test SCHEMA=/dev/null' | 44 | sh 'rake db:migrate RAILS_ENV=test SCHEMA=/dev/null' |
| 13 | end | 45 | end |
| 14 | end | 46 | end |
| @@ -101,72 +133,74 @@ def run_tests(name, plugins, run=:individually) | @@ -101,72 +133,74 @@ def run_tests(name, plugins, run=:individually) | ||
| 101 | end | 133 | end |
| 102 | end | 134 | end |
| 103 | 135 | ||
| 104 | -def plugin_test_task(name, plugin, run=:individually) | ||
| 105 | - desc "Run #{name} tests for #{plugin_name(plugin)}" | ||
| 106 | - task name => 'db:test:plugins:prepare' do |t| | ||
| 107 | - if plugin_enabled?(plugin) | ||
| 108 | - run_tests(name, plugin, run) | ||
| 109 | - else | ||
| 110 | - plugin_disabled_warning(plugin) | 136 | +def test_sequence(plugins, tasks) |
| 137 | + failed = {} | ||
| 138 | + disable_plugins | ||
| 139 | + plugins = @all_plugins if plugins == '*' | ||
| 140 | + plugins = Array(plugins) | ||
| 141 | + tasks = Array(tasks) | ||
| 142 | + plugins.each do |plugin| | ||
| 143 | + failed[plugin] = [] | ||
| 144 | + enable_plugins(plugin) | ||
| 145 | + next if !plugin_enabled?(plugin) | ||
| 146 | + begin | ||
| 147 | + Rake::Task['db:test:plugins:prepare' ].execute | ||
| 148 | + rescue Exception => ex | ||
| 149 | + failed[plugin] << :migration | ||
| 111 | end | 150 | end |
| 112 | - end | ||
| 113 | -end | ||
| 114 | - | ||
| 115 | -def test_sequence_task(name, plugin, *tasks) | ||
| 116 | - desc "Run all tests for #{plugin_name(plugin)}" | ||
| 117 | - task name do | ||
| 118 | - failed = [] | ||
| 119 | tasks.each do |task| | 151 | tasks.each do |task| |
| 120 | begin | 152 | begin |
| 121 | - Rake::Task['test:noosfero_plugins:' + task.to_s].invoke | 153 | + run_tests(task, plugin) |
| 122 | rescue Exception => ex | 154 | rescue Exception => ex |
| 123 | puts ex | 155 | puts ex |
| 124 | - failed << task | 156 | + failed[plugin] << task |
| 125 | end | 157 | end |
| 126 | end | 158 | end |
| 127 | - unless failed.empty? | ||
| 128 | - fail 'Tests failed: ' + failed.join(', ') | 159 | + disable_plugins(plugin) |
| 160 | + end | ||
| 161 | + fail_flag = false | ||
| 162 | + failed.each do |plugin, tasks| | ||
| 163 | + unless tasks.empty? | ||
| 164 | + puts "Tests failed on #{plugin} plugin: #{tasks.join(', ')}" | ||
| 165 | + fail_flag = true | ||
| 129 | end | 166 | end |
| 130 | end | 167 | end |
| 168 | + rollback_plugins_state | ||
| 169 | + fail 'There are broken tests to be fixed!' if fail_flag | ||
| 170 | +end | ||
| 171 | + | ||
| 172 | +def plugin_test_task(plugin, task, run=:individually) | ||
| 173 | + desc "Run #{task} tests for #{plugin_name(plugin)}" | ||
| 174 | + task task do | ||
| 175 | + test_sequence(plugin, task) | ||
| 176 | + end | ||
| 131 | end | 177 | end |
| 132 | 178 | ||
| 133 | namespace :test do | 179 | namespace :test do |
| 134 | namespace :noosfero_plugins do | 180 | namespace :noosfero_plugins do |
| 135 | - all_plugins.each do |plugin| | 181 | + @all_plugins.each do |plugin| |
| 136 | namespace plugin do | 182 | namespace plugin do |
| 137 | - plugin_test_task :units, plugin | ||
| 138 | - plugin_test_task :functionals, plugin | ||
| 139 | - plugin_test_task :integration, plugin | ||
| 140 | - plugin_test_task :cucumber, plugin | ||
| 141 | - plugin_test_task :selenium, plugin | 183 | + @all_tasks.each do |taskname| |
| 184 | + plugin_test_task plugin, taskname | ||
| 185 | + end | ||
| 142 | end | 186 | end |
| 143 | 187 | ||
| 144 | - test_sequence_task(plugin, plugin, "#{plugin}:units", "#{plugin}:functionals", "#{plugin}:integration", "#{plugin}:cucumber", "#{plugin}:selenium") | ||
| 145 | - end | ||
| 146 | - | ||
| 147 | - [:units, :functionals, :integration].each do |taskname| | ||
| 148 | - task taskname => 'db:test:plugins:prepare' do |t| | ||
| 149 | - run_tests taskname, enabled_plugins | 188 | + desc "Run all tests for #{plugin_name(plugin)}" |
| 189 | + task plugin do | ||
| 190 | + test_sequence([plugin], @all_tasks) | ||
| 150 | end | 191 | end |
| 151 | end | 192 | end |
| 152 | 193 | ||
| 153 | - task :cucumber => 'db:test:plugins:prepare' do |t| | ||
| 154 | - run_tests :cucumber, enabled_plugins | ||
| 155 | - end | ||
| 156 | - | ||
| 157 | - task :selenium => 'db:test:plugins:prepare' do |t| | ||
| 158 | - run_tests :selenium, enabled_plugins | ||
| 159 | - end | ||
| 160 | - | ||
| 161 | - task :temp_enable_all_plugins do | ||
| 162 | - sh './script/noosfero-plugins', 'enableall' | ||
| 163 | - end | ||
| 164 | - | ||
| 165 | - task :rollback_enable_all_plugins do | ||
| 166 | - sh './script/noosfero-plugins', 'disable', *disabled_plugins | 194 | + @all_tasks.each do |taskname| |
| 195 | + desc "Run #{taskname} tests for all plugins" | ||
| 196 | + task taskname do | ||
| 197 | + test_sequence(@all_plugins, taskname) | ||
| 198 | + end | ||
| 167 | end | 199 | end |
| 168 | end | 200 | end |
| 169 | 201 | ||
| 170 | - test_sequence_task(:noosfero_plugins, '*', :temp_enable_all_plugins, :units, :functionals, :integration, :cucumber, :selenium, :rollback_enable_all_plugins) | ||
| 171 | - | 202 | + desc "Run all tests for all plugins" |
| 203 | + task :noosfero_plugins do | ||
| 204 | + test_sequence(@all_plugins, @all_tasks) | ||
| 205 | + end | ||
| 172 | end | 206 | end |
plugins/ldap/install.rb
| @@ -4,7 +4,7 @@ rescue Gem::LoadError => exception | @@ -4,7 +4,7 @@ rescue Gem::LoadError => exception | ||
| 4 | system "gem install --user-install net-ldap -v 0.3.1" | 4 | system "gem install --user-install net-ldap -v 0.3.1" |
| 5 | end | 5 | end |
| 6 | 6 | ||
| 7 | -puts "\nWARNING: This plugin is not setting up a ldap test server automatically. | 7 | +puts "WARNING: This plugin is not setting up a ldap test server automatically. |
| 8 | Some tests may not be running. If you want to fully test this plugin, please | 8 | Some tests may not be running. If you want to fully test this plugin, please |
| 9 | setup the ldap test server and make the proper configurations on | 9 | setup the ldap test server and make the proper configurations on |
| 10 | fixtures/ldap.yml.\n\n" | 10 | fixtures/ldap.yml.\n\n" |
plugins/ldap/test/test_helper.rb
| @@ -20,4 +20,4 @@ def ldap_configured? | @@ -20,4 +20,4 @@ def ldap_configured? | ||
| 20 | end | 20 | end |
| 21 | end | 21 | end |
| 22 | 22 | ||
| 23 | -LDAP_SERVER_ERROR_MESSAGE = "\n\nWARNING: LDAP test server is not configured properly. Please see the file fixtures/ldap.yml on ldap plugin\n\n" | 23 | +LDAP_SERVER_ERROR_MESSAGE = "\nWARNING: LDAP test server is not configured properly. Please see the file fixtures/ldap.yml on ldap plugin\n\n" |
script/noosfero-plugins
| @@ -108,8 +108,10 @@ _enable(){ | @@ -108,8 +108,10 @@ _enable(){ | ||
| 108 | needs_migrate=true | 108 | needs_migrate=true |
| 109 | elif [ "$installation_ok" = false ]; then | 109 | elif [ "$installation_ok" = false ]; then |
| 110 | echo "W: failed to install $plugin; not enabling" | 110 | echo "W: failed to install $plugin; not enabling" |
| 111 | + echo | ||
| 111 | elif [ "$dependencies_ok" = false ]; then | 112 | elif [ "$dependencies_ok" = false ]; then |
| 112 | echo "W: failed to load dependencies for $plugin; not enabling" | 113 | echo "W: failed to load dependencies for $plugin; not enabling" |
| 114 | + echo | ||
| 113 | fi | 115 | fi |
| 114 | fi | 116 | fi |
| 115 | } | 117 | } |
| @@ -227,6 +229,7 @@ esac | @@ -227,6 +229,7 @@ esac | ||
| 227 | 229 | ||
| 228 | if [ "$needs_migrate" = 'true' ] && [ "$quiet" = 'false' ]; then | 230 | if [ "$needs_migrate" = 'true' ] && [ "$quiet" = 'false' ]; then |
| 229 | cat <<-EOF | 231 | cat <<-EOF |
| 232 | + | ||
| 230 | ==================================================================== | 233 | ==================================================================== |
| 231 | To finish the activation of the plugins you have just enabled, you | 234 | To finish the activation of the plugins you have just enabled, you |
| 232 | need to restart Noosfero. | 235 | need to restart Noosfero. |