test.rake revision 1c98fd985ee711ad05ba5270bcd9136fb1ad7d8c
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornbergernamespace :test do
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger # We want to purge our database our own way, without deleting everything
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger Rake::Task['db:test:purge'].overwrite do
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger Rails.env = 'test'
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger # Taken from https://github.com/rails/rails/blob/3-2-stable/activerecord/lib/active_record/railties/databases.rake#L512
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations['test'])
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger Rake::Task['db:redis:clean'].invoke
802014878b7383de536e4fa0ceced1bce3217eadDaniel Couto Vale Rake::Task['db:migrate:clean'].invoke
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger end
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger def hets_path
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger `which hets`.strip
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger end
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger def hets_out_file_for(ontology_file)
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger basename = File.basename(ontology_file).sub(/\.[^.]+$/, '.xml')
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger File.join('spec/fixtures/ontologies/hets-out/', basename)
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger end
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger def on_outdated_files(files, &block)
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger files.each do |file|
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger hets_file = hets_out_file_for(file)
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger out_of_date = !FileUtils.uptodate?(hets_file, Array(hets_path))
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger block.call(file) if out_of_date
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger end
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger end
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger def hets_args
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger YAML.load(File.open('config/hets.yml'))['cmd_line_options']
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger end
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger def perform_hets_on(file)
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger args = hets_args << '-O spec/fixtures/ontologies/hets-out'
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger system("hets #{args.join(' ')} #{file}")
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger end
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger def ontology_files
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger globbed_files = Dir.glob('spec/fixtures/ontologies/**/*')
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger globbed_files.select do |file|
736e78aff9e67436c35d4835c24fca667f3cadf3Julian Kornberger !file.end_with?('proof.json') &&
555b7fd96768daf9592e7ddbd4217d784b08e451henning mueller !file.end_with?('xml') &&
b27c7f227c8516589a2bd127c0f74338cf56f0b2Julian Kornberger !File.directory?(file)
b27c7f227c8516589a2bd127c0f74338cf56f0b2Julian Kornberger end
b27c7f227c8516589a2bd127c0f74338cf56f0b2Julian Kornberger end
555b7fd96768daf9592e7ddbd4217d784b08e451henning mueller
555b7fd96768daf9592e7ddbd4217d784b08e451henning mueller def prove_files
555b7fd96768daf9592e7ddbd4217d784b08e451henning mueller globbed_files = Dir.glob('spec/fixtures/ontologies/prove/**/*')
555b7fd96768daf9592e7ddbd4217d784b08e451henning mueller globbed_files.select do |file|
555b7fd96768daf9592e7ddbd4217d784b08e451henning mueller !file.end_with?('.proof.json') && !File.directory?(file)
555b7fd96768daf9592e7ddbd4217d784b08e451henning mueller end
7b8fe34340b2727bb31fe0be67fdf684e47c3609Tim Reddehase end
7b8fe34340b2727bb31fe0be67fdf684e47c3609Tim Reddehase
1cbb38d1d07f559b4a1c012a4833513053716007Daniel Couto Vale def prove_with_hets(file)
1cbb38d1d07f559b4a1c012a4833513053716007Daniel Couto Vale puts "Calling hets prover for #{file}"
c997297b21c83680cdba2953cad369b82a5b8805Tim Reddehase
c997297b21c83680cdba2953cad369b82a5b8805Tim Reddehase absolute_filepath = Rails.root.join(file)
escaped_iri = Rack::Utils.escape_path("file://#{absolute_filepath}")
command = %w(curl -s -X POST)
command += ['-H', %('Content-Type: application/json')]
command += ['-d', %('{"format": "json"}')]
command << "http://localhost:8000/prove/#{escaped_iri}"
command = command.join(' ')
filename = File.basename(file).split('.')[0..-2].join('.')
target_path = Rails.root.join('spec/fixtures/ontologies/hets-out/prove', filename)
File.write("#{target_path}.proof.json", `#{command}`)
end
desc 'Update all ontology fixtures'
task :freshen_ontology_fixtures do
on_outdated_files(ontology_files) do |file|
puts "Calling hets for: #{file}"
perform_hets_on(file)
end
end
desc 'Update all prove fixtures'
task :freshen_prove_fixtures do
hets_pid = fork { exec('hets -X') }
# hets server needs some startup time
sleep 1
prove_files.each { |file| prove_with_hets(file) }
puts 'Stopping hets server.'
Process.kill('TERM', hets_pid)
end
desc 'Update all hets dependent fixtures'
task :freshen_fixtures do
Rake::Task['test:freshen_ontology_fixtures'].invoke
Rake::Task['test:freshen_prove_fixtures'].invoke
end
end