gem "test-unit", "~> 3.0" gem "minitest", "~> 5.5" $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib')) $LOAD_PATH.unshift(File.dirname(__FILE__)) require 'test/unit' require 'fileutils' require 'rubygems' require 'rbbt' require 'rbbt/resource/path' class TestServerLoaded < Exception; end class Test::Unit::TestCase include FileUtils def setup Random.new if defined? Persist Persist.cachedir = Rbbt.tmp.test.persistence.find(:user) end Entity.entity_property_cache = Rbbt.tmp.test.entity_property.find(:user) if defined? Entity end def teardown FileUtils.rm_rf Rbbt.tmp.test.workflow.find #Open.clear_dir_repos #if defined? Persist # FileUtils.rm_rf Path.setup("", 'rbbt').tmp.test.find :user # Persist::CONNECTIONS.values.each do |c| c.close end # Persist::CONNECTIONS.clear #end #if defined? Entity # FileUtils.rm_rf Entity.entity_property_cache.find(:user) if Entity.entity_property_cache =~ /tmp\/test/ #end end def self.datafile_test(file) Path.setup(File.join(File.dirname(__FILE__), 'data', file.to_s)) end def datafile_test(file) Test::Unit::TestCase.datafile_test(file) end def workflow_server(workflow, options = {}, &block) trap(:USR1){ raise TestServerLoaded} begin pid = Process.fork do TmpFile.with_file do |app_dir| Misc.in_dir(app_dir) do require 'rack' ENV["RBBT_WORKFLOW_EXPORT_ALL"] = 'true' app_dir = Path.setup(app_dir.dup) Open.write(app_dir.etc.target_workflow.find, workflow.to_s) config_ru_file = File.exist?('./workflow_config.ru') ? './workflow_config.ru' : Rbbt.share['workflow_config.ru'].find options[:config] = config_ru_file app = Rack::Server.new(options) app.start do Process.kill :USR1, Process.ppid end end end end begin sleep 1 while true rescue TestServerLoaded end client = WorkflowRemoteClient.new "http://localhost:#{options[:Port] || 9292}/#{workflow.to_s}", workflow.to_s yield client ensure Process.kill :INT, pid Process.wait pid end end end