Class: Temporalio::Testing::WorkflowEnvironment

Inherits:
Object
  • Object
show all
Defined in:
lib/temporalio/testing/workflow_environment.rb

Overview

Test environment with a Temporal server for running workflows and more.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(client) ⇒ WorkflowEnvironment

Create workflow environment to an existing server with the given client.

Parameters:

  • client (Client)

    Client to existing server.



114
115
116
# File 'lib/temporalio/testing/workflow_environment.rb', line 114

def initialize(client)
  @client = client
end

Instance Attribute Details

#clientClient (readonly)

Returns Client for the server.

Returns:

  • (Client)

    Client for the server.



14
15
16
# File 'lib/temporalio/testing/workflow_environment.rb', line 14

def client
  @client
end

Class Method Details

.start_local(namespace: 'default', data_converter: Converters::DataConverter.default, interceptors: [], logger: Logger.new($stdout, level: Logger::WARN), default_workflow_query_reject_condition: nil, ip: '127.0.0.1', port: nil, ui: false, runtime: Runtime.default, dev_server_existing_path: nil, dev_server_database_filename: nil, dev_server_log_format: 'pretty', dev_server_log_level: 'warn', dev_server_download_version: 'default', dev_server_download_dest_dir: nil, dev_server_extra_args: []) {|environment| ... } ⇒ WorkflowEnvironment, Object

Start a local dev server. This is a full Temporal dev server from the CLI that by default downloaded to tmp if not already present. The dev server is run as a child process. All options that start with dev_server_ are for this specific implementation and therefore are not stable and may be changed as the underlying implementation changes.

If a block is given it is passed the environment and the environment is shut down after. If a block is not given, the environment is returned and #shutdown needs to be called manually.

Parameters:

  • namespace (String) (defaults to: 'default')

    Namespace for the server.

  • data_converter (Converters::DataConverter) (defaults to: Converters::DataConverter.default)

    Data converter for the client.

  • interceptors (Array<Client::Interceptor>) (defaults to: [])

    Interceptors for the client.

  • logger (Logger) (defaults to: Logger.new($stdout, level: Logger::WARN))

    Logger for the client.

  • default_workflow_query_reject_condition (WorkflowQueryRejectCondition, nil) (defaults to: nil)

    Default rejection condition for the client.

  • ip (String) (defaults to: '127.0.0.1')

    IP to bind to.

  • port (Integer, nil) (defaults to: nil)

    Port to bind on, or nil for random.

  • ui (Boolean) (defaults to: false)

    If true, also starts the UI.

  • runtime (Runtime) (defaults to: Runtime.default)

    Runtime for the server and client.

  • dev_server_existing_path (String, nil) (defaults to: nil)

    Existing CLI path to use instead of downloading and caching to tmp.

  • dev_server_database_filename (String, nil) (defaults to: nil)

    Persistent SQLite filename to use across local server runs. Default of nil means in-memory only.

  • dev_server_log_format (String) (defaults to: 'pretty')

    Log format for CLI dev server.

  • dev_server_log_level (String) (defaults to: 'warn')

    Log level for CLI dev server.

  • dev_server_download_version (String) (defaults to: 'default')

    Version of dev server to download and cache.

  • dev_server_download_dest_dir (String, nil) (defaults to: nil)

    Where to download. Defaults to tmp.

  • dev_server_extra_args (Array<String>) (defaults to: [])

    Any extra arguments for the CLI dev server.

Yields:

  • (environment)

    If a block is given, it is called with the environment and upon complete the environment is shutdown.

Yield Parameters:

Returns:

  • (WorkflowEnvironment, Object)

    Started local server environment with client if there was no block given, or block result if block was given.



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/temporalio/testing/workflow_environment.rb', line 50

def self.start_local(
  namespace: 'default',
  data_converter: Converters::DataConverter.default,
  interceptors: [],
  logger: Logger.new($stdout, level: Logger::WARN),
  default_workflow_query_reject_condition: nil,
  ip: '127.0.0.1',
  port: nil,
  ui: false, # rubocop:disable Naming/MethodParameterName
  runtime: Runtime.default,
  dev_server_existing_path: nil,
  dev_server_database_filename: nil,
  dev_server_log_format: 'pretty',
  dev_server_log_level: 'warn',
  dev_server_download_version: 'default',
  dev_server_download_dest_dir: nil,
  dev_server_extra_args: []
)
  server_options = Internal::Bridge::Testing::EphemeralServer::StartDevServerOptions.new(
    existing_path: dev_server_existing_path,
    sdk_name: 'sdk-ruby',
    sdk_version: VERSION,
    download_version: dev_server_download_version,
    download_dest_dir: dev_server_download_dest_dir,
    namespace:,
    ip:,
    port:,
    database_filename: dev_server_database_filename,
    ui:,
    log_format: dev_server_log_format,
    log_level: dev_server_log_level,
    extra_args: dev_server_extra_args
  )
  core_server = Internal::Bridge::Testing::EphemeralServer.start_dev_server(runtime._core_runtime, server_options)
  # Try to connect, shutdown if we can't
  begin
    client = Client.connect(
      core_server.target,
      namespace,
      data_converter:,
      interceptors:,
      logger:,
      default_workflow_query_reject_condition:,
      runtime:
    )
    server = Ephemeral.new(client, core_server)
  rescue StandardError
    core_server.shutdown
    raise
  end
  if block_given?
    begin
      yield server
    ensure
      server.shutdown
    end
  else
    server
  end
end

Instance Method Details

#shutdownObject

Shutdown this workflow environment.



119
120
121
# File 'lib/temporalio/testing/workflow_environment.rb', line 119

def shutdown
  # Do nothing by default
end