class Dynflow::Testing::InThreadWorld

Public Class Methods

coordinator_adapter() click to toggle source
# File lib/dynflow/testing/in_thread_world.rb, line 32
def self.coordinator_adapter
  ->(world, _) { CoordiationAdapterWithLog.new(world) }
end
instance(&block) click to toggle source

The worlds created by this method are getting terminated after each test run

# File lib/dynflow/testing/in_thread_world.rb, line 37
def self.instance(&block)
  @instance ||= self.new(test_world_config(&block))
end
logger_adapter() click to toggle source
# File lib/dynflow/testing/in_thread_world.rb, line 28
def self.logger_adapter
  @adapter ||= Dynflow::LoggerAdapters::Simple.new $stderr, 4
end
new(*args) click to toggle source
Calls superclass method Dynflow::World::new
# File lib/dynflow/testing/in_thread_world.rb, line 41
def initialize(*args)
  super
  @clock = ManagedClock.new
  @executor = InThreadExecutor.new(self)
end
persistence_adapter() click to toggle source
# File lib/dynflow/testing/in_thread_world.rb, line 20
def self.persistence_adapter
  @persistence_adapter ||= begin
                             db_config = ENV['DB_CONN_STRING'] || 'sqlite:/'
                             puts "Using database configuration: #{db_config}"
                             Dynflow::PersistenceAdapters::Sequel.new(db_config)
                           end
end
test_world_config() { |config| ... } click to toggle source
# File lib/dynflow/testing/in_thread_world.rb, line 5
def self.test_world_config
  config                     = Dynflow::Config.new
  config.persistence_adapter = persistence_adapter
  config.logger_adapter      = logger_adapter
  config.coordinator_adapter = coordinator_adapter
  config.delayed_executor    = nil
  config.auto_rescue         = false
  config.auto_validity_check = false
  config.exit_on_terminate   = false
  config.auto_execute        = false
  config.auto_terminate      = false
  yield config if block_given?
  return config
end

Public Instance Methods

event(execution_plan_id, step_id, event, done = Concurrent::Promises.resolvable_future, optional: false) click to toggle source
# File lib/dynflow/testing/in_thread_world.rb, line 61
def event(execution_plan_id, step_id, event, done = Concurrent::Promises.resolvable_future, optional: false)
  @executor.event(execution_plan_id, step_id, event, done, optional: optional)
end
execute(execution_plan_id, done = Concurrent::Promises.resolvable_future) click to toggle source
# File lib/dynflow/testing/in_thread_world.rb, line 47
def execute(execution_plan_id, done = Concurrent::Promises.resolvable_future)
  @executor.execute(execution_plan_id, done)
end
plan_event(execution_plan_id, step_id, event, time, done = Concurrent::Promises.resolvable_future, optional: false) click to toggle source
# File lib/dynflow/testing/in_thread_world.rb, line 65
def plan_event(execution_plan_id, step_id, event, time, done = Concurrent::Promises.resolvable_future, optional: false)
  if time.nil? || time < Time.now
    event(execution_plan_id, step_id, event, done, optional: optional)
  else
    clock.ping(executor, time, Director::Event[SecureRandom.uuid, execution_plan_id, step_id, event, done, optional], :delayed_event)
  end
end
terminate(future = Concurrent::Promises.resolvable_future) click to toggle source
# File lib/dynflow/testing/in_thread_world.rb, line 51
def terminate(future = Concurrent::Promises.resolvable_future)
  run_before_termination_hooks
  @executor.terminate
  coordinator.delete_world(registered_world)
  future.fulfill true
  @terminated.resolve
rescue => e
  future.reject e
end